Technologies that facilitate the design and control of complex, hybrid, and resource-constrained systems are examined. This paper focuses on design methodologies, and system architectures, not on specific control methods that may be applied to life support subsystems. It has been estimated that 60–80% of the effort in developing complex control systems is software development, and only 20–40% is control system development . It has also been shown that large software projects have failure rates of as high as 50–65% [2,3]. Concepts discussed include the Unified Modeling Language (UML) and design patterns with the goal of creating a self-improving, self-documenting system design process.Successful architectures for control must not only facilitate hardware to software integration, but must also reconcile continuously changing software with much less frequently changing hardware . These architectures rely on software modules or components to facilitate change. Architecting such systems for change leverages the interfaces between these modules or components.