Event Storming 101: A Comprehensive Guide for Engineers, Architects, and Technical Leaders¶
Event Storming is a powerful technique used to explore complex domains, enabling the discovery and design of systems through collaborative workshops. It's a tool that brings together domain experts and technical teams to map out the flow of events in a business process, leading to a shared understanding and a blueprint for system design. In this guide, we'll dive into the core aspects of Event Storming, providing insights and practical tips to help you leverage this approach effectively.
Understanding Event Storming¶
Event Storming is an agile, lightweight, and highly visual workshop format aimed at achieving a comprehensive understanding of complex domains. Originating from the Domain-Driven Design (DDD) community, it's particularly effective for uncovering hidden knowledge and aligning teams on a shared vision.
Key Concepts¶
- Domain Events: These are crucial occurrences within the business domain, typically described in past tense (e.g., "Order Placed").
- Commands: Actions that trigger events, initiated by users or systems (e.g., "Place Order").
- Aggregates: These are clusters of domain objects that can be treated as a single unit (e.g., "Order").
- Policies: Rules that determine how events should be handled or triggered.
- Read Models: Representations of data that are optimized for reading operations.
Workshop Setup¶
- Participants: Include domain experts, developers, architects, and stakeholders.
- Materials: Use a large workspace, sticky notes, and markers to facilitate collaboration.
- Facilitation: A skilled facilitator guides the session, ensuring focus and encouraging contributions from all participants.
Event Storming Process¶
1. Big Picture Event Storming¶
This initial stage aims to explore the entire domain at a high level. It's about capturing all possible events without diving into details.
flowchart TD
A[Identify Domain Experts] --> B[Gather Participants]
B --> C[Define Scope]
C --> D[Collect Domain Events]
D --> E[Visualize on Timeline]
E --> F[Identify Gaps & Dependencies]
2. Process Level Event Storming¶
Here, you delve deeper into specific processes, identifying commands, events, and aggregates in detail.
sequenceDiagram
participant User
participant System
User->>System: Trigger Command
System->>System: Validate Command
System->>System: Generate Event
System->>User: Confirm Action
3. Design Level Event Storming¶
This phase focuses on designing the system architecture based on the insights gathered. It involves defining bounded contexts, aggregates, and interactions.
classDiagram
class Command {
+execute()
}
class Event {
+timestamp
+eventData
}
class Aggregate {
-state
+apply(Event e)
}
Command --> Event
Event --> Aggregate
Implementing Event Storming Insights¶
From Events to Architecture¶
The insights gained from Event Storming can be translated into software architecture, ensuring alignment with business processes and goals.
C4 Container Diagram¶
C4Container
title System Architecture Overview
Container_Boundary(c0, "E-commerce System") {
Container(c1, "Web Application", "React", "User Interface")
Container(c2, "API Gateway", "Node.js", "API Management")
Container(c3, "Order Service", "Java", "Handles order processing")
Container(c4, "Payment Service", "Python", "Processes payments")
Container(c5, "Inventory Service", "C#", "Manages inventory levels")
}
c1 --> c2: API Calls
c2 --> c3: REST API
c3 --> c4: Event
c3 --> c5: Event
Best Practices for Effective Event Storming¶
- Engage Stakeholders: Ensure that all relevant stakeholders are involved and actively participating.
- Facilitate Open Communication: Create an environment where participants feel comfortable sharing their knowledge and insights.
- Iterate and Refine: Use iterative cycles to refine the understanding of the domain and improve the design.
- Document and Share: Capture the insights and decisions made during the workshop and share them with the broader team.
Conclusion¶
Event Storming is a transformative technique for understanding complex domains and designing robust systems. By fostering collaboration and leveraging visual tools, it helps uncover hidden knowledge, align teams, and create systems that are both scalable and aligned with business objectives. As a strategic leader, incorporating Event Storming into your toolkit can significantly enhance your ability to deliver technical excellence and drive organizational success.
Remember, the goal of Event Storming is not just to map out events, but to enable a shared understanding and a collective vision that drives meaningful change and innovation within your organization.