It is often forgotten that common sense is the least common of the senses. Sensible design advice, guidelines, and heuristics are often no more than just that: plain old common sense. However, rational reminders of our own fallibility and cognitive biases in the form of design methods and methodologies help us improve our chances of designing software architectures “in a systematic, predictable, repeatable, and cost-effective way.”
Humberto Cervantes and Rick Kazman have written a readable description of the latest incarnation of the attribute-driven design (ADD) method. Now 15 years old and in its third version, the ADD method provides detailed step-by-step guidance on the tasks that should be performed within the design process. Rather than focusing on the results of the design process, as too many other methodologies do, ADD tries to streamline the open-ended design process by establishing the tasks that every design iteration should include. The method starts from the identification of architectural design drivers, which include the design purpose, its quality attributes, its primary functionality, architectural concerns, and external constraints. These drivers are the input to the design process. Once these drivers are reviewed, the iteration goal is established by selecting key drivers. One or more elements of the system are chosen to be refined with the help of design concepts that help satisfy the selected drivers. Architectural elements are then instantiated, responsibilities allocated, and interfaces defined. Architectural views are sketched and design decisions recorded before a final review is made to analyze the current design and check the achievement of the design goals.
The authors advocate for learning by example. Hence, they illustrate how the ADD method can be used for the design of greenfield systems in mature domains, greenfield systems in novel domains, and brownfield systems. A VoIP management system, a big data system based on the lambda architecture, and the addition of a digital signature module to an existing banking system are used as detailed case studies for the three aforementioned situations.
The ADD design method itself is reasonable and can be incorporated into any software development methodology. In fact, apart from comparing ADD against half a dozen architectural design methods described elsewhere, the authors describe how ADD can be performed to complement agile methodologies, used within the rational unified process, incorporated into the high-level design phase of the team software process, and adopted by DevOps.
The ADD method emphasizes the use of design concepts, that is, the building blocks used to create the structures that are designed. Design concepts include reference architectures, architectural design patterns, deployment patterns, tactics, and externally developed components such as technology families and application frameworks. The authors also recommend the use of design concepts catalogs in your organization, a sensible way to make explicit some of the tacit design knowledge that is collected through experience. Somewhat broader in scope than the design pattern collections and languages that are available for specific application domains, a sample design concept catalog is provided as one of the book’s appendices.
The book, in general, is quite down-to-earth. Easily read and understood, it includes plenty of examples that illustrate the authors’ approach to design, without too many abstract digressions. Some valuable complementary information is often provided in the form of sidebars, covering topics such as quality attribute workshops, utility trees, the cost benefit analysis method (CBAM), or the architecture tradeoff analysis method (ATAM). The use of architectural backlogs, design Kanban boards, and tactics-based questionnaires is also covered. As a matter of fact, the second appendix to the book includes tactics-based questionnaires for the seven most important quality attributes, at least according to 15 years of Software Engineering Institute (SEI) ATAM data (availability, interoperability, modifiability, performance, security, testability, and usability), as well as a tactics-based questionnaire for DevOps that shows how such questionnaires can be tailored to your specific needs.
In case you are considering the adoption of the ADD method, the authors have even developed a board game, called “Smart Decisions” , which simulates the design process and promotes ADD learning. This is certainly less dull than most seminars and courses on design methodologies.
More reviews about this item: Amazon