Learning from Distributed Agile project
It's been quite some time that I am involved in a project, which involves distributed agile team. There is a lot I have learned being the project manager on the team and I would want to share here.
The project is distributed across Bangalore and Cincinnati. By the way a distributed team is the one, which is constrained from collaborating in person or face-to-face. Typical set up I am in is, smaller team onshore and a larger team offshore. Smaller team, which is onshore, has the advantage of being closer to Product Owner.
This post is mostly to share my experiences and learning from managing such a team and helping the team to deliver. One thing for sure is it's not easy to implement, it has its own challenges. Below are some of the items, which we need to take care a lot in a distributed agile mode:
- Communication: As I mentioned earlier that there is a small team, which is present at onsite gets the advantage of sitting next to Product Owners. Apart from this there are other roles as well like architecture team, database team or 3rd party system experts present there. Communicating with these people are very critical for the product you are developing. Better communication would result in better decisions and eventually a better product. Communication between onsite team with offshore team would also be a challenge. At times the offshore team is just a part of the decision being made onsite and largely responsible for execution of that and they miss the whole discussion part which is enriching and learning in itself. Fundamental doctrine of agile is team collaboration, face-to-face communication, and recurring customer conversation. If you want to succeed you need to find ways to implement this. One thing which helped the dev team is having distributed dev huddle once a week and the whole team gets to discuss bunch of tech items and other stuffs which they prioritize.
- Trust: To deliver a goal you need a team bonded by trust. The offshore team needs to trust the onshore team and vice versa. Some of the key practices which helps build the trust are inception where you bring the whole team together for a common goal, travel plan on rotation basis. If the offshore team is small and there is a budget I would suggest to move the team to one location and run at least iteration together. This would really help build the trust. Otherwise if there are budget constraints then proper travel plan needs to be factored in. This should mostly be on rotation basis and across roles so that everyone gets a chance to interact with the onshore team, Product Owners, Architect team and establish trust and confidence. Having a developer travel is generally the followed practice but I feel even the QA and BA should travel. QA travelling onsite would actually understand how the Product Owners test the application and what they look for in before signing off the story. Similarly having a BA travel would help you accelerate on the analysis front and would result in creating a healthy analysis backlog.
- Promoting Shared Vision in team: In agile there is a great importance of iteration planning, retrospectives and daily stand up. There should be an effort made that the whole team is available and take part in these activities. Participation brings in the sense of ownership. Project management tool we use play a big role in promoting the shared vision. Using a common agile wall and developer picking up work from the same wall help diffuse the knowledge silos. In distributed team there is a challenge to find that common time where the whole team could be present. Having the whole team present in the distributed stand up adds to this shared vision. Apart from Stand up, even Retrospective is a great place to bring up what's not working in the favor of team and what needs to be done. Ideally both the team should do a joint retro every iteration. Due to time constraints it might not be feasible to have one joint retro, then both the onshore and offshore team should share retro notes with each other.
- Short Iterations and Continuous Integration: Short iterations help you track progress on a regular basis. It allows you to seek feedback regularly and track the progress. Short iterations also help you break the tasks down in a smaller step thereby helping you estimate more correctly. On almost all the projects I have worked in ThoughtWorks, implemented continuous integration. There could be a different blog post all together on the benefits of CI. However in distributed team CI proves really valuable. CI with a good test coverage is a must have for distributed team. It helps you find out the build issues immediately. Both the team endeavors towards a green build. Also CI is not about the tool it's more about the discipline and taking team responsibility to ensure a working application with every check in.
Above listed are some of the items which played a a very crucial role in steering a distributed project to success and largely from my observations.