Globalization is leading to more and more geographically distributed software development teams. Online outsource marketplaces such as
Rent a Coder
are enabling small and medium size businesses to leverage offshore development resources for the first time. Macroeconomic trends are causing an increasing number of large businesses to look overseas. Offshore development teams can provide many opportunities such as making R&D and product development affordable for small and medium sized companies, and providing the ability for larger companies to leverage multiple development pipelines. The story isn't all sunshine and smiles. Many offshore development efforts fail miserably due to a lack of experience on one or both sides of the shore. Offshore development isn't for everyone. Sometimes a small team of core developers working in the same building as your product managers provides the best productivity and team dynamics. Every organization is different, so you should carefully evaluate your options before making the jump. Having worked for companies in the US, Japan and UK managing offshore teams in Russia, Romania, India and Argentina, I've had the opportunity to learn a few things about distributed software development teams. Here are some pointers for those thinking about doing offshore development.
- Pay 10%-20% over market to get the best people, and do all the hiring yourself. Don’t be stingy. You are already enjoying significant cost savings, and by paying a little over market you provide significant benefits to your team. They will give you better productivity and improved quality in return.
- Use a structured, rigorous interview process. Have people do design/architecture work and code in front of you during the interview. Don’t concede anything just because you are offshore. Remember: 1 great developer, tester, or project manager is worth 5-10 average ones (and a 100 poor ones!)
- I commonly hear that agile development methodologies such as eXtreme, Scrum, etc. can't be applied to geographically distributed development teams. In fact, most of the core principals can be applied. Use video chat applications such as Skype or iChat to conduct your morning Scrum meetings. Pair programming is a challenge, but you can mandate code reviews as part of your check-in process. This provides many of the same benefits. Use test driven development and have your source control management system reject check-ins that cause unit tests to fail.
- Consider setting up a permanent video link between your offices using dedicated computers. This helps create a "one team" mentality.
- Avoid the dreaded "us versus them" mentality by ensuring there is no "them". Make your offshore developers part of the team. If you are using a body shop rather than a branch dev office, use a legal agreement that allows you to directly incentivize individual developers and testers. Relocate one or more managers from your headquarters, and periodically bring offshore developers on location to build cooperation and spread project related knowledge throughout the team. Its important to extend your corporate culture to your offshore team.
- Wiki wiki wiki. Invest in a quality wiki such as Confluence from Atlassian, and require all processes, standards and systems be documented. Updating wiki pages is easy, which means people are far more likely to keep your documents up to date.
- Plan for application support up front. It is very expensive to transfer all the knowledge necessary for application level support from one development team to another.
- Use offshore outsource professionals with a proven track record when setting up your offshore office or outsource project. This is especially important the first time you try outsourcing. Managers that are used to dealing with teams sitting in the same room will require training to adapt.
- Offshore outsourcing is a great way to augment a strong existing team. Don’t make the mistake of firing all your knowledge workers. Any good manager knows that the most important factor in successful projects is the use of talented and motivated people.
Here are a few things to consider when selecting an offshore location:
- Safety of expatriates
- Comfort level for expatriates
- Infrastructure (reliability of communications infrastructure)
- Cost of living for expatriates
- Government stability
- Quality of the local talent pool
- Quality of the local schools
- Cost of labor
- Time zone differences
- Friendliness of immigration laws
I hope you find this information useful. As always, comments, questions and creative insults are welcome.
- Design • Build • Localize | Web • Desktop • Mobile