blog podcast

Architecture

I started reading this book on Software Architecture. I find that the book is well written and well structured, but at the same time I found it lacking with perhaps one of the most fundamental questions. What is Software Architecture?

It is not for lack of trying. The book does give a go at defining Software Architecture, and lands with it being some kind of intersection between the structure of components, system characteristics, deviating decisions and hard rules on how things should be written.

In the end I find myself holding just air when I try to get a firmer grasp. So I sat down and try to think about it myself.

The intuitive answer to question would be that the Software Architecture is the diagrams that describe how components relate to each other in a system. This feels analogue to what we understand with traditional architecture. I don’t think this is true though. I think this used to be the architecture back in the days when products were developed using the waterfall principle and everything was planned up front.

Today we’ve instead gotten used to evolving systems. The requirements grow organically and the code along with them.

So if architecture would be the blueprint defining how these systems shape themselves, what is then this blueprint?

In my experience the blueprint is the implicit rules that evolve from different developers coming together and working together to create something. More often than not I believe that architecture is happening in retrospectives or dev huddles where developers come together to discuss what they’d like to change things with how they currently work.

Following Conway’s law stating that systems evolve to reflect the organization that create them, so too I believe Software Architecture evolve reflecting the individuals that work together to create the software.

How is then the Software Architect? That would be every person that decides to participate in the processes. Every person that is trying to shape the chaos that give birth to the software system.