Most systems are built to be in service over a long period of time. However, planning for productive use over a long period of time is difficult, since the future is fraught with uncertainty due to market, social, economic, political, and technological forces. These forces combine to determine the utility of a system.
Systems may react to these forces by undergoing a stream of changes. Individually, such changes are seemingly innocuous and are made to maintain or increase utility of the system. However, as the changes increase in number, they can become problematic over time. The system may eventually become hard to transform in reaction to forces of change. When changes are too costly or time consuming to make, the system ceases to evolve, does not fulfill its business or mission goals, and falls into obsolescence.
The central question for this work has been: How can organizations manage an uncertain future by planning for system evolution in a way that optimizes the likelihood ongoing system usefulness? There are (at least) two fundamental and interrelated aspects to this problem:
The design aspect: how to measure and analyze the difficulty of reaching a desirable future state given today's state and how to design the system so that desirable states are easier to reach.
Of course these two questions are intertwined. Engineering decisions are always subject to economic considerations, and a system's portfolio of features is always constrained by what is feasible from an engineering perspective.
Refining the problem, we wished to answer the following questions:
In order to attack the problem, we investigated techniques for exploring the architecture design space along with release planning, continued to investigate the applicability of economic theories, such as real options, portfolio theory, and utility theory, and leveraged the generality and composability of SEI architecture-centric practices. We have applied these techniques to create need-specific methods for customer problems.