Making Globally Distributed Software Development Teams Successful

Tips from 15+ years of experience in globally distributed agile software development teams.

Sandun Weerasinghe
Startup Grind
4 min readJul 29, 2020

--

Globally Distributed Teams consist of two or more (sub-)teams working together from different geographical locations to accomplish joint goals.

During my career, I have been part of many globally distributed software development teams, as a developer, lead & manager. Working together with teammates from various countries, cultures, time zones, and backgrounds is always fun, but challenging as well.

The following are a few tips that make distributed agile teams successful.

  1. Build Trust, Interpersonal relationships
  2. Communicate effectively
  3. Have tools for collaboration
  4. Achieve technical excellence
  5. Build domain expertise & product knowledge

Build Trust, Interpersonal Relationships

Everything begins with relationships. Close relationships are built with local teammates since you interact with them a lot. But it is equally important to build similar relationships with your remote teammates as well. Try these with your remote teammates and see how fast you become friends.

  1. Come together in person — Meet them in person at the beginning of a project, after a logical milestone or defined period. This reinforces the team goal and “one-team” mindset.
  2. Technical collaboration — Work on similar/connected features/tasks, review pull requests, do pair programming, transfer knowledge, compete in bug bashes, etc.
  3. Interactions apart from work — Have small talks, chit-chats with your remote teammates. Go on outings, have fun events, and play team sports, whenever you meet each other in-person

Trust begins with the relationship and strengthens via continuous performances.

In an ideal world, you’d progress smoothly, achieve all milestones, and perform as expected always. But in reality, things don’t always go smoothly. If your remote team members/manager do not see the impediments which slow you down, the “Trust” can be affected. You have to have transparency to avoid that.

Therefore, try to give a clear picture of the status always — Be honest/open, highlight impediments during daily scrums, do your sprint reviews, and retrospectives, keep the sprint board/backlog updated and request/give continuous feedback.

Communicate Effectively

Great software is typically produced only when there is great communication between the people involved. Poor communication will limit the quantity, quality, and correctness of the results.

The effectiveness of communication depends on,

  1. Mode of communication
  2. Communication Skills

Mode of communication

The following are a few modes of communication, ranked according to the easiness of exchanging information.

  1. Face-to-face conversation with a physical whiteboard
  2. Video conference with a virtual whiteboard
  3. Video conference
  4. Audio Conference
  5. Instant messaging
  6. Wiki and electronic discussion boards
  7. Email

Communication Skills

Communication is not only about language skills but just as much about listening, friendliness, confidence, volume, clarity, tone, body language, empathy, respect, and responsiveness. A good vocabulary means nothing if you have no respect or understanding for another teammate’s opinion.

Have tools for collaboration

Use the right tools effectively for collaboration. They will help with project management, communication, transparency, and productivity as well.

  1. Communication — Slack, Microsoft Teams, Skype, Zoom
  2. Project Management — Microsoft Azure DevOps, Jira, Github, Trello, Basecamp
  3. CI/CD — TeamCity, Jenkins, Bamboo, Artifactory, ProGet, Octopus

There are many tools. Select wisely, and use frequently.

Achieve Technical Excellence

According to the principles behind the Agile Manifesto, “Continuous attention to technical excellence and good design enhances agility”.

Technical excellence is curiosity towards continuously learning new skills, trying out new 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.

Teams can set standards/calculate metrics (code/product quality-related) to identify improvement areas.

Try Pair Programming, Test-Driven Development, Refactoring, Continuous Integration & Delivery, etc. to see what helps you to produce better software faster.

Build Domain Expertise & Product Knowledge

In globally distributed teams, it is common that (sub-)teams from different locations have different levels of domain expertise & product knowledge.

Teams from certain locations may not have good exposure to some domains and/or access to data due to various regulations. (e.g. GDPR)

You can try these to overcome such challenges,

  1. Delegate work, and responsibilities accordingly
  2. Do knowledge transfers (KTs), workshops
  3. Arrange on-site visits/stays
  4. Maintain wiki, training catalogs

Remote working & distributed teams are becoming more popular than ever. Hope this post would help you to make your experience better!

--

--

Sandun Weerasinghe
Startup Grind

Seasoned software engineer & manager, with 12 years of experience in the distributed software development industry.