Skip to content
Event storming templates

Event Storm — Hotel Booking

Reservation, payment authorisation and front desk for a hotel group, surfacing a search command that changes nothing and an authorisation expiry no command produces.

Template previewEvent storming
Hotel booking — reservation to checkoutBounded contexts3Domain events6Event coverage66.7%Hotspots3Model smells3Domain eventCommandActorAggregatePolicyRead modelExternal systemHotspotReservation1 event · 2 commands · 1 policy · 1 hotspotBookingPayments2 events · 1 command · 1 policy · 1 hotspotPayment authorisationFront desk3 events · 2 commands · 0 policies · 1 hotspotStayGuestSearch availabilityRate and availabilitycalendarGuestConfirm bookingBooking confirmedChannel managerDo we hold inventoryduring a 20-minutepayment retry?When bookingconfirmed, authorisecardPayment serviceAuthorise cardCard authorisedAuthorisation expiredAcquirer gatewayWho chases a failedpre-authorisation at2am?When card authorised,allocate roomHousekeeping systemAllocate roomRoom allocatedReceptionistCheck guest inGuest checked inArrivals boardGuest checked outLate checkout — whoauthorises thecharge?Workshop checksEvents with no producing command2Authorisation expired · Guest checked outCommands with no resulting event1Search availabilityCommands with no aggregate0noneAggregates with no events0nonePolicies with a missing trigger event0nonePolicies with a missing command0noneHotspots per context3Reservation 1 · Payments 1 · Front desk 1Cross-context flows2Reservation → Payments · Payments → Front desk

Make it your own.

title "Hotel booking — reservation to checkout"

context "Reservation"
  actor Guest
  aggregate Booking
  # A pure query written up as a command: the storm's classic first finding.
  command "Search availability" by Guest on Booking
  readmodel "Rate and availability calendar"
  command "Confirm booking" by Guest on Booking
  event "Booking confirmed" from "Confirm booking"
  external "Channel manager"
  hotspot "Do we hold inventory during a 20-minute payment retry?"
  policy "When booking confirmed, authorise card" then "Authorise card"

context "Payments"
  aggregate "Payment authorisation"
  command "Authorise card" by "Payment service" on "Payment authorisation"
  event "Card authorised" from "Authorise card"
  event "Authorisation expired"
  external "Acquirer gateway"
  hotspot "Who chases a failed pre-authorisation at 2am?"
  policy "When card authorised, allocate room" then "Allocate room"

context "Front desk"
  aggregate Stay
  actor Receptionist
  command "Allocate room" by "Housekeeping system" on Stay
  event "Room allocated" from "Allocate room"
  command "Check guest in" by Receptionist on Stay
  event "Guest checked in" from "Check guest in"
  readmodel "Arrivals board"
  event "Guest checked out"
  hotspot "Late checkout — who authorises the charge?"