Building Evolutionary Architectures: Automated Software Governance, 2nd Ed.

Neal Ford, Rebecca Parsons, Patrick Kua, and Pramod Sadalage
O’Reilly, 2022

Contrary to the assertion found in the preface of this book, I am not so convinced that software architectures have always been perceived as immutable. It is a common trope to contrast the "bad old days" of waterfall development with the "modern" practices of agile development. The problem is, there’s little evidence that anyone ever practiced truly sequential "waterfall" style development. Systems evolve, and they always have.

All the same, there has been far too little written (and taught) about how to manage that evolution. This book helps fill that gap.

More specifically, it describes how the automation intrinsic to agile development practices, in combination with architectural fitness functions, can be used to measure the degree to which a system adheres to its intended architecture. These measurements replace what would have been either a slower, manual review or no review at all. In that way, the setup frees a system to evolve more quickly (automated vs. manual review) yet while preserving is structure (fitness functions vs. no review)

What I don’t know is whether fitness functions work. The authors are transparent that they’re borrowing a new idea from another realm, which is a perfectly reasonable starting point. But as a new concept, without presenting any data on their efficacy, it simply isn’t clear if they work. It is all too easy to imagine the typical failures modes for metrics applying here: measuring only what’s easy to measure, or designing to the metric instead of what the metric intends to measure. More detailed anecdotes from the authors' experiences would have been appreciated.

My larger struggle with this book, however, is that it says too little about how evolution functions in architecture, automation and fitness functions aside. Governing the evolution of a system is intrinsic to architecture—​a point I feel the authors never fully acknowledge. And while they talk about some of the mechanics of that evolution, they never discuss how to direct or harness the evolution of a system towards its target state. True, these considerations probably lie outside "automated software governance." But automation without a clear goal will only help one go nowhere faster. I would have liked to see the authors frame their work within the larger context of software evolution.



© 2025 by Oliver Goldman