📃
My Book of Spells
  • My Book of Spells
  • Software Architecture
    • Architecture Done Right
    • System Architecture
      • Modular Monolith
      • Microservices
    • Application Architecture
    • Document Architecture
  • Software Communication
    • REST API
  • Identity Management, Access Control & Security
    • Identity Management & Access Control
    • Security
  • Domain Driven Design
  • Java, Jvm, Frameworks
    • Spring Reactive
  • Serverless
  • Testing Software Goodies
    • Test Driven Development
    • Contract Testing (Consumer Driven Contracts)
  • AWS Cloud
  • Userful Spells
  • Tech Startup WAR stories
  • Blockchain
    • Blockchain Learning
Powered by GitBook
On this page
  • How to select an Architecture for a specific software system
  • Describe Architecture Drivers
  • Architecture Metrics
  • Select Architecture Style for System
  • Document and visualize selected Architecture
  • Select Application Architecture per specific module
  • Architecture general references
  • Autonomy
  • Distributed Tracing
  • Event Driven Systems
  • Conway Law
  • Books
  • Blogs / Online Articles
  • Videos
  • APIs best practices
  • Blogs / Online Articles

Was this helpful?

  1. Software Architecture

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

  • B3 Propagation GitHug

  • Åšledzenie komunikacji w systemach rozproszonych - Polish

  • Distributed Tracing with Spring Cloud Sleuth and Spring Cloud Zipkin

Event Driven Systems

Examples

  • On Eventual Consistency and REST

Books

  • Designing Event-Driven Systems - Ebook Online

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

  • How Do Committees Invent? - Melvin E. Conway

  • Exploring the Duality between Product and Organizational Architectures

Books

  • Design It!: From Programmer to Software Architect

  • Building Evolutionary Architectures: Support Constant Change

  • Patterns of Enterprise Application Architecture - Martin Fowler

Blogs / Online Articles

  • Software Architecute is Overrated

  • TICK Stack

  • Enterprise Integration Patterns

  • How to learn Software Design & Architecture

  • Less is more

  • Who needs an Architect (Fowler)

Videos

APIs best practices

Blogs / Online Articles

APIs as infrastructure: future-proofing Stripe with versioning

PreviousSoftware ArchitectureNextSystem Architecture

Last updated 3 years ago

Was this helpful?