12 tips for distributed development success

Developers without borders: Tools and techniques for tapping the global talent pool and ensuring project success

12 tips for distributed development success

These days, attracting programming talent means opening your search to the world at large. But it's one thing to enlist engineers from India and team them up with developers in Denmark; the trick is to facilitate their success in collaborating on projects from across the globe.

Managing development teams across time zones presents unique challenges. Throw in cultural differences, language barriers, and disparate toolsets and modes of communications, and you have a recipe for projects spiraling out of control. Here is a look at the tools and techniques of some of today's most successful distributed development teams to help you tap into talent where it lives and ensure the success of your project.

Tip No. 1: Don't think cheap, think talent

Some managers approach distributed development like the pointy-haired boss in "Dilbert," thinking they'll save big bucks by finding low-cost developers in Elbonia. In reality, distributed development isn't always cheaper and comes with many challenges. But if you can pull it off, distributed development can provide a significant advantage in terms of tapping into top talent regardless of location. After all, not every great developer is located within 20 miles of your office, but if you can productively integrate developers from disparate locations, you can greatly increase the talent pool at your disposal. 

11 programming trends to watch

Tip No. 2: Toolsets define behavior

First and foremost, make sure your tools not only allow distributed development, but encourage it. Every document, source code file, and process should be globally accessible. It sounds easy, but you'd be surprised how difficult some tools make it for remote employees. Test your tools and processes by working from home, checking in code, undertaking a build, and so on. Continuous integration tools can help spot errors that creep into builds -- a good thing if all your developers share an office, but absolutely critical when developers work in different time zones. You don't want to discover that someone checked in faulty code hours or days later. Tools like Jenkins (aka Hudson), CruiseControl, and Bamboo can be lifesavers.

11 programming trends to watch

Tip No. 3: Start distributed and keep an 'open source' mindset

Start with a new project or subproject. Legacy projects are hard to break into pieces to accommodate a distributed effort. New projects also offer the opportunity to start off with tools that foster a distributed approach. For example, modern source control systems like GitHub, Mercurial, or Launchpad assume a distributed environment, whereas older systems, such as CVS and even Subversion, lack a distributed revision control model. Aim for an "open source" level of collaboration, even if your project is not open source. The open source mindset encourages a culture of participation, and the more modular, API-based approach that makes it easy for developers to add to a project without having to master every aspect of the system.

11 programming trends to watch

Tip No. 4: Transparency breeds trust

Up-front requirements gathering and validation is key for distributed development environments. Otherwise, with disparate time zones, language differences, and feature creep, a distributed project runs a high risk of going off track. Written communications are often better than verbal communications. Identify someone on the team to provide regular written project updates identifying progress and obstacles. Here, frequency is probably more important than quantity. Err on the side of overcommunicating, and remember that even a little bit of transparency goes a long way in helping everyone be comfortable with distributed development.

11 programming trends to watch

Tip No. 5: Lagom är bäst (The right amount is best)

"Lagom är bäst" is a Swedish expression that means "the right amount is best." We used this term at MySQL to ensure modularity. Every project or team has different requirements, but the more modular a project is, the easier it is to organize teams. Teams should be organized around skill sets and time zones. While distance can be a challenge, time zones are the killer. More than four hours difference, it becomes increasingly difficult to get everyone online and communicating at the same time. It also helps to have shorter dev-test-integrate cycles to uncover problems earlier in the process. Otherwise, it's too difficult to catch up at the end. Just how short should these cycles be? Lagom är bäst.

11 programming trends to watch

Tip No. 6: The Zen of the fast start

At Zendesk, we've found that getting engineers set up and fixing bugs in their first week ensures they get up to speed quickly. New hires spend their first week in San Francisco, getting set up with tools and paired with other developers. That way they have contacts they can leverage for years. We also have every new employee train on how to use Zendesk in our customer service organization. We want everyone to understand the product and the meaning of great service. We use Trelio and Pivotal Tracker as Kanban boards to facilitate communications on feature development. We also use a range of in-house communications channels: IRC, Yammer, Flowdock, and Rypple. 

11 programming trends to watch

Tip No. 7: Think small, scrum often

