On “Fundamentals of Software Architecture”

In all honesty, I am somewhere near my 30s now and besides knowing to program in pretty much any language (or to that end, able to learn one in a few hours) I have to admit I have lost the passion towards high-frequency coding, in the sense of LOCs (lines of code) per hour, but I’m more and more attracted to the art of building software and systems architectures, with the least amount of glue code possible.

I believe that for the past years I’ve used and abused former Safari Books Online (now O’Reilly learning) plowing through every imaginable book on architecture, starting with the great reference book “Software Architecture In Practice, 3rd edition” by Len Bass, Paul Clements and Rick Kazman. Most of these authors and the authors that have dedicated a part of their time to book-writing have been members of the SEI (Software Engineering Institute).

In the same school of thought you’ll find Martin Fowler and guys from ThoughtWorks, one author of which I follow closely, namely Neal Ford, the author of Building Evolutionary Architectures, an eye-opening read which I’ll talk about in some other post.

In regards to books centered around 21st century architectures, Neal Ford and Mark Richards in “Fundamentals of Software Architecture“, published Feb. 11, 2020 set about to provide a small inventory of styles and their grading in terms of costs, scalability, testability, maintenance, etc.

The books organized in 3 main parts, foundations, styles and techniques (soft skills) that give it a nice feeling of completeness of presentation. The beef of the book can be found in foundations and styles, with techniques and soft skills, from my POV not applying necessarily to all business cases (as business tends to be highly contextual on your peers).

It does however do a good job of exposing the styles, keeping it concrete, giving sufficient applied resources and tooling or references. It may lack on the “alternatives” and it’s not a book comparable to let’s say “Distributed Systems” (by Tanenbaum and Marteen van Steen) in its treatment of the details of large systems, approaches and styles.

But it doesn’t even intend to be “a bible and history” or anything similar but rather a “20 minute” refreshing read of the styles for anyone interested. In fact, most of the chapters are under the 20m mark in terms of reading, easily to read over a couple of weeks while sipping a morning tea or coffee “just before email” to quote the authors themselves 🙂

Going back to the foundations, the discussion on modularity, the coupling and cohesion aspects, abstractness and instability are all concepts worth reading and understanding and maybe even noting down and referencing later on. You don’t have to remember exactly the static and dynamic con-nascence (a.k.a. coupling) and what’s best to use (eg. “name/type”) but at least the book makes you aware of this classification.

In any case, it’s a light read and if you’re into a few books on the subject now, some of the paragraphs can be skipped. For some architectural styles (eg. EDA) I skimmed rather than read as many of the concepts were known. For others (eg. foundations) I kept a tight focus as it was interesting to understand cohesion, coupling and con-nascence in terms of impact to development workflow.

On a scale of 1 to 10 it’s an 7/10, in my humble opinion.