Object Oriented (OO) technology and software reuse are widely believed to be key ingredients to improving systems development productivity and quality (Meyer 1989; Cox 1990). Software reuse is broadly defined as the application of existing systems development artifacts to new development projects. OO technology supports reuse in a number of ways. For example, at the programming level, reuse is supported through built-in components (classes) and specialization of the class hierarchy. At the analysis and design levels, OO pattern handbooks provide reusable solution templates to known modeling and design problems (Gamma et al. 1995; Fowler 1996). The systematic use of these and other artifacts can, at least in theory, reduce the time taken to develop new systems by leveraging the knowledge gained from prior projects.