The most obvious savings from reusable software are seen when a component is created once and reused in other related software products. The more the component is used in subsequent software projects, the greater the economic advantage. The economic advantage is imporved as the ratio of existing components to new components is increased in each new product.
Further, the same forces that result in reusable software, typically result in software that is more readily enhanced. The discipline of dependency managment and the decoupling aspects inherent in the production of reusable software lead to the discovery of techniques that improve the flexibility of software written.This enables products to be introduced in stages beginning with basic functionality that satisfies first-to-market needs, and evolving rapidly towards a more full functioning product that adapts as user feedback introduces refined requirements.
More subtly, but perhaps more economically pronounced, is the potential impact of software reuse on the cost of maintenance. The primary force that reduces mainenance costs is the elimination of copies. Once a component has been fully verified, it is fully verified for all uses/instances. During verification, any fixes made to the reused component are propagated to all projects that use the component.
Finally, as software interfaces become standardized and reuse becomes more pervasive, the effects of competition in the component market-place can have additional economic advantages. For example, consider the effects of this type of competition in the realm of electronic components.
In the current state-of-the-art time savings are generally long term in nature. However, when the practices become common, even near term savings will be realized. The economic advantages will be realized only through the study and application of practices that promote the development of software reuse. It is important to maintain focus on the reuse objective so as not to wander without purpose among the surrounding distractions.
Dependency management encompasses techniques that ensure that software components are as independent of one another as possible. A component can only be reused in another environment if the target environment provides all of the facilities required by the component. When components are unnecessarily dependent upon a particular environment, then they become unusable in another environment.
Object oriented languages provide constructs that allow software designers to de-couple modules from one another at the language level. However, there are other organizational aspects of the software development environment that must be considered to ensure that a module is truly reusable.
Among these aspects are: