The ability to define and analyze system designs through architecture and to specify and analyze changes at the architecture level are important notions for evolution. In addition, the ability to evolve systems through generation and composition technologies based on architecture makes evolution more affordable and increases the confidence associated with system change. Former software paradigms have focused on programming as the prime activity, with progress measured in lines of code. Architecture-based development focuses on assembling components that are likely to have been developed separately, even independently, from each other. Integration becomes the critical activity.
Generation is a key technology for component creation and composition.
It is possible to predict certain qualities about a system by studying its architecture, even in the absence of detailed design and code. Performance is largely a function of the frequency and nature of inter- component communication, in addition to performance characteristics of the components themselves, and hence can be predicted by studying the architecture of a system. A non-runtime quality attribute such as maintainability is largely a function of the locality of anticipated changes, which can be catalogued in terms of which architectural components such changes would affect. Entire product lines can be developed by sharing a common architecture. Product lines are groups of related systems that, together, fill a market niche.