“…As Barnes and Bollinger (1991, p.14) suggest: "The defining characteristic of good reuse is not the reuse of software per se, but the reuse of human problem-solving." Several types of knowledge can be reused across the different stages of software development (Frakes and Isoda, 1994): problem description, artifacts, project proposals, feasibility reports, enterprise models, data dictionaries, prototypes, decision tables, pseudo-code, source code, databases, the tacit knowledge of developers, networks of developers, and so on (for an overview, see Cybulski et al, 1998;Prieto-Diaz, 1993;Ravichandran, 1999). The documentation of software design patterns facilitates the reuse of problem solving in software engineering, particularly when using object-oriented languages (Gamma et al, 1995;Schmidt, et al 1996).…”