Tips from 12+ years of experience working in globallydistributed agile software development teams
GloballyDistributed Teams consist of two or more (sub-)teams working together fromdifferent geographical locations to accomplish common goals.
I havebeen part of many globally distributed software development teams as adeveloper, lead and manager during my career. Working together with teammatesfrom various countries, cultures, time zones and backgrounds is always fun, butchallenging as well.
The following are a few tipsthat make distributed agile teams successful.
1. Build trust and interpersonalrelationships
2. Communicate effectively
3. Have tools for collaboration
4. Achieve technical excellence
5. Build domain expertise &product knowledge
Build Trust and Interpersonal Relationships
Everythingbegins with relationships. Close relationships are built with local teammatesas you interact with them a lot. But it is equally important to build similarrelationships with your remote teammates as well. Try these with your remoteteammates and see how fast you become friends.
6. Come together in-person — Meetthem in-person at the beginning of a project, after a logical milestone ordefined period. This reinforces the team goal and “one-team” mindset.
7. Technical collaboration — Workon similar/connected features/tasks, review pull requests, do pair programming,transfer knowledge, compete in bug bashes etc.
8. Interactions apart from work —Have small talks and chit-chats with your remote teammates. Go on outings, havefun events and play team sports whenever you meet each other in-person.
Trust begins with the relationshipand strengthens via continuous performance.
In an ideal world, you’d progress smoothly, achieveall milestones, perform as expected always. But in reality, things don’t alwaysgo smoothly. If your remote team members/manager do not see the impedimentswhich slow you down, “trust” can be affected. You have to have transparency toavoid that.
Therefore, try to give a clear picture of the statusalways —be honest and open, highlight impediments during daily scrums, do yoursprint reviews, retrospectives, keep the sprint board/backlog updated andrequest/give continuous feedback.
Communicate Effectively
Greatsoftware is typically produced only when there is great communication betweenthe people involved. Poor communication will limit the quantity, quality, andcorrectness of the results.
Effectivenessof communication depends on,
9. Mode of communication
10. Communication Skills
Mode of communication
Thefollowing are a few modes of communication, ranked according to the easiness ofexchanging information.
11. Face-to-face conversationusing a physical whiteboard
12. Video conference with avirtual whiteboard
13. Video conference
14. Audio conference
15. Instant messaging
16. Wiki and electronic discussionboards
17. Email
Communication Skills
Communicationis not only about language skills but also about listening, friendliness,confidence, volume, clarity, tone, body language, empathy, respect, andresponsiveness. A good vocabulary means nothing if you have no respect orunderstanding for another teammate’s opinion.
Have tools for collaboration
Use theright tools effectively for collaboration. They will help with projectmanagement, communication, transparency as well as productivity.
18. Communication — Slack,Microsoft Teams, Skype, Zoom
19. Project Management — MicrosoftAzure DevOps, Jira, Github, Trello, Basecamp
20. CI/CD — TeamCity, Jenkins,Bamboo, Artifactory, ProGet, Octopus
Thereare many tools. Select wisely, and use frequently.
Achieve Technical Excellence
Accordingto the principles behind the Agile Manifesto, “Continuous attention totechnical excellence and good design enhances agility”.
Technicalexcellence is curiosity towards continuously learning new skills, trying outnew approaches, and striving to enhance the quality of products and code.Encourage team members to use online learning platforms such as Coursera,Udemy, Pluralsight, etc. to improve their technical competence.
Teamscan set standards/calculate metrics (code/product quality-related) to identifyareas for improvement. Try Pair Programming, Test-Driven Development,Refactoring, Continuous Integration & Delivery etc. to see what helps youto produce better software faster.
Build Domain Expertise & Product Knowledge
Inglobally distributed teams, it is common that (sub-) teams from differentlocations have different levels of domain expertise & product knowledge.Teams from certain locations may not have good exposure to some domains and/oraccess to data due to various regulations. (e.g. GDPR)
You cantry these to overcome such challenges,
21. Delegate work andresponsibilities accordingly
22. Engage in knowledge transfers(KTs), workshops
23. Arrange on-site visits/stays
24. Maintain wiki, trainingcatalogs
Remoteworking & distributed teams are becoming more popular than ever. Hope thispost would help you make your experience better!