2025-10-14
Here is the definition we will use. It is designed to orient us to the notion that there is not just one thing to call the architecture, but rather a set of structures that help us reason about what the system is doing.
The software architecture of a system is the set of structures needed to reason about the system, which comprise the software elements, relations among them, and properties of both. (text p.4)
Another perspective on the Architect and their role is from Eltjo Poort at CGI:
I’m not exactly sure when I became a software architect. I do remember the first time someone else called me one. We were at an important client meeting. The client asked a really tough technical question. No one had a good answer at that moment so the project manager chimed in, Michael is the architect on this project. He’ll dig in and send you an update by the end of the week. Just like that I was a software architect.
The rush of power. The anticipation of career advancement. I am an architect! Soon a slight feeling of dread set in. I am an architect. Now what do I do? How is being a software architect different from being a software engineer? In the years since that day I’ve come to realize that being a software architect is more than just a role on a team. Architects are leaders, but being a software architect also implies a person who thinks about software design in a certain way. No matter what the title on your business card reads (mine still reads software engineer, my choice), you can be a software architect. The best development teams are filled with architects.
(Michael Keeling, “Design It!” p. 3)
blackboard notes, line indicates bad qualities
Every software system has an architecture
Gregor Hohpe refers to this concept when architects work on less abstract implementation challenges like writing code, then taking the elevator up the abstraction hierarchy to focus on communicating the decisions, understanding the bigger context, talking to management, etc.
For example, architects might work on a team’s design problem on a detailed level, then present that final approach to an Architecture Review Board for final approval.
Michael Keeling is a team lead/architect/developer at IBM Kiavi. His book “Design It” is one of several books that is moving the flawed concept of an architect from “architecture astronauts” (think The Architect in the Matrix movies) to a more team-oriented, role-based definition.
A role based definition means there isn’t necessarily a single person who is “architect”, but rather a shifting set of people play that role, depending on what expertise and leadership is necessary.
Keeling gives 7 reasons why we care about architecture.
Feedback in SE: when a user touches your code, typically in production (maybe as an A/B test).
If we shorten feedback cycles: * we get quicker information to make changes, and * the change is cheaper.
Similarly, if we can do some upfront planning, then maybe: * we can find errors earlier, and * fix them quicker and cheaper than if the error leaks into production or testing.
In an ideal world, we make decisions at the Most Responsible Moment.
via Scott Ambler
TPS: What structures do we care about (read: want to be able to reason and ask questions about) when we want to replace a Bridge?
What types of structures do we care about in building a reasonable large piece of software?
In the SAIP approach, the main categories of software structures are:
We will spend more time on these in a few weeks.
There are three major modes for creating a software model.
Models - blueprints, computer code, boxes and lines, tables of contents - are supposed to be useful abstractions when the real world is too complex to reason with.
Per Martin Fowler, we have three main modes for diagrams:
What is good or bad about this diagram?
The other modes, blueprint and executable, are really about making models do more than communicate in the short term.
In the Blueprint approach, we want to hand off our models to downstream users, like architects do in the real world for buildings.
In the Model as Executable, we are actually writing the program by building the model.
This is most common where there are tight constraints on safety or security, such as in automotive.
In this mode, we use a tool like Simulink to draw block diagrams that a verified compiler can translate into safe (ish) C code.
Every system has an architecture.
We need to communicate this (if it is important) to stakeholders.
Three structures seem most crucial: modules, components and connectors, and allocations.

Neil Ernst ©️ 2024-5