This book is a constructive contribution to the growth of software engineering as an engineering discipline. It presents knowledge gained over many years, in an attractive and appropriate manner. Most of the book is divided into four parts: "Envisioning an architecture," "Creating an architecture," "Analyzing an architecture," and "Moving from one system to many." The structure of the book belies systematic engineering thinking and action, while the text covers important issues, like the building of quality into software products. The book provides guidance for decision-making, and integrates its interpretation of the architecture-based approach with current technology, such as the Java 2 Enterprise Edition (J2EE), and Enterprise Java Beans (EJB). The book will be especially valuable for its coverage of issues in the construction of new software products from prefabricated software components, and for its discussion of software product lines. The book includes illustrated examples and case studies throughout the text, which help the reader to follow the content and intent of the book; this practice of abstracting common experience and knowledge, by ordering and generalizing collections of technical artifacts, is common to all technical disciplines, and an engineering habit. The text introduces new concepts and methods, as well as applications of the technology. The included graphics and code are readable, and will assist the reader in following the text while applying architectural frameworks, building block technologies, meta data specifications, and so on. Overall, the book will help readers to understand and apply what the architecture-based approach stands for: gaining and keeping a bird's eye view over very complex, virtual structures, and empowering the overall decision maker with both the means and the skills of abstraction and communication. There is, of course, a dispute about the term "architecture." The term "architecture" (from the Latin, "architectura") was created to be a catch-all term for "construction style" and "construction art." Thus, the term denotes the order and the generalization of structural relationships in products (construction style), as well as the tools, techniques, and technologies for the building of the products (construction art). Construction style refers to the structural knowledge, construction art to the operational knowledge. An interpretation of the inherited term "architecture," for software products, would have brought this book one step closer to covering an engineering discipline.