Free Resource

The Event Modeling Cheat Sheet

One page, five elements, four patterns, twenty rules. Everything you need on the wall during a workshop - now interactive, so you can click through it instead of squinting at a PDF.

Need the PDF? Get it here for free โ†’

Building Blocks

The 5 Elements of Event Modeling

Why: a model only creates shared understanding if "command" and "event" mean the same thing to everyone in the room. These five definitions are the common ground that collaborative language is built on.

Every board is built from just five shapes. Tap a card to see the full definition and an example.

Original cheat sheet legend showing the 5 elements and the 4 patterns of Event Modeling
Straight from the cheat sheet
The Grammar

The 4 Patterns

Why: once you recognize which of the four shapes you're looking at, you instantly know what question to ask next - and which anti-pattern to watch for.

Every slice on an Event Modeling board is built from exactly one of these four shapes. Pick a pattern to see how it fits together.

Goal: change what's true

State Change

A user - or another system - submits a Command. If the business rules allow it, the system produces one or more Events that record what just changed. This is the write side of Event Modeling: the moment intent becomes fact. Watch for the "left chair" anti-pattern if a single command starts producing a long, unrelated list of events.

Screen
โ†“
Command
โ†“
Event
Goal: turn facts into something queryable

State View

Events accumulate over time. A State View pattern folds them into a Read Model that answers one specific question for one specific screen or API consumer. This is the read side - no command involved, just events being interpreted into something usable.

Screen
โ†“
Read Model
โ†‘
Event
Goal: let the system react to itself

Automation

An Event builds a Read Model, same as State View. But instead of a screen reading it, the gear icon - a computer, not a human - watches that Read Model and decides to issue a Command automatically: a reminder email three days before a trial ends, a retry after a failed payment. That Command produces a new Event, same as State Change. No human in the loop at any point.

โš™๏ธ
Read Model
โ†‘
Event
Command
โ†“
Event
Goal: move meaning across a boundary

Translation

The same shape as Automation, but the incoming Event comes from outside - another bounded context or an external system. It builds a Read Model, the gear reacts to it and issues a Command, and that Command produces a new Event phrased in the receiving context's own language. It's an anti-corruption layer drawn directly on the model - it keeps teams decoupled, because nobody has to understand another team's internal model.

โš™๏ธ
Read Model
โ†‘
Event
Command
โ†“
Event
Specification

Turning Slices into Testable Scenarios

Why: a diagram everyone nods along to isn't a spec - it's still open to interpretation. Given-When-Then is unambiguous, testable, and something an AI agent can build directly from.

Every pattern can be written as Given-When-Then - the exact format a developer, or a coding agent, can turn straight into a test.

Scenario (State Change)
GIVENEvent, Event
WHENCommand
THENEvent
"Given CartCreated, ItemAdded - When Checkout is submitted - Then OrderPlaced is recorded."
Scenario (State View)
GIVENEvent, Event
WHENQuery
THENRead Model
"Given OrderPlaced, PaymentReceived - When the OrderStatus view is requested - Then it shows 'Paid'."
Scenario (Error)
GIVENEvent, Event
WHENCommand
THENerror
"Given OrderCancelled - When Checkout is submitted again - Then the command is rejected: 'cart no longer exists'."
Watch For These

4 Anti-Patterns to Spot in Any Model

Why: catching one of these during the workshop costs you a five-minute conversation. Catching it after the sprint starts costs you a redesign.

Named after the furniture they resemble on the board. Expand each one to see what it usually means.

