@eventmodelers/cli 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -0
- package/cli.js +676 -0
- package/package.json +35 -0
- package/shared/build-kit/code-export.mjs +560 -0
- package/shared/build-kit/lib/ollama-agent.js +147 -0
- package/shared/build-kit/package.json +11 -0
- package/shared/build-kit/ralph-ollama.js +39 -0
- package/shared/build-kit/realtime-agent.js +18 -0
- package/stacks/axon/templates/.claude/skills/build-automation/SKILL.md +407 -0
- package/stacks/axon/templates/.claude/skills/build-automation/references/feature-flag-patterns.md +114 -0
- package/stacks/axon/templates/.claude/skills/build-automation-workflow/SKILL.md +496 -0
- package/stacks/axon/templates/.claude/skills/build-automation-workflow/references/axon-workflow-api.md +279 -0
- package/stacks/axon/templates/.claude/skills/build-automation-workflow/references/feature-flag-patterns.md +114 -0
- package/stacks/axon/templates/.claude/skills/build-state-change/SKILL.md +396 -0
- package/stacks/axon/templates/.claude/skills/build-state-change/references/axon-test-fixture-patterns.md +162 -0
- package/stacks/axon/templates/.claude/skills/build-state-change/references/feature-flag-patterns.md +56 -0
- package/stacks/axon/templates/.claude/skills/build-state-change/references/rest-api-patterns.md +115 -0
- package/stacks/axon/templates/.claude/skills/build-state-view/SKILL.md +282 -0
- package/stacks/axon/templates/.claude/skills/connect/SKILL.md +178 -0
- package/stacks/axon/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +611 -0
- package/stacks/axon/templates/.claude/skills/load-slice/SKILL.md +141 -0
- package/stacks/axon/templates/.claude/skills/update-slice-status/SKILL.md +105 -0
- package/stacks/axon/templates/build-kit/lib/AGENT.md +47 -0
- package/stacks/axon/templates/build-kit/lib/agent.sh +20 -0
- package/stacks/axon/templates/build-kit/lib/backend-prompt.md +158 -0
- package/stacks/axon/templates/build-kit/lib/prompt.md +126 -0
- package/stacks/axon/templates/build-kit/lib/ralph.js +369 -0
- package/stacks/axon/templates/build-kit/ralph-claude.js +44 -0
- package/stacks/axon/templates/build-kit/ralph.sh +98 -0
- package/stacks/axon/templates/root/.env.example +5 -0
- package/stacks/axon/templates/root/CLAUDE.md +60 -0
- package/stacks/axon/templates/root/README.md +44 -0
- package/stacks/axon/templates/root/docker-compose.yml +64 -0
- package/stacks/axon/templates/root/mvnw +259 -0
- package/stacks/axon/templates/root/mvnw.cmd +149 -0
- package/stacks/axon/templates/root/pom.xml +125 -0
- package/stacks/axon/templates/root/src/main/java/io/axoniq/quickstart/QuickstartApplication.java +128 -0
- package/stacks/axon/templates/root/src/main/java/io/axoniq/quickstart/config/WebConfig.java +155 -0
- package/stacks/axon/templates/root/src/main/resources/application.properties +2 -0
- package/stacks/axon/templates/root/src/main/resources/static/bg-body.png +0 -0
- package/stacks/axon/templates/root/src/main/resources/static/bg-header.png +0 -0
- package/stacks/axon/templates/root/src/main/resources/static/index.html +596 -0
- package/stacks/cratis-csharp/templates/.claude/skills/_shared/cratis-conventions.md +251 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-automation/SKILL.md +99 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-automation/references/patterns.md +115 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-state-change/SKILL.md +163 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-state-change/references/patterns.md +234 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-state-view/SKILL.md +120 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-state-view/references/patterns.md +166 -0
- package/stacks/cratis-csharp/templates/.claude/skills/connect/SKILL.md +169 -0
- package/stacks/cratis-csharp/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +609 -0
- package/stacks/cratis-csharp/templates/.claude/skills/load-slice/SKILL.md +141 -0
- package/stacks/cratis-csharp/templates/.claude/skills/update-slice-status/SKILL.md +105 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/AGENT.md +58 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/agent.sh +20 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/backend-prompt.md +129 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/prompt.md +124 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/ralph.js +302 -0
- package/stacks/cratis-csharp/templates/build-kit/ralph-claude.js +37 -0
- package/stacks/cratis-csharp/templates/build-kit/ralph.sh +98 -0
- package/stacks/cratis-csharp/templates/root/.frontend/index.css +29 -0
- package/stacks/cratis-csharp/templates/root/.frontend/index.html +17 -0
- package/stacks/cratis-csharp/templates/root/.frontend/main.tsx +18 -0
- package/stacks/cratis-csharp/templates/root/.frontend/tsconfig.json +42 -0
- package/stacks/cratis-csharp/templates/root/.frontend/tsconfig.node.json +11 -0
- package/stacks/cratis-csharp/templates/root/.frontend/vite.config.ts +56 -0
- package/stacks/cratis-csharp/templates/root/App.tsx +23 -0
- package/stacks/cratis-csharp/templates/root/CLAUDE.md +62 -0
- package/stacks/cratis-csharp/templates/root/CratisApp.csproj +25 -0
- package/stacks/cratis-csharp/templates/root/CratisApp.sln +18 -0
- package/stacks/cratis-csharp/templates/root/GlobalUsings.cs +3 -0
- package/stacks/cratis-csharp/templates/root/Home.tsx +102 -0
- package/stacks/cratis-csharp/templates/root/Program.cs +26 -0
- package/stacks/cratis-csharp/templates/root/README.md +192 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/AllListings.ts +47 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/Listing.cs +11 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/Listing.ts +12 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/ListingDataTable.tsx +17 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/index.ts +1 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/Register.ts +51 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/RegisterDialog.tsx +18 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/Registration.cs +27 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/index.ts +1 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/SomeFeature.tsx +22 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/SomeName.cs +3 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/index.ts +1 -0
- package/stacks/cratis-csharp/templates/root/appsettings.Development.json +9 -0
- package/stacks/cratis-csharp/templates/root/appsettings.json +26 -0
- package/stacks/cratis-csharp/templates/root/docker-compose.yml +23 -0
- package/stacks/cratis-csharp/templates/root/package.json +33 -0
- package/stacks/cratis-csharp/templates/root/tsconfig.json +3 -0
- package/stacks/modeling-kit/templates/.claude/settings.local.json +13 -0
- package/stacks/modeling-kit/templates/.claude/skills/analyze-existing-model/SKILL.md +215 -0
- package/stacks/modeling-kit/templates/.claude/skills/attributes/SKILL.md +176 -0
- package/stacks/modeling-kit/templates/.claude/skills/connect/SKILL.md +182 -0
- package/stacks/modeling-kit/templates/.claude/skills/discover-storyboard/SKILL.md +383 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-applying-conways-law/SKILL.md +465 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/SKILL.md +587 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/references/facilitating-event-modeling-workshops.md +626 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/SKILL.md +542 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-event-models/SKILL.md +497 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md +783 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/SKILL.md +604 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/SKILL.md +699 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-integrating-legacy-systems/SKILL.md +674 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/SKILL.md +231 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/domain-patterns.md +150 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/patterns.md +329 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/snapshotting.md +204 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/SKILL.md +352 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/references/project-planning-with-event-modeling.md +341 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-plotting-events/SKILL.md +153 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/SKILL.md +136 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/examples.md +78 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/patterns.md +85 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/SKILL.md +655 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-translating-external-events/SKILL.md +479 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models/SKILL.md +234 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models-checklist/SKILL.md +353 -0
- package/stacks/modeling-kit/templates/.claude/skills/examples/SKILL.md +200 -0
- package/stacks/modeling-kit/templates/.claude/skills/handle-comment/SKILL.md +94 -0
- package/stacks/modeling-kit/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +441 -0
- package/stacks/modeling-kit/templates/.claude/skills/place-element/SKILL.md +290 -0
- package/stacks/modeling-kit/templates/.claude/skills/storyboard/SKILL.md +212 -0
- package/stacks/modeling-kit/templates/.claude/skills/storyboard-screen/SKILL.md +123 -0
- package/stacks/modeling-kit/templates/.claude/skills/timeline/SKILL.md +353 -0
- package/stacks/modeling-kit/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
- package/stacks/modeling-kit/templates/.claude/skills/wdyt/SKILL.md +134 -0
- package/stacks/modeling-kit/templates/kit/lib/agent.sh +20 -0
- package/stacks/modeling-kit/templates/kit/lib/ollama-agent.js +147 -0
- package/stacks/modeling-kit/templates/kit/lib/ralph.js +286 -0
- package/stacks/modeling-kit/templates/kit/package.json +12 -0
- package/stacks/modeling-kit/templates/kit/ralph-claude.js +50 -0
- package/stacks/modeling-kit/templates/kit/ralph-ollama.js +38 -0
- package/stacks/modeling-kit/templates/kit/ralph.sh +61 -0
- package/stacks/modeling-kit/templates/kit/realtime-agent.js +18 -0
- package/stacks/modeling-kit/templates/root/CLAUDE.md +56 -0
- package/stacks/node/templates/.claude/skills/build-automation/SKILL.md +266 -0
- package/stacks/node/templates/.claude/skills/build-state-change/SKILL.md +344 -0
- package/stacks/node/templates/.claude/skills/build-state-view/SKILL.md +412 -0
- package/stacks/node/templates/.claude/skills/connect/SKILL.md +178 -0
- package/stacks/node/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +628 -0
- package/stacks/node/templates/.claude/skills/load-slice/SKILL.md +143 -0
- package/stacks/node/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
- package/stacks/node/templates/build-kit/README.md +86 -0
- package/stacks/node/templates/build-kit/lib/AGENT.md +47 -0
- package/stacks/node/templates/build-kit/lib/agent.sh +20 -0
- package/stacks/node/templates/build-kit/lib/backend-prompt.md +152 -0
- package/stacks/node/templates/build-kit/lib/prompt.md +122 -0
- package/stacks/node/templates/build-kit/lib/ralph.js +369 -0
- package/stacks/node/templates/build-kit/ralph-claude.js +44 -0
- package/stacks/node/templates/build-kit/ralph.sh +98 -0
- package/stacks/node/templates/root/.env.example +15 -0
- package/stacks/node/templates/root/CLAUDE.md +60 -0
- package/stacks/node/templates/root/docker-compose.yml +15 -0
- package/stacks/node/templates/root/flyway.conf +17 -0
- package/stacks/node/templates/root/migrations/V1__schema.sql.example +12 -0
- package/stacks/node/templates/root/package.json +50 -0
- package/stacks/node/templates/root/server.ts +130 -0
- package/stacks/node/templates/root/setup-env.sh +53 -0
- package/stacks/node/templates/root/src/common/assertions.ts +6 -0
- package/stacks/node/templates/root/src/common/db.ts +32 -0
- package/stacks/node/templates/root/src/common/loadPostgresEventstore.ts +23 -0
- package/stacks/node/templates/root/src/common/parseEndpoint.ts +51 -0
- package/stacks/node/templates/root/src/common/processorDlq.ts +28 -0
- package/stacks/node/templates/root/src/common/realtimeBroadcast.ts +12 -0
- package/stacks/node/templates/root/src/common/replay.ts +16 -0
- package/stacks/node/templates/root/src/common/routes.ts +19 -0
- package/stacks/node/templates/root/src/common/testHelpers.ts +44 -0
- package/stacks/node/templates/root/src/swagger.ts +34 -0
- package/stacks/node/templates/root/src/util/assertions.ts +6 -0
- package/stacks/node/templates/root/src/util/hash.ts +9 -0
- package/stacks/node/templates/root/src/util/sanitize.ts +23 -0
- package/stacks/node/templates/root/tsconfig.json +32 -0
- package/stacks/node/templates/root/vercel.json +8 -0
- package/stacks/supabase/templates/.claude/skills/build-automation/SKILL.md +266 -0
- package/stacks/supabase/templates/.claude/skills/build-state-change/SKILL.md +344 -0
- package/stacks/supabase/templates/.claude/skills/build-state-view/SKILL.md +390 -0
- package/stacks/supabase/templates/.claude/skills/build-webhook/SKILL.md +303 -0
- package/stacks/supabase/templates/.claude/skills/connect/SKILL.md +178 -0
- package/stacks/supabase/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +628 -0
- package/stacks/supabase/templates/.claude/skills/load-slice/SKILL.md +143 -0
- package/stacks/supabase/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
- package/stacks/supabase/templates/build-kit/README.md +86 -0
- package/stacks/supabase/templates/build-kit/lib/AGENT.md +47 -0
- package/stacks/supabase/templates/build-kit/lib/agent.sh +20 -0
- package/stacks/supabase/templates/build-kit/lib/backend-prompt.md +152 -0
- package/stacks/supabase/templates/build-kit/lib/prompt.md +123 -0
- package/stacks/supabase/templates/build-kit/lib/ralph.js +369 -0
- package/stacks/supabase/templates/build-kit/ralph-claude.js +44 -0
- package/stacks/supabase/templates/build-kit/ralph.sh +98 -0
- package/stacks/supabase/templates/root/.env.example +22 -0
- package/stacks/supabase/templates/root/CLAUDE.md +61 -0
- package/stacks/supabase/templates/root/flyway.conf +17 -0
- package/stacks/supabase/templates/root/package.json +52 -0
- package/stacks/supabase/templates/root/server.ts +177 -0
- package/stacks/supabase/templates/root/setup-env.sh +53 -0
- package/stacks/supabase/templates/root/src/common/assertions.ts +6 -0
- package/stacks/supabase/templates/root/src/common/db.ts +32 -0
- package/stacks/supabase/templates/root/src/common/loadPostgresEventstore.ts +23 -0
- package/stacks/supabase/templates/root/src/common/parseEndpoint.ts +51 -0
- package/stacks/supabase/templates/root/src/common/processorDlq.ts +28 -0
- package/stacks/supabase/templates/root/src/common/realtimeBroadcast.ts +19 -0
- package/stacks/supabase/templates/root/src/common/replay.ts +16 -0
- package/stacks/supabase/templates/root/src/common/routes.ts +23 -0
- package/stacks/supabase/templates/root/src/common/testHelpers.ts +54 -0
- package/stacks/supabase/templates/root/src/supabase/README.md +141 -0
- package/stacks/supabase/templates/root/src/supabase/api.ts +56 -0
- package/stacks/supabase/templates/root/src/supabase/requireOrgaAdmin.ts +32 -0
- package/stacks/supabase/templates/root/src/supabase/requireSysUser.ts +40 -0
- package/stacks/supabase/templates/root/src/supabase/requireUser.ts +72 -0
- package/stacks/supabase/templates/root/src/swagger.ts +34 -0
- package/stacks/supabase/templates/root/src/util/assertions.ts +6 -0
- package/stacks/supabase/templates/root/src/util/hash.ts +9 -0
- package/stacks/supabase/templates/root/src/util/sanitize.ts +23 -0
- package/stacks/supabase/templates/root/supabase/config.toml +295 -0
- package/stacks/supabase/templates/root/supabase/migrations/V1__schema.sql.example +12 -0
- package/stacks/supabase/templates/root/supabase/seed.sql +1 -0
- package/stacks/supabase/templates/root/tsconfig.json +32 -0
- package/stacks/supabase/templates/root/vercel.json +8 -0
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
# Facilitating Event Modeling Workshops
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Event Modeling is fundamentally a collaborative workshop process. This guide helps facilitators run efficient, effective workshops across all 7 steps.
|
|
6
|
+
|
|
7
|
+
## Pre-Workshop Preparation
|
|
8
|
+
|
|
9
|
+
### 1. Select Participants
|
|
10
|
+
|
|
11
|
+
**Required Roles**:
|
|
12
|
+
- **Product Owner/Domain Expert**: Business rules, priorities, constraints
|
|
13
|
+
- **Developers** (2-3): Technical feasibility, implementation concerns
|
|
14
|
+
- **QA/Tester** (1-2): Test coverage, edge cases
|
|
15
|
+
- **Facilitator** (1): Keeps pace, ensures shared understanding
|
|
16
|
+
|
|
17
|
+
**Optional Participants**:
|
|
18
|
+
- **UX Designer**: User workflows, interface considerations
|
|
19
|
+
- **Security Lead**: Sensitive data handling, compliance
|
|
20
|
+
- **Operations**: Deployment, monitoring, scaling
|
|
21
|
+
- **Customer/User**: Real-world perspective (for workshops with actual users)
|
|
22
|
+
|
|
23
|
+
**Group Size**: 5-8 people is ideal
|
|
24
|
+
- Too small: Miss perspectives
|
|
25
|
+
- Too large: Hard to facilitate
|
|
26
|
+
|
|
27
|
+
### 2. Pre-Workshop Communication
|
|
28
|
+
|
|
29
|
+
Send to participants before workshop:
|
|
30
|
+
```
|
|
31
|
+
Subject: Event Modeling Workshop - [Domain Name]
|
|
32
|
+
|
|
33
|
+
Hi team,
|
|
34
|
+
|
|
35
|
+
We're running an Event Modeling workshop to design the [Domain] system.
|
|
36
|
+
|
|
37
|
+
Date: [Date]
|
|
38
|
+
Duration: [Hours]
|
|
39
|
+
Location: [Physical/Virtual]
|
|
40
|
+
|
|
41
|
+
Please prepare by thinking about:
|
|
42
|
+
- What workflows happen in this system?
|
|
43
|
+
- What events could occur?
|
|
44
|
+
- What's important about state changes?
|
|
45
|
+
- Questions you have about requirements
|
|
46
|
+
|
|
47
|
+
No prior Event Modeling experience needed!
|
|
48
|
+
|
|
49
|
+
Looking forward to seeing you there.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 3. Prepare Workspace
|
|
53
|
+
|
|
54
|
+
**Physical Workshop**:
|
|
55
|
+
```
|
|
56
|
+
Setup:
|
|
57
|
+
- Large whiteboard or wall space (8+ feet wide)
|
|
58
|
+
- Sticky notes (multiple colors for events, commands, views)
|
|
59
|
+
- Markers (bold colors)
|
|
60
|
+
- Timer visible
|
|
61
|
+
- Cameras for documentation
|
|
62
|
+
|
|
63
|
+
Layout:
|
|
64
|
+
- Stand-up around board
|
|
65
|
+
- Facilitator at board
|
|
66
|
+
- Everyone can see and contribute
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Virtual Workshop**:
|
|
70
|
+
```
|
|
71
|
+
Tools:
|
|
72
|
+
- Miro, Figma, or similar
|
|
73
|
+
- Video conference (Zoom, Teams, etc.)
|
|
74
|
+
- Shared document (for notes)
|
|
75
|
+
|
|
76
|
+
Setup:
|
|
77
|
+
- Everyone can see canvas
|
|
78
|
+
- All can create/edit
|
|
79
|
+
- Recording enabled (for reference)
|
|
80
|
+
- Chat open for side discussions
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 4. Create Templates
|
|
84
|
+
|
|
85
|
+
Prepare sticky note templates or digital shapes:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Physical sticky notes:
|
|
89
|
+
[Green] Event: ________________
|
|
90
|
+
|
|
91
|
+
[Blue] Command: ________________
|
|
92
|
+
|
|
93
|
+
[Orange] View: ________________
|
|
94
|
+
|
|
95
|
+
Virtual shapes:
|
|
96
|
+
Same colors with text fields
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Workshop Facilitation by Step
|
|
100
|
+
|
|
101
|
+
### Step 1: Brainstorming Events (15-20 minutes)
|
|
102
|
+
|
|
103
|
+
**Objective**: Identify all domain events (state changes)
|
|
104
|
+
|
|
105
|
+
**Facilitation Flow**:
|
|
106
|
+
|
|
107
|
+
1. **Set Context** (2 min)
|
|
108
|
+
```
|
|
109
|
+
"We're going to envision what this system does. Imagine it's running
|
|
110
|
+
for years—what events happen? What important state changes?
|
|
111
|
+
|
|
112
|
+
An event is something that changed the state. Not just something
|
|
113
|
+
that happened, but something that MATTERS because it changed things.
|
|
114
|
+
|
|
115
|
+
Everyone write down any events you think of."
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
2. **Free Brainstorm** (8-10 min)
|
|
119
|
+
- Participants call out events
|
|
120
|
+
- You write on board or digital canvas
|
|
121
|
+
- No filtering yet! Capture everything
|
|
122
|
+
- Encourage "What about..." questions
|
|
123
|
+
- Example responses:
|
|
124
|
+
- "Customer placed order" → Write: "OrderCreated"
|
|
125
|
+
- "Order was confirmed" → Write: "OrderConfirmed"
|
|
126
|
+
- "What about customer viewed page?" → "Let's capture it for now, we'll refine"
|
|
127
|
+
|
|
128
|
+
3. **Gentle Filtering** (5-7 min)
|
|
129
|
+
```
|
|
130
|
+
"Now let's think about these. An event is something that actually
|
|
131
|
+
changed the state. Let me ask about some:
|
|
132
|
+
|
|
133
|
+
'Customer viewed catalog' - did this change anything?
|
|
134
|
+
Person: Not really...
|
|
135
|
+
You: Right, viewing doesn't change anything. But if they SELECTED
|
|
136
|
+
an item, that changes their cart. That's 'ItemAddedToCart'.
|
|
137
|
+
|
|
138
|
+
'System checked inventory' - did this change system state?
|
|
139
|
+
Person: No, it's internal...
|
|
140
|
+
You: Exactly, internal checks don't count. But when we ACTUALLY
|
|
141
|
+
reserved inventory, that's a state change: 'InventoryReserved'.
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
4. **Capture Insights** - Add notes on WHY events matter
|
|
145
|
+
- Identify stream roots (Order, Payment, Review, etc.)
|
|
146
|
+
- Document any questions for domain expert
|
|
147
|
+
|
|
148
|
+
**Timing Guide**:
|
|
149
|
+
- Tight groups: 12-15 min
|
|
150
|
+
- Complex domains: 20-25 min
|
|
151
|
+
- Always watch time—keep moving
|
|
152
|
+
|
|
153
|
+
### Step 2: Plotting Events (Timeline)
|
|
154
|
+
|
|
155
|
+
**Objective**: Order events into a timeline (process flow)
|
|
156
|
+
|
|
157
|
+
**Facilitation Flow**:
|
|
158
|
+
|
|
159
|
+
1. **Establish Order** (5 min)
|
|
160
|
+
```
|
|
161
|
+
"Let's put these events in order. What happens first?"
|
|
162
|
+
|
|
163
|
+
Guide conversation:
|
|
164
|
+
"Before we can confirm an order, what must happen?"
|
|
165
|
+
→ "Order must be created first"
|
|
166
|
+
|
|
167
|
+
"So the sequence is?"
|
|
168
|
+
→ Lead to: OrderCreated → OrderConfirmed
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
2. **Handle Branches** (5 min)
|
|
172
|
+
```
|
|
173
|
+
"Can different things happen from here?"
|
|
174
|
+
|
|
175
|
+
"What if payment fails?"
|
|
176
|
+
→ "PaymentFailed event"
|
|
177
|
+
→ This creates branching paths
|
|
178
|
+
|
|
179
|
+
Draw branching clearly:
|
|
180
|
+
OrderConfirmed
|
|
181
|
+
→ PaymentAuthorized → (success path)
|
|
182
|
+
→ PaymentFailed → (failure path)
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
3. **Identify Parallel Flows** (5 min)
|
|
186
|
+
```
|
|
187
|
+
"Do these happen at the same time or one after another?"
|
|
188
|
+
|
|
189
|
+
Example:
|
|
190
|
+
"Once payment is authorized, what happens?"
|
|
191
|
+
→ "Inventory reserved"
|
|
192
|
+
→ "Email sent"
|
|
193
|
+
→ Can these happen in parallel? Usually yes!
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Don't get stuck** on exact timing—the point is the logical flow.
|
|
197
|
+
|
|
198
|
+
### Step 3: Storyboarding (UI Mockups)
|
|
199
|
+
|
|
200
|
+
**Objective**: Visualize what users see
|
|
201
|
+
|
|
202
|
+
**Facilitation Flow**:
|
|
203
|
+
|
|
204
|
+
1. **Pick First Screen** (2 min)
|
|
205
|
+
```
|
|
206
|
+
"Let's think about the UI. What's the first screen the user sees?"
|
|
207
|
+
→ "Order entry form"
|
|
208
|
+
|
|
209
|
+
"Who draws?"
|
|
210
|
+
→ Can be anyone, or facilitator
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
2. **Draw and Label** (5 min)
|
|
214
|
+
```
|
|
215
|
+
Draw on board:
|
|
216
|
+
|
|
217
|
+
Order Entry Form
|
|
218
|
+
|
|
219
|
+
Customer: [_______]
|
|
220
|
+
Items: [___] [___]
|
|
221
|
+
[Submit]
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
Label each field:
|
|
225
|
+
Customer ← from CreateOrder command
|
|
226
|
+
Items ← user selection
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
3. **Trace Data** (3 min)
|
|
230
|
+
```
|
|
231
|
+
"Where does this data go?"
|
|
232
|
+
→ "Into the event"
|
|
233
|
+
→ "Then what screen shows next?"
|
|
234
|
+
→ Draw: Confirmation screen with same data
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
4. **Identify Missing** (2 min)
|
|
238
|
+
```
|
|
239
|
+
"Can we see everything we need on this screen?"
|
|
240
|
+
→ If missing: "We'll need to add that to the event"
|
|
241
|
+
→ Add to list of clarifications
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Time per screen**: 5-7 minutes (don't perfect, iterate)
|
|
245
|
+
|
|
246
|
+
### Step 4: Identifying Inputs (Commands)
|
|
247
|
+
|
|
248
|
+
**Objective**: Map user actions to commands
|
|
249
|
+
|
|
250
|
+
**Facilitation Flow**:
|
|
251
|
+
|
|
252
|
+
1. **Extract from Storyboards** (5 min)
|
|
253
|
+
```
|
|
254
|
+
"Looking at the screens, what are users doing?"
|
|
255
|
+
→ "Clicking Submit" → "CreateOrder command"
|
|
256
|
+
→ "Selecting payment" → "ConfirmOrder command"
|
|
257
|
+
|
|
258
|
+
Write commands clearly
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
2. **Identify Processor Inputs** (5 min)
|
|
262
|
+
```
|
|
263
|
+
"What does the system do automatically?"
|
|
264
|
+
→ "Check payment gateway" → "AuthorizePayment command"
|
|
265
|
+
→ "Reserve inventory" → "ReserveInventory command"
|
|
266
|
+
|
|
267
|
+
Mark these as [ Automation]
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
3. **Specify Data** (5 min)
|
|
271
|
+
```
|
|
272
|
+
"For each command, what data does it need?"
|
|
273
|
+
|
|
274
|
+
CreateOrder needs:
|
|
275
|
+
- customerId (from form/session)
|
|
276
|
+
- items (from form selection)
|
|
277
|
+
- shippingAddress (from form)
|
|
278
|
+
|
|
279
|
+
Write this clearly
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
4. **Validation Questions** (5 min)
|
|
283
|
+
```
|
|
284
|
+
"What validation must pass?"
|
|
285
|
+
|
|
286
|
+
CreateOrder:
|
|
287
|
+
- Customer must exist
|
|
288
|
+
- Items must not be empty
|
|
289
|
+
- Address must be complete
|
|
290
|
+
|
|
291
|
+
Write these as business rules
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Step 5: Identifying Outputs (Events & Views)
|
|
295
|
+
|
|
296
|
+
**Objective**: Specify events and read models
|
|
297
|
+
|
|
298
|
+
**Facilitation Flow**:
|
|
299
|
+
|
|
300
|
+
1. **Events from Commands** (5 min)
|
|
301
|
+
```
|
|
302
|
+
"For each command, what event happens?"
|
|
303
|
+
|
|
304
|
+
CreateOrder → OrderCreated (what fields?)
|
|
305
|
+
Specify exactly what fields:
|
|
306
|
+
- orderId (generated)
|
|
307
|
+
- customerId (from command)
|
|
308
|
+
- items (from command)
|
|
309
|
+
- total (calculated)
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
2. **Read Models** (5 min)
|
|
313
|
+
```
|
|
314
|
+
"What views do users need?"
|
|
315
|
+
→ "Order status view"
|
|
316
|
+
→ "Order list view"
|
|
317
|
+
→ "Order detail view"
|
|
318
|
+
|
|
319
|
+
"What data in each?"
|
|
320
|
+
→ Status view: All order details
|
|
321
|
+
→ List view: Summary only
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
3. **Event → View Mapping** (5 min)
|
|
325
|
+
```
|
|
326
|
+
"OrderCreated → Status View shows:"
|
|
327
|
+
- orderId
|
|
328
|
+
- items
|
|
329
|
+
- total
|
|
330
|
+
- status=Draft
|
|
331
|
+
|
|
332
|
+
"OrderConfirmed → Status View updates:"
|
|
333
|
+
- status=Confirmed
|
|
334
|
+
- confirmedAt timestamp
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Step 6: Apply Conway's Law (System Boundaries)
|
|
338
|
+
|
|
339
|
+
**Objective**: Identify systems and responsibilities
|
|
340
|
+
|
|
341
|
+
**Facilitation Flow**:
|
|
342
|
+
|
|
343
|
+
1. **Ask the Question** (2 min)
|
|
344
|
+
```
|
|
345
|
+
"Who does what?"
|
|
346
|
+
|
|
347
|
+
"Is payment something WE do or does an external system?"
|
|
348
|
+
→ If external: PaymentGateway system
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
2. **Draw Boundaries** (5 min)
|
|
352
|
+
```
|
|
353
|
+
Visually separate:
|
|
354
|
+
|
|
355
|
+
Our System:
|
|
356
|
+
Order service
|
|
357
|
+
Inventory service
|
|
358
|
+
Notification service
|
|
359
|
+
|
|
360
|
+
External:
|
|
361
|
+
Payment gateway
|
|
362
|
+
Fulfillment provider
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
3. **Clarify Ownership** (5 min)
|
|
366
|
+
```
|
|
367
|
+
"Which system owns each event?"
|
|
368
|
+
|
|
369
|
+
OrderCreated → Our Order system
|
|
370
|
+
PaymentAuthorized → Payment system (external) or our bridge?
|
|
371
|
+
InventoryReserved → Our Inventory system
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
4. **Identify Team Structure** (5 min)
|
|
375
|
+
```
|
|
376
|
+
"Who builds what?"
|
|
377
|
+
|
|
378
|
+
→ Team A: Order service
|
|
379
|
+
→ Team B: Payment processor
|
|
380
|
+
→ Team C: Inventory management
|
|
381
|
+
|
|
382
|
+
Boundaries = team boundaries (Conway's Law)
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### Step 7: Elaborating Scenarios (Given-When-Then)
|
|
386
|
+
|
|
387
|
+
**Objective**: Specify behavior with Gherkin format
|
|
388
|
+
|
|
389
|
+
**Facilitation Flow**:
|
|
390
|
+
|
|
391
|
+
1. **Happy Path First** (8 min)
|
|
392
|
+
```
|
|
393
|
+
"Let's write the success case. What's the normal flow?"
|
|
394
|
+
|
|
395
|
+
Scenario: Create order successfully
|
|
396
|
+
Given: Customer exists, products exist
|
|
397
|
+
When: Customer creates order with items
|
|
398
|
+
Then: OrderCreated event produced, status=Draft
|
|
399
|
+
|
|
400
|
+
Write on board/doc with team reviewing
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
2. **Failure Cases** (8 min)
|
|
404
|
+
```
|
|
405
|
+
"What can go wrong?"
|
|
406
|
+
|
|
407
|
+
Scenario: Reject with invalid customer
|
|
408
|
+
Given: Customer ID doesn't exist
|
|
409
|
+
When: CreateOrder attempted
|
|
410
|
+
Then: Command rejected, no event
|
|
411
|
+
|
|
412
|
+
→ Quick, obvious failures
|
|
413
|
+
→ Don't overthink
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
3. **State Validation** (5 min)
|
|
417
|
+
```
|
|
418
|
+
"What if the order is in wrong state?"
|
|
419
|
+
|
|
420
|
+
Scenario: Can't confirm already-confirmed order
|
|
421
|
+
Given: Order already in Confirmed state
|
|
422
|
+
When: Confirm attempted again
|
|
423
|
+
Then: Rejected
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
4. **Alternative Paths** (5 min)
|
|
427
|
+
```
|
|
428
|
+
"Any different ways this could work?"
|
|
429
|
+
|
|
430
|
+
Scenario: Can't confirm order with no payment method
|
|
431
|
+
Scenario: Can retry if payment fails
|
|
432
|
+
|
|
433
|
+
Capture alternatives quickly
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
**Time**: 5-7 min per command/view, don't perfect
|
|
437
|
+
|
|
438
|
+
## Facilitation Techniques
|
|
439
|
+
|
|
440
|
+
### Handling Different Personalities
|
|
441
|
+
|
|
442
|
+
**Quiet developers**:
|
|
443
|
+
- Direct question: "Alex, what do you think about this?"
|
|
444
|
+
- Don't embarrass, just engage
|
|
445
|
+
- "Good point, add that"
|
|
446
|
+
|
|
447
|
+
**Dominating voices**:
|
|
448
|
+
- Politely redirect: "Thanks, let me get input from others"
|
|
449
|
+
- "Interesting, let's capture that and check with the team"
|
|
450
|
+
- Keep energy high so they feel heard
|
|
451
|
+
|
|
452
|
+
**Skeptics**:
|
|
453
|
+
- Take seriously: "What's your concern?"
|
|
454
|
+
- Don't dismiss: "That's valid, let's think about it"
|
|
455
|
+
- Sometimes reveal real issues
|
|
456
|
+
|
|
457
|
+
**Idea-generators**:
|
|
458
|
+
- Capture everything: "Good ideas, adding them"
|
|
459
|
+
- Sort later: Don't slow momentum
|
|
460
|
+
- "We'll come back to that"
|
|
461
|
+
|
|
462
|
+
### Keeping Energy & Pace
|
|
463
|
+
|
|
464
|
+
```
|
|
465
|
+
Good pacing:
|
|
466
|
+
- 5-7 min per item (not 20 min perfecting one detail)
|
|
467
|
+
- Move quickly between steps
|
|
468
|
+
- Regular breaks (every 45-60 min)
|
|
469
|
+
- Stand, don't sit (keeps energy up)
|
|
470
|
+
|
|
471
|
+
Warning signs of bad pacing:
|
|
472
|
+
- People checking phones
|
|
473
|
+
- Someone talking endlessly
|
|
474
|
+
- "Um... let me think..." (too hard)
|
|
475
|
+
- Fatigue setting in
|
|
476
|
+
|
|
477
|
+
Recovery:
|
|
478
|
+
- Take 10-min break
|
|
479
|
+
- Change activity (switch from drawing to writing)
|
|
480
|
+
- Refocus on goals: "We're 60% done, here's what we still need"
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### Dealing with Disagreement
|
|
484
|
+
|
|
485
|
+
```
|
|
486
|
+
Situation: Two people disagree on event
|
|
487
|
+
|
|
488
|
+
Option A: "Both are valid? Can we combine?"
|
|
489
|
+
Option B: "Let's see if later steps clarify?"
|
|
490
|
+
Option C: "Let's note both and revisit"
|
|
491
|
+
|
|
492
|
+
Don't: Get stuck on one issue
|
|
493
|
+
Do: Keep moving, document decision
|
|
494
|
+
|
|
495
|
+
Decision-making:
|
|
496
|
+
1. If there's a clear right answer → Use it
|
|
497
|
+
2. If reasonable people disagree → Document both, move on
|
|
498
|
+
3. If it doesn't matter now → Defer to implementation team
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
## Remote Workshop Adaptations
|
|
502
|
+
|
|
503
|
+
### Virtual vs. Physical
|
|
504
|
+
|
|
505
|
+
**Advantages of virtual**:
|
|
506
|
+
- Can record (perfect reference)
|
|
507
|
+
- Can save digital artifacts
|
|
508
|
+
- Easier for distributed teams
|
|
509
|
+
- Can use video recordings in onboarding
|
|
510
|
+
|
|
511
|
+
**Challenges**:
|
|
512
|
+
- Less natural interaction
|
|
513
|
+
- Harder to facilitate drawing
|
|
514
|
+
- Zoom fatigue
|
|
515
|
+
- Side conversations harder
|
|
516
|
+
|
|
517
|
+
**Adaptations**:
|
|
518
|
+
```
|
|
519
|
+
1. Shorter sessions (90 min instead of 4 hours)
|
|
520
|
+
2. More breaks (10 min every 30 min)
|
|
521
|
+
3. Structured input (everyone adds ideas before discussing)
|
|
522
|
+
4. Clearer roles (one person drawing, one taking notes)
|
|
523
|
+
5. Recording on (for those who can't attend live)
|
|
524
|
+
6. Async follow-up (give people time to digest)
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
## Post-Workshop
|
|
528
|
+
|
|
529
|
+
### Immediate (Same Day)
|
|
530
|
+
|
|
531
|
+
1. **Capture on Document** - Photograph/screenshot all artifacts
|
|
532
|
+
- Type up handwritten notes
|
|
533
|
+
- Create digital version of diagram
|
|
534
|
+
|
|
535
|
+
2. **Share with Team** - Everyone gets copy
|
|
536
|
+
- Add notes: "Why did we choose this?"
|
|
537
|
+
- Link to recordings
|
|
538
|
+
|
|
539
|
+
3. **Identify Gaps** - Note unclear items
|
|
540
|
+
- Schedule quick follow-up if needed
|
|
541
|
+
|
|
542
|
+
### Follow-Up (1-2 Days)
|
|
543
|
+
|
|
544
|
+
1. **Distribute Summary** - What we covered
|
|
545
|
+
- Key decisions
|
|
546
|
+
- Outstanding questions
|
|
547
|
+
|
|
548
|
+
2. **Request Feedback** - Any clarifications needed?
|
|
549
|
+
- Anything we missed?
|
|
550
|
+
- Concerns?
|
|
551
|
+
|
|
552
|
+
3. **Next Steps** - Next workshop scheduled?
|
|
553
|
+
- Who's doing design/implementation?
|
|
554
|
+
- When do we start?
|
|
555
|
+
|
|
556
|
+
## Multi-Day Workshop Schedule
|
|
557
|
+
|
|
558
|
+
For large or complex projects:
|
|
559
|
+
|
|
560
|
+
```
|
|
561
|
+
Day 1 (Steps 1-3): 4 hours
|
|
562
|
+
- 9am-10am: Brainstorming events (Step 1)
|
|
563
|
+
- 10am-11am: Plotting timeline (Step 2)
|
|
564
|
+
- Break: 11am-11:15am
|
|
565
|
+
- 11:15am-1pm: Storyboarding (Step 3)
|
|
566
|
+
- Lunch: 1pm-2pm
|
|
567
|
+
|
|
568
|
+
Day 2 (Steps 4-7): 4 hours
|
|
569
|
+
- 9am-10am: Identifying inputs (Step 4)
|
|
570
|
+
- 10am-11am: Identifying outputs (Step 5)
|
|
571
|
+
- Break: 11am-11:15am
|
|
572
|
+
- 11:15am-12:30pm: System boundaries (Step 6)
|
|
573
|
+
- 12:30pm-1pm: Scenario planning (Step 7 intro)
|
|
574
|
+
- Lunch/break
|
|
575
|
+
|
|
576
|
+
Day 3 (Scenarios & Polish): 3 hours
|
|
577
|
+
- 9am-12pm: Elaborate scenarios (Step 7, detailed)
|
|
578
|
+
- Document findings
|
|
579
|
+
- Plan next steps
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
## Facilitation Checklist
|
|
583
|
+
|
|
584
|
+
### Before Workshop
|
|
585
|
+
- [ ] Invitations sent 1 week prior
|
|
586
|
+
- [ ] Right people confirmed attending
|
|
587
|
+
- [ ] Room/tech tested
|
|
588
|
+
- [ ] Materials prepared (sticky notes, markers, templates)
|
|
589
|
+
- [ ] Facilitator briefing done
|
|
590
|
+
- [ ] Objectives clear to all
|
|
591
|
+
|
|
592
|
+
### During Workshop
|
|
593
|
+
- [ ] Started on time
|
|
594
|
+
- [ ] Explained purpose and format
|
|
595
|
+
- [ ] Each step has clear objective
|
|
596
|
+
- [ ] Captured everything (photo/digital)
|
|
597
|
+
- [ ] Timing maintained (didn't get stuck)
|
|
598
|
+
- [ ] Everyone participated
|
|
599
|
+
- [ ] Energy and engagement stayed high
|
|
600
|
+
- [ ] Decisions documented
|
|
601
|
+
- [ ] Ended on time
|
|
602
|
+
|
|
603
|
+
### After Workshop
|
|
604
|
+
- [ ] Artifacts digitized and shared
|
|
605
|
+
- [ ] Summary created
|
|
606
|
+
- [ ] Gaps identified
|
|
607
|
+
- [ ] Feedback requested
|
|
608
|
+
- [ ] Next steps scheduled
|
|
609
|
+
- [ ] Team has clear deliverables
|
|
610
|
+
|
|
611
|
+
## Success Indicators
|
|
612
|
+
|
|
613
|
+
**Good workshop**:
|
|
614
|
+
- Everyone participated
|
|
615
|
+
- Decisions were made and documented
|
|
616
|
+
- Artifacts created and shared
|
|
617
|
+
- Team understands the model
|
|
618
|
+
- Clear next steps
|
|
619
|
+
- Energy was good throughout
|
|
620
|
+
|
|
621
|
+
**Needs improvement**:
|
|
622
|
+
- Some people quiet the whole time
|
|
623
|
+
- Unclear what we decided
|
|
624
|
+
- No clear artifacts
|
|
625
|
+
- "Are we building this in Java or Python?" (forgotten basics)
|
|
626
|
+
- People left tired/frustrated
|