Two of the hottest recent trends in the software development community are agile development and internationally distributed teams. Agile methods are a response to the drastic degree of change in the modern business and IT environments. These highly dynamic environments demand software development teams that can respond to change and continuously deliver business value. International distribution of development teams (called offshore development) is largely a response to market forces demanding lower rates for software development. Many organizations that develop software have recognized the wealth of skill and talent available at much lower rates in places such as India or China and are anxious to source work from these development centers.
Are these two trends compatible with one another, or are organizations going to be faced with a choice between "going agile" and "going offshore"?
The Challenges of Offshore Development
Much has been written about the pitfalls of offshore software development. These are some of the most significant challenges to overcome:
Decreased communication bandwidth. Due to time zone differences between western business centers and many of the major offshore development sites in India and China, there are very few hours in the day when project participants are in both office locations at the same time. This factor, as well as the current cost and quality of telecommunications, serves to significantly decrease the volume of communication between offshore and onshore teams.
Decreased visibility into project status. It's often difficult for project managers and business sponsors to get an accurate sense of project progress and status. Many of them have been unpleasantly surprised at late stages of a project to find that their sense of "percentage complete" was radically incorrect. Measuring project progress is a problem when the project team is collocated and onshore, and is only made worse when the project is on the other side of the world.
Configuration management. "Bringing it all together" for implementation in the production environment is one of the most difficult parts of any software project. Many teams that have built components offshore have been beset by problems when the time came to integrate the offshore and onshore pieces into a working system.
Disconnection on project estimation. Anyone who has been involved in a software project knows that customers, managers, and developers all estimate projects differently, each using their own "fudge factor" based on what the other groups tell them. In an offshore situation, where it is entirely likely that the development team will never meet the project manager or customers, the standard deviation of traditional project estimates can vary wildly. Additionally, it can be very difficult to assess the accuracy or reasonability of estimates as the project progresses.
All of these obstacles are significant to overcome, and different organizations have met with varying success using a variety of different methods to address them. However, since agile methods are relatively new, there has been very little investigation into how they may exacerbate or remedy these challengesuntil now. ThoughtWorks opened an office in Bangalore, India last year. Since we have had success using agile methods in the U.S. and Europe with non-distributed teams, it was only natural for us to try to figure out how to extend agile development offshore. What follows is what we have learned so far.