Introduction

For many years now, a popular approach for starting a reuse program at an organization has been to set up a reuse library mechanism and encourage developers to contribute components to the library and search the library for components that they need in new situations. In some cases, organizations have set up elaborate incentive programs to encourage people to contribute components (usually functions or classes) to and to look for components in those libraries. Anecdotal evidence suggests that where these efforts have focused on random and spontaneous contributions of small components, the efforts have not generally been successful. The major reasons for this lack of success are two fold.

  1. A random collection of reusable components cannot be expected to seamlessly fit together with the other components that someone is developing.
  2. The effort to search a large collection of random components is frequently not worth the expected reward (partly because of the first point).

Where reuse programs have been most successful, the reusable components were generally constructed and organized according to a well-defined framework, either through a careful domain analysis of an application domain, or through evolution of a large base of experience over the years.

There is one intermediate reuse situation, however, where reuse libraries of randomly contributed components do seem to have high success rates. This is where the granularity of the reusable components is very large, such as in the size of a subsystem, supporting application domain, or a complete mini-framework. There is significant anecdotal evidence to support the importance of this kind of reuse. In particular, the browsing of FTP sites, distribution of shareware, and simple cataloging schemes like Archie show that this type of reuse occurs at significant levels.

This position paper discusses some of the properties and advantages of the reuse situations, and its ramifications for library approaches.