Keep teams small enough that you can run a daily 15-minute scrum meeting. By keeping team size small, you can foster a better sense of community and responsibility. For teams across broader time zones where a daily meeting is not feasible, try to meet at least weekly. You can use a range of technologies to ensure everyone has access to people: Skype, chat, IM, or even SMS. The key as a manager is to make yourself available to your team over as many channels as possible and eliminate the risk that developers feel it's an imposition to contact you.

11 programming trends to watch

Tip No. 8: Communicate, communicate, communicate

Left alone, developers often assume the worst. The latest budget request won't be approved, resources won't be available, management doesn't understand the architecture. The best antidote is to overcommunicate. As a manager, you should spend half your time communicating, whether in a group or one-on-one. Reach out to a different developer every day. Stay on top of the pulse of the organization to become aware of problems before they become major snafus. Part of increased communication is demoing software biweekly. That encourages developers to keep the build process working and ensure that dev-test-integration cycles are short. Tools like VNC enable developers to give you a quick preview of what they're working on, even when remote.

11 programming trends to watch

Tip No. 9: Military precision

One of the biggest challenges in managing across time zones is the delay that occurs when communication is ambiguous. Which bug are we talking about? Which incident? What module? Real-time communications resolve these issues with a minimum of delay. But email across continents magnifies these delays, easily resulting in days of lost productivity. You need to aim for "military precision" communications. Ensure that all relevant information is included, whether it's a bug number, JIRA incident, Zendesk ticket, or customer number. Don't assume the receiver has all the necessary information. If in doubt, pick up the phone (or Skype or chat or IM) and resolve the issue in real time.

11 programming trends to watch

Tip No. 10: What gets measured gets done

One of the biggest forces in shaping behavior is to publish metrics. This works whether a team is co-located or spread across many locations. Key metrics should highly visible, whether they are displayed on big screen monitors or accessible via Web. Bug counts, build status, server load, queries per second, downtime -- whatever metrics are important for your developers. Sometimes publishing a "hall of shame" can alert developers when things go wrong. For example, a very public red light/green light status on the build process (and who has broken it) can go a long way toward encouraging developers to carefully review their code before checking it in.

11 programming trends to watch

Tip No. 11: Get on a plane, break bread, drink beer

Face-to-face meetings remain important even in a distributed environment. If you want to build a global culture, you can't do it from headquarters. You need to meet people on their turf to understand how they operate, the challenges they face, and what makes them productive. Make sure you also allow enough socialization to establish meaningful personal connections. An evening out goes a long way toward breaking down hierarchical barriers and preconceived notions. When planning meetings in other cities, cross-pollinate with product management, marketing, and sales. Dev teams benefit greatly when they get to hear from others about the market or what features customers are asking for. 

11 programming trends to watch

Tip No. 12: Go all in or don't go global

Distributed development expands organization's reach, allowing you to get great developers wherever they live. But you must go all in to support these efforts. Your belief, encouragement, and support of distributed developers is crucial. Your actions will define the level of support from other areas of the organization. Always give thought to your distributed developers. Don't set meetings at times or days that preclude participation from other geographies. Don't assume a single time zone or culture. Do your best to get everything online -- documents, processes, social interaction. If you do those things, you set an organizational example that says remote developers are first-class citizens, and everyone has to be on board to make sure it works.

11 programming trends to watch

Distributed advice for distributed development

The ideas here were first presented at the RedMonk Monktoberfest conference. Fittingly, they were the product of their own kind of distributed development, with input from a variety of experts in distributed development including: Mark DeVisser, Akiban; Bob Ainsbury, Lawson Software; Steve Wilson, Oracle; Tomas Ulin, MySQL; Adrian McDermott, Zendesk; David Champagne, Revolution Analytics; Jeffrey Pugh, Consultant; Rob Castaneda, CustomWare; Mike Cannon-Brookes and Scott Farquhar, Atlassian; Gary Whizin, MySQL; and Marten Mickos, Eucalyptus.

Zack Urlocker is COO of Zendesk, a cloud-based help desk provider with offices in San Francisco, London, Melbourne, and Copenhagen.

11 programming trends to watch