Software Architecture

Seven lessons covering how large software systems are designed and operated.

Microservices (when and how to split a monolith into independent services), event-driven architecture (reacting to events instead of polling for changes), pub/sub (decoupling publishers from subscribers through topics), message queues (buffering work between producers and consumers), caching (trading freshness for speed across every layer of the stack), load balancing (distributing traffic and handling failures), and CQRS (separating read and write models for different scaling needs).

These patterns appear in every production system. Understanding them explains why distributed systems behave the way they do, why some architectures scale and others don't, and how to make informed tradeoffs between simplicity and flexibility. The glossary defines every term. The FAQ answers common questions.