- strong software architecture that provides framework for reuse activities
- software development process that promotes and controls reuse
- reuse more than just code; reuse at the architectural level
- practice domain engineering; develop reusable components at the domain level
- integrate reuse through all of the life cycle activities and the management of those activities
- use software tools that support reuse; modern IDEs along with supporting knowledge bases are very useful.
- organizational structure that facilitates partnering across project boundaries
- code fragment (cut and past reusability)
- subroutine or function
- object (data and methods)
- business patterns
- packaged application frameworks
Effectively reusability doesn't just happen. It is a planned event that takes time and resources. A separate domain engineering and knowledge base is required to promote and push its use throughout the organization.
The problem with reusability is that it usually isn't cost effective until a component has been reused (with very little analysis or modification) 5 or 6 times. Designing components for reusability slows down the current design and implementation process and requires a domain engineering/knowledge sharing organization to support and carry-on the reuse efforts.
Reuse is most effective when it is tied to business or technical patterns. The lower the level that reuse occurs the smaller its payback. This is because the first four (4) levels that I listed above only affect the implementation or coding cycle. Architectural and business patterns and customized packaged applications cut across many more of the software development lifecycle (SDLC) cycles and therefore have a larger impact.