It used to be thought that if only we could write a good specification that accurately described what was to be built, we could take advantage of the cheap labor overseas to cut costs and get software built faster. Unfortunately, reality often shatters such naive hopes. However, outsourcing overseas can help for many tasks and as these workers become more skilled and collaboration improves, these approaches are becoming much more successful. Here are seven strategies for improving collaborating with remote teams.
1. Be in similar timezones
Communicating with teams across timezones can be hard. Some teams use this to their advantage, for example, by having developers send their work at the end of their day to a QA team that is just beginning their day. However, this can also cause problems when these teams have to communicate since they are awake at different hours. Finding at least some common time where everyone can meet and collaborate can be highly valuable.
2. Use video and good collaboration tools
I am not a big proponent of tools but they have their place, especially with distributed and remote teams. Having face time with team members is so important, whether the team is scattered across the world or scattered across town, video conferencing can help increase communication bandwidth.
3. Do trainings together and meet regularly
Successful distributed teams get together regularly to meet in person at least once a year but preferably quarterly or even monthly. Sharing a common experience such as training, key meetings, or just sharing a meal together can help build rapport and deepen working relationships. It is easy to skimp on this but don’t. The expense of getting remote workers together regularly is far outweighed by the increase in communication and productivity it brings.
4. Share a common code aesthetic
Remote teams must be on the same page with the rest of development in terms of coding aesthetic, standards, and practices. Common coding standards should be established, understood, and adhered to by all team members, even remote ones. Remote teams should also share a common development process as the rest of the developers in the organization. Ideally, it should not be possible to tell who developed the code by looking at the source.
5. Decouple dependencies so work can be independent
Give remote teams everything they need to be successful. If the team needs access to the Product Owner who is never available to speak with them then the team is being set up to fail. Find components that can be written and tested independently so development can happen in parallel.
6. Use pair program often
The fastest, most effective way to amplify learning within an organization is to pair. This is true for remote teams as well. Remote pairing is a powerful way to work with remote teams and help them learn many of the subtler things that help them become part of your development culture.
7. Invest in quality
Regardless of where software is built, a focus on quality will alway be cheaper than trying to rush things. Certain things take time to write and if you show you value quality you will more likely get it from your remote teams.
Several years ago companies had the idea they could cut costs by hiring cheap labor overseas. We’ve learned that the most important part of successful software development comes from understand the domain, not pounding on a keyboard, and understanding can be difficult to acquire remotely. However, many countries do have highly talented developers at a fraction of the cost of developers in the US so distributed teams can make sense in some situation, as long as they get the support they need to do a great job.