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.
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):
| # | 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 |