Design Patterns for Collaborative Systems Luis A. Guerrero Depto. de Ciencias de la Computación Universidad de Chile luguerre@dcc.uchile.cl David A. Fuller Depto. de Computación Pontificia Universidad Católica de Chile dfuller@ing.puc.cl Abstract Collaborative applications provide a group of users with the facility to communicate and share data in a coordinate way. In this paper we propose a pattern system to design the basic aspects of data sharing, communication, and coordination for collaborative applications. These patterns are useful for the design and development of collaborative applications as well as for the development of platforms for the construction of collaborative applications. 1. Introduction A design pattern [7] is a recurring solution to a problem in software design. Design patterns encapsulate experience, provide a common vocabulary for computer scientists across domain barriers, and enhance the documentation of software designs [1]. In general, pattern documentation describes a context within which we can use the pattern, the problem the pattern solves, and the solution. Moreover, we can describe the forces, implementation, examples, and related patterns as well. Thus, according to Sane [18] a pattern paper tells the story of a design decision: in some context, if one faces a problem where the solution must satisfy certain requirements, or forces, then one must use the solution; but keep in mind that certain implementation issues will be faced. Individual patterns can be interwoven within patterns systems [4] that describe how they are connected, how they complement one another, and how software development with patterns is supported. Pattern systems aid developers in communicating architectural knowledge, teach new design paradigms or architectural styles, and train new developers in how to avoid costly traps and pitfalls which have been traditionally learned through experience [19]. This paper describes a pattern system for collaborative applications design. Section 2 describes the studied tools and applications, and elaborates on the nine patterns of the pattern system. Section 3 explains the relationships among the patterns when we design the collaborative applications. Finally section 4 presents our conclusions. 2. Design Patterns in Collaborative Applications In deliberate and focusing on the identification of design patterns for collaborative applications, certain tools were studied for the construction of these applications. These tools are: GroupKit [17, GroupKit], NSCA Habanero [5, Habanero], JSDT ("Java Shared Data Toolkit") [JSDT], NSTP ("Notification Service Transfer Protocol") [6, NSTP], GroCo ("Group Communications") [25], MetaWeb [24], COAST ("COoperative Application System Toolkit") [21], CBE ("Collaboratory Builder’s Environment") [12], Artefact [3], Mushroom [10], DistView [15], Oval [14], JETS ("Java-Enabled Telecollaboration System") [22] and DAgora [23]. Moreover, we studied a number of collaborative applications which have demonstrated a certain degree of success. These include: Microsoft NetMeeting [NetMeeting], GMD BSCW ("Basic Support for Cooperative Work") [BSCW], Instinctive Technology Inc. eRooms [eRooms], Netopia Inc. Netopia Virtual Office [Netopia], TeamWave Software Ltd. TeamWave Workplace [TeamWave] and Lotus Notes [Notes]. After examining previous development tools and applications, various common concepts were identified that can be applied to the patterns definition. These concepts are: sessions, users, roles, events, objects, repositories, messages, views and broadcast. The messages and events concepts can be specified within the broadcast concept. Therefore, we can say that candidates to design patterns include: sessions, users, roles, broadcast, objects, repositories, and views. In addition to these seven common features of the toolkits for the construction of collaborative applications, two more can be included: environments and floor control. Utilizing these nine components, plus a broker pattern [Bush96], we can construct a prototype pattern-based framework for