  We propose a Capabilities-based approach for building long-lived, complex
systems that have lengthy development cycles. User needs and technology evolve
during these extended development periods, and thereby, inhibit a fixed
requirements-oriented solution specification. In effect, for complex emergent
systems, the traditional approach of baselining requirements results in an
unsatisfactory system. Therefore, we present an alternative approach,
Capabilities Engineering, which mathematically exploits the structural
semantics of the Function Decomposition graph - a representation of user needs
- to formulate Capabilities. For any given software system, the set of derived
Capabilities embodies change-tolerant characteristics. More specifically, each
individual Capability is a functional abstraction constructed to be highly
cohesive and to be minimally coupled with its neighbors. Moreover, the
Capability set is chosen to accommodate an incremental development approach,
and to reflect the constraints of technology feasibility and implementation
schedules. We discuss our validation activities to empirically prove that the
Capabilities-based approach results in change-tolerant systems.
