Event Storming - whole model
eshop-event-storming · blueprint v2.8 · generated 2026-11-04 11:23 UTC

Overview

Event Storming board for the whole model: what happens (events), what asks for it (commands) and what reacts (policies), on Big Picture, Process Modelling and Software Design.

The example below is one real story of this model, An order is placed, paid and shipped (PRC001); read it left to right.

How to read

actor: Shopper Shopper
Actor ordering.ACT001 (Shopper): starts the story
command: Create Order Create Order
Command ordering.CMD001 (Create Order): a request; it raises the event
event: Order Started Order Started
Event ordering.EVT001 (Order Started): has happened; the policy reacts
policy: When an order starts, empty the basket When an orderstarts, empty thebasket
Policy: reacts by issuing the next command
command: Empty Basket Empty Basket
Command basket.CMD001 (Empty Basket): the next request, issued by the policy

No hotspots on Big Picture: the model raises no risk or open question here.

Not drawn as stickies on Big Picture: bounded contexts (4), a context names a grouping rather than a sticky, and none of them claims an event; swimlanes (1), drawn as the lanes themselves, not as stickies.

The following pages contain the level inventories, the legend, readable lane figures and model gaps.

Level
Lane
Kind
Big Picture - Event Storming board Big Picture The story spine, and what no story reaches. 20 of 20 stickies drawn · model implementation: 0 as-is · 0 wip · 0 to-be · 0 unclear · 20 unstated of 20 default Systems not on a story path (5) system: basket-api basket apiSVC005SVC005 system: catalog-api catalog apiSVC003SVC003 system: order-processor order processorSVC002SVC002 system: ordering-api ordering apiSVC001SVC001 system: payment-processor paymentprocessorSVC004SVC004 time ordering An order is placed, paid and shipped actor: Shopper Shopperordering.ACT001ordering.ACT001 event: Order Started Order Startedordering.EVT001ordering.EVT001integration event event: Order Submitted Order Submittedordering.EVT009ordering.EVT009domain event +integration event event: Grace Period Confirmed Grace PeriodConfirmedordering.EVT003ordering.EVT003integration event event: Order Awaiting Validation Order AwaitingValidationordering.EVT010ordering.EVT010domain event +integration event event: Order Stock Rejected Order StockRejectedcatalog.EVT002catalog.EVT002integration event event: Order Stock Confirmed Order StockConfirmedcatalog.EVT001catalog.EVT001integration event event: Order Moved To Stock Confirmed Order Moved ToStock Confirmedordering.EVT011ordering.EVT011domain event +integration event event: Order Payment Failed Order PaymentFailedpayment.EVT002payment.EVT002integration event event: Order Payment Succeeded Order PaymentSucceededpayment.EVT001payment.EVT001integration event event: Order Paid Order Paidordering.EVT012ordering.EVT012domain event +integration event event: Order Shipped Order Shippedordering.EVT014ordering.EVT014domain event +integration event event: Order Cancelled Order Cancelledordering.EVT013ordering.EVT013domain event +integration event Actors not on a story path (2) actor: Grace period clock Grace period clockordering.ACT002ordering.ACT002 actor: Fulfilment operator Fulfilmentoperatorordering.ACT003ordering.ACT003 Legend actor system event event (integration) actor (time) Render notes data gap - no-hotspots; the board draws what the model states and nothing more bounded_contexts (4) is not drawn: a context names a grouping rather than a sticky, and none of them claims an event swimlanes (1) is not drawn: drawn as the lanes themselves, not as stickies
Process Modelling - Event Storming board Process Modelling The story spine, and what no story reaches. 47 of 47 stickies drawn · model implementation: 0 as-is · 0 wip · 0 to-be · 0 unclear · 47 unstated of 47 basket Commands not on a story path (2) command: Update Basket Update Basketbasket.CMD002basket.CMD002 command: Delete Basket Delete Basketbasket.CMD003basket.CMD003 Policies not on a story path (1) policy: When an order starts, empty the basket When an orderstarts, empty thebasketbasket.CMD001basket.CMD001 Read Models not on a story path (1) read_model: Get Basket Get Basketbasket.QRY001basket.QRY001 catalog Policies not on a story path (2) policy: When an order awaits validation, check its stock When an orderawaits validation,check its stockcatalog.CMD001catalog.CMD001 policy: When an order is paid, take its units out of stock When an order ispaid, take its unitsout of stockcatalog.CMD002catalog.CMD002 default Systems not on a story path (5) system: basket-api basket apiSVC005SVC005 system: catalog-api catalog apiSVC003SVC003 system: order-processor order processorSVC002SVC002 system: ordering-api ordering apiSVC001SVC001 system: payment-processor paymentprocessorSVC004SVC004 time ordering An order is placed, paid and shipped actor: Shopper Shopperordering.ACT001ordering.ACT001 command: Create Order Create Orderordering.CMD001ordering.CMD001 event: Order Started Order Startedordering.EVT001ordering.EVT001integration event event: Order Submitted Order Submittedordering.EVT009ordering.EVT009domain event +integration event command: Empty Basket Empty Basketbasket.CMD001basket.CMD001 actor: Grace period clock Grace period clockordering.ACT002ordering.ACT002 command: Confirm Grace Period Confirm GracePeriodordering.CMD002ordering.CMD002 event: Grace Period Confirmed Grace PeriodConfirmedordering.EVT003ordering.EVT003integration event command: Set Awaiting Validation Set AwaitingValidationordering.CMD003ordering.CMD003 event: Order Awaiting Validation Order AwaitingValidationordering.EVT010ordering.EVT010domain event +integration event command: Check Order Stock Check Order Stockcatalog.CMD001catalog.CMD001 event: Order Stock Rejected Order StockRejectedcatalog.EVT002catalog.EVT002integration event event: Order Stock Confirmed Order StockConfirmedcatalog.EVT001catalog.EVT001integration event command: Set Stock Confirmed Set StockConfirmedordering.CMD004ordering.CMD004 event: Order Moved To Stock Confirmed Order Moved ToStock Confirmedordering.EVT011ordering.EVT011domain event +integration event command: Process Payment Process Paymentpayment.CMD001payment.CMD001 event: Order Payment Failed Order PaymentFailedpayment.EVT002payment.EVT002integration event event: Order Payment Succeeded Order PaymentSucceededpayment.EVT001payment.EVT001integration event command: Set Paid Set Paidordering.CMD006ordering.CMD006 event: Order Paid Order Paidordering.EVT012ordering.EVT012domain event +integration event command: Remove Stock Remove Stockcatalog.CMD002catalog.CMD002 actor: Fulfilment operator Fulfilmentoperatorordering.ACT003ordering.ACT003 command: Ship Order Ship Orderordering.CMD008ordering.CMD008 event: Order Shipped Order Shippedordering.EVT014ordering.EVT014domain event +integration event command: Set Stock Rejected Set Stock Rejectedordering.CMD005ordering.CMD005 command: Cancel Order Cancel Orderordering.CMD007ordering.CMD007 event: Order Cancelled Order Cancelledordering.EVT013ordering.EVT013domain event +integration event Policies not on a story path (5) policy: When the grace period is over, ask for stock When the graceperiod is over, askfor stockordering.CMD003ordering.CMD003 policy: When stock is confirmed, ask for payment When stock isconfirmed, ask forpaymentordering.CMD004ordering.CMD004 policy: When stock is rejected, cancel the order When stock isrejected, cancelthe orderordering.CMD005ordering.CMD005 policy: When payment succeeds, mark the order paid When paymentsucceeds, markthe order paidordering.CMD006ordering.CMD006 policy: When payment fails, cancel the order When paymentfails, cancel theorderordering.CMD007ordering.CMD007 Read Models not on a story path (3) read_model: Submitted Orders Submitted Ordersordering.DOC001ordering.DOC001 read_model: Get My Orders Get My Ordersordering.QRY001ordering.QRY001 read_model: Get Order Get Orderordering.QRY002ordering.QRY002 payment Policies not on a story path (1) policy: When stock is confirmed, take the payment When stock isconfirmed, takethe paymentpayment.CMD001payment.CMD001 Legend actor system command event policy read model event (integration) actor (time) read model (Operation) Render notes data gap - no-hotspots; the board draws what the model states and nothing more bounded_contexts (4) is not drawn: a context names a grouping rather than a sticky, and none of them claims an event swimlanes (1) is not drawn: drawn as the lanes themselves, not as stickies
Software Design - Event Storming board Software Design The story spine, and what no story reaches. 57 of 57 stickies drawn · model implementation: 0 as-is · 0 wip · 0 to-be · 0 unclear · 55 unstated of 55 basket Commands not on a story path (2) command: Update Basket Update Basketbasket.CMD002basket.CMD002 command: Delete Basket Delete Basketbasket.CMD003basket.CMD003 Policies not on a story path (1) policy: When an order starts, empty the basket When an orderstarts, empty thebasketbasket.CMD001basket.CMD001 Read Models not on a story path (1) read_model: Get Basket Get Basketbasket.QRY001basket.QRY001 catalog Policies not on a story path (2) policy: When an order awaits validation, check its stock When an orderawaits validation,check its stockcatalog.CMD001catalog.CMD001 policy: When an order is paid, take its units out of stock When an order ispaid, take its unitsout of stockcatalog.CMD002catalog.CMD002 default Systems not on a story path (5) system: basket-api basket apiSVC005SVC005 system: catalog-api catalog apiSVC003SVC003 system: order-processor order processorSVC002SVC002 system: ordering-api ordering apiSVC001SVC001 system: payment-processor paymentprocessorSVC004SVC004 time ordering An order is placed, paid and shipped actor: Shopper Shopperordering.ACT001ordering.ACT001 command: Create Order Create Orderordering.CMD001ordering.CMD001 event: Order Started Order Startedordering.EVT001ordering.EVT001integration event event: Order Submitted Order Submittedordering.EVT009ordering.EVT009domain event event: Order Status Changed To Submitted Order StatusChanged ToSubmittedordering.EVT002ordering.EVT002integration event command: Empty Basket Empty Basketbasket.CMD001basket.CMD001 actor: Grace period clock Grace period clockordering.ACT002ordering.ACT002 command: Confirm Grace Period Confirm GracePeriodordering.CMD002ordering.CMD002 event: Grace Period Confirmed Grace PeriodConfirmedordering.EVT003ordering.EVT003integration event command: Set Awaiting Validation Set AwaitingValidationordering.CMD003ordering.CMD003 event: Order Awaiting Validation Order AwaitingValidationordering.EVT010ordering.EVT010domain event event: Order Status Changed To Awaiting Validation Order StatusChanged ToAwaitingValidationordering.EVT004ordering.EVT004integration event command: Check Order Stock Check Order Stockcatalog.CMD001catalog.CMD001 event: Order Stock Rejected Order StockRejectedcatalog.EVT002catalog.EVT002integration event event: Order Stock Confirmed Order StockConfirmedcatalog.EVT001catalog.EVT001integration event command: Set Stock Confirmed Set StockConfirmedordering.CMD004ordering.CMD004 event: Order Moved To Stock Confirmed Order Moved ToStock Confirmedordering.EVT011ordering.EVT011domain event event: Order Status Changed To Stock Confirmed Order StatusChanged To StockConfirmedordering.EVT005ordering.EVT005integration event command: Process Payment Process Paymentpayment.CMD001payment.CMD001 event: Order Payment Failed Order PaymentFailedpayment.EVT002payment.EVT002integration event event: Order Payment Succeeded Order PaymentSucceededpayment.EVT001payment.EVT001integration event command: Set Paid Set Paidordering.CMD006ordering.CMD006 event: Order Paid Order Paidordering.EVT012ordering.EVT012domain event event: Order Status Changed To Paid Order StatusChanged To Paidordering.EVT006ordering.EVT006integration event command: Remove Stock Remove Stockcatalog.CMD002catalog.CMD002 actor: Fulfilment operator Fulfilmentoperatorordering.ACT003ordering.ACT003 command: Ship Order Ship Orderordering.CMD008ordering.CMD008 event: Order Shipped Order Shippedordering.EVT014ordering.EVT014domain event event: Order Status Changed To Shipped Order StatusChanged ToShippedordering.EVT008ordering.EVT008integration event command: Set Stock Rejected Set Stock Rejectedordering.CMD005ordering.CMD005 command: Cancel Order Cancel Orderordering.CMD007ordering.CMD007 event: Order Cancelled Order Cancelledordering.EVT013ordering.EVT013domain event event: Order Status Changed To Cancelled Order StatusChanged ToCancelledordering.EVT007ordering.EVT007integration event Orderno rule statedconstraint: Order Buyerno rule statedconstraint: Buyer Policies not on a story path (5) policy: When the grace period is over, ask for stock When the graceperiod is over, askfor stockordering.CMD003ordering.CMD003 policy: When stock is confirmed, ask for payment When stock isconfirmed, ask forpaymentordering.CMD004ordering.CMD004 policy: When stock is rejected, cancel the order When stock isrejected, cancelthe orderordering.CMD005ordering.CMD005 policy: When payment succeeds, mark the order paid When paymentsucceeds, markthe order paidordering.CMD006ordering.CMD006 policy: When payment fails, cancel the order When paymentfails, cancel theorderordering.CMD007ordering.CMD007 Read Models not on a story path (3) read_model: Submitted Orders Submitted Ordersordering.DOC001ordering.DOC001 read_model: Get My Orders Get My Ordersordering.QRY001ordering.QRY001 read_model: Get Order Get Orderordering.QRY002ordering.QRY002 Hotspots not on a story path (2) hotspot: [ordering.QN001] Who ships an order? The ship endpoint exists and no user interface in the repository calls it. [ordering QN001] Who shipsan order? Theship endpoint…ordering.QN001ordering.QN001 hotspot: [ordering.QN002] Should a stock-rejected cancellation be published like any other cancellation? [ordering QN002] Should astock rejectedcancellation b…ordering.QN002ordering.QN002 payment Policies not on a story path (1) policy: When stock is confirmed, take the payment When stock isconfirmed, takethe paymentpayment.CMD001payment.CMD001 published as Legend actor system command event policy read model constraint hotspot event (integration) actor (time) hotspot (question) read model (Operation) Render notes data gap - no-hotspots; the board draws what the model states and nothing more 5 translation arrows carry no "published as" label: no place beside the line is clear of the stickies the board draws 0 of 2 hotspots beside what the model says they affect; 2 are in a heap the model states a lifecycle for 0 of 2 hotspots here: 0 settled (a risk it closed, an inquiry it resolved or closed), 0 still open; 2 state none bounded_contexts (4) is not drawn: a context names a grouping rather than a sticky, and none of them claims an event swimlanes (1) is not drawn: drawn as the lanes themselves, not as stickies

Printed whole to fit the sheet. The report and the PDF delivered beside this page print it at reading size.

Sticky kinds

  • Actorswho acts
  • Systemswhat it runs on
  • Commandswhat is asked for
  • Eventswhat happened
  • Policieswhat reacts
  • Read Modelswhat is looked at
  • Aggregateswhat enforces
  • Hotspotsa concern raised about this system

Marks a sticky can carry

  • event (integration)published across a service boundary: it has an audience outside this context
  • actor (time)a schedule or an elapsed period, acting when it comes due
  • read model (Operation)
  • hotspot (question)a domain question the model leaves unanswered
scroll to zoom · drag to pan