In my first years of software development, the term "distributed development"
didn't exist. At the mainframe company where I worked, every developer on a
given project was in the same building, often with offices located along the
same hall. My manager typified the belief that close-in development was good,
often saying that communication breaks down at about thirty feet. Every member
of our team was within shouting distance.
Today, this kind of centrally located development is rare, even strange. The
pervasiveness of broadband Internet access allows developers to work remotely in
small offices and even at home. Through acquisitions and mergers, geographically
dispersed teams are continually divided and recombined to form projects based on
developer availability and talent. Furthermore, the economies of the "global village" increasingly motivate companies to make the most of resources across
time zones and continents. Distributed development is now firmly planted in our
lexicon.
Distributed development raises some questions. Can distributed teams develop
software as effectively as centrally located teams? How can team members achieve
effective communication and coordination when they don’t meet face-to-face? What
tools and techniques can team leaders encourage to counteract distance, keep
projects on schedule, and verify software quality metrics?
This article will provide some suggestions for keeping distributed software
teams in touch and on target. In order to be effective, some techniques require
buy-in and active participation by every team member. In other cases, planning
and oversight on behalf of team leaders produce the best results.
Communication Is Key
Despite their geographic separation, distributed developers need to stay in
constant contact. Conference calls and email are basic and important ways that
should be used regularly. Even when time zone differences require some team
members to participate during unusual hours, there is still no substitute for
talking to each other.
However, today the networked team has some new choices to consider as well:
Threaded Discussions: Many software tools facilitate newsgroup-like
discussions that allow multiple developers to communicate asynchronously on
any topic. Better than email, threaded discussion tools focus debates on
specific issues and save the dialog for later use. Some tools can link
discussions to specific projects, tasks, or other development assets.
Instant Messaging: IM is starting to find its way into the business
world as a valuable tool. Lower friction than the telephone, yet more
interactive than email, IM is valuable for asking a quick question or holding
an informal chat. Like threaded discussions, many IM tools can save dialogs
for later review. To avoid privacy concerns of IM messages traversing public
networks, teams should consider an IM tool that can be deployed on the
corporate intranet.
Blogging: Web logging or "blogging" is the process of instant
publishing to a Web page. "Blogs" typically contain short messages that follow
a chronological order. Blogging was created by individuals wishing to
chronicle daily work, personal experiences, or just random streams of
consciousness. Like IM, blogging is beginning to find its way into the
corporate setting. Team members can use blogging to publish their progress,
and the Web interface makes it easy for everyone to see each other’s notes.
Web Conferencing: When real-time communication is needed, conference
calls can be significantly enhanced with Web conferencing. Web conferencing
can be used for group presentations, interactive planning and review, and even
unstructured brainstorming sessions. Both pay-for-use Web conference services
and commercial software products that can be centrally installed are
available. Depending on the software, Web conferencing products may include
collaboration features such as white boarding, file sharing, instant
messaging, and cooperative editing.
Depending on bandwidth availability, teams may also want to consider emerging
technologies such as voice-over-IP and even video-over-IP. Anything that
promotes effective team communication should be considered.
Shared Repositories
In typical projects, developers must share many of the assets used to
specify, design, implement, and test software. In the past, network bandwidth
and even the tools themselves prevented remote developers from having direct
access to the same repositories used by developers operating behind the
corporate firewall. Today, a broad array of software management tools are
Internet-enabled. Combined with better availability of reliable bandwidth, these
tools increasingly make it feasible for all team members to share common
repositories.
Shared repositories provide developers with up-to-date information, thereby
reducing conflicts. Internet-enabled, repository-centric tools are available for
key development processes such as
- Requirements Management: formal requirement specifications, dependencies,
responsibilities, and change history
- Source Code Management: versioned file assets such as design documents,
source code, and binary files
- Change Management: bug reports, new feature requests, defect tracking, and
traceability
- Project Management: Project schedules, task breakdowns, work assignments,
and progress reports
- Test Management: Test plans, test cases, and test results
Moreover, some Internet-enabled tools that help to manage these processes are
starting to provide integrated collaborative features, such as threaded
discussions and peer-to-peer messaging. These tools further foster team
synchronization.
Large projects and large project teams may require access to many corporate
resources. In these scenarios, teams can benefit from resource portals that
consolidate and concentrate disparate information sources. For example,
Web-based Development Resource Portals (DRPs) can provide access to research
materials and project information from multiple repositories, focused on the
needs of developers. Integrated search and discovery capabilities provide a
central place to traverse a broad array of information. For effective
distributed development, the key is to surface information stored in corporate
repositories to all members of the team.
Keep Remote Developers Involved
Perhaps the most important way to keep remote developers on track is to keep
them included. Every team member needs periodic reassurance that they are
important to the project. The more a remote developer feels in the loop, the
more likely they are to contribute effectively. There are many ways to ensure
that distant team members are on track while fostering their sense of
involvement. Here are a few ideas:
Show-and-Tell:
Remote team members should periodically demonstrate
their work via online presentations. They should also be included in training
sessions, turnover meetings, and even customer presentations. Participation in
important milestones such as these allows distant developers to showcase their
work and demonstrate their expertise.
Reviews: Periodic design and code reviews are good ways to keep tabs on
remote developers’ progress. In order to keep them from feeling singled out,
they should participate in reviews of other team members’ work as well. One
approach is to perform code walkthroughs, in which the author drives the
presentation. This approach rotates each team member’s responsibilities and
maintains a sense of equality.
On-Site Visits: Teams shouldn’t forget the importance of periodically
inviting remote developers to headquarters or other development centers.
Conversely, most remote developers appreciate having occasional team meetings
at their locale. Digital collaboration and information sharing is helpful, but
nothing can replace the interaction and camaraderie of occasional face-to-face
meetings.
Conclusion
Distributed development teams are becoming the norm for today’s software
projects. In lieu of close physical interaction, distributed teams are faced
with the challenge of keeping software projects on track and keeping remote
developers involved. The same forces that have fostered the use of distributed
teams are also yielding new ways to keep team members in touch. New forms of
information exchange provide new ways for distributed developers to collaborate.
Internet-enabled, repository-centric development tools give developers real-time
access to up-to-date development assets. However, it is also important to
recognize the human side of distributed teams, allowing remote developers to
feel involved with team activities and to maintain a sense of importance. By
utilizing available tools and keeping alive the spirit of teamwork, distributed
development teams can be as successful as the centrally located teams of the
past.