Guides
Articles on Event Sourcing, event-driven architecture, CQRS and messaging, grouped into guides by topic, each with a suggested reading order.

Event Driven Architecture
What event-driven architecture really is once you skip the buzzwords, what it gives you, what it costs, and how it helps teams work more independently.4 articles β
Events and commands
A command asks for something to happen; an event says it already did. Understanding the difference helps you design messages that are clear and easy to handle.1 article β
Events on the inside, events on the outside
Events used inside a module and events shared with others serve different purposes. You'll learn to design both, so you can change internals safely.2 articles β
CQRS
CQRS is simpler than its reputation. You'll see what it actually means, which popular beliefs are myths, and how it helps you organise code around features.9 articles β
Handling business logic
How to write business logic that's easy to read, test and change, using simple functions and types instead of large classes. In C#, F#, Java and TypeScript.12 articles β
Optimistic concurrency
Two people edit the same data and one silently overwrites the other. You'll see how optimistic concurrency catches that, and how to support it in a web API.2 articles β
Distributed processes
Business processes rarely fit in one transaction. You'll learn how to coordinate work across services, and what to do when steps fail or arrive out of order.9 articles β
Read models and Projections
Events are great for recording changes but awkward to query. You'll learn how to turn them into read models for your screens and reports, and keep them correct.12 articles β
Modelling with events
How to understand a business process well enough to build it, using EventStorming and other modelling techniques to find events, rules and open questions.5 articles β
Documenting EDA
Event-driven systems are hard to see as a whole. A conversation with David Boyne on documenting events, so your team knows what exists and how it changes.1 article β
Anti-patterns
Event designs that look fine at first and cause trouble later. You'll learn to spot the common mistakes, why they hurt, and what to do instead.9 articles β
Handling errors in event streams
Wrong events will end up in your system, and you can't just delete them. You'll learn how to fix mistakes and bugs without losing history or trust in your data.5 articles β
Event Sourcing foundations
What Event Sourcing is, what you gain by storing events instead of the current state, when it's not worth it, and how to start with it in a real project.13 articles β
How to store events in Event Sourcing
How event stores work, and why they're simpler than they sound. Enough to choose one wisely, or build a basic one on a database you already use.9 articles β
Short living streams
Event streams that live forever become hard to manage. You'll learn how to model lifecycles so streams stay short, and what to do when there's no natural end.2 articles β
Uniqueness in Event Sourcing
"Usernames must be unique" is harder than it sounds with Event Sourcing. You'll learn how to find the real requirement behind it, and how to enforce it.2 articles β
Event versioning
Your events will change, but the old ones stay stored. You'll learn how to evolve them without breaking existing data or the systems that read it.6 articles β
GDPR
Events are meant to be kept forever, yet personal data must be deletable. You'll learn how to meet GDPR requirements without giving up on events.2 articles β
Event Sourcing is not Event Streaming
Event Sourcing and event streaming are often confused. Why they're different patterns, and why many "Event Sourcing is hard" stories are really about Kafka.1 article β
Testing
How to test event-driven code, from business logic to projections and asynchronous processes, so your tests read like business requirements.6 articles β
Architecture
What an architect's job really is: understanding problems before proposing solutions, questioning popular architecture styles, and keeping documentation alive.5 articles β
Monolith vs Microservices
Microservices solve some problems and create others. When splitting a system is worth it, how teams shape the boundaries, and how to do it gradually.4 articles β
Messaging foundations
When too much happens at once, systems slow down or break. You'll see how queuing and backpressure keep concurrent work under control.1 article β
Delivery guarantees, outbox and inbox patterns
Messages get lost or duplicated between your database and your broker. You'll learn what delivery guarantees really mean and how the outbox pattern helps.5 articles β
Eventual Consistency
In event-driven systems, data isn't updated everywhere at once. You'll learn how to live with that delay, keep read models correct and keep users informed.2 articles β
Events Ordering
Events don't always arrive in the order they happened. You'll learn why, how to handle it without corrupting data, and what message brokers can guarantee.4 articles β
Idempotency
In distributed systems, the same message will arrive more than once. You'll learn how to handle duplicates without corrupting your data.3 articles β
Observability, Auditability and tracing
Logs and metrics tell you something broke, not why. You'll learn how observability and tracing help you understand what a running system is actually doing.5 articles β
Kafka
What happens inside Kafka when you send a message, and why it matters for your delivery guarantees and performance.1 article β