2025-09-04
Another perspective on Architect and their role is from Eltjo Poort at CGI:
Software design is about creating a context (the architecture) for developers to write code that satisfies our objectives for the system.
These objectives, in our framework, are the business goals we have for this system (generate revenue, increase users, support data analytics, save citizens time).
We realize these objectives by understanding our prioritized quality attribute scenarios and architecture drivers for the system (what does performance mean? do we have to support mobile? can we assume this will be in Java?).
Software analysis is about assessing our design (or other people’s) with respect to these goals. Did the design choices support the business goals? Given our experience and knowledge, can we have some certainty that this design will “work”?
An important note: we are not trying to get to 100% certainty. 1. it probably isn’t possible and 2. that would take more money than would make sense (most of the time). Consider the Boehm curve about up-front analysis vs rework.
There’s a good tweet series from Simon Brown about how much upfront analysis and thinking is needed. And the quote: > A week of programming can save an hour of thinking.
And keep in mind that optimizing for one goal often implies suboptimal solutions for the other goals. If you think a change is nothing but beneficial, you might be missing something.
Architecture analysis can be internal; you whiteboard a possible design with some knowledgeable team-mates and assess flaws. This assumes you are disciplined enough to be truly reflective, that people feel comfortable criticizing each other, and that you can see past your own biases.
It can also be external, either with architecture review boards, like I mentioned last class, or external analysis teams from consultants.
In nearly every case you will want to have a clear set of criteria by which the design can be said to help or hurt. In our framework these are the quality attribute scenarios which can act as “tests” for our rough analysis.
The end goal of an ATAM is a list of possible risks that the system design, as currently stated, is facing.
Once you have identified risks, your next task, obviously, is to prioritize the risks and fix the architecture with redesign/refactoring.

Neil Ernst ©️ 2024-5