- 3.1 Making Design Decisions
- 3.2 Design Concepts: The Building Blocks for Creating Structures
- 3.3 Design Concepts to Support Performance
- 3.4 Design Concepts to Support Availability
- 3.5 Design Concepts to Support Modifiability
- 3.6 Design Concepts to Support Security
- 3.7 Design Concepts to Support Integrability
- 3.8 Summary
- 3.9 Further Reading
- 3.10 Discussion Questions
3.9 Further Reading
The nine decision-making principles presented here were first described in A. Tang and R. Kazman, “Decision-Making Principles for Better Software Design Decisions”, IEEE Software, 38, November–December 2021.
There are many references for design and architecture patterns; we identified a few of these in Chapter 2. Among the best known are the “original” design patterns book: E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software by Addison-Wesley, 1994; and the book by F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, and M. Stal, Pattern-Oriented Software Architecture Volume 1: A System of Patterns, Wiley, 1996. The latter book was the beginning of a series that eventually totaled five volumes. But the set of patterns is never complete; new patterns continue to be created all the time. For example, you can find a catalog of microservice patterns here: https://microservices.io/patterns/.
You can read about the tactics presented here, and other tactics, in greater detail, by L. Bass, P. Clements, and R. Kazman, Software Architecture in Practice, 4th edition, Addison-Wesley, 2021.
The SWEBOK summarizes a set of nine software design principles: Hironori Washizaki, ed., Guide to the Software Engineering Body of Knowledge (SWEBOK), Version 4.0, IEEE Computer Society, 2024; www.swebok.org.
Several online catalogs of reference architectures have been developed by different cloud providers. They can be found at the following links: