What is Software Design Event Storming?
Event Storming is a collaborative technique used in software design to visualize and explore complex business processes and systems. It involves stakeholders from various domains to create a shared understanding of the system's behavior and requirements. Here are the key concepts of Event Storming:
1. Domain Events
- Definition: Events that signify something important that has happened within the domain. They are usually expressed in the past tense (e.g., "Order Placed").
- Purpose: Capture business events that trigger state changes in the system.
2. Commands
- Definition: Actions that a user or system can take that lead to a domain event (e.g., "Place Order").
- Purpose: Represent intentions that result in changes to the state of the system.
3. Aggregates
- Definition: A cluster of domain objects that can be treated as a single unit (e.g., an Order and its Line Items).
- Purpose: Manage and encapsulate the state and behavior related to a specific business concept.
4. Read Models
- Definition: Projections or representations of data that are optimized for reading, allowing users to retrieve information easily.
- Purpose: Support queries and reporting, typically using a different structure than the domain model.
5. Bounded Contexts
- Definition: The explicit boundary within which a particular model is defined and applicable. Different bounded contexts may have different models for the same concept.
- Purpose: Help manage complexity by organizing different areas of the system that can evolve independently.
6. Policy
- Definition: Rules or business logic that govern how commands and events interact, such as workflows or validations.
- Purpose: Enforce business rules and ensure the system behaves as expected.
7. Actors
- Definition: Users or systems that interact with the domain, initiating commands and responding to events.
- Purpose: Identify who is involved in the processes being modeled.
8. Timeline
- Definition: A visual representation of events as they occur over time, helping to illustrate the sequence and causality of events.
- Purpose: Provide context and facilitate understanding of how events unfold.
Process of Event Storming
1. Gather Stakeholders: Involve business experts, developers, and other stakeholders.
2. Identify Domain Events: Start with domain events and write them on sticky notes.
3. Add Commands: Identify the commands that lead to these events.
4. Define Aggregates: Group related domain events into aggregates.
5. Explore Read Models: Discuss how information will be read and structured.
6. Identify Policies and Actors: Determine the business rules and who interacts with the system.
7. Review and Iterate: Continuously refine the model through discussions.
Benefits
- Shared Understanding: Creates a common vocabulary and understanding among all stakeholders.
- Early Problem Detection: Helps identify inconsistencies and issues early in the design process.
- Enhanced Collaboration: Encourages teamwork and communication across different domains.
By utilizing Event Storming, teams can achieve a clearer picture of system requirements and design, leading to more effective and efficient software solutions.