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:
- Business domain or process -- what system or workflow are we storming? (e.g., "order fulfillment," "patient intake," "loan origination")
- Scope -- are we mapping the full process or a specific slice?
- Participants -- who will attend? (domain experts, engineers, stakeholders, analysts)
- Current state -- is there an existing system diagram, architecture doc, or process map?
- Session format -- in-person (stickies on a wall) or virtual (Miro/FigJam)?
- 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:
-
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)
-
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
-
Ground rules -- no laptops, write one idea per sticky, past tense for events, no solutions yet.
-
Distributed or async option -- for remote or timezone-spread teams, run it on a shared Miro/FigJam board and use the legend above as the board template (one sticky color per type, with the color key locked in a corner). Seed the timeline async: participants add events on their own time over a day or two, then hold a shorter live session to enforce the timeline, mark hot spots, and draw bounded contexts together. Async surfaces the events; the live time resolves the disagreements.
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.
AI-assisted event extraction (optional first pass)
To get past the blank canvas faster, feed the AI a narrative of the process (a transcript, a process doc, or a domain expert's written walkthrough) and ask it to extract candidate domain events in past tense. Treat the result as a draft the room corrects: the team reorders, renames, deletes, and fills gaps. The AI finds the obvious events so the session spends its energy on the contested ones and the hot spots.
Note the payoff downstream: a well-formed event model (events, commands, bounded contexts, ubiquitous language) is now directly usable as LLM context for generating code, service scaffolds, and multi-agent designs. The storm is both an alignment artifact and a machine-readable spec, so capture it cleanly enough to hand to a model later.
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):
| # | Event | Command | Actor | External System |
|---|---|---|---|---|
| 1 | Protocol Received | Receive Protocol | Study Manager | Sponsor portal |
| 2 | Feasibility Survey Sent | Send Feasibility Survey | Site Navigator | CTMS |
| 3 | Feasibility Response Received | Submit Feasibility Response | Site (PI/Coordinator) | Email / portal |
| 4 | Site Identified | Identify Candidate Site | Study Manager | CTMS |
| 5 | Site Selected | Select Site | Study Manager / Sponsor | CTMS |
| 6 | CDA Executed | Execute CDA | Legal / Regulatory | DocuSign / email |
| 7 | Regulatory Package Prepared | Prepare Regulatory Package | Site Navigator | eTMF |
| 8 | Regulatory Package Submitted | Submit to IRB/EC | Site Navigator / Regulatory Coordinator | IRB portal |
| 9 | IRB Approval Received | Approve Protocol | IRB/Ethics Committee | IRB portal |
| 10 | Contract Sent | Send Site Contract | Budget Analyst / Legal | Email / contract system |
| 11 | Budget Negotiated | Negotiate Budget | Budget Analyst / Site | Email / phone |
| 12 | Contract Executed | Execute Contract | Legal | DocuSign |
| 13 | Site Documents Collected | Collect Site Documents | Site Navigator | eTMF / email / fax |
| 14 | Document Deficiency Identified | Flag Missing Document | Site Navigator | eTMF |
| 15 | SIV Scheduled | Schedule Site Initiation Visit | CRA | CTMS / email |
| 16 | SIV Completed | Complete SIV | CRA / PI | CTMS |
| 17 | Site Activated | Activate Site | Study Manager | CTMS |
| 18 | First Patient Screened | Screen Patient | PI / Study Coordinator | EDC |
| 19 | First Patient Enrolled | Enroll Patient | PI / Study Coordinator | EDC / 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:
- Thin slices -- identify 2-4 connected event paths that accomplish a business objective. Start with the happy path.
- Bounded contexts -- group related events that share a ubiquitous language and could be owned by one team.
- 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)
| # | Event | Command | Actor | External System | Notes |
|---|---|---|---|---|---|
| 1 | (Event name -- past tense) | (Command) | (Actor) | (System) | (Notes) |
Bounded Contexts
| Context | Key Events | Ubiquitous Language | Owner/Team |
|---|---|---|---|
| (Context name) | (Events in this context) | (Key terms) | (Team) |
Thin Slices
| Slice | Path (events) | Business Objective | Type |
|---|---|---|---|
| (Name) | Event A → Event B → Event C | (Objective) | Happy path / Alternate / Exception |
Hot Spots
| Issue | Location | Impact | Notes |
|---|---|---|---|
| (Pain point) | (Which context/event) | High/Med/Low | (Details) |
Communication Patterns
| From | To | Type | Description |
|---|---|---|---|
| (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_createto post the event storming output, ortable_createfor the events table - FigJam -- use
generate_diagramto create a flowchart of the event timeline - Notion -- use
notion-create-pageswith 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-generateto 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
| Topic | Tolerance | Action |
|---|---|---|
| Business process being modeled | Low | STOP and ask -- wrong process means wrong events |
| Event sequencing and causality | Low | STOP and ask -- incorrect event order breaks the model |
| Domain terminology | Medium | Assume + flag [ASSUMED] -- capture in ubiquitous language, team resolves |
| Bounded context groupings | Medium | Assume + flag [ASSUMED] -- hypotheses refined in Boris |
| Hot spot severity | Medium | Assume + flag [ASSUMED] -- team triages during review |
| Actor/persona assignments | High | Best 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
| Format | Location | Notes |
|---|---|---|
| Markdown | Conversation or saved file | Always produced. Source of truth. |
| Miro doc | User's specified Miro board | Via Miro MCP. |
| FigJam diagram | FigJam | Event timeline as flowchart. |
| Notion page | User's specified Notion location | Via Notion MCP. |
| File | ./output/event-storming/(domain)-events.md | Local 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")
| Color | Type | Example |
|---|---|---|
| 🟠 Orange | Domain Event (past tense) | "Application Submitted" |
| 🔵 Blue | Command | "Submit Application" |
| 🟡 Yellow | Actor | "Loan Officer," "Borrower" |
| 🩷 Pink | External System | "Fannie Mae DU," "Equifax" |
| 🔴 Red | Hot Spot / Pain Point | "Credit pull timing conflict" |
| 🟢 Green | Read Model / View | "Borrower credit summary" |
| 🟣 Purple | Policy / 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)
| # | Event | Command | Actor | External System | Notes |
|---|---|---|---|---|---|
| 1 | Application Started | Start Application | Borrower | Encompass LOS | Online or branch |
| 2 | Application Submitted | Submit Application | Borrower / Loan Officer | Encompass LOS | Triggers disclosures clock |
| 3 | Initial Disclosures Issued | Issue Disclosures | System (automated) | Encompass LOS | TRID 3-day rule starts |
| 4 | Disclosures Acknowledged | Acknowledge Disclosures | Borrower | Encompass LOS / email | Required before proceeding |
| 5 | Credit Report Pulled | Pull Credit | Loan Officer | Equifax / Experian / TransUnion | Hard inquiry; tri-merge |
| 6 | AUS Run Completed | Run AUS | Loan Officer | Fannie Mae Desktop Underwriter | Approve/Refer/Refer w/ Caution |
| 7 | Document Checklist Issued | Issue Document Checklist | Loan Officer | Encompass LOS | Triggers doc collection |
| 8 | Supporting Documents Received | Upload Documents | Borrower | Borrower portal | Income, assets, ID |
| 9 | Document Deficiency Identified | Flag Missing Document | Processor | Encompass LOS | 🔴 Common loop — avg 2.3 cycles |
| 10 | File Submitted to Underwriting | Submit to Underwriting | Processor | Encompass LOS | Requires complete package |
| 11 | Underwriting Review Started | Begin UW Review | Underwriter | Encompass LOS | UW queue assignment |
| 12 | Appraisal Ordered | Order Appraisal | Processor | ServiceLink AMC | Triggers AMC dispatch |
| 13 | Appraisal Received | Receive Appraisal Report | AMC | ServiceLink AMC | Value may require rebuttal |
| 14 | Conditional Approval Issued | Issue Conditional Approval | Underwriter | Encompass LOS | Conditions list generated |
| 15 | Conditions Submitted by Borrower | Submit Conditions | Borrower / Loan Officer | Borrower portal | |
| 16 | Conditions Reviewed by UW | Review Conditions | Underwriter | Encompass LOS | 🔴 Often multiple round-trips |
| 17 | Clear to Close Issued | Issue CTC | Underwriter | Encompass LOS | Final approval milestone |
| 18 | Closing Disclosure Issued | Issue Closing Disclosure | Closer | Encompass LOS | TRID 3-day waiting period |
| 19 | Closing Scheduled | Schedule Closing | Closer / Borrower | Title company / calendar | |
| 20 | Loan Documents Signed | Sign Loan Documents | Borrower | DocMagic / notary | In-person or RON |
| 21 | Funding Authorized | Authorize Funding | Closer / Funder | Encompass LOS | Wire instructions sent |
| 22 | Loan Funded | Fund Loan | Funder | Wire system / title | Disbursement confirmed |
| 23 | Loan Closed and Recorded | Record Deed of Trust | Title Company | County recorder | File complete |
Bounded Contexts
| Context | Key Events | Ubiquitous Language | Owner/Team |
|---|---|---|---|
| Application & Eligibility | Application Started → AUS Run Completed | Application, Borrower, Credit Score, AUS Finding, DTI, LTV | Digital Lending Squad |
| Document Management | Document Checklist Issued → File Submitted to Underwriting | Condition, Stip, Document Deficiency, Complete Package | Processing Platform Team |
| Underwriting & Approval | Underwriting Review Started → Clear to Close Issued | Condition, Credit Memo, Approval, Suspension, Denial, Guideline | Underwriting Systems Team |
| Appraisal & Collateral | Appraisal Ordered → Appraisal Received | AMC, Appraisal Report, Comparable, Value, Rebuttal | Collateral Services (shared ownership TBD [ASSUMED]) |
| Closing & Funding | Closing Disclosure Issued → Loan Closed and Recorded | CTC, CD, Closing Package, Wire, Disbursement, Recording | Closing & Ops Team |
Thin Slices
| Slice | Path (events) | Business Objective | Type |
|---|---|---|---|
| Happy Path Conforming Purchase | Application Submitted → Credit Pulled → AUS Approve → Docs Received → File to UW → Conditional Approval → CTC → Loan Funded | Validate full origination flow for a clean conforming borrower | Happy path |
| Document Deficiency Loop | Document Checklist Issued → Deficiency Identified → Borrower Re-uploads → Deficiency Re-flagged → File to UW | Expose re-work cost of incomplete packages; size automation opportunity | Exception |
| Condition Round-Trip | Conditional Approval Issued → Conditions Submitted → Conditions Reviewed → (loop) → CTC Issued | Map UW condition cycles; identify which condition types drive most delay | Alternate |
Hot Spots
| Issue | Location | Impact | Notes |
|---|---|---|---|
| Document deficiency re-work loops | Document Management context | High | Avg 2.3 re-request cycles per file; no automated completeness check before submission |
| AUS re-run after appraisal value change | Appraisal & Collateral → Underwriting boundary | High | LTV shift |