Chapter 1. Centralized Architecture Practices in a Decentralized World
“Traditional” approaches to software architecture have become increasingly ineffective in the face of our rapidly evolving software systems. In this opening chapter, I’ll describe how these problems originated with a series of fundamental changes—or revolutions—demanding further decentralization and increasing sensitivity to feedback. With these revolutions in mind, I’ll then take you through the problems caused by the reliance of traditional architectural approaches on predictability and control. I’ll conclude by setting out what an approach to architecture needs to incorporate, focusing on what is within our power to plan for, protect against, and respond to.
Let’s begin by considering the value of software architecture, both as a practice and as an end result.
Both the Practice and the End Result of Software Architecture Are Essential for Success
What is software architecture? For Grady Booch, “[Software] architecture represents the set of significant design decisions that shape the form and the function of a system, where significant is measured by cost of change.”1 Martin Fowler has a similar take that can be paraphrased as software architecture being those decisions that are both important and hard to change.2
I like these two definitions because not only do they encompass what software architecture is, they also highlight the greatest difficulty with the concept of “software architecture.” Booch’s ...