nw-ddd-event-modeling
Event Modeling facilitation technique — brainstorm events, identify commands and views, define aggregate boundaries, write Given-When-Then specifications
Best use case
nw-ddd-event-modeling is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Event Modeling facilitation technique — brainstorm events, identify commands and views, define aggregate boundaries, write Given-When-Then specifications
Teams using nw-ddd-event-modeling should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/nw-ddd-event-modeling/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How nw-ddd-event-modeling Compares
| Feature / Agent | nw-ddd-event-modeling | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Event Modeling facilitation technique — brainstorm events, identify commands and views, define aggregate boundaries, write Given-When-Then specifications
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Event Modeling
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.
## Key Properties
- **Collaborative**: Everyone participates (devs, business, UX)
- **Visual**: Colored elements on a timeline (physical or digital board)
- **Timeline-based**: Events arranged chronologically, left to right
- **Spec-generating**: Model directly produces testable Given/When/Then specifications
- **Technology-agnostic**: Describes WHAT happens, not HOW it's implemented
## The Color System
| 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 |
## Four Phases
### Phase 1: Event Brainstorming (10-20 min)
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**:
- Start with the happy path -- what happens when everything goes right?
- Then add error/exception events
- Ask: "What happens before this? What happens after?"
- Business people identify events developers miss
- Don't worry about order precision -- rough chronological is fine
**Example timeline**:
```
Timeline ─────────────────────────────────────────────────>
[CustomerRegistered] [ItemAddedToCart] [OrderPlaced] [PaymentReceived]
[ItemRemovedFromCart] [PaymentFailed]
[OrderCancelled] [OrderConfirmed]
[ItemShipped]
[RefundRequested]
```
### Phase 2: Commands and Views (15-25 min)
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
```
### Phase 3: Automations and Integrations (10-15 min)
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.
### Phase 4: Given/When/Then Specifications (10-20 min)
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)
## Four Information Flow Patterns
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.
## From Model to Vertical Slices
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
## Specification Patterns
**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
## Event Modeling vs Other Techniques
| 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.
## Session Facilitation Guide
**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 modelRelated Skills
nw-fp-domain-modeling
Domain modeling with algebraic data types, smart constructors, and type-level error handling
nw-ddd-eventsourcing
Event Sourcing and CQRS as DDD implementation patterns — when to use, aggregate event streams, projections, snapshots, sagas, upcasting, conflict resolution
nw-ux-web-patterns
Web UI design patterns for product owners. Load when designing web application interfaces, writing web-specific acceptance criteria, or evaluating responsive designs.
nw-ux-tui-patterns
Terminal UI and CLI design patterns for product owners. Load when designing command-line tools, interactive terminal applications, or writing CLI-specific acceptance criteria.
nw-ux-principles
Core UX principles for product owners. Load when evaluating interface designs, writing acceptance criteria with UX requirements, or reviewing wireframes and mockups.
nw-ux-emotional-design
Emotional design and delight patterns for product owners. Load when designing onboarding flows, empty states, first-run experiences, or evaluating the emotional quality of an interface.
nw-ux-desktop-patterns
Desktop application UI patterns for product owners. Load when designing native or cross-platform desktop applications, writing desktop-specific acceptance criteria, or evaluating panel layouts and keyboard workflows.
nw-user-story-mapping
User story mapping for backlog management and outcome-based prioritization. Load during Phase 2.5 (User Story Mapping) to produce story-map.md and prioritization.md.
nw-tr-review-criteria
Review dimensions and scoring for root cause analysis quality assessment
nw-tlaplus-verification
TLA+ formal verification for design correctness and PBT pipeline integration
nw-test-refactoring-catalog
Detailed refactoring mechanics with step-by-step procedures, and test code smell catalog with detection patterns and before/after examples
nw-test-organization-conventions
Test directory structure patterns by architecture style, language conventions, naming rules, and fixture placement. Decision tree for selecting test organization strategy.