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:

1. Monolith
2. Modular Monolith
3. Microservices
etc.

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:

  1. Business

  2. Technical

  3. 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:

  1. the need to scale

  2. 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?