Software architecture is becoming one of the central topics in software engineering. In early publications, such as [Sha88], software architecture was by and large synonymous with global design. In [SG96] we read "the architecture of a software system defines that system in terms of computational components and interactions among those components". In a traditional software engineering process, during the software design phase the system is decomposed into a number of interacting components (or modules). The top-level decomposition of a system into major components together with a characterization of how these components interact, was considered as the software architecture of the system under development. In this respect requirements engineering is an activity focussing very much on the problem space, while the subsequent design phase focuses on the solution space. We call this a pre-architecture development approach. Here, few persons (also called stakeholders) are typically involved (like for example the project manager, robotic expert, the software analyst, few developers). Iteration involves functional requirements only: once agreed upon, these are supplemented with non-functional requirements to form the requirements specification used as input for design. In particular, there is no balancing between functional and non-functional requirements. © 2007 Springer-Verlag Berlin Heidelberg.