Skip to main content
Engineering/event-storm

Event Storm

You need to facilitate an Event Storming session.

Use this when you need to understand a business process, break down a monolith, identify domain boundaries, or create alignment between business and engineering teams. This skill helps prepare, facilitate, and capture the outputs of an Event Storming workshop.

Full guide: See the Architecture Discovery Workshop Playbook for the complete method.

Process

Step 1: Gather inputs

Ask the user:

  1. Business domain or process — what system or workflow are we storming? (e.g., "order fulfillment," "patient intake," "loan origination")
  2. Scope — are we mapping the full process or a specific slice?
  3. Participants — who will attend? (domain experts, engineers, stakeholders, analysts)
  4. Current state — is there an existing system diagram, architecture doc, or process map?
  5. Session format — in-person (stickies on a wall) or virtual (Miro/FigJam)?
  6. Output destination — conversation only, Miro board, FigJam, Notion, or file?

If the user gives partial input, proceed with what's available and list assumptions.

Step 2: Prepare the session

Generate a facilitation kit:

  1. Sticky note legend — define the color coding:

    • Orange: Domain Events (past tense, e.g., "Order Placed")
    • Blue: Commands (actions that trigger events, e.g., "Place Order")
    • Yellow: Actors (who triggers the command)
    • Pink: External Systems (systems involved)
    • Red: Hot Spots / Pain Points (problems, questions, risks)
    • Green: Read Models / Views (information needed to make decisions)
    • Purple: Policies / Business Rules (rules that react to events)
  2. Session agenda (1-2 hours):

    • 10 min — intro, ground rules, legend
    • 30 min — chaotic exploration (everyone adds events)
    • 15 min — enforce timeline (order events left to right)
    • 15 min — add commands, actors, external systems
    • 15 min — mark hot spots and pain points
    • 15 min — identify thin slices and bounded contexts
  3. Ground rules — no laptops, write one idea per sticky, past tense for events, no solutions yet.

Step 3: Capture domain events

Guide the user through event discovery. For each event:

  • Name it in past tense (e.g., "Payment Received," not "Receive Payment")
  • Identify the triggering command and actor
  • Note external systems involved
  • Flag pain points with red stickies

Organize events into a left-to-right timeline.

Domain starter sets

If the domain matches one of these patterns, offer the starter set to get past the blank-canvas problem. Participants refine, reorder, and add missing events from here.

Clinical Trial Startup (CRO/sponsor trial activation):

#EventCommandActorExternal System
1Protocol ReceivedReceive ProtocolStudy ManagerSponsor portal
2Feasibility Survey SentSend Feasibility SurveySite NavigatorCTMS
3Feasibility Response ReceivedSubmit Feasibility ResponseSite (PI/Coordinator)Email / portal
4Site IdentifiedIdentify Candidate SiteStudy ManagerCTMS
5Site SelectedSelect SiteStudy Manager / SponsorCTMS
6CDA ExecutedExecute CDALegal / RegulatoryDocuSign / email
7Regulatory Package PreparedPrepare Regulatory PackageSite NavigatoreTMF
8Regulatory Package SubmittedSubmit to IRB/ECSite Navigator / Regulatory CoordinatorIRB portal
9IRB Approval ReceivedApprove ProtocolIRB/Ethics CommitteeIRB portal
10Contract SentSend Site ContractBudget Analyst / LegalEmail / contract system
11Budget NegotiatedNegotiate BudgetBudget Analyst / SiteEmail / phone
12Contract ExecutedExecute ContractLegalDocuSign
13Site Documents CollectedCollect Site DocumentsSite NavigatoreTMF / email / fax
14Document Deficiency IdentifiedFlag Missing DocumentSite NavigatoreTMF
15SIV ScheduledSchedule Site Initiation VisitCRACTMS / email
16SIV CompletedComplete SIVCRA / PICTMS
17Site ActivatedActivate SiteStudy ManagerCTMS
18First Patient ScreenedScreen PatientPI / Study CoordinatorEDC
19First Patient EnrolledEnroll PatientPI / Study CoordinatorEDC / CTMS

Common hot spots for this domain: Contract/budget negotiation delays (40% of startup time), document chase loops (documents arrive via email/fax/portal with no single tracking), protocol amendment cascading rework, IRB re-submission cycles, missing institutional knowledge after staff turnover.

Step 4: Identify thin slices and bounded contexts

From the event timeline:

  1. Thin slices — identify 2-4 connected event paths that accomplish a business objective. Start with the happy path.
  2. Bounded contexts — group related events that share a ubiquitous language and could be owned by one team.
  3. Communication patterns — mark which interactions are synchronous (request/response) vs. asynchronous (publish/subscribe).

Step 5: Generate the Event Storming output

Use the event storming template to produce the deliverable:


Event Storming: (Domain/Process Name)

Date: (date) Participants: (list) Scope: (what was mapped)

Domain Events (timeline order)

#EventCommandActorExternal SystemNotes
1(Event name — past tense)(Command)(Actor)(System)(Notes)

