TITLE:
"Socio-Technical Pattern Languages"
WHEN:
Saturday, November 16th 2002
WHERE:
The Hyatt Regency, New Orleans.
Part of CSCW 2002
November 16-20, 2002
New Orleans
Design patterns are named recurring problems in contexts with solutions. Pattern languages are interrelated sets of such patterns that cover a domain. Socio-technical patterns provide solutions to recurring problems observed in computer mediated and non-mediated contexts whose solutions productively combine social relations with informa-tion and communication technologies. Pattern languages exist for basic software engineering, business processes, architecture, pedagogy, and human-computer interaction, to name a few.
It is now opportune to formulate a socio-technical pattern language that identifies a set of recurring problems in the socio-technical domain and suggests corresponding solutions. In formulating such a language it is important to consider how it might be of use to a diverse set of user groups, including consultants, software developers, testers, or end-users working in the socio-technical domain.
In the workshop, we will discuss socio-technical pattern languages. This will include discussions of the structure, content and use of a socio-technical pattern language. Discussions on concrete patterns will take place as writer's workshops - a discussion approach that is successfully used in the patterns community.
Topics of interest include (but are not limited to):
- Approaches for structuring pattern languages
- The use or role of socio-technical patterns in the overall design process
- Tools to aid in the development and use of patterns and pattern languages
- Experiences of mining and introducing patterns
- Experiences of applying patterns in the socio-technical and related contexts
- Retrospective "case studies" of how design would have proceeded differently, given a pattern language
Prospective participants are invited to submit a position paper of no more than 3 pages that addresses one or, at most, two of the topics listed above. Position papers should be in the CSCW paper format. In addition, authors should include a brief description of their background, interest, and what they would like to get out of the workshop.
Authors are also encouraged to submit one or more patterns. Note that pattern submission is optional but highly desirable. Patterns will be shepherded before the workshop to improve their quality. That means that the authors will pair with an experienced pattern author to improve the writing and clarity of the pattern. The shepherding will concentrate on up to 10 pages of the pattern. Authors should highlight the part of the submission, on which they request feedback from their shepherd. There is no required format for the pattern, although the layout is reviewed in the shepherding process.
More detailed information can be obtained from the patterns workshop's homepage at http://www.groupware-patterns.org/cscw2002
Please send your submissions electronically (as PDF or DOC) to cscw2002_patterns_workshop@acm.org. The deadline for submissions is September 20 and we will notify of acceptance by October 11. The workshop proceed-ings will be published as a technical report and on the workshop's homepage. The final version of the paper is due at October 27.
In case of open questions, please feel free to contact one of the organizers.
Organizers:
John Thomas (IBM T.J. Watson Research Center), jcthomas@us.ibm.com,truthtable@aol.com +1-914-784-7561
Catalina Danis (IBM T.J Watson Research Center), danis@us.ibm.com, +1-914-784-6532
Sharon Greene (IBM T.J. Watson Research Center), slg@us.ibm.com, +1-914-784-7042
Till Schuemmer (FernUniversitaet of Hagen), till.schuemmer@fernuni-hagen.de, +49-2331-987-4371.
The text above details a call for participation in a one-day workshop on Socio-Technical Pattern Languages. Please note that you must register for the CSCW conference in order to attend any of the workshops (standard policy for all ACM conferences).
Report on Pattern Language Workshop, Malmo, Sweden, June 24, 2002
Here is a link to a brief report on the pattern language work at PDC '02 in Malmo by Doug Schuler.
http://www.cpsr.org/conferences/diac02/patterns/pdc2002-workshop.doc
and http://www.cpsr.org/conferences/diac02/patterns/pdc2002-paper.doc
Check out the recent EuroPloP conference too:
http://www.hillside.net/patterns/EuroPLoP/
Original CSCW Workshop Proposal in Full. The Call above supercedes the following document which is presented only for historical background.
Comments and Suggestions, please forward to jcthomas@us.ibm.com
If you are interested in attending, please e-mail a 3 page position paper that includes your background, work, and interests in relevant areas (e.g., collaborative software, groupware, patterns, the software development process, improving design, and so on).
Workshop Proposal: Socio-Technical Pattern Languages
John C. Thomas, Catalina Danis, and Alison Lee
IBM T. J. Watson Research Center
{jcthomas, danis, alee}@us.ibm.com
INTRODUCTORY SUMMARY
The theme is socio-technical pattern languages. “Design Patterns” are named recurring problems in contexts with solutions. “Pattern Languages”are interrelated sets of such patterns that cover a domain. “Socio-technical patterns” are recurring problems in social and/or technical contexts whose solutions productively combine social relations and information and communication technologies. Pattern Languages exist for business processes, architecture, and human-computer interaction, to name a few. It is now opportune to formulate a Socio-Technical Pattern Language as much has been learned in this domain but little is readily accessible to consultants or software developers. We will use a variety of methods including a pattern writer’s workshop, a story sharing methodology, synectics, and Bohm Dialogue to begin to develop a community of practice around Pattern Languages in the socio-technical domain.
We will use a variety of methods to solicit participants including e-mail distribution lists such as ui-patterns, networking at CHI 2002 and DIAC-2002, our own Web site and CHIplace. Participants will be chosen based on a combination of diversity of backgrounds (cultural, academic discipline, and current position) as well as relevance of experience and expertise.
Theme: Socio-technical pattern language. Potentially, new Information Technology can provide significant benefits in terms of increased productivity for businesses, increased pleasure for individuals and increased effectiveness for communities. Yet, these potentials are often not reached in practice because building effective and efficient systems, especially those in which groups of human beings are “in the loop”, is difficult and time-consuming. Landauer, (1995) among many others, has shown that interactive IT systems developed without proper professional attention to usability result in minimal productivity gains (on the order of 1%/annum). A study of systems that did include proper professional attention to usability resulted in an average per annum increase in productivity of 30%. The cumulative effect of these differences over a decade is staggering. Yet, it is still often the case that applications are developed which ignore or oversimplify the human aspects of complex systems with the result that the systems are error-prone, inefficient, and frustrating.
Significant improvements in the usability of applications can result from instantiating significant, reusable software components into a middleware layer from which developers can select needed functionality. For example, a social network analysis provides useful input for many office applications. Knowing who communicates with whom can be useful in disambiguating e-mail recipients, in collaborative filtering for web browsing, in putting together teams, in skills mining, in focusing sales effort on opinion leaders and so on. But developers of any one application are unlikely to have the time or the knowledge to include a social network analysis. Similarly, many applications can provide data for a social network analysis. Again, developers of any one application are highly unlikely to provide the monitoring functionality to collect such data. Incorporating such functionality into a middleware layer may enable developers to invoke, rather than design, build, and debug such functionality. An added benefit for the end user is that any explicit information need only be input once, not once per application. For this vision of useful and usable application software to be realized, however, the development team must become aware of the existence of such functionality and understand how to use it. We believe we can greatly expand the pool of people capable of this via Pattern Languages. Patterns essentially encapsulate, in succinct diagrams, natural language, and/or pseudo-code, the essence of a recurring problem, its analysis and its solution. A Pattern Language is an inter-related set of such Patterns with cross-references.
Pattern Languages have wide utility in providing a way to access and understand the functionality provided by specialists. In particular, the focus of the workshop is on Socio-Technical Pattern Languages. “Socio-technical patterns” are recurring problems in social and/or technical contexts whose solutions productively combine social relations and information and communication technologies. The past twenty years of research, development, and practice in individual user interface design has led to conventions that, while not perfect, work reasonably well much of the time. These practices have been instantiated in GUI tool kits, style guides, pattern languages, and guidelines. Increasingly, however, corporate customers as well as governmental agencies and communities are interested in systems that facilitate the productivity of teams, organizations, and even foster communication and cooperation across semi-permeable organizational boundaries. Knowledge of the socio-technical aspects of systems is currently fragmentary. Although a great deal has been learned via CSCW and other venues, the knowledge that exists has not typically been codified in ways directly useful for development teams.
Socio-Technical Pattern Languages can encapsulate such knowledge in a highly understandable, usable, and useful form for the overall software development cycle. Pattern Languages serve as a lingua franca (Erickson, 2000) and can help facilitate meaningful conversations among marketers, end users, computer scientists, graphics designers, financial decision makers, and junior programmers about the purpose of a system, the desired functionality, and the shape of the instantiation of that functionality. Pattern Languages are useful throughout the software development process. They can help developers understand and analyze problems and create designs. Because a Pattern tends to collect together those sub-problems that must be dealt with in concert, a Pattern Language can also serve as a useful guide for project management structure, for testing and debugging, for maintenance, for documentation, and for migration; indeed, it can even help guide marketing and sales efforts by providing a succinct way of relating functionality to benefits. Theoretically, any form of “design rationale” might be useful in these same ways throughout the software life cycle. Inducing developers to write detailed “design rationale” documents de novo, however, has in practice proven extremely difficult. By contrast, once a community of practice becomes familiar with a Pattern Language, it is much easier to simply refer to the utilized Patterns and add a few notations.
Pattern Languages are useful, however, not only in solving problems; they are one of the few intellectual tools specifically useful in finding problems. Essentially, this means that Socio-Technical Pattern Languages can help lead people to perceive unmet needs and thereby design and build previously unanticipated systems.
Terminology: “Design Patterns” are named recurring problems in contexts with solutions. “Pattern Languages” are interrelated sets of such patterns that cover a domain. Pattern Languages exist for business processes, architecture, (Alexander, et. al., 1977), object oriented programming (Coplien, Schmidt, 1995; Gamma, et. al., 1995; Vlissides et. al., 1996) and human-computer interaction (Bayle, et. al., 1997). “Socio-technical patterns” are recurring problems in social and/or technical contexts whose solutions productively combine social relations and information and communication technologies. It is now opportune to formulate a Socio-Technical Pattern Language as much has been learned in this domain but little is readily accessible to consultants or software developers.
Examples: Examples of socio-technical patterns include Patterns at various levels. Fairly high-level patterns might include “Learning in a Community”, “Social Navigation”, “Social Awareness”, “Improving the Productivity of Groups”, “Bonding”, and “Limiting Access to Resources to those within a Group.” Lower level Patterns might include “Building Critical Mass”, “Working Social Networks”, “Establishing the Quality of Input”, “Effective Group Process”, and “Special Events.” Still lower level Patterns might include “Expressive Communication Builds Trust”, “Current Activity Social Proxy”, “Sustained Virtual Identities”, “Elicit from Diversity”, “Rites of Passage”, “Active Reminders of Group Process.” Space does not permit expanding greatly on all these, but one example of a socio-technical pattern is given in attachment 1.
Goals: Develop a Community of Practice around socio-technical pattern languages; increase awareness of relevant materials; share learning about the process of creating and using Pattern Languages; discuss and compare alternative means of codifying CSCW knowledge; and use of Pattern Languages in building applications, middleware components and architectures. Workshop Questions and Outputs: To concretize this a bit more, we can pose some questions for workshop participants and suggest some possible outputs. Important questions include the following. 1. What are the various ways of codifying CSCW knowledge in a form that is usable by non-experts who nonetheless influence the design of CSCW systems? 2. What are the specific advantages and disadvantages of Pattern Languages in this context? 3. How can we collectively build Pattern Languages effectively? 4. What Pattern Languages already exist that are relevant to the socio-technical domain? 5. What tools should be built to support the creation and use of Pattern Languages? 6. How do Pattern Languages fit in the larger context of system design, development, deployment and maintenance? 7. How can we demonstrate that Pattern Languages are effective?
Outputs can include the following. 1. Design improvements for a community Web site for creating and sharing patterns. 2. A set of socio-technical Patterns. 3. Process suggestions for continuing to build and share knowledge. 4. A publishable workshop report. Participants: We will seek to bring together different communities of CSCW practitioners involved in studying socio-technical systems, designing and developing socio-technical systems, and teaching CSCW courses.
Activities: We will have on-line discussion and polling among the participants ahead of time to select a feasible and coherent subset from among the following set of possible activities. Use the “Narrative Insight Method” to share lessons learned about creating and using Pattern Languages. The “Narrative Insight Method” is basically, an efficient method for eliciting and sharing stories among experts (Lawrence and Thomas, 1999). The content of these stories can then be organized into a variety of educational materials and work aids. We have used this method successfully on three separate occasions. If chosen, this method works best at the beginning of the workshop.
Share position papers via a portion of the Web site we are developing to encourage the exchange and sharing of ideas, case studies, patterns, and software components related to social computing. If chosen, this would take place near the beginning of the workshop. Have people volunteer for special short summarization and comparison talks ahead of time based on an analysis of the participants and their interests. This technique worked well at the CHI workshop on Narrative. If chosen, this works well near the beginning of the workshop.
Hold pattern workshops to critique and improve suggested patterns. We will explain, model, and use the pattern writer’s workshop technique developed by the OO programming patterns community. This technique worked well in the HCI workshops at CHI 2000 and Interact 1999. It involves a pattern writer reading their patterns aloud to a peer group (3-4 people). Then, the author becomes a data-gathering “fly on the wall” while the peer group gives feedback in terms of what they think the essence of the pattern is; what they individually liked about the content and structure of the pattern and suggestions for improvements in the content and structure. Then, the author is invited to rejoin the group and someone tells an unrelated story. This process has been found to give a maximum amount of useful feedback in a short time and prevents unfruitful defensiveness and argumentation. If chosen, this would take place in the middle of the workshop.
The “Synectics” method is a modified form of brainstorming in which the facilitator continues to introduce metaphorical thinking via a number of active interventions. If chosen, this would be the next to last activity in the workshop. End with a reflective Bohm Dialogue session. Bohm Dialogue (Bohm, 1996) is a method for the group to explore issues together and build group knowledge. In Bohm Dialogue, each participant may make a contribution, which could be a question, a suggestion, or an observation and the rest of the group listens (rather than rehearsing their reply) and then reflects on what has just been said. Then, someone else speaks. Rather than structuring the conversation as a “debate” with two sides, this type of Dialogue seeks to explore a system or topic from a variety of angles.
Organizers: John Thomas has been interested in Pattern Languages to cumulate knowledge since he co-organized and co-led a CHI Workshop on this topic in 1997. John received a Ph.D. in psychology from the University of Michigan in 1971 and managed a research project in the psychology of aging at Harvard Medical School before joining IBM Research where he spent 13 years conducted research in human-computer interaction, design problem-solving, software development methodologies and speech synthesis. In 1986, he built the Artificial Intelligence Laboratory at NYNEX Science and Technology. The laboratory did work in expert systems, machine vision, human-computer interaction, speech recognition and advanced tools for software design. In addition, the lab was responsible for software change efforts using the Capability Maturity Model and a successful ISO-9001 registration. John rejoined IBM Research in 1998 to focus on knowledge management. In particular, this work has focused on the social, as well as the technical aspects of knowledge management. Recent activities in the areas of Pattern Languages include participations at INTERACT 99, CHI 2000, and co-chairing a panel on Pattern Languages at CHI 2001. John has taught at a variety of educational institutions and has over 130 publications and invited presentations in computer science and psychology. In addition to co-leading the CHI ‘97 workshop on HCI Patterns, John has been Workshop Chair for CHI ’90, general co-chair of CHI ’91, and co-led workshops at CHI ’92, and InterCHI ’93 as well as participating in CHI workshops at CHI 94, 95, 98, 99, ’00, and ’01 and CSCW workshops at CSCW ’98 and ’00.
Catalina Danis has 15 years of experience in the analysis of human behavior in support of the design and development of applications based on leading-edge technology. Her analytic approach is to understand users in the larger context defined by their social and organizational situation. The goal of her design work is two-pronged. First, she aims to support users in the achievement of their goals by providing them a technology solution that often re-conceptualizes their tasks and extends their capabilities. Second, she focuses on evolving the underlying technology base through using it to solve real problems for real users. In her fifteen years at IBM, Catalina has been involved in the design and development of a wide variety of applications for end-users in the insurance, medical, retail, and newspaper industries. For the past three years her focus has been on developing systems rich in social cues to facilitate collaboration among participants in online environments.
Alison Lee has extensive research and development experience in building socially-supportive and user-centered applications. For the last 7 years, Alison has been exploring paradigms, solutions, and systems that productively combine social and computational elements. She has been involved in customer-related and research-related projects to create systems that leverage social relations, to introduce the systems to end users for evaluation and feedback, and to use these systems as vehicles for exploring and building socio-technical components. Two recent examples of this are IBM Summer Co-Op (portkey.watson.ibm.com) and the CHI 2002 Online Interactions Web site (www.chiplace.org). Her research focus has been identifying and developing novel socio-technical components for Web-based social interaction environments, developing tools to promote awareness and interaction in online spaces and characterizing the value of socially-aware and socially-supportive computational environments. The broader research agenda is the design of large-scale social interfaces for online communities and information cities. Alison has jointly taught many tutorials on Web-based collaborative applications at CSCW, HCI, and Web conferences as well as a Columbia University course on Media Spaces and Communities.
Maximum number of participants: Twenty.
In our experience, more that 20 people become unwieldy and people do not feel they have sufficient “air time.”
Means of soliciting participants: Various: We will use a variety of methods to solicit participation including e-mail distribution lists such as ui-patterns and networking at the CHI 2002 conference and at DIAC-2002. The DIAC-2002 conference is a Patterns-based conference on the future of the World Wide Web. We are also developing a Web site which will be used to help form a community of practice and where people can share ideas about patterns, pattern languages, other forms of codified knowledge relevant to CSCW and software components. We will also promote the workshop via the increasingly popular CHIplace as well as through the normal CSCW mechanisms of advanced programs and Web site. Means of selection: We will select participants on a combination of criteria including diversity of backgrounds (cultural, academic, and current position) as well as experience and expertise.
Attachment One: Example Pattern.
Abstract Social Proxy
Problem:
People are all different. As humans, we want to treat each person differently and we feel better (more fully human; more appreciated for who we are) when others treat us differently. We feel more included in a group when statements are made that are clearly relevant to our previously expressed concerns. When we make a comment, we want to take into account the current audience. All this happens fairly naturally in small face-to- face groups because the voice and face of each person is associated with a unique set of stimuli that remind us who is present. In the virtual world, however, it is easy to forget who is there unless there is some representation of each individual. Unless special steps are taken, interactions in a virtual world can feel cold and impersonal precisely because we do not get the sense that comments are directed to us as individuals and we find it hard to direct comments to others specifically. It is also natural in a small face-to-face group to indicate by posture and gaze what subset of people a comment is being directed toward. It is also easy in a small face-to-face group to refer to another individual by gesture in order to indicate who is being spoken about.
In addition, since we have limited attention, and the level of activity in virtual communities varies, and we are largely social animals, we differentially prefer to engage in some community activity when others are present. This is often more rewarding because we will get a more immediate response and feel more connected. In real space, a glance can often tell us roughly how many people are present in a space and how active they are as well as what kind of activity they are engaged in. In many electronic venues this is not possible.
Context:
Teams and communities of people now want to connect with others who are too distant to make frequent face-to-face meetings feasible. This happens in work contexts, both within a company and among inter-related people in a supply chain across companies. This desire is present in family contexts, for entertainment purposes (e.g., Internet gaming), non-work commercial contexts (on-line auctions), Communities of Practice such as professional communities and Communities of Interests. As a result of the desire to communicate and feel connected to a larger community who cannot always be face-to-face, people typically use electronic means to stay in touch and to communicate. One common technical implementation is in the conference call. Another is a web-based forum. Another common technical implementation is an on-line synchronous interaction such as a chat or real-time game. Another technical implementation is the videoconference. Another is the team room. In all these electronic contexts, there should be some easy way for people to direct comments and actions toward specific subsets of people and refer to specific subsets of people (including especially individuals).
Forces:
People have many demands on their time and attention.
A primary determiner of our decision to engage in a particular kind of activity is knowledge about the presence or absence of others.
People like to be acknowledged as an individual.
Face to face interactions provide a natural set of salient cues to appropriate action.
Face to face interactions with people who are physically far away are expensive and time consuming.
Face to face interactions do not lend themselves to multi-processing. If you do multi-processing while communicating with others, it does not increase social capital and may decrease it.
Solution:
For virtual teams and communities, provide an abstract social proxy that reveals the individuals present, the level of general activity, and the type of activity in a quickly decodable way. The same social proxy should allow one to easily direct remarks to a subset of the community and to refer to a subset of the community.
Examples:
Babble: Here there is a “cookie”: (Erickson, Halverson, Kellogg, Laff, and Wolf, 2002) a round circle that represents the current conversational context. Each person is represented by a colored dot. The dot moves in toward the center when the person is actively posting or reading (i.e., scrolling) and gradually drifts out when the person has been inactive for a while. A brief glance at the cookie reveals how many people are present and how many are currently active. Right mouse clicking the social proxy allows one to send a private note or chat to an individual. This is only a partial solution, however, since referring to someone must be done explicitly in text rather than by reference to the social proxy or by gesture and similarly, if someone wants to say something directed at one person but perceivable by all, it must be done textually. AOL Chat Rooms: When choosing a chat room, a user can see how many people are in the chat room before deciding to go there and within seconds upon arriving, can tell by the speed of the scrolling text, how much activity is going on. It is possible to send private communications to a single person or to “ignore” certain people (that is, not have their comments appear). However, directing public comments to a particular person or making reference to someone must be done explicitly in text.
References:
Erickson, T., Halverson, C., Kellogg, W., Laff, M., and Wolf, T. Social Translucence: Designing Social Infrastructures that Make Collective Activity Visible. CACM, 45(4), 40-44, 2002.
Attachment Two: References
References:
Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl-King, I, and Angel, S. A Pattern Language. New York: Oxford University Press, 1977.
Bayle, E., Bellamy, R., Casaday, G.,Erickson, T., Fincher, S., Grinter, B., Gross, B., Lehder, D., Marmolin, H., Potts, C., Skousen, G. & Thomas, J. Putting It All Together: Towards a Pattern Language for Interaction Design. Summary Report of the CHI '97 Workshop. SIGCHI Bulletin. New York: ACM, 1997.
Bohm, D. On Dialogue. London: Rutledge, 1996.
Coplien, Schmidt, eds. Pattern Languages of Program Design, Addison-Wesley, Reading, MA, 1995.
Danis, C., Lee, A., Karadkar, U., Zhang, J, and Girgensohn. Supporting Cooperation and Social Browsing Among Strangers. Manuscript under review.
DIAC '02, "SHAPING THE NETWORK SOCIETY: Patterns for Participation, Action, and Change." See http://www.cpsr.org/conferences/diac02/
Erickson, T. "Lingua Francas for Design: Sacred Places and Pattern Languages." In the Proceedings of DIS 2000 (Brooklyn, NY, August 17-19, 2000). New York: ACM Press, pp. 357-368, 2000.
Gamma, E., et al. Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, Reading, MA, 1995.
Landauer, T. The Trouble with Computers. Cambridge: MIT Press, 1995.
Lawrence, D. and Thomas, J. Social Dynamics of Storytelling: Implications for Story-base Design. Presented at AAAI Workshop on Narrative Intelligence, Nov. 1999, N. Falmouth, MA. Lee, A., Danis, C., Miller, T. and Jung, Y. Fostering Social Interaction in Online Spaces. In Proceedings of INTERACT, '01 (Tokyo, Japan, July 2001), IOS Press, 59-66.
Lee, A. and Girgensohn. Design, Experiences and User preferences for a Web-based Awareness Tool. International Journal of Human Computer Studies, v. 56, #1, January 2002, pp. 75-107.
Thomas, J. and Carroll, J. The Psychological Study of Design. Design Studies, 1(1), 5-11, 1978.
Thomas, J. and Carroll, J. Human Factors in Communication. IBM Systems Journal, 20(2), 237-263, 1981.
Thomas, J. Studies in Office Systems I: The Effect of Communication Medium on Person Perception. Office Systems Journal, 1(2), 75-88, 1983.
Thomas, J. and Kellogg, W. Minimizing Ecological Gaps in Interface Design. IEEE Software. January, 78-86, 1989.
Thomas, J. The Long-Term Social Implications of New Information Technology. In R. Dholakia, N. Mundorf, and N. Dholakia (Eds.), New Infotainment Technologies in the Home: demand side perspectives. Hillsdale, NJ: Erlbaum, 1996.
Thomas, J. An HCI Agenda for the Next Millennium: Emergent Global Intelligence. In R. Earnshaw, R. Guedj, A. Van Dam and J. Vince (Eds.), Frontiers of Human-Centered Computing, Online Communities, and Virtual Environments. London: Springer, 2001.
Thomas, J., Kellogg, W.A. and Erickson, T. The Knowledge Management Puzzle: Human and Social Factors in Knowledge Management. The IBM Systems Journal, Vol. 40, No. 4, 2001. Vlissides, Coplien, Kerth, eds. Pattern Languages of Program Design 2, Addison-Wesley, Reading, MA, 1996.