Automation is the traditional industrial means for improving productivity and product quality. We explore both the theoretical and pragmatic issues involved in automating the development of complex embedded software. In particular, we focus on techniques for fully automatic, complete, generation of high-performance code directly from high-level design models. “Full” code generation extends beyond mere code skeleton. In effect, it means directly programming, testing, and debugging of complex applications using higher-level modeling constructs, such as those provided in UML.