๐’๐บ ๐๐ฟ๐๐ถ๐ป๐ด ๐๐ผ ๐ด๐ฒ๐ ๐ฎ ๐๐ผ๐ป๐ด ๐๐๐๐ฐ๐ธ ๐ถ๐ป ๐๐ผ๐๐ฟ ๐ต๐ฒ๐ฎ๐ฑ! Ok, maybe not a song… actually a set of software architecture concepts and principles that drive architectural design decisions. The process and decisions are almost ๐ป๐ฒ๐๐ฒ๐ฟ binary. There is a logical an repeatable way to rationalize decisions: ๐๐ฟ๐ฎ๐ฑ๐ฒ๐ผ๐ณ๐ณ ๐ฎ๐ป๐ฎ๐น๐๐๐ถ๐. Here is condensed version (I lean heavily on my SEI training and experience.)
Here is condensed version. I lean heavily on my SEI training and experience.
๐ฆ๐๐ฒ๐ฝ ๐ญ - Know the mission and business drivers and goals. Tech fails when it’s not directly grounded on delivering mission VALUE.
๐ฆ๐๐ฒ๐ฝ ๐ฎ - Identify the important software quality attributes (SQAs) and remember there can be many including performance, security, maintainability, scalability, reliability, etc. Understand them in the context of your domain and stakeholder needs. Translation: Know the mission drivers and goals. (Did I say that before?)
๐ฆ๐๐ฒ๐ฝ ๐ฏ - Identify tactics (aka techniques) that impact and/or achieve the SQAs They might include using specific algorithms, applying design patterns, or following certain architectural styles. Tactics are the tools in an architect’s toolbox
๐ฆ๐๐ฒ๐ฝ ๐ฐ - Evaluate trade-offs between different SQAs and tactics. This is the heart of architectural decision making. Improving one SQA may detriment another. For instance, you may need to balance implementing an advanced encryption algorithm to boost security (security attribute) that may slow down system performance (performance attribute).
As a guiding principle: remember that SQAs are not standalone entitiesโthey interact, overlap, and sometimes conflict.
๐ฝ๐๐ ๐๐๐ผ๐ ๐ผ๐ฝ๐๐๐ ๐๐๐ฟ๐๐๐? Architectures need to be living documents and I prefer models. Models help you to simulate and understand the impact of tradeoff decisions. All too often, I get pushback that (1) It’s too hard (2) That’s only for systems engineering (3) It will slow us down.
Remember my mantra: be practical and pragmatic… know your context and mission… your domain will likely determine your model usage.
๐ฆ๐๐ฒ๐ฝ ๐ฑ -Prioritize, Make Decisions, and Document them! Often, it can be nearly impossible to maximize all quality attributes simultaneously. When you make a tradeoff decision, annotate it! (Simply use architectural decision records– ADRs.)
It’s actually really challenging and fun not to mention being an integral part of delivering value with software. Also remember that software is never done ๐๐ผ๐ผ๐ผ๐ผ๐ผ architecture is never done either…
New needs, threats, and tech mean continuous architecture.
#SomethingToNoodleOn #ContinuousArchitecture #SoftwareArchitecture #TradeoffAnalysis #QualityAttributes
Photo by Felix Koutchinski on Unsplash