Skip to content

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

  1. Domain Events: These are crucial occurrences within the business domain, typically described in past tense (e.g., "Order Placed").
  2. Commands: Actions that trigger events, initiated by users or systems (e.g., "Place Order").
  3. Aggregates: These are clusters of domain objects that can be treated as a single unit (e.g., "Order").
  4. Policies: Rules that determine how events should be handled or triggered.
  5. Read Models: Representations of data that are optimized for reading operations.

Workshop Setup

  1. Participants: Include domain experts, developers, architects, and stakeholders.
  2. Materials: Use a large workspace, sticky notes, and markers to facilitate collaboration.
  3. 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

  1. Engage Stakeholders: Ensure that all relevant stakeholders are involved and actively participating.
  2. Facilitate Open Communication: Create an environment where participants feel comfortable sharing their knowledge and insights.
  3. Iterate and Refine: Use iterative cycles to refine the understanding of the domain and improve the design.
  4. 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.