Bounded Contexts

ContextKey EventsUbiquitous LanguageOwner/Team
(Context name)(Events in this context)(Key terms)(Team)

Thin Slices

SlicePath (events)Business ObjectiveType
(Name)Event A → Event B → Event C(Objective)Happy path / Alternate / Exception

Hot Spots

IssueLocationImpactNotes
(Pain point)(Which context/event)High/Med/Low(Details)

Communication Patterns

FromToTypeDescription
(Context A)(Context B)Sync/Async(What's communicated)

Step 6: Share and distribute (optional)

If the user requested a tool destination in Step 1:

  • Miro — use doc_create to post the event storming output, or table_create for the events table
  • FigJam — use generate_diagram to create a flowchart of the event timeline
  • Notion — use notion-create-pages with the output as content
  • File — save to ./output/event-storming/(domain-name)-events.md

Step 7: Generate bounded context output and architecture decisions

After the event storm capture, produce architecture-ready output:

Bounded context detail:

For each identified bounded context, document:

### Bounded Context: {{Context Name}}

**Core domain events:** {{list of events in this context}}
**Aggregate roots:** {{the key entities that own state in this context}}
**Ubiquitous language:** {{terms specific to this context -- same word may mean different things in different contexts}}
**Context relationships:**

| Related context | Relationship type | Integration pattern |
|----------------|-------------------|-------------------|
| {{context}} | Upstream / Downstream / Conformist / Anti-corruption layer / Shared kernel | Sync API / Async event / Shared DB / File transfer |

**Ownership recommendation:** {{which team should own this context and why}}

Architecture Decision Records:

For each significant domain modeling decision, generate an ADR using /adr-generate:

Common decisions to record:

  • Why certain events were grouped into a bounded context (vs. split)
  • Where the context boundaries fall and the trade-offs considered
  • Which communication patterns (sync vs. async) were chosen and why
  • Where anti-corruption layers are needed between contexts

Related skills: Use /adr-generate to produce formal ADRs from these decisions.

Step 8: Review

Ask the user:

  • Are any events missing from the timeline?
  • Do the bounded contexts feel right, or should we split/merge any?
  • Do the aggregate roots capture the right state ownership?
  • Are the context relationships and integration patterns realistic?
  • Which thin slice should we validate first?
  • Are there hot spots that block us from proceeding to Boris modeling?

Uncertainty Policy

TopicToleranceAction
Business process being modeledLowSTOP and ask — wrong process means wrong events
Event sequencing and causalityLowSTOP and ask — incorrect event order breaks the model
Domain terminologyMediumAssume + flag [ASSUMED] — capture in ubiquitous language, team resolves
Bounded context groupingsMediumAssume + flag [ASSUMED] — hypotheses refined in Boris
Hot spot severityMediumAssume + flag [ASSUMED] — team triages during review
Actor/persona assignmentsHighBest guess — team validates during walkthrough

Default: STOP and ask when a topic is not listed above.

Related skills

  • /boris-model — next stage: translate events into service relationships
  • /snap-document — final stage: document APIs, data, and risks per bounded context
  • /architecture-discovery — skill set that chains all three stages
  • /facilitation-guide — generate a facilitation script for the session

Output locations

FormatLocationNotes
MarkdownConversation or saved fileAlways produced. Source of truth.
Miro docUser's specified Miro boardVia Miro MCP.
FigJam diagramFigJamEvent timeline as flowchart.
Notion pageUser's specified Notion locationVia Notion MCP.
File./output/event-storming/(domain)-events.mdLocal file.

Example Output

Input

  • Business domain or process: Residential mortgage origination — from application submission through loan closing
  • Scope: Full end-to-end process, excluding servicing (post-close)
  • Participants: 2 loan officers, 1 underwriting lead, 1 compliance analyst, 2 platform engineers, 1 product manager (HomePoint Lending, mid-size regional lender)
  • Session format: Virtual — Miro board
  • Current state: Existing Visio swimlane diagram covering processing steps, but no event-level detail and no system map
  • Output destination: Miro board + saved markdown file

Output (abbreviated)

Event Storming: Residential Mortgage Origination

Date: 2025-01-14 Participants: 2 Loan Officers, Underwriting Lead, Compliance Analyst, 2 Platform Engineers, Product Manager — HomePoint Lending Scope: Application submission → Loan closing (servicing excluded)


Facilitation Kit

Sticky note legend (Miro frame: "Legend")

ColorTypeExample
🟠 OrangeDomain Event (past tense)"Application Submitted"
🔵 BlueCommand"Submit Application"
🟡 YellowActor"Loan Officer," "Borrower"
🩷 PinkExternal System"Fannie Mae DU," "Equifax"
🔴 RedHot Spot / Pain Point"Credit pull timing conflict"
🟢 GreenRead Model / View"Borrower credit summary"
🟣 PurplePolicy / Business Rule"DTI must be ≤ 43% for conforming"

Session Agenda (90 min)

  • 0:00–0:10 — Intro, ground rules, walk the legend
  • 0:10–0:40 — Chaotic exploration: everyone adds orange events, no order yet
  • 0:40–0:55 — Enforce left-to-right timeline, resolve duplicates
  • 0:55–1:10 — Add commands (blue), actors (yellow), external systems (pink)
  • 1:10–1:20 — Mark hot spots (red) and policies (purple)
  • 1:20–1:30 — Identify bounded contexts and thin slices

Ground rules: No laptops (use phones to snap notes). One idea per sticky. Events in past tense only. No solution stickies until hot-spot round.


Domain Events (timeline order)

#EventCommandActorExternal SystemNotes
1Application StartedStart ApplicationBorrowerEncompass LOSOnline or branch
2Application SubmittedSubmit ApplicationBorrower / Loan OfficerEncompass LOSTriggers disclosures clock
3Initial Disclosures IssuedIssue DisclosuresSystem (automated)Encompass LOSTRID 3-day rule starts
4Disclosures AcknowledgedAcknowledge DisclosuresBorrowerEncompass LOS / emailRequired before proceeding
5Credit Report PulledPull CreditLoan OfficerEquifax / Experian / TransUnionHard inquiry; tri-merge
6AUS Run CompletedRun AUSLoan OfficerFannie Mae Desktop UnderwriterApprove/Refer/Refer w/ Caution
7Document Checklist IssuedIssue Document ChecklistLoan OfficerEncompass LOSTriggers doc collection
8Supporting Documents ReceivedUpload DocumentsBorrowerBorrower portalIncome, assets, ID
9Document Deficiency IdentifiedFlag Missing DocumentProcessorEncompass LOS🔴 Common loop — avg 2.3 cycles
10File Submitted to UnderwritingSubmit to UnderwritingProcessorEncompass LOSRequires complete package
11Underwriting Review StartedBegin UW ReviewUnderwriterEncompass LOSUW queue assignment
12Appraisal OrderedOrder AppraisalProcessorServiceLink AMCTriggers AMC dispatch
13Appraisal ReceivedReceive Appraisal ReportAMCServiceLink AMCValue may require rebuttal
14Conditional Approval IssuedIssue Conditional ApprovalUnderwriterEncompass LOSConditions list generated
15Conditions Submitted by BorrowerSubmit ConditionsBorrower / Loan OfficerBorrower portal
16Conditions Reviewed by UWReview ConditionsUnderwriterEncompass LOS🔴 Often multiple round-trips
17Clear to Close IssuedIssue CTCUnderwriterEncompass LOSFinal approval milestone
18Closing Disclosure IssuedIssue Closing DisclosureCloserEncompass LOSTRID 3-day waiting period
19Closing ScheduledSchedule ClosingCloser / BorrowerTitle company / calendar
20Loan Documents SignedSign Loan DocumentsBorrowerDocMagic / notaryIn-person or RON
21Funding AuthorizedAuthorize FundingCloser / FunderEncompass LOSWire instructions sent
22Loan FundedFund LoanFunderWire system / titleDisbursement confirmed
23Loan Closed and RecordedRecord Deed of TrustTitle CompanyCounty recorderFile complete

Bounded Contexts

ContextKey EventsUbiquitous LanguageOwner/Team
Application & EligibilityApplication Started → AUS Run CompletedApplication, Borrower, Credit Score, AUS Finding, DTI, LTVDigital Lending Squad
Document ManagementDocument Checklist Issued → File Submitted to UnderwritingCondition, Stip, Document Deficiency, Complete PackageProcessing Platform Team
Underwriting & ApprovalUnderwriting Review Started → Clear to Close IssuedCondition, Credit Memo, Approval, Suspension, Denial, GuidelineUnderwriting Systems Team
Appraisal & CollateralAppraisal Ordered → Appraisal ReceivedAMC, Appraisal Report, Comparable, Value, RebuttalCollateral Services (shared ownership TBD [ASSUMED])
Closing & FundingClosing Disclosure Issued → Loan Closed and RecordedCTC, CD, Closing Package, Wire, Disbursement, RecordingClosing & Ops Team

Thin Slices

SlicePath (events)Business ObjectiveType
Happy Path Conforming PurchaseApplication Submitted → Credit Pulled → AUS Approve → Docs Received → File to UW → Conditional Approval → CTC → Loan FundedValidate full origination flow for a clean conforming borrowerHappy path
Document Deficiency LoopDocument Checklist Issued → Deficiency Identified → Borrower Re-uploads → Deficiency Re-flagged → File to UWExpose re-work cost of incomplete packages; size automation opportunityException
Condition Round-TripConditional Approval Issued → Conditions Submitted → Conditions Reviewed → (loop) → CTC IssuedMap UW condition cycles; identify which condition types drive most delayAlternate

Hot Spots

IssueLocationImpactNotes
Document deficiency re-work loopsDocument Management contextHighAvg 2.3 re-request cycles per file; no automated completeness check before submission
AUS re-run after appraisal value changeAppraisal & Collateral → Underwriting boundaryHighLTV shift