Architecture
Designing and evolving systems, from their requirements and structure through to running them in production.
11 guides
Fundamentals
- What is software architecture?
How decisions about the structure of a system shape the way it evolves, and why some of them are hard to reverse.
- Architectural drivers: what guides architecture decisions
The requirements and constraints that steer the design of a system, and how to use them to choose an architecture on solid ground.
Domain and structure
- Domain-Driven Design (DDD)
How to model the domain so the software reflects the business, and when this approach is worth the investment.
- Monoliths, microservices, and SOA
Different ways to split and deploy a system: what each option involves and how to judge which one fits the problem.
- Application architecture
How to organize the code and keep business logic separate from technical details like data access and communication with other systems.
Communication and data
- Communication patterns
Choosing between synchronous and asynchronous communication changes how a system responds and how it copes with failure. What it means for latency, coupling, and consistency.
- Data architecture
How to organize data and decide who owns it. Modeling and persistence decisions, and when to consider event sourcing.
Operations
- Resilience in distributed systems
How do you keep a partial failure from spreading through the whole system? Resilience mechanisms, when to use them, and where their limits are.
- Infrastructure and cloud architecture
How to choose where a system runs, how to scale and deploy it, and how to bring the service back after an infrastructure failure.
- Observability and reliability
How to understand what's happening in production and define the level of service you expect. The role of observability signals, SLOs, and error budgets.
Decisions
- How to communicate architecture decisions
How to use diagrams and architecture decision records (ADRs) to explain the structure of a system and the reasoning behind its design.