Architecture Done Right
My framework for how to approach all system architecture activities from the beginning to an end.
How to select an Architecture for a specific software system
How to go through a known toolset for specifying correct architecture for the computer system. Following steps and their output in form of code or documentation will aid this process:
Describe Architecture Drivers
Describe all Architecture Drivers that would be steering towards particular System Architecture. Later on those drivers should also be used to create metrics in order to become measurable.
Architecture Metrics
Add metrics to previously discovered Architecture Drivers. Metric is quantification of specific driver. Metric should provide clear understanding of particular driver meaning.
Select Architecture Style for System
Based od the drivers described in previous section select specific Architecture Style for system that will be build. Those could be:
Document advantages and disadvantages of selected Architecture style so everyone in the team and later on people joining the team have no doubts that the style is correctly selected and all pros and cons of the selection were evaluated.
Document and visualize selected Architecture
C4 and ADL & ADR.
Select Application Architecture per specific module
Architecture general references
Autonomy
Types of Autonomy in Software developent:
Business
Technical
Technological
Business Autonomy
Allows to develop software products independently of each other
Different products have different SDLC and calendar of events (releases, planning etc.)
Higher product specialization directly influences code complexity or rather less of code complexity and more readable code
Technical Autonomy
Technical Autonomy enables product teams to separate components depending on:
the need to scale
specific security requirements
Technological Autonomy
Enables teams to select the best tools for a given problem
Enables teams to select different programming languages
Enables to select different Operating systems
Distributed Tracing
B3 Propagation (Zipkin) introduces certain identifiers and headers to make tracing bit more precise and accurate:
TraceID --> ID of the whole system workflow (does not change for the whole workflow)
SpanID --> identifier of the specific request (for the first request SpanID == TraceID)
ParentSpanID --> identifier of the previous request in the requests chain (SpanID of the system that made a call to our system)
Sampled --> a 0/1 information if particular trace is being sampled (if the log data should go to the system responsible for gluing all the traces together)
Headers X-B3-{element}
Blogs / Online Articles
Event Driven Systems
Examples
Books
Conway Law
Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations - M. Conway
Make sure that we preserve Bounded Contexts created via specific team setup (one team per BC) or by preserving the boundaries of BC in case different teams are required to work on different BCs (this can be achieved by automatic, programmatic use of software tools e.g. Maven modules).
Blogs / Online Articles
Books
Blogs / Online Articles
Videos
APIs best practices
Blogs / Online Articles
APIs as infrastructure: future-proofing Stripe with versioning
Last updated
Was this helpful?