This rather simplistic example illustrates how a distributed architecture can create knowledge silos and cause each team to think in terms of completing work on their piece of the puzzle rather than focusing on the user stories as a whole. Development efforts need to focus on all the user stories since they summarize what the customer needs. The customer does not care about orchestrating a design to effectively accommodate a team's geographic distribution.
Effectively distributing agile teams is about minimizing the impact of distribution; the emphasis here is on the minimization. Clearly there is no substitute for teams having face-to-face discussions with a whiteboard or two programmers sitting together working on a piece of code. All we can do is take steps to improve the communication of our distributed teams.
Give Your Team the Means to Succeed
The decision to distribute teams needs to be coupled with the commitment to provide teams with the tools they need to maximize communication. It’s to be expected that it will take them some time to optimize the workflows and communication processes around the teams.
Although tools are not the primary focus of agile teams, when selected properly they can certainly make teams more effective and efficient provided they are flexible and do not hinder a team's natural workflow. Distributed agile teams may not be able to rely on sticky notes, task boards, or burndown charts on a wall for project tracking. They require a robust system for sharing these items and metrics across multiple locations. Choose a tool with good performance across geographically distributed environments. Slowdowns during simple tasks will cause frustrations that team members will seek to alleviate by cutting corners.
Distributed agile development makes it possible to tap into new global markets and obtain access to global talent while potentially reducing costs. Be sure to understand the risks and rewards of team distribution before making the decision to proceed. One of the key factors for a successful agile project is the high level of communication between team members. If your team is distributed, it must make deliberate efforts to replace as much of the lost communication bandwidth with augmented processes and practices.
Bring teams together as often as possible, especially during pivotal points during projects. Use the points in time when the whole team is together to nurture trust and strengthen working relationships. Agile development is difficult and requires a great deal of discipline, even more so when teams are distributed. Make sure you have someone with a clear mandate to coach your teams and ensure they stay on track with communication practices.
Agile teams work on user stories, not component features or implementation tasks. Organizing your team's work and distribution by component or discipline will make it extremely difficult to focus on what matters—that is, the stakeholders and their stories. Provide distributed teams with tools that will help them fulfill these user stories and work as effectively as possible with as few barriers to the distribution process as possible. Favor integrated systems that offer full traceability from specification design through development and testing. Finally, consider an integrated wiki linked to tasks and stories to store notes from various design meetings and impromptu conversions.