Principles #4 and #6 in the agile manifesto https://agilemanifesto.org/principles.html states:
- “Business people and developers must work together daily throughout the project”.
- “The most efficient and effective method of conveying information to and within a development team is face-to-face conversation”.
One out of 4 agile core principles states “Individuals and interactions over processes and tools”.
With the globalisation, advancements in technology, Ability to find talents/skills and most importantly the cost factors globally distributed teams are indispensable. When distributed teams are advised to follow agile method, it becomes Distributed Agile Delivery Model.
Distributed Agile Delivery Model is an Agile Global delivery framework focusing on multi-shore project delivery enabling both dispersed and distributed teams to have successful business value delivery.
With distributed agile development, it is possible to explore new global markets and make best use of global talent, while potentially reducing costs. The decision to distribute your project should be a conscious one and the decision maker must understand that in doing so they impact the project’s likelihood of success, increase the delivery time, and reduce the team’s performance and increase its dysfunction. The risk/reward trade-off needs to be clearly understood before deciding to distribute your teams.
There are many gains of using agile methodology with distributed software development. It helps in evaluating and measuring the progress of the project and problems of the project are more easily noticed at the early stage.
Agile teams work on user stories and not on the component based tasks. Efforts should be made to distribute the work according to user stories and not by component. Agile development is hard and distributed development adds to the difficulty in software development. The team should have someone to coach them and guide them to move on the track of agile practices.
Hence the modified agile techniques if used consciously can be useful in getting over the challenges faced by distributed software development. The two software development methodologies i.e., agile and distributed development can be combined to give appreciable benefits to software industry in terms of increased production of high quality software by using optimized resources as compared to the traditional development models.
When distributed agile works?
- Identify what can be built offshore, may not suitable for all types of projects.
- Developing a partnership with the client in delivering the geographically dispersed projects.
- Project Continuity and knowledge retention – Knowledge of the earlier phase or the specifications if any.
- Defined deliverables is the most important factor for a successful delivery. If the deliverables are not clear then the Project could very well go into a maelstrom.
We made it work, how? – Distributed Agile is no longer an Oxymoron.
Usage of technology and innovative best practices to overcome the limitations of physical proximity.
Advances in modern communication, and the prevalence of new modes of working including remote, and distributed forced us to come up with new ways of making it work while retaining the essence of agile.
Communication:
- Streamline offshore team communication and development infrastructure.
- Require good mediators/coordinators – To solve communication issues due to language and cultural differences. Dedicated offshore support persons in each team to minimize question round trips.
- Meeting face-to-face is the only way to build trust. Lots of travels/exchanges – Hard to work with someone you haven’t seen and leads to misunderstandings.
- Use Video calling softwares like Skype (for business), Polycom, GoToMeeting and Zoom.
- Use a Chat based team collaborations systems like HipChat or Slack.
- Have an online system of information record, such as a wiki or issue tracking system. That way everyone has the same view of information. Combination of Jira and confluence like tools help in this area.
- Seeing is Believing – Release Plan Walls – Story Card Walls – Iteration Management Walls – Retrospectives – Colorful Post Cards – Build Tree etc
Planning:
- Doing release planning, sprint planning and daily scrum together by team builds similar shared vision.
- Estimates – Have the developers select and estimate their tasks. Have the developers update their estimates regularly (e.g. every day at Stand up).
- Share activities between onsite/offshore – Not just development, but also Business Conception, Detailed Design, Testing, etc
- Involve full team in release planning, iteration planning, review, and retrospectives.
- Formalized Tracking – Accurate documentation and continuous tracking of issues/assumptions and communication threads.
- Establish a rigorous Norming and Chartering plan to achieve high quality.
- Define consensus based design, Coding standards, Code reviews, Scrum-of-Scrums, Pair Programming, Source control philosophy, Defect tracking mechanism, Definition of “Ready” and “Done” and more.
Execution:
- Execute the initial 3-4 sprints with entire team at local site
- Lots of discipline – The Build Must Pass! (requires developing a build culture)
- Establish continuous integration and continuous deployment (CI/CD) with high test coverage across all teams (DevOps Culture).
- Ideally, send functional tests along with use cases – Have a separate team script and automate them.
- Most impediments will need to be worked within the context and environment of each sub-team.
- Improve team spirit/job satisfaction – Allow offshore people to progress – Share the global knowledge and thus improve efficiency.