Events first
Start with what happened in the business, not with the class structure.
Event Storming is a collaborative modeling workshop technique built around domain events, commands, actors, policies, and hotspots. It helps teams discover flow, language, boundaries, and confusion before the implementation calcifies assumptions.
Order placement, payment failure, shipment delay, refund approval, and customer notification are easier to reason about as domain events than as speculative class hierarchies. Event Storming often reveals hidden actors, missing policies, and natural context boundaries.
Event Storming is valuable because it starts with business events: what happened? That helps people discuss flow and responsibility in domain language. Commands, policies, aggregates, and hotspots then emerge around those events. The technique often exposes where teams disagree on meaning or where the flow feels too tangled for one model.
It is especially effective early in design or during major refactoring because it creates shared visibility around the problem before code details dominate the conversation.
Start with what happened in the business, not with the class structure.
Confusion and disagreement are not workshop failures. They are design signals.
Repeated clusters of events and policies often hint at context boundaries.
OrderPlaced → PaymentAuthorized → InventoryReserved → ShipmentPlanned → CustomerNotified. A workshop then asks which commands triggered those events, who issued them, which policies reacted, and where the responsibilities truly belong.
package org.javaomnibus.ecommerce.events;
public record OrderPlaced(String orderId) {}
public record PaymentAuthorized(String orderId) {}
public record InventoryReserved(String orderId) {}
public record ShipmentPlanned(String orderId) {}