Agile methods emphasize realtime communication over written documentation and it is a common agile practice to co-locate development teams as well as business people. In reality however this is not always practically possible.
Sometimes projects are forced to be distributed between multiple locations for different reasons. Sometimes it is the business representatives that cannot be co-located, sometimes individual team members and sometimes whole projects are being distributed between several locations. The question is if we can still be agile?
I believe we can. Although agile methods encourage a strong focus on people, communication and co-location, being agile is a state of mind. Remote teams present a challenge, no doubt. It will take some effort and it will not happen by itself. The obvious challenges are face to face communication, retaining the visibility of the task board, daily stand up meetings, etc. Having teams spread over several time-zones even further complicate things. Worst case half the team is sleeping while the rest is working.
Even though nothing beats face to face communication, I think a lot of the communication issues can be handled with collaboration tools like Skype or NetMeeting which offers VoIP, conference calls, chat and even a common drawing pad. With a webcamera you are even able to see the person you are talking to. Schedule a slot for a daily team meeting. If it is difficult to find a common slot due to divergent timezones, at least try a weekly meeting. Also don’t forget to budget for travels, because like I said nothing beats face to face communication, at least once in a while.
Are agile planning tools an option to a physical task board? The tools I have seen have all been unnecessarily complex, resulting in information hiding. I’d go for a more simple solution having a wiki as the foundation and for a backlog and maybe an Excel-sheet for burndowns, continuously published on the wiki. For larger projects you might want to have some issue tracking system like trac or bugzilla. Actually I would like to try to use an online camera pointing at a physical task board, or publishing daily snapshots of the task board on a wiki. I think that might work for some setups. However stay away from MS Project.
How about agile engineering practices then? Those shouldn’t pose any problem. Most tools work in distributed environments like Subversion for source code management, CruiseControl for continuous integration and JUnit, DBUnit, FITnesse, etc. for different levels of testing. Collective code ownership is supported in source code management systems and IDEs support refactoring. Even pair programming is supported via collaboration tools, remote desktops and a plugins to Eclipse.
If you are serious about getting your distributed teams agile you have to read this:
Transitioning to Agile in Onshore-Offshore Distributed Teams
You should also read Jeff Sutherland’s (et al) paper:
Adaptive Engineering of Large Ssoftware Projects with Distributed/Outsourced Teams