nWave/skills/nw-ddd-event-modeling/SKILL.md
Event Modeling facilitation technique — brainstorm events, identify commands and views, define aggregate boundaries, write Given-When-Then specifications
npx skillsauth add nwave-ai/nwave nw-ddd-event-modelingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Collaborative visual design technique created by Adam Dymitruk. The Event Model IS the specification -- it replaces traditional requirements documents with a single, living visual artifact.
| Color | Element | Description | Example | |-------|---------|-------------|---------| | Orange | Event | Something that happened (past tense) | OrderPlaced, PaymentReceived | | Blue | Command | User intent/action (imperative) | PlaceOrder, ProcessPayment | | Green | Read Model/View | Data displayed to user | Order Summary, Shipping Dashboard | | White | Screen/UI | User interface wireframe | Order Form, Checkout Page | | Yellow | Automation/Policy | System reaction (saga/process manager) | "When PaymentReceived, then ConfirmOrder" | | Red | External System | Integration point | Payment Gateway, Email Service |
Discover all meaningful things that happen in the system.
Process: Everyone writes events on orange stickies (past tense, domain language) | Place on timeline (left = earlier, right = later) | No filtering -- capture everything | Group related events vertically (these form swimlanes/slices)
Facilitation tips:
Example timeline:
Timeline ─────────────────────────────────────────────────>
[CustomerRegistered] [ItemAddedToCart] [OrderPlaced] [PaymentReceived]
[ItemRemovedFromCart] [PaymentFailed]
[OrderCancelled] [OrderConfirmed]
[ItemShipped]
[RefundRequested]
Understand what triggers events and what users need to see.
Commands (blue): What action causes each event? Who initiates it? Place ABOVE events.
Read Models (green): What information does the user need to act? What does the screen show after? Place BELOW events.
Screens (white): What does the UI look like? Sketch wireframes. Place at top.
Wiring pattern:
Screen -> Command -> Event(s) -> Read Model -> Screen
Find system-driven reactions to events.
Automations (yellow): "When [event] happens, the system should [command]." These become sagas or process managers. Place between triggering event and resulting command.
External systems (red): Payment gateways, email services, shipping providers. Integration boundaries.
Turn the model into precise, testable specifications.
For each command-event combination:
GIVEN:
- CustomerRegistered { customerId: "C1", name: "Ale" }
- ItemAddedToCart { cartId: "CART1", itemId: "ITEM1", quantity: 2 }
WHEN:
- PlaceOrder { cartId: "CART1", customerId: "C1" }
THEN:
- OrderPlaced { orderId: "O1", customerId: "C1", items: [...], total: 59.98 }
These specifications become: Tests (directly translatable) | Documentation (readable by everyone) | Contract (unambiguous business-dev agreement)
The Event Model reveals four patterns:
1. Command (State Change): Screen -> Command -> Event(s). User action changes state. Implementation: command handler validates, aggregate emits events.
2. View (Information Retrieval): Event(s) -> Projection -> Read Model -> Screen. Events transformed into query-optimized views. Implementation: projection subscribes and updates read model.
3. Automation (System Reaction): Event(s) -> Policy/Saga -> Command. System reacts to events by issuing new commands. Implementation: saga/process manager.
4. Translation (External Integration): External Event -> Translator -> Internal Command (or reverse). Boundary between systems. Implementation: anti-corruption layer.
Each column in the Event Model (Screen -> Command -> Event -> Read Model) becomes a vertical slice -- an independently implementable feature.
Slice 1 Slice 2 Slice 3
┌──────────┐ ┌──────────┐ ┌──────────┐
UI │ OrderForm │ │ PaymentPg│ │ Dashboard │
├──────────┤ ├──────────┤ ├──────────┤
Cmd/Qry │PlaceOrder │ │ProcessPay│ │GetOrders │
├──────────┤ ├──────────┤ ├──────────┤
Domain │OrderAgg │ │PaymentAgg│ │OrderProj │
├──────────┤ ├──────────┤ ├──────────┤
Infra │EventStore │ │EventStore│ │ReadModelDB│
└──────────┘ └──────────┘ └──────────┘
Benefits: Each slice independently implementable and deployable | Easy to parallelize across team | Model shows exactly how many slices exist and their dependencies | Each slice maps to a portion of the Event Model
Happy path: GIVEN events that set up valid state | WHEN valid command | THEN expected events
Validation failure: GIVEN events (possibly none) | WHEN invalid command | THEN error (no events emitted)
Idempotency: GIVEN events including effect already applied | WHEN same command again | THEN no new events
State-dependent: Same command produces different results depending on prior events
| Aspect | Event Modeling | EventStorming | DDD Strategic Design | |--------|--------------|---------------|---------------------| | Focus | Complete system design | Domain exploration | Bounded context mapping | | Output | Full spec + implementation slices | Shared understanding | Context map + language | | Detail | Very detailed (down to fields) | Medium (event+command level) | High-level (boundaries) | | Duration | Half day to full day | Hours to days | Ongoing | | Code generation | Directly possible | Not directly | Not directly | | Testing | Produces testable specs | Produces insights | Produces guidance |
These techniques are complementary: EventStorming to explore/understand | DDD Strategic Design to identify contexts | Event Modeling to design implementation within each context.
Preparation: Invite developers + product owner + domain experts + UX designer | Duration: 2-4 hours (new system), 1-2 hours (feature) | Tools: Miro (digital) or large wall with colored stickies | Pre-work: brief domain introduction (2-3 sentences)
Flow: Intro (5 min): explain colors and phases | Event brainstorm (15 min): everyone writes, place on timeline | Organize (10 min): cluster, de-duplicate, identify gaps | Commands & Views (20 min): blue and green stickies | Wire it up (10 min): draw arrows showing data flow | Automations (10 min): policies and external systems | Given/When/Then (20 min): specs for key slices | Review (10 min): walk through entire model as narrative
Common mistakes: Too many events at once (start with happy path) | Technical events instead of business language | Skipping views (read models as important as commands) | Not involving business people | Jumping to implementation before finishing model
testing
Runs feature-scoped mutation testing to validate test suite quality. Use after implementation to verify tests catch real bugs (kill rate >= 80%).
development
Canonical AT completeness gate — research-anchored 7-category taxonomy (C1-C7) + 15-item mechanical checklist. Paradigm-neutral. Drives acceptance-designer reviewer verdict deterministically.
development
Canonical AT completeness gate — research-anchored 7-category taxonomy (C1-C7) + 15-item mechanical checklist. Paradigm-neutral. Drives acceptance-designer reviewer verdict deterministically.
testing
Methodology for minimizing test count while maximizing behavioral coverage - behavior definition, anti-pattern catalog, consolidation patterns, stopping criterion, coverage-preserving validation