Software development is a social activity. Projects involve a team or multiple teams coordinating to produce a finished product. Whether open source or proprietary, a software development project requires people to collaborate. Team members, who may be collocated or distributed around the globe, meet and communicate face-to-face, over the phone, or online. Programmers ask their peers to consult with them, in-person or via screen sharing, to help review code and solve problems.
Now is an important time for developers to consider tools that support the social activities of software development, thanks to three trends:
- The increasing distribution of development teams.
- The extensibility of integrated development environments.
- The emergence of social software in the Web 2.0 era.
Development teams are continuing to become more and more distributed. At a local level, with the increasing availability of broadband connections, developers can opt to work at home on occasion, reserving office visits for face-to-face meetings. At a global level, different teams coordinating on the same project are being established in different geographies and time zones. Open-source projects, by their very nature, are distributed globally.
At the same time, the environment where programmers develop their software has evolved from command-line tools, to powerful graphical editors, to integrated development environments (IDEs). The modern IDE is similar to a desktop office suite, but instead of a collection of tools for developing documents (text, presentations, spreadsheets), the IDE has tools for editing, compiling, building, versioning, and testing software. Modern IDEs (Eclipse, Netbeans, IntelliJ, Visual Studio, and the like) are also highly extensible, with mechanisms that let anyone contribute plug-ins. As a result, communities of programmers have developed that offer a multitude of IDE add-ons.
In the past few years, there have also been advances in the development and adoption of "social software," which lets people rendezvous, connect, or collaborate through software tools and form online communities (en.wikipedia.org/wiki/Social_software). Examples of social software include traditional communication tools such as e-mail, newsgroups, and instant messaging, as well as emergent tools associated with the Web 2.0 wave of Internet services, such as blogs, wikis, and social bookmarking (see www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html and "Web 2.0: Stuck on a Name or Hooked on a Value?", by Tim O'Reilly, www.ddj.com/188700856). Regardless of whether Web 2.0 is an over-hyped trend, a clear byproduct is the increasing adoption of social software (for example, new community sites such as MySpace are turning in record subscriber numbers). Software developers are among the adopters of social software. For example, various open-source projects use wikis (for example, see Eclipse's wiki.eclipse.org, Apache's wiki.apache.org, and Mozilla's wiki.mozilla.org) and some set up chat rooms to support developers (Mozilla IRC channels at irc.mozilla.org, Linux IRC channels at www.linux.org/docs/irc.html), and even commercial software companies increasingly showcase public blogs (Microsoft at blogs.msdn.org and IBM's www.ibm.com/developerworks/blogs).
These trends toward distributed development, extensible IDEs, and social software will influence makers of development tools to consider how to better assist the social aspects of development: awareness of team members' work, communication, and coordination around shared resources. Given that most development tools reside in the IDE, we believe that the IDE can become a collaborative development environment by embedding a variety of social software features that help support distributed development teams. In this article, we reflect on our research into collaborative development environments, explaining how they help support the communication and coordination needs of development teams. We conclude by describing some emerging collaborative development environments and speculating about the future.