Books Software Reuse: Architecture, Process and Organization for Business Success, Ivar Jacobson, Martin Griss, and Patrik Jonsson, Addison-Wesley Publishing Co., Reading, MA, 1997. 497 pp. (ISBN 0-201-92476-5). Software reuse is an approach to development that we all cite as a best practice but don't really understand how to do. We know its potential for improving quality and productivity, but there are few large-scale examples to show us how good reuse should work as a long-term strategy. Often, we institute a trial reuse program and hold our collective breath, hoping that we will see some benefit and wishing that reuse becomes common, well-accepted practice. Well, now we can breathe more easily. In their book, Software Reuse: Architecture, Process and Organization for Business Success, Jacobson, Griss, and Jonsson take a broad, business view, showing us what is necessary to make reuse successful. They have analyzed reuse programs good and bad, short- and long-term, large and small. By combining good business sense with an understanding of architecture and technology, they make a series of large- and fine-grained recommendations that can help each of us to understand not only what makes reuse work but why. The authors begin by explaining that reuse is not just a technology; it is a business practice, and it must be embedded in the larger business processes that your company or organization enacts. They debunk some of the more grandiose claims found in the literature, and propose instead that reuse be adopted in small steps, each of which builds on the previous ones: o Informal code reuse to reduce development time o Black-box code reuse to reduce maintenance costs o Managed work product reuse to broaden coverage o Architected reuse to achieve interoperability and high reuse levels o Domain-specific reuse to achieve rapid custom product development Each step requires additional investment, experience, and time, but yields larger benefits in terms of time-to-market, cost, and quality. The authors distill a great deal of experience into several rules of thumb. For example, they list several guidelines about reuse economics (p. 23): o A component has to be used three to five times in application projects to recover the initial cost of creating it and the ongoing cost of supporting it. o It costs 1.5 to 3 times as much to create and support a reusable component as it does to implement a similar component for a single application. o It costs only one-quarter as much to use a reusable component as to develop a new one from scratch. o It takes two or three product cycles--usually about three years--before the benefits of reuse become significant. Similarly, they give us guidance on organizational principles, such as (p. 27): o Maintain top-management leadership and financial backing over the long term. o Plan and adapt the system architecture, the development processes, and the organization to the necessities of reuse in a systematic but incremental fashion. Start with small pilot projects and then scale up. o Move to an explicitly managed reuse organization that separates the creation of reusable components from their reuse in application systems and provides an explicit support function. Unlike other reuse books and papers whose guidelines focus on similarity, the ones in this book target understanding the variance among components. "If we made no provision for variance, we would have to resign ourselves to the burden of a very large number of 'concrete' component systems" (p. 39). Consequently, Jacobson, Griss, and Jonsson describe a reuse business composed of application family engineering, application system engineering, component system engineering, and managing the reuse business. Each of these major activities is discussed in great detail, acknowledging that each is done by different participants with very different audiences and goals. For example, architectural issues are discussed in terms of variability mechanisms that allow common functionality and structure to be expanded in a carefully controlled way. Chapter 5 tells us about variation points and "extends" constructs that allow us to design families of similar components. Object-orientation, while not a necessary condition for reuse, is used to provide a vocabulary for discussing notions of reusable architectures. The chapters on business process are particularly useful. Jacobson, Griss, and Jonsson explain how to do business process engineering and how to organize for reuse. They emphasize that you must understand your company's business and its needs, purpose, players, structures, and problems before you can begin to think about software-based solutions. The authors also discuss the important role of software measurement in understanding reusability and in tracking the effects of reuse in the software and in your business. They suggest that software reuse measurement is useful only when you first take the time to understand the underlying processes and business climate. And they emphasize that a great deal of up-front investment is necessary for reaping long-term benefits. Throughout the book, the authors use a common banking example to illustrate their concepts. Using this example, they show how a family of similar applications can be designed for reuse, and how a risk analysis is necessary for deciding among several technology options. In addition, Jacobson, Griss, and Jonsson cite examples from their own experiences at Ericsson, Hewlett-Packard, and Rational Software, as well as from mainstream developers such as Microsoft and ParcPlace to make their points. Each chapter ends with suggestions for additional reading; these references point not only to the software literature but also to the business literature that deals with successful technology transfer. There is a wealth of information in the book for all of the players involved in reuse: requirements analysts, designers, programmers, testers, managers, and business strategists. Each chapter tackles a different aspect of reuse, and all blend together to provide the most comprehensive and useful picture of reuse that I have found. If you are thinking about starting a reuse program, this book is essential reading for helping you to understand the important variables in your decision-making process. If you are working to understand or improve your existing reuse efforts, this book helps to make more visible the key elements that lead to reuse success. And if you are recovering from a failed reuse effort, this book is useful for analyzing what went wrong and why you should try again. Shari Lawrence Pfleeger Systems/Software, Inc. Washington, D.C. Note--The books reviewed are those the Editor thinks might be of interest to our readers. The reviews express the opinions of the reviewers.