Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: November 6, 2024
Event storming is a collaborative workshop method for domain exploration that helps teams model complex systems. Unlike traditional methods such as Entity-Relationship Diagrams or Unified Modeling Language, which often focus on static structures and require extensive planning, event storming is fast, interactive, and focuses on domain events as the core building blocks.
In this tutorial, we’ll explore the basics of event storming, discuss its benefits and shortcomings, and go through an example.
Event storming is popular in Domain-Driven Design because it encourages creativity, allows rapid discovery of key concepts, and promotes teamwork.
Created by Alberto Brandolini, event storming helps teams model complex business processes by mapping out events, interactions, and domain relationships.
It’s a workshop approach that brings together diverse perspectives to create a visual, event-driven model of a domain.
There are three types of event-storming workshops.
In big-picture event storming, we focus on mapping the entire system, giving a high-level overview.
In contrast, process-level event storming focuses on specific workflows or processes within the system.
Finally, in design-level event storming, we handle detailed sessions to create an implementable domain model.
Let’s take a look at each of these types in more detail.
Big-picture event storming maps out the broad structure of our system by focusing on events that highlight key actions within the domain.
For instance, in a food delivery application, we can start by identifying the events occurring from when a user signs up to completing their first order. This approach helps us capture the essential flow and understand the system’s core interactions:
The goal is to create an overview of the domain by listing all major events.
The participants are owners, developers, domain experts, and stakeholders, each bringing a unique perspective to the process. Product owners and stakeholders provide strategic insights, while domain experts contribute in-depth knowledge of business processes. Developers then translate these ideas into actionable design elements.
The outcome of this event storming is a holistic understanding of the system and potential opportunities for improvement.
Once we have the big picture, we can dive into specific workflows. In process-level event storming, we take one process and examine each step in more detail.
For example, in our food delivery app example, we can examine the details of Order Placement:
The goal is to gain a more in-depth understanding of the system’s workflows.
Participants typically include developers and subject matter experts who specialize in the specific workflow being analyzed.
The expected outcome is the discovery of process bottlenecks, exceptions, and dependencies.
In design-level storming, we move from abstract processes to designing a detailed, technical model.
For instance, in our order placement example, we’ll add specifics like aggregates, commands, and policies that will ultimately inform our application’s structure:
The goal of design-level event storming is to develop an implementable model.
Developers and architects participate in this process. The desired outcome is a domain model aligned with business needs and ready for development.
Event storming relies on color-coded sticky notes, where each color represents a different type of information in our domain:
| Component | Color | Purpose |
|---|---|---|
| Events | Orange | Represents critical occurrences within the system. |
| Commands | Blue | Actions that initiate events (typically user actions or system triggers). |
| Aggregates | Yellow | Key domain objects managing events and data. |
| Policies | Green | Rules governing the interaction between commands and events. |
| External Systems | Pink | Integrations with third-party services or external systems. |
Using these categories helps us visualize the flow of information and interactions within our system.
For example, the events capture essential actions within the domain, such as Order Created or Payment Processed in our food delivery app. Commands trigger these events, like Place Order or Confirm Delivery. We use aggregates to represent core domain objects, such as User Account and Order, that manage data and handle system events.
Policies introduce conditional rules that shape how commands and events interact. For instance, that’s Free Delivery for High-Value Orders in our app. Finally, external systems represent connections with outside services, showing where our domain interacts with third-party providers. Examples are Payment Gateway and GPS Service in our food delivery application.
Now that we know the types and key concepts, let’s learn how to set up an event-storming workshop.
To get started, we’ll need a large, open space where everyone can contribute. Storming works best when participants are active, so consider using a wall or large whiteboard to display sticky notes.
We’ll need sticky notes of different colors (orange, blue, yellow, green, pink), markers, adhesive tape, and large paper rolls or whiteboards. Once our materials are ready, we’ll arrange the sticky notes by color and leave enough room on the board for each workflow segment.
Clear goals keep the session focused.
In our food delivery app example, we aim to understand the customer journey from order placement to delivery. In a big-picture session, we identify events from user registration through to completed orders, while process-level workshops might focus on just one part, such as payment processing.
It’s essential to keep the session aligned with the intended scope. For example, going into specific details during a big-picture workshop can distract us from understanding the overall flow.
A diverse group improves outcomes as each participant brings a unique perspective:
However, not all roles participate in every type of session.
For instance, in a big-picture session, stakeholders and domain experts are crucial in outlining the overall workflow. Similarly, developers and architects are more involved in process-level and design-level sessions, where technical details come into focus.
Now that we set up the theory, let’s use the food delivery app as an example.
Events are the foundation of Event Storming. We start by identifying key actions in the Order Workflow of our food delivery app, such as:
We must encourage everyone to add events that seem essential to the workflow. This step helps us build a common understanding of how each part of the system interacts.
Once we have the core events, we add commands that trigger these events. Commands are typically user actions or system prompts. In our example, we might have:
By mapping commands to events, we can see how users and systems interact in each phase.
Policies represent business rules that dictate when commands should trigger events. So, policies capture the decision points in the workflow.
Here are a few examples:
Adding policies lets us refine the model to reflect real-world conditions and business rules.
Next, we identify aggregates or groups of related entities. Aggregates are crucial for managing data and business logic.
For our food delivery app, we might define aggregates such as user account, order, and delivery. We also add external systems, such as a Payment Gateway for processing payments or a GPS Service for delivery tracking.
Mapping aggregates and external systems shows how different entities and external services interact in our app.
With our events, commands, policies, aggregates, and external systems mapped out, we now discuss and refine the model.
This step involves reviewing each event to confirm its relevance and accuracy. So, we should encourage participants to ask questions, challenge assumptions, and suggest improvements.
Event storming offers several benefits for domain modeling, making it a preferred choice in many projects. First, it enables quick understanding; unlike traditional methods, event storming delivers fast, actionable insights into complex domains. Additionally, the process encourages cross-functional collaboration, involving participants from various roles to include all perspectives.
This collaborative approach fosters domain knowledge sharing, allowing domain experts and developers to align on requirements and goals, which helps reduce the need for rework down the line. Finally, the structured output from an event storming session often translates seamlessly into actionable design elements, improving the overall software design and development process.
However, event storming has some limitations. Its success depends on group dynamics, and session effectiveness depends on participants’ domain knowledge and engagement. If discussions become too detailed in a big-picture session or if participants lack expertise in a design-focused session, we may lose focus.
Additionally, event storming may miss finer technical details that emerge later. Therefore, it’s most effective as a complementary rather than a standalone approach.
In this tutorial, we explored event storming as a hands-on, visual approach to domain-driven design. Through our food delivery app example, we saw how to use event storming to map out events, commands, policies, and aggregates in a practical, collaborative setting.
One of the most significant advantages of event storming is its ability to create a shared understanding among diverse team members, from developers to domain experts. This shared view not only accelerates insights into the domain but also ensures that everyone is aligned on goals and requirements, reducing miscommunication and rework. We can use event storming to model a new system or improve an existing one.