Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I am a web developer. Worked in many projects. Now I have changed my work place. It is big organisation. I and my group are thinking about new project. There is no difficulty to write project but our organisation is big and it's has little offices in many places (within the country). There is no any problem about internet in center. But there is problem with internet in remote areas sometimes.

My question is: is there any solution to solve problem as it? If anybody has create project such this please tell little about what technologies you have used.

Thanks

share|improve this question
1  
What exactly is the problem? That not everyone has internet access? Or that it's slow or not reliable? –  Jon Hopkins Nov 10 '10 at 15:28
    
Everyone has internet access.but it is not reliable –  AEMLoviji Nov 10 '10 at 15:29
    
it is not reliable –  AEMLoviji Nov 10 '10 at 15:31
    
Hope my topic change was acceptable, if not roll it back. However, on front page this question has a topic that is too vague. –  Chris Nov 10 '10 at 15:53
add comment

3 Answers

Distributed working is doable but most of the tools that make it easy are going to be internet based so you're going to struggle a bit.

First thing is to look for tools that don't demand being on-line continually. Look at distributed source control which can have mini-hubs in each office - something like Git. This means that they can sync when their connection is active and it's not a problem when it's not.

For communications, forums or something like 37signals Campfire, both of which keep a history of the discussions will be better than chat clients. That way when someone's connection disappears they can go back in and review what people were saying once their connection is back.

You also need to work on your processes. Two things I'd look at:

1) Don't assume that people have seen changes or received e-mails. Use read receipts and if you don't get a read receipt tell people they need to pick up the phone and make sure the person is aware. Make it the responsibility of the person communicating the change to get acknowledgement.

2) Divide work into chunks that programmers can work on for a few days at a time so day to day communication isn't so critical. That way if the connection does go down they're not going to be doing nothing as they'll always have things on their task list. If you can put whole chunks of the project out to different offices even better as they'll be their own little unit.

share|improve this answer
    
Without the internets there is always snail mail! –  Chris Nov 10 '10 at 15:52
    
@Chris Post in code updates on disk? ;-) –  Jon Hopkins Nov 10 '10 at 15:53
add comment

I would decide upon a 'central' site by which major decisions are made regarding the project (although that doesn't mean other offices can't make decisions). At that site, host a SVN server and have all other offices commit code to that server in order to have a consist progression of development.

It would help to find some sort of medium by which you can talk easily with other programmers such as yahoo or windows live. Email is okay, but you tend to lack the response times you could get otherwise with chat programs.

I hope that's what you meant by internet troubles. Otherwise you're going to have to be more clear with your question.

share|improve this answer
1  
Use forums if you can instead of chat and mail, that way knowledge remains preserved for new people and you avoid inbox overload. –  Joeri Sebrechts Nov 10 '10 at 20:30
    
+1 Forums are fun. Good idea. :) –  Neil Nov 11 '10 at 13:53
add comment

I have been working in a company with a strong work from home and distributed development culture. Distributed development is indeed a challenge but one that is rapidly becoming feasible due to advances in tools and technologies out there. IMO more than the tools it is the appropriate mindset that needs to be cultivated in order that you can successfully do distributed development.

According to wikipedia the term "Distributed Development" is not a very clear one, so first let me just give you my view of what I consider to be distributed development from a software developer's perspective.

What I call “distributed development” is a software development approach that leverages technological advances in internet connectivity and better communication tools to try and minimise the disconnect introduced by working remotely in software teams. Distributed development places emphasis on communication and interaction between all the members in the virtual team. The idea is to reduce the feeling that we are working in different physical spaces and that everyone is off working on some discrete task on their own. This kind of thinking is in-line with the agile philosophy which emphasizes individuals and interactions over processes and tools.

I recently wrote a blog post about this that you can check out - http://technikhil.wordpress.com/2012/02/20/distributed-development/

In the post I detail some tools and techniques that are relevant to your question. I'll list out here -

  1. Reliable and fast internet is an absolute must and its not that easy to get – at least where I come from. Ask if the person you are working has a backup power supply and a good internet connection. In terms of power supply, the need for one depends a lot on the place the person is working from – if it’s a big city then usually a UPS that provides an hour of backup should be fine, unless there is chronic power problem. In smaller towns and such, they might need to have something more substantial like an inverter or a portable generator. Modern laptops with their longer battery life and portability are a major help since they allow one to ignore smaller outages and coupled with the appropriate wireless or cellular data connection can even allow you to simply shift your base of operations to other places with power and internet.
  2. You need to have an open channel of communication during the time of overlap while you are working – this can be as simple as an open IRC (Internet Relay Chat) channel. We use Skype at work and I think the ability to call or video chat on demand make it far superior to IRC. Another option to explore is to use something like a Google+ Hangout while you are working – obviously this will mean the both you need to have reliable high bandwidth internet. Paid options for software tools are there as well like Microsoft Lync which may be a more integrated solution if you have a Microsoft based IT infrastructure with Microsoft Exchange. There are variety of communicators and tools out there to tryout – have a look at this link where Scott Hanselman provides a deep dive into the communications tools available for remote workers.
  3. Schedule regular meetings and get togethers in the real world. If this means that someone needs to travel somewhere from time to time, consider that the cost of doing distributed development. I would consider this an investment in the team’s productivity and efficiency. When everyone has met in person and worked together on issues, you build up mutual trust and respect. In my year of working at Bang the Table, I think we have had get togethers at least once every quarter. Sometimes we just got together and spent a few days simply working together with no other agenda, sometimes it was a conference or a training.
  4. Distributed development tends to work well with relatively flat and simple organizational structure. The idea is that everyone should feel equally invested and responsible for the software project. The challenge of course is that this particular setup does not scale very well and can be problematic for large organizations. If you are in large hierarchical organisation try to see you can isolate the distributed development group a little bit and create a flatter more informal structure within it.
  5. A good online project management tool is a must to ensure you are heading in the right direction. We are constantly trying out new tools for this part of our development. I have found JIRA to be good for support and task based work while, I am liking Trello for more open ended new development.
  6. At work we use a Rackspace server as a development server and for testing. This is a machine on which we stage our commits from our local machines and have our testing done on. Having a machine to deploy your code on also forces you to test it in the right environment and also brings deployment considerations into your design and development schedule.
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.