Collaboration Within the Development Environment
In 2002, we began to explore integrating collaboration into an application development environment. This effort, the Jazz Research Project (JRP), is a system we developed at IBM Research that focused on providing a set of collaborative features for the Eclipse IDE (www.eclipse.org). (JRP is related to, but not the same as, Jazz from IBM Rational.) The aim was to promote interaction and team-building among a small, core group of developers, while capturing the team's artifacts to provide a useful knowledgebase and context for communication. The system was modeled after an "open office" approach to software development, in which team members are situated close together at their workstations, with shared space available for holding meetings, sharing materials, and collaborating at whiteboards. One important advantage of such an environment is "team awareness": While they focus on their own tasks, team members have a peripheral sense of the activities, discussions, and work occurring around them. Another significant characteristic of the open office is easy communication: People ask questions or provide information to the whole team, or call colleagues over for consultation. We wanted to provide the benefits of this type of open development environment, even in situations where developers may be distributed around the world.
Our system extended the Eclipse Java development environment to emulate the collaborative features of an open office: increasing the user's awareness of people, resources, and activities, and encouraging team communication. To promote team awareness, we elevated developers to first-class standing in the IDEas prominent as files, folders, and libraries. JRP supplied an instant-messaging-like "buddy bar" along the bottom of the IDE that provides peripheral awareness of one's teammates. Each team member is represented by an image and, at a glance, you can tell who is online and working in the JRP environment. Hovering over the images reveals further details about developers' activities; for instance, what files they are currently editing or debugging (see Figure 1). From the buddy bar, users can kick off a variety of interactions, including text chat, screen sharing (useful for pair programming, joint debugging, and code reviews), and voice-over-IP telephony. Communication can also be initiated from the work context itself, by selecting a block of code to discuss. Chats can be saved as annotations, accessible from markers in the margin next to the code they reference or as entries in a team-wide discussion forum; team members who come along later can read and contribute to the existing discussions.
In addition to team awareness, JRP also provided "resource awareness" by extending the Eclipse IDE's Package Explorer file viewer. Files and other resources in the viewer are decorated with colored icons, indicating what other developers are currently doing with local copies of the files; for instance, which files have been checked out of source control, which have been edited, and which have been checked back in, making one's local version obsolete (see Figure 2). Decorators are also used to signal that someone is modifying a file at a particular moment. Hovering over a resource reveals a tooltip with further details; for example, who changed the resource and when. Resource awareness is also provided through extensions to the code editor: Markers in the left margin of the code automatically pinpoint where team members have made modifications. The decorators and markers help developers maintain a peripheral awareness of the activities of their teammates, including where others are working in the codebase and what issues surround specific parts of the code. Whether developers are working in the same building or around the world, the team- and resource-awareness features introduced by the JRP can help team members coordinate their work and avoid conflicts and duplication of effort. Moreover, collaboration happens in a contextual way: Developers are not forced to leave their core work environmentthe IDEto launch collaborative tools; they can instead easily access them as integral extensions to the IDE.