"Left Chair" 1 Command ยท * Events
Diagram of the left chair anti-pattern: one command producing five unrelated events A single Command fans out into a pile of unrelated Events - four skinny legs holding up one seat. It's not automatically wrong; some commands genuinely produce several events. But it's worth asking whether the command is doing too much, or whether some of those events actually belong to a different slice entirely.
"Right Chair" 1 Read Model ยท * Events
Diagram of the right chair anti-pattern: five unrelated events feeding one read model The same shape, upside down: a single Read Model built from a long tail of Events. Ask whether the Read Model is trying to answer too many questions at once - a good Read Model usually answers exactly one, cleanly.
"Bed" 1 Screen ยท * Commands
Diagram of the bed anti-pattern: one screen firing four commands One screen firing off a wide spread of Commands - a bed frame with too many legs. Often a sign the screen is doing the job of several screens, or that some of those commands could be collapsed into one clearer user intent.
"Shelf" 1 Slice ยท * Scenarios
Diagram of the shelf anti-pattern: one slice carrying all the scenarios while the rest of the model has none One slice on the board is loaded with Given-When-Then scenarios while every other slice has none - a single shelf holding everything because nobody built the rest of the shelving unit. Usually means scenario coverage was written for the easiest slice first and never caught up with the rest of the model.
"Those patterns are not red flags, but something to keep an eye on. I first look for them on every model."
The Read/Write Loop

How Information Flows Through a Slice

Why: most "it works on my machine" bugs trace back to someone skipping a link in this loop - usually a screen built before the Read Model that's supposed to feed it exists.

Straight from the cheat sheet - then try the interactive version below: click each stage to see its role in the loop.

Diagram showing information flowing from a screen through a command, an event, a read model, and back to a screen
Screen
โ†’
Command
โ†’
Event
โ†’
Read Model
โ†’
Screen
An Actor looks at a Screen and decides to act. This is where a request begins.
๐Ÿ›ฃ๏ธ

Swimlanes can be Teams or Systems - draw a horizontal lane per owner and slot every Event into the lane of whoever owns that data. Swimlanes indicate ownership of Events. If another team needs that data, they read it via a Translation slice, not by reaching into someone else's database.

Facilitation

Running the Workshop: 6 Steps

Why: skipping a step doesn't save time - it just moves the confusion to week three of the sprint, where it's far more expensive to untangle.

Each step builds on the last. Expand a step to see its goal and how to actually run it in the room.

1 Brainstorming Goal: collect all events
Sticky notes scattered on a board during the brainstorming step Hand everyone orange stickies and ask a simple question: "What happened?" No structure yet, no order - just get every event anyone can think of onto the wall. Quantity over precision here; you'll sequence and merge duplicates in the next step.
2 The Plot Goal: find the story
Events arranged left to right into a rough timeline Take the pile of events from step 1 and arrange them in a rough left-to-right timeline. Ask the two anchor questions every time: "What's the first event?" and "What's the last event?" Once you have a beginning and an end, the middle fills in naturally.
3 Storyboarding Goal: common understanding
Simple wireframe screens sketched above the event timeline Sketch a simple wireframe screen above the events a user would actually see at that point in the flow. This is where business and engineering stop talking past each other - a screen makes the abstract event timeline concrete for everyone in the room.
4 Input / Output Goal: understand information flow
Screens, commands, events and read models wired together to show information flow Add Commands below the screens and Read Models above them, and draw the arrows: Screen reads Read Model, Screen sends Command, Command produces Event, Event feeds Read Model. This step exposes every place a screen needs data that no event currently produces - the most valuable gaps to find before anyone writes code.
5 Swimlanes Goal: understand ownership
Events sorted into swimlanes labelled Product, Cart, Checkout, and Order Draw horizontal lanes for each team or system, and slot every event into the lane of whoever owns that data. Ownership questions that were implicit before - "wait, who's actually responsible for this?" - become impossible to avoid once the lanes are drawn.
6 Scenarios Goal: understand business rules
Given-When-Then scenarios written out for a slice, including an error case For each slice, write Given-When-Then scenarios - the happy path first, then the error cases. Ask three times: "Is there any rule we didn't cover?" Business rules that used to be tribal knowledge get written down as literal test cases, ready to hand to a developer or an AI agent.

Two questions carry the whole workshop: "What's the first event? What's the last event?" to find the plot - and "Is there any rule we didn't cover?", asked three times, to close the gaps.

Reference

30 Rules Worth Knowing

Why: none of these are enforced by a compiler. They're enforced by whoever's facilitating - which is exactly why they're worth knowing cold, not just skimming once.

These aren't laws, they're habits worth building - keep them in view during a session.

