Reference and Selective Reading
You do not need to read the source books front-to-back for this module. Use the concept pages and practice pages first. Open these local chunks and external references only when you need alternate exposition, worked examples, or production-grade depth.
Source Roles
| Source | Role | Why it is here |
|---|---|---|
| Fundamentals of Software Architecture (Richards & Ford), Ch. 14 | Primary teaching source | The single best short architectural treatment of event-driven; both topologies and the async capabilities |
| System Design Primer (Martin, open source) | Selective support | Concise framing of async, queues, and communication styles |
| Kafka / Confluent official docs | Operational depth | Canonical reference for log-based broker mechanics |
| Martin Fowler's event-driven essays | Conceptual anchor | The four-lens framing that keeps the vocabulary honest |
| Microservices.io (Richardson) | Pattern catalog | Outbox, saga, CQRS, event sourcing entries |
Read Only If Stuck
Events as a Mental Model (Cluster 1)
- Richards & Ford: Event-Driven Architecture Style
- Richards & Ford: Asynchronous Capabilities
- System Design Primer: Asynchronism
- Martin Fowler: What do you mean by "Event-Driven"?
- Microservices.io: Domain events
Messaging Patterns (Cluster 2)
- Richards & Ford: Asynchronous Capabilities
- Richards & Ford: Preventing Data Loss
- Richards & Ford: Request-Reply
- System Design Primer: Asynchronism
- System Design Primer: Communication -- HTTP
- System Design Primer: Communication -- RPC and REST
- EIP: Publish-Subscribe Channel
- EIP: Point-to-Point Channel
- Fowler: Event Notification
- Fowler: Event-Carried State Transfer
- Microservices.io: Transactional outbox
- Microservices.io: Transaction log tailing
- Debezium: Outbox event router
Brokers and Log-Based Systems (Cluster 3)
- Richards & Ford: Event-Driven Architecture Style
- Richards & Ford: Event-Driven Ratings
- System Design Primer: Asynchronism
- System Design Primer: Communication -- TCP and UDP
- Apache Kafka: Documentation -- Design
- Apache Kafka: Documentation -- Consumer Position and Groups
- Apache Kafka: Documentation -- Log Compaction
- AWS SQS Developer Guide
- RabbitMQ: AMQP 0-9-1 Concepts
- Confluent: Apache Kafka 101
- Confluent: Consumer Groups Explained
- Jay Kreps: The Log -- essay
Distributed Workflow with Events (Cluster 4)
- Richards & Ford: Mediator Topology
- Richards & Ford: Event-Driven Architecture Style
- Richards & Ford: Request-Reply
- Richards & Ford: Preventing Data Loss
- Microservices.io: Saga pattern
- Microservices.io: Idempotent consumer
- Confluent: Exactly-once Semantics Are Possible
- Caitie McCaffrey: Applying the Saga Pattern (talk)
- Garcia-Molina & Salem: SAGAS (1987 paper)
- Bernd Rücker: Choreography AND Orchestration
- Temporal documentation
- AWS Step Functions documentation
Event Sourcing and CQRS (Cluster 5)
- Richards & Ford: Event-Driven Architecture Style
- Richards & Ford: Preventing Data Loss
- Martin Fowler: Event Sourcing
- Martin Fowler: CQRS
- Microservices.io: Event sourcing
- Microservices.io: CQRS
- Greg Young: CQRS and Event Sourcing (talk)
- Greg Young: A Decade of DDD, CQRS, Event Sourcing
- EventStoreDB: What is event sourcing?
- Confluent: Materialized Views
- Kafka Streams: Stateful operations
Optional Deep Dive
- Jay Kreps: The Log (essay) -- foundational reading for the "database turned inside out" mindset.
- Martin Kleppmann: Turning the Database Inside Out (talk) -- 50-minute talk that reframes databases as caches of the log.
- Ben Stopford: The Data Dichotomy -- Kafka-as-platform framing; good pair with Cluster 5.
- Stopford: Designing Event-Driven Systems (free O'Reilly/Confluent PDF) -- book-length treatment of event-driven at platform scale.
- Confluent: Kafka Streams documentation -- reference implementation of projections and stateful stream processing.
- Uber Engineering: How Uber built microservices communication at scale -- real-world event-driven patterns.
- Netflix Conductor documentation -- another orchestrator to compare against Temporal and Step Functions.
Concept-to-Source Map
| Primary concept | Best source if stuck | Why this source |
|---|---|---|
| An event is an immutable fact about the past | Fowler: What do you mean by "Event-Driven"? | The cleanest modern articulation of event vs non-event |
| Events vs commands vs requests | Richards & Ford: Request-Reply paired with Fowler's essay | Pair gives both the async mechanics and the intent distinctions |
| The shift from CRUD to events | Kleppmann: Turning the Database Inside Out (talk) | The reframing is clearest as a 50-minute lecture |
| Publish-subscribe vs point-to-point | System Design Primer: Asynchronism and EIP Pub-Sub | Compact operational framing + canonical pattern |
| Event notification vs ECST | Fowler: Event-Driven essay -- ECST and Notification sections | Source of the terms |
| Outbox pattern | Microservices.io: Transactional outbox + Debezium router | Pattern catalog + production implementation |
| Queue semantics (JMS/AMQP/SQS) | AWS SQS Developer Guide + RabbitMQ AMQP model | Two canonical hosted/self-hosted references |
| Log-based brokers (Kafka design) | Apache Kafka docs -- Design | Canonical reference |
| Consumer groups, partitions, ordering | Confluent: Consumer Groups Explained | Operational depth missing from the main docs |
| Choreography vs orchestration | Richards & Ford: Mediator Topology paired with Microservices.io: Saga | Gives both sides of the split |
| Sagas | Microservices.io: Saga pattern + McCaffrey talk | Pattern entry + modern practice |
| Idempotency and exactly-once | Confluent: Exactly-once Semantics Are Possible | The honest version of the story, including EOS boundaries |
| Event sourcing | Fowler: Event Sourcing | Short, clear, influential |
| Projections and read models | Confluent: Materialized Views | Practical treatment with stream-processing framing |
| CQRS | Fowler: CQRS | The decision framing, including his own warnings against overuse |