Distributed software development

Despite the fact that industry experience recognizes team members co-location as one of the critical success factors for any project, there are multiple reasons why distributed software development might be preferable: shortage of specific resources or knowledge, necessity for local government compliance, 24x7 maintenance cycles, etc. Moreover, successes of many complex open-source projects (with teams spread all over the globe) make people think that the Internet can diminish geographical distance factors. Although this is true, it is also important to realize that distributed development requires certain tweaks in your software engineering and management processes.

For projects that require large, globally dispersed teams, Exigen® Services' focus on execution excellence manages teams with minimal risk and overhead. Exigen Services has been running such projects for its clients for past 8 years and is a recognized leader in applying Agile methodologies to distributed development. Below are several key elements of distributed software development.

Global team building

In dispersed environment it is essentially important to establish and cultivate a common feeling of one team and one goal for all locations. We all know how easily people start think of "us versus them", especially when different cultures are involved. Our experience has proved that several trips from/to all sites during the course of a project positively affect inner-team cooperation because people meet their colleagues in person. It is especially important in very beginning, during the knowledge transfer phase.

Contrary to what common sense may tell us, we have learned that rather than delegate the whole responsibility for one module of the system to one location, it is more rewarding to set up cross-geo teams. In the beginning it will require some time for teammates in different offices to find a productive way of knowledge sharing, but at the later stages of the project this significantly reduces integration effort.

Communication

Typically distributed software development teams have to mitigate not only geographical distance, but also time difference. If all teams are located within Europe (e.g. Exigen Services delivery offices operates in GMT+2 and GMT+3 zones), it is quite easy to shift office hours, so all teams will work simultaneously. Across the ocean it is more difficult, but nevertheless important to maximize overlap in office hours, to allow people utilize instant communications (IM, voice/video conferencing) rather than slow old-style mailing lists. All subject matter experts need to establish a certain SLA on answering questions, because even short delays in such environment can easily cost you many person-hours of remote team.

For the same reasons it is important to grow both technical and domain local experts within each team – they would have much faster response time.

Information transparency

Last but not least is availability of information. In order to set up effective access to a single source code repository, project tracking or collaboration tool for all distributed teams, it might be necessary to establish VPN-connectivity. In corporate environment security clearance can take months, so such infrastructure activities need to be initiated at very early stages of the project life cycle.

Lack of "osmotic" communication that happens between co-located team members in case of distributed software development need to be compensated by the increased documentation support even in lightweight Agile processes, with special focus on documents/wiki articles that are really useful within the team. They need to be easy to access by everyone and easy to update to reflect the changing nature of the project environment.