10 Facilitation Rules

1Every Event Modeling session needs a facilitator
2Set a clear context before inviting people
3Invite the right people - the ones who know the domain
4Don't focus on technology / implementation
5Don't get stuck in discussions - park them
6Don't waste time beautifying the model in workshops
7Never leave questions unanswered - make them hotspots
8Start small - Event Modeling is exhausting
9Event Modeling is primarily a communication tool
10Keep it simple

The 20 Rules of Event Modeling

1Start with events.
2Model facts, not ideas.
3Time flows left โ†’ right.
4If the order is unclear, create a hotspot.
5Name by intent.
6Use only four patterns.
7State Change โ€ข State View โ€ข Automation โ€ข Translation.
8Every command has a reason.
9Never add commands "just because."
10Every Read Model answers a question.
11No question, no Read Model.
12Don't guess.
13Unknowns become hotspots.
14Keep slices small.
15One business capability per slice.
16Keep it simple.
17Complexity usually hides a problem.
18Optimize for conversation.
19Shared understanding beats pretty diagrams.
20Model behavior, not structure.
The most important question to ask: "What happens next?"
Before You Send the Invite

Event Modeling Workshop Preparation

Why: a workshop with no facilitator, no clear goal, and the wrong people in the room still produces a nice-looking board - just not shared understanding. Five minutes here saves the whole session.

Walk through this with your co-facilitator before scheduling the session. Your progress is saved right in this browser.

Your progress0 / 5
Notation Extras

Beyond the Basics

Why: a model only the person who drew it can read isn't shared understanding. These conventions are what make a big board legible to everyone who opens it after you.

A handful of extra conventions that make bigger models easier to read - hover a status pill for its meaning.

๐Ÿ”ด Hotspots

Red sticky note reading: Where is this information coming from?

Anything unresolved - an open question, a blocker, a disputed rule, e.g. "Where is this information coming from?" - goes on a red sticky note directly on the model. It stays visible until someone answers it. A hotspot isn't a failure of the workshop; leaving it blank and moving on would be.

๐Ÿ–ฅ๏ธ UI-Only Interaction

Three wireframe screens shown one after the other with no commands or events

When a flow is purely navigational - no state change, no business rule - show one screen leading straight to the next, with no commands or events in between. Save the full notation for the moments that actually matter.

๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ Actor Lanes

Screens grouped into admin and user actor lanes

Stack actor lanes above the timeline - one per role, e.g. admin, user - so it's obvious at a glance which screens belong to which actor, and where their flows intersect.

โžก๏ธ Chapters

Wide blue arrow used to group slices into a chapter

A wide blue arrow spanning several slices groups them into a named chapter - useful once a model grows past a single screen's width and needs a table of contents.

๐Ÿท๏ธ Slice Status

Slice status dropdown showing Created, Done, Assigned, InProgress, Review, Blocked, Planned, and Informational

Every slice carries a status chip. Hover each one below for what it means - the same statuses your build agent watches for.

Created Planned Assigned InProgress Review Done Blocked Informational
From Model to Code

Modeling and Building with AI

Why: the moment an agent can read the model, it stops being documentation and becomes the thing that actually gets built - which is exactly why keeping it accurate is no longer optional.

The same board that ran your workshop can hand slices straight to a coding agent. Copy a command to get started.

๐Ÿง 

Modeling with AI

Installs the agent skills and board connection needed to run Event Modeling conversationally - brainstorm events, sequence them, sketch storyboards, and write Given-When-Then scenarios straight onto the board from a chat with Claude Code.

npx @eventmodelers/agent-modeling-kit@latest install
โš™๏ธ

Building from an Event Model

Mark a slice Planned on the board and a build kit picks it up: it reads the slice definition, implements it, runs the tests, commits, and flips the status to Done - automatically. Pick the kit that matches your stack.

npx @eventmodelers/build-kit-supabase@latest install
npx @eventmodelers/build-kit-node@latest install
npx @eventmodelers/build-kit-axon@latest install

Ready to run your own workshop?

Keep this page open on a second screen during your next session, or grab the printable PDF for the wall.