With the current application development techniques used in building large systems, the major obstacles are the high costs and delays in modifying any standard solution to the needs of a specific customer and in porting changes made in one such system across a variety of other systems, each of which has been modified from the initial standard. Indeed, when looking at two systems modified from an initial standard built using traditional techniques, it is even difficult to fully understand how each differs from the initial system, and even more difficult to understand how they differ from each other.
Thus, any solution to the reusability problem has to include solutions to the modifiability and portability issues. However, it is the contention of this presentation that the problems with modifiability and portability are largely the result of the current practices used in transforming design level structures into programming structures for the implementation of a solution. As long as this transformation has to take place manually, there will be a chasm separating the high-level design thinking necessary to address the logical characteristics of an application system (i.e., the business problem) and the implementation work necessary to turn that thinking into an executing system (i.e., the programming solution).
Thus, it is the contention of this presentation that the key to reusability is an encompassing high-level architecture that captures the full logical content of a complex application and the automatic transformation of that architecture into the programs and execution-time components that deliver the system into a particular implementation environment. Not surprisingly, that same high-level architecture is the key to the delivery of application development productivity, as well.