Collaboration is an inescapable element of every engineering domain, even for software engineering, for as Gerald Weinberg has observed, programming is a human activity. The development of all interesting software-intensive systems derives from activities that beat at different rhythms, including the work of the individual developer, the social dynamics among small teams of developers, and the dynamics among teams of teams. Thus, even if we use the most expressive languages, the most comprehensive packaged software, and the best methods, it is still the manual labor of the development team that yields systems of quality.
The rise of the Web as a natural extension of an individual's physical and daily world, the economic pull of outsourcing, the integration of third-party software (and in particular, the emergence of web-centric service-oriented architectures), the use of home and remote offices, and the growth of strategic partnerships among organizations and companies have all contributed to the increasing distribution of these teams. While software developers spend a majority of their time on code-centric activities (as well they should) supported by an IDE offering a range of code development and manipulation features, other aspects of their work involving interaction, communication, and coordination within and across teams are generally supported by a discrete combination of capabilities including configuration management systems, issue-tracking databases, instant messaging systems, project web sites, and so on. Assembled in a coherent fashion, this latter set of capabilities can compose a collaborative development environment (CDE) for software engineers. ("CDE" is a term that Alan Brown and I coined in our article by the same name published in Zelkowitz's Advances in Computers in 2002.) We define a CDE as a virtual space where the stakeholders of a projecteven if separated by time or spacecan meet, share, brainstorm, discuss, reason about, negotiate, record, and generally labor together to carry out some task, most often to create some useful artifact and its supporting objects. The purpose of a CDE is to create a frictionless surface for development by eliminating or automating many of the daily, noncreative activities of the individual and the team and by providing mechanisms that encourage creative, healthy, and high-bandwidth modes of communication among a project's stakeholders.
Whereas traditional IDEs focus on improving the efficiencies of the individual developer, CDEs focus on improving the efficiencies of the development team as a whole. Furthermore, IDEs are essentially developer-centric, meaning that their primary user experience focuses on the individual developer, whereas CDEs are essentially team-centric, meaning that their primary user experience focuses on the needs of the team (but with points of entry for different individuals). Psychologically, this is a subtle yet very important shift of perspective.
Collaboration has always been an essential part of the fabric of the Internet: E-mail, instant messaging, chat rooms, discussion groups, and Wikis are common collaborative elements that have matured over time, and so in one regard, there is nothing new or novel here. Collaboration among teams is already facilitated through the use of an increasing number of features embedded in standard desktop products, where there is often ample support for shared document reviews, distribution of documents among teams, and mechanisms for performing common collaborative tasks. These tools provide the baseline of collaboration functionality for today's software developers; however, there are two elements that make CDEs materially different. First, software developers must manipulate semantically deep artifacts with equally semantically deep associations among them (in contrast to the kinds of semantically weak textual documents commonly manipulated by business organizations). Second, the Web is essentially the atmosphere in which virtually all software developers live, and thus it is a very short distance from physically colocated teams to virtually colocated ones, leveraging off the plumbing of the Web.
There exist only a few commercial CDEs focused primarily on the problem of software development over the Web (for example, SourceForge and Collab.net), but there are many more that have been created for other domains or that address one specific element of the software CDE domain. In civil engineering, for example, Gehry Technology's Design Project tools were used to build such dramatic works as the Guggenheim Museum in Spain. Similarly, Boeing, together with Dassault, created the Global Collaboration Environment (GCE) to design and build the Boeing 787.
There is much to be learned from these other domains and much work to be done to move the software developer's experience from the IDE to the CDE. While a CDE is not a very complicated thing, it is a particularly fragile thing. Because a CDE touches on the social elements of development, it is very sensitive to issues of presentation, simplicity, ease of use, personalization, and culture. A CDE must be lightweight, nimble, and snappy in appearance yet deep in its inner workingsa CDE must never, ever get in the way of work, but rather, must disappear in the ether, providing a sanctuary in which the individual developer works and in which the team assembles.