SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
« All models are wrong,
but some are useful »
George E.P. Box
Unlimited Modeling Space
Domain
Event
Command
Aggregate
key
scenario;
notes;
goal…
External
System
A domain event is anything that happens that is of interest to a domain expert. The domain expert is not interested in databases, web
sockets, or design patterns, but in the business domain of the things that have to happen. Domain events capture those facts in a way that
doesn't specify a particular implementation.
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
If you start with data modeling, your thinking and conversations will
quickly digress into schemas, transactions, and other things that have
nothing to do with the business domain.
If you start from behavioral modeling, you'll get distracted as you break
down behaviors into tasks and link them into processes.
Those are implementation concepts, not business-domain concepts.
While there are myriad choices for representing data and
implementing behaviors, there are no alternatives for domain events.
Because domain events represent facts about the domain, these only
change significantly when the underlying business changes. Domain
events are thus a more stable and resilient scaffolding for your model.
Domain
Event
Why should you start with domain event
Explore the domain starting from Domain Events.
Item
Added
Order
Accepted
past-tense sentence
Invoice
Sent
Order
Received
"Something that has happened
in the past that is of interest to
the business"
A domain event is anything that happens that is of interest to a domain expert. The domain expert is not interested in databases, web
sockets, or design patterns, but in the business domain of the things that have to happen. Domain events capture those facts in a way that
doesn't specify a particular implementation.
Domain
Event
Explore the domain starting from Domain Events.
Item
Added
Order
Accepted
past-tense sentence
Invoice was
Sent
Order
Received
"Something that has happened
in the past that is of interest to
the business"
UserLogged
In
UserLogged
Out
UserAdress
Changed
Invoice was
generated
I [Mathias Verraes] personally prefer sentence-style event names (“A product
was added to a basket” vs “Product added to basket”). I believe this makes the
business people feel more comfortable.
Invoice was
Paid
Invoice was
Contested
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
http://verraes.net/2015/03/event-storming-storytelling-visualisations/
The first few steps go something like this:
• Write down a Domain Event on a sticky (preferably
something that happens at the end, like “Bill was paid”).
• Ask what happened before that (“Bill was sent”) and
before that, until you get to the beginning.
• Ask what caused the events to happen. Those are
usually Commands (aka user intentions), other events,
or simply the passage of time.
• Ask for what reason a Command can fail, and find the
rules that impact the outcome of the Commands. This
pushes you to discover alternative scenarios, missing
events, connections between distant events…
The group starts with domain events, walking through the model forwards and backwards to ensure that everything is covered.
An event might be the predecessor of the follower of another one. Place all of them onto your modeling surface (the convention is to use
orange stickies for this purpose) according to a timeline.
Domain
Event
timeline
A domain event is anything that happens that is of interest to a domain expert. The domain expert is not interested in databases, web
sockets, or design patterns, but in the business domain of the things that have to happen. Domain events capture those facts in a way that
doesn't specify a particular implementation.
Explore the domain starting from Domain Events.
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
http://verraes.net/2015/03/event-storming-storytelling-visualisations/
Happy path & What can go wrong?
Then the group adds the commands, or triggers, that cause the events, and considers all sources of commands, including users, external
systems, and even time.
Domain
Event
Command
?
Explore the origin of Domain Events
Domain
Event
Some events are the direct consequence of a user action —> represent it as a Command using a blue sticky note. Others are the
consequence of something happening in external systems or of the time passing, we’ll use a purple sticky note for them. In some other
cases, we’ll have events that will be the direct consequence of some other events. We’ll simply place the two events close together.
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
What does trigger events?
A command from a given user or an external system
The Time (e.g. end of month, end of week, midnight…)
Another event
…
Domain
Event
Command
Trigger ?
?
Explore the origin of Domain Events
Domain
Event
Then the group adds the commands, or triggers, that cause the events, and considers all sources of commands, including users, external
systems, and even time.
Some events are the direct consequence of a user action —> represent it as a Command using a blue sticky note. Others are the
consequence of something happening in external systems or of the time passing, we’ll use a purple sticky note for them. In some other
cases, we’ll have events that will be the direct consequence of some other events. We’ll simply place the two events close together.
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
What does trigger events?
A command from a given user or an external system
The Time (e.g. end of month, end of week, midnight…)
Another event
…
Domain
Event
Command
Trigger
Source Of
?
user
time
external system
…
?
?
Explore the origin of Domain Events
Domain
Event
Then the group adds the commands, or triggers, that cause the events, and considers all sources of commands, including users, external
systems, and even time.
Some events are the direct consequence of a user action —> represent it as a Command using a blue sticky note. Others are the
consequence of something happening in external systems or of the time passing, we’ll use a purple sticky note for them. In some other
cases, we’ll have events that will be the direct consequence of some other events. We’ll simply place the two events close together.
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
What does trigger events?
A command from a given user or an external system
The Time (e.g. end of month, end of week, midnight…)
Another event
…
!
Trigger
"
#
Trigger
"
Explore the origin of Domain Events
Item
Added
Order
Accepted
Invoice
Sent
Order
Received
UserLogged
In
UserLogged
Out
UserAdress
Changed
UserLogin
UserLogout
Change
Address
AddItem
Validate
Order
Domain
Event
Command
?
Aggregate
Look for Aggregates
Domain
Event
The group identifies aggregates that accept commands and accomplish events, and begins to group aggregates together into bounded
contexts. Along the way, key test scenarios, users, and goals are identified and incorporated into the model.
Instead of defining aggregates starting from the code, we’re taking an outside-in approach: the Aggregate is the portion of the system that
receives commands and decides whether to execute them or not, thus producing a domain event.
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
Explore Aggregates Outside-In
An aggregate can accept or reject
commands…
… and mostly needs only the data
needed for this purpose
Order
Cart
User
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
Explore the origin of Domain Events
Item
Added
Order
Accepted
Invoice
Sent
Order
Received
UserLogged
In
UserLogged
Out
UserAdress
Changed
UserLogin
UserLogout
Change
Address
AddItem
Validate
Order
Domain
Event
Command
Aggregate
The group identifies aggregates that accept commands and accomplish events, and begins to group aggregates together into bounded
contexts. Along the way, key test scenarios, users, and goals are identified and incorporated into the model. Finally, the relationships
between bounded contexts are added to create a context map.
Group Aggregates into bounded context
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
Domain
Event
Command
Domain
Event
Command
Aggregate
Command
Domain
Event
Domain
Event
Command
Aggregate
Order
Cart
User
Explore the origin of Domain Events
Item
Added
Order
Accepted
Invoice
Sent
Order
Received
UserLogged
In
UserLogged
Out
UserAdress
Changed
UserLogin
UserLogout
Change
Address
AddItem
Validate
Order
Bonus Targets
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
persona
Carnet d’entretien
Réparation
Vendeur de « Carcasse »
…
Exploring Subdomains
Exploring Bounded Contexts
Sketching User Persona
Sketching Key Acceptance Tests
Sketching Key Read Model Artefacts
Critical or ambiguous use cases might require
a precise completion criteria
When discussions arise around meaning and
semantics, multiple models are probably
involved
Different stakeholders will have different areas
of expertise
Sometimes who is performing the action is
more important than other details
Facilitating
• Hang the first sticky yourself (a tip from Alberto, works really well)
• Know when to step back. Don’t do the modeling, guide the modeling
• Ask questions:
• Is there something missing here? Why is there a gap?
• How does this make money?
• How does the business evaluate that this is working? What are the targets, how will we know we’ve
reached them?
• For whom is this event of importance (end user, business, tenant,…) ?
• I can’t see this particular role, or type of user, in this model. Should they be on here somewhere?
• Change the direction, e.g. start at the end of the flow, move back in time, then later start at the beginning and
move forward.
• Interrupt long discussions. Visualise both opinions, and, very important: ask both parties if they feel their
opinion is accurately represented.
• Timebox, using pomodoro’s (25 minutes). After each pomodoro, ask what is going well and what isn’t. It’s a
good opportunity to move to the next phase (e.g. from adding events to adding causality, to drawing
aggregate boundaries). You may want to move on even if you don’t feel the model is complete.
• Constantly move stickies to create room for hotspots.
• Hang red stickies with exclamation marks, question marks, or other notes, anywhere you feel there’s
an issue.
• At the end, make a photo. Then tell them to throw the model away, and to do it over the next day. If possible
in the presence of other stakeholders.
• I personally prefer sentence-style event names (“A product was added to a basket” vs “Product added to
basket”). I believe this makes the business people feel more comfortable.
http://verraes.net/2013/08/facilitating-event-storming/
References
Steven A. Lowe - An introduction to event storming: The easy way to achieve domain-driven design (Oct. 2015)
http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design
Alberto Brandolini - Introducing Event Storming (Nov. 2013)
http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html
https://lh3.googleusercontent.com/-2x4VNk-s32g/UouhUvPHbWI/AAAAAAAAAi8/oicOlEmD7i4/w1405-h1123-no/Event+Storming
+Cards+-+all.jpg
Alberto Brandolini - Event Storming Recipes (Jun. 2014)
http://fr.slideshare.net/ziobrando/event-storming-recipes
Thomas Pierrain - Event storming: Domain distillation under steroids (Aug. 2015)
http://tpierrain.blogspot.fr/2015/08/event-storming-domain-distillation.html
Thomas Pierrain - Event Storming: my rookie mistakes (Aug. 2015)
http://tpierrain.blogspot.fr/2015/08/event-storming-my-rookie-mistakes.html
Emilien Pecoul (Ouarzy) - Event Storming (Sep. 2015)
http://ouarzy.azurewebsites.net/2015/09/23/event-storming-another-way-to-design-an-event-driven-architecture/
Mathias Verraes - Facilitating Event Storming (Aug. 2013)
http://verraes.net/2013/08/facilitating-event-storming/
Mathias Verraes - Event Storming, Storytelling, Visualisations (Mar. 2015)
http://verraes.net/2015/03/event-storming-storytelling-visualisations/

Más contenido relacionado

La actualidad más candente

Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Araf Karsh Hamid
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services ArchitectureAraf Karsh Hamid
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2Dmitry Skaredov
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven ArchitectureStefan Norberg
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsAraf Karsh Hamid
 
Service Mesh @Lara Camp Myanmar - 02 Sep,2023
Service Mesh @Lara Camp Myanmar - 02 Sep,2023Service Mesh @Lara Camp Myanmar - 02 Sep,2023
Service Mesh @Lara Camp Myanmar - 02 Sep,2023Hello Cloud
 
Distributed Transactions: Saga Patterns
Distributed Transactions: Saga PatternsDistributed Transactions: Saga Patterns
Distributed Transactions: Saga PatternsKnoldus Inc.
 
Software Development Methodologies.pptx
Software Development Methodologies.pptxSoftware Development Methodologies.pptx
Software Development Methodologies.pptxMohamedElshaikh10
 
Mistakes - I’ve made a few. Blunders in event-driven architecture | Simon Aub...
Mistakes - I’ve made a few. Blunders in event-driven architecture | Simon Aub...Mistakes - I’ve made a few. Blunders in event-driven architecture | Simon Aub...
Mistakes - I’ve made a few. Blunders in event-driven architecture | Simon Aub...HostedbyConfluent
 
Dual write strategies for microservices
Dual write strategies for microservicesDual write strategies for microservices
Dual write strategies for microservicesBilgin Ibryam
 
Service Mesh - Observability
Service Mesh - ObservabilityService Mesh - Observability
Service Mesh - ObservabilityAraf Karsh Hamid
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanAraf Karsh Hamid
 
Circuit Breaker Pattern
Circuit Breaker PatternCircuit Breaker Pattern
Circuit Breaker PatternVikash Kodati
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaAraf Karsh Hamid
 
Chaos engineering & Gameday on AWS
Chaos engineering & Gameday on AWSChaos engineering & Gameday on AWS
Chaos engineering & Gameday on AWSBilal Aybar
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaAraf Karsh Hamid
 
DevOps - an Agile Perspective (at Scale)
DevOps - an Agile Perspective (at Scale)DevOps - an Agile Perspective (at Scale)
DevOps - an Agile Perspective (at Scale)Brad Appleton
 
Introducing Saga Pattern in Microservices with Spring Statemachine
Introducing Saga Pattern in Microservices with Spring StatemachineIntroducing Saga Pattern in Microservices with Spring Statemachine
Introducing Saga Pattern in Microservices with Spring StatemachineVMware Tanzu
 

La actualidad más candente (20)

Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018Microservices Architecture - Bangkok 2018
Microservices Architecture - Bangkok 2018
 
Micro services Architecture
Micro services ArchitectureMicro services Architecture
Micro services Architecture
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Microservices architecture overview v2
Microservices architecture overview v2Microservices architecture overview v2
Microservices architecture overview v2
 
Event Driven Architecture
Event Driven ArchitectureEvent Driven Architecture
Event Driven Architecture
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native Apps
 
Service Mesh @Lara Camp Myanmar - 02 Sep,2023
Service Mesh @Lara Camp Myanmar - 02 Sep,2023Service Mesh @Lara Camp Myanmar - 02 Sep,2023
Service Mesh @Lara Camp Myanmar - 02 Sep,2023
 
Distributed Transactions: Saga Patterns
Distributed Transactions: Saga PatternsDistributed Transactions: Saga Patterns
Distributed Transactions: Saga Patterns
 
Software Development Methodologies.pptx
Software Development Methodologies.pptxSoftware Development Methodologies.pptx
Software Development Methodologies.pptx
 
Mistakes - I’ve made a few. Blunders in event-driven architecture | Simon Aub...
Mistakes - I’ve made a few. Blunders in event-driven architecture | Simon Aub...Mistakes - I’ve made a few. Blunders in event-driven architecture | Simon Aub...
Mistakes - I’ve made a few. Blunders in event-driven architecture | Simon Aub...
 
Dual write strategies for microservices
Dual write strategies for microservicesDual write strategies for microservices
Dual write strategies for microservices
 
Event Storming and Saga
Event Storming and SagaEvent Storming and Saga
Event Storming and Saga
 
Service Mesh - Observability
Service Mesh - ObservabilityService Mesh - Observability
Service Mesh - Observability
 
Microservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, KanbanMicroservices, Containers, Kubernetes, Kafka, Kanban
Microservices, Containers, Kubernetes, Kafka, Kanban
 
Circuit Breaker Pattern
Circuit Breaker PatternCircuit Breaker Pattern
Circuit Breaker Pattern
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and Kafka
 
Chaos engineering & Gameday on AWS
Chaos engineering & Gameday on AWSChaos engineering & Gameday on AWS
Chaos engineering & Gameday on AWS
 
Microservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and SagaMicroservices Architecture Part 2 Event Sourcing and Saga
Microservices Architecture Part 2 Event Sourcing and Saga
 
DevOps - an Agile Perspective (at Scale)
DevOps - an Agile Perspective (at Scale)DevOps - an Agile Perspective (at Scale)
DevOps - an Agile Perspective (at Scale)
 
Introducing Saga Pattern in Microservices with Spring Statemachine
Introducing Saga Pattern in Microservices with Spring StatemachineIntroducing Saga Pattern in Microservices with Spring Statemachine
Introducing Saga Pattern in Microservices with Spring Statemachine
 

Destacado

TIME-DOMAIN MODELING OF ELECTROMAGNETIC WAVE PROPAGATION IN COMPLEX MATERIALS...
TIME-DOMAIN MODELING OF ELECTROMAGNETIC WAVE PROPAGATION IN COMPLEX MATERIALS...TIME-DOMAIN MODELING OF ELECTROMAGNETIC WAVE PROPAGATION IN COMPLEX MATERIALS...
TIME-DOMAIN MODELING OF ELECTROMAGNETIC WAVE PROPAGATION IN COMPLEX MATERIALS...John Paul
 
Concurrency-aware eXecutable Domain-Specific Modeling Languages as Models of ...
Concurrency-aware eXecutable Domain-Specific Modeling Languages as Models of ...Concurrency-aware eXecutable Domain-Specific Modeling Languages as Models of ...
Concurrency-aware eXecutable Domain-Specific Modeling Languages as Models of ...Marc Pantel
 
OpenB concepts - Modeling Engine
OpenB concepts - Modeling EngineOpenB concepts - Modeling Engine
OpenB concepts - Modeling EngineWilko van der Veen
 
Ch.02 modeling in frequency domain
Ch.02 modeling in frequency domainCh.02 modeling in frequency domain
Ch.02 modeling in frequency domainNguyen_Tan_Tien
 
Domain-specific Modeling and Code Generation for Cross-platform Mobile and Io...
Domain-specific Modeling and Code Generation for Cross-platform Mobile and Io...Domain-specific Modeling and Code Generation for Cross-platform Mobile and Io...
Domain-specific Modeling and Code Generation for Cross-platform Mobile and Io...Università degli Studi dell'Aquila
 
An Algebraic Approach to Functional Domain Modeling
An Algebraic Approach to Functional Domain ModelingAn Algebraic Approach to Functional Domain Modeling
An Algebraic Approach to Functional Domain ModelingDebasish Ghosh
 
Atelier Event Storming - Piece of Make - Nantes
Atelier Event Storming - Piece of Make - NantesAtelier Event Storming - Piece of Make - Nantes
Atelier Event Storming - Piece of Make - NantesMaxime Sanglan-Charlier
 
The final words about software estimation
The final words about software estimationThe final words about software estimation
The final words about software estimationAlberto Brandolini
 

Destacado (10)

Event storming
Event stormingEvent storming
Event storming
 
TIME-DOMAIN MODELING OF ELECTROMAGNETIC WAVE PROPAGATION IN COMPLEX MATERIALS...
TIME-DOMAIN MODELING OF ELECTROMAGNETIC WAVE PROPAGATION IN COMPLEX MATERIALS...TIME-DOMAIN MODELING OF ELECTROMAGNETIC WAVE PROPAGATION IN COMPLEX MATERIALS...
TIME-DOMAIN MODELING OF ELECTROMAGNETIC WAVE PROPAGATION IN COMPLEX MATERIALS...
 
Concurrency-aware eXecutable Domain-Specific Modeling Languages as Models of ...
Concurrency-aware eXecutable Domain-Specific Modeling Languages as Models of ...Concurrency-aware eXecutable Domain-Specific Modeling Languages as Models of ...
Concurrency-aware eXecutable Domain-Specific Modeling Languages as Models of ...
 
KAOS
KAOSKAOS
KAOS
 
OpenB concepts - Modeling Engine
OpenB concepts - Modeling EngineOpenB concepts - Modeling Engine
OpenB concepts - Modeling Engine
 
Ch.02 modeling in frequency domain
Ch.02 modeling in frequency domainCh.02 modeling in frequency domain
Ch.02 modeling in frequency domain
 
Domain-specific Modeling and Code Generation for Cross-platform Mobile and Io...
Domain-specific Modeling and Code Generation for Cross-platform Mobile and Io...Domain-specific Modeling and Code Generation for Cross-platform Mobile and Io...
Domain-specific Modeling and Code Generation for Cross-platform Mobile and Io...
 
An Algebraic Approach to Functional Domain Modeling
An Algebraic Approach to Functional Domain ModelingAn Algebraic Approach to Functional Domain Modeling
An Algebraic Approach to Functional Domain Modeling
 
Atelier Event Storming - Piece of Make - Nantes
Atelier Event Storming - Piece of Make - NantesAtelier Event Storming - Piece of Make - Nantes
Atelier Event Storming - Piece of Make - Nantes
 
The final words about software estimation
The final words about software estimationThe final words about software estimation
The final words about software estimation
 

Similar a Event storming Notes

Complex event flows in distributed systems
Complex event flows in distributed systemsComplex event flows in distributed systems
Complex event flows in distributed systemsBernd Ruecker
 
Decoupling with Domain Events
Decoupling with Domain EventsDecoupling with Domain Events
Decoupling with Domain EventsSteven Smith
 
The Significant role of event driven apps in software development
The Significant role of event driven apps in software development					The Significant role of event driven apps in software development
The Significant role of event driven apps in software development Shelly Megan
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Innomatic Platform
 
DotNetNuke Client API -DragDropAdminModules.pdf
DotNetNuke Client API -DragDropAdminModules.pdfDotNetNuke Client API -DragDropAdminModules.pdf
DotNetNuke Client API -DragDropAdminModules.pdfarunagulla
 
Implementing Event Sourcing in .NET
Implementing Event Sourcing in .NETImplementing Event Sourcing in .NET
Implementing Event Sourcing in .NETAndrea Saltarello
 
Designing Powerful Web Applications Using AJAX and Other RIAs
Designing Powerful Web Applications Using AJAX and Other RIAsDesigning Powerful Web Applications Using AJAX and Other RIAs
Designing Powerful Web Applications Using AJAX and Other RIAsDave Malouf
 
Project Deliverable 2 Business Requirements1Project Deliverab.docx
Project Deliverable 2 Business Requirements1Project Deliverab.docxProject Deliverable 2 Business Requirements1Project Deliverab.docx
Project Deliverable 2 Business Requirements1Project Deliverab.docxwkyra78
 
Unicenter Autosys Job Management
Unicenter Autosys Job ManagementUnicenter Autosys Job Management
Unicenter Autosys Job ManagementVenkata Duvvuri
 
Complex Event Processing
Complex Event ProcessingComplex Event Processing
Complex Event ProcessingJohn Plummer
 
Hacking Web Aplications using Cookie Poisoning
Hacking Web Aplications using Cookie PoisoningHacking Web Aplications using Cookie Poisoning
Hacking Web Aplications using Cookie PoisoningSumutiu Marius
 
Managing Content Chaos
Managing Content ChaosManaging Content Chaos
Managing Content ChaosChris Campbell
 
O'Reilly SA NYC 2018: Complex event flows in distributed systems
O'Reilly SA NYC 2018: Complex event flows in distributed systemsO'Reilly SA NYC 2018: Complex event flows in distributed systems
O'Reilly SA NYC 2018: Complex event flows in distributed systemsBernd Ruecker
 
CHAPTER 3 BASIC DYNAMIC ANALYSIS.ppt
CHAPTER 3 BASIC DYNAMIC ANALYSIS.pptCHAPTER 3 BASIC DYNAMIC ANALYSIS.ppt
CHAPTER 3 BASIC DYNAMIC ANALYSIS.pptManjuAppukuttan2
 
Mergers & Acquisitions security - (ISC)2 Secure Summit DACH
Mergers & Acquisitions security - (ISC)2 Secure Summit DACHMergers & Acquisitions security - (ISC)2 Secure Summit DACH
Mergers & Acquisitions security - (ISC)2 Secure Summit DACHEQS Group
 
Complete Guide to the Citrix Logon Process
Complete Guide to the Citrix Logon ProcessComplete Guide to the Citrix Logon Process
Complete Guide to the Citrix Logon ProcessJohn Grant
 
JavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern ImplementationJavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern Implementationdavejohnson
 

Similar a Event storming Notes (20)

Complex event flows in distributed systems
Complex event flows in distributed systemsComplex event flows in distributed systems
Complex event flows in distributed systems
 
Decoupling with Domain Events
Decoupling with Domain EventsDecoupling with Domain Events
Decoupling with Domain Events
 
The Significant role of event driven apps in software development
The Significant role of event driven apps in software development					The Significant role of event driven apps in software development
The Significant role of event driven apps in software development
 
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
Building Multi-Tenant and SaaS products in PHP - CloudConf 2015
 
Event Processing For Dummies
Event Processing For DummiesEvent Processing For Dummies
Event Processing For Dummies
 
DotNetNuke Client API -DragDropAdminModules.pdf
DotNetNuke Client API -DragDropAdminModules.pdfDotNetNuke Client API -DragDropAdminModules.pdf
DotNetNuke Client API -DragDropAdminModules.pdf
 
Implementing Event Sourcing in .NET
Implementing Event Sourcing in .NETImplementing Event Sourcing in .NET
Implementing Event Sourcing in .NET
 
Designing Powerful Web Applications Using AJAX and Other RIAs
Designing Powerful Web Applications Using AJAX and Other RIAsDesigning Powerful Web Applications Using AJAX and Other RIAs
Designing Powerful Web Applications Using AJAX and Other RIAs
 
Project Deliverable 2 Business Requirements1Project Deliverab.docx
Project Deliverable 2 Business Requirements1Project Deliverab.docxProject Deliverable 2 Business Requirements1Project Deliverab.docx
Project Deliverable 2 Business Requirements1Project Deliverab.docx
 
Netcool Impact docs
Netcool Impact docsNetcool Impact docs
Netcool Impact docs
 
Web programming
Web programmingWeb programming
Web programming
 
Unicenter Autosys Job Management
Unicenter Autosys Job ManagementUnicenter Autosys Job Management
Unicenter Autosys Job Management
 
Complex Event Processing
Complex Event ProcessingComplex Event Processing
Complex Event Processing
 
Hacking Web Aplications using Cookie Poisoning
Hacking Web Aplications using Cookie PoisoningHacking Web Aplications using Cookie Poisoning
Hacking Web Aplications using Cookie Poisoning
 
Managing Content Chaos
Managing Content ChaosManaging Content Chaos
Managing Content Chaos
 
O'Reilly SA NYC 2018: Complex event flows in distributed systems
O'Reilly SA NYC 2018: Complex event flows in distributed systemsO'Reilly SA NYC 2018: Complex event flows in distributed systems
O'Reilly SA NYC 2018: Complex event flows in distributed systems
 
CHAPTER 3 BASIC DYNAMIC ANALYSIS.ppt
CHAPTER 3 BASIC DYNAMIC ANALYSIS.pptCHAPTER 3 BASIC DYNAMIC ANALYSIS.ppt
CHAPTER 3 BASIC DYNAMIC ANALYSIS.ppt
 
Mergers & Acquisitions security - (ISC)2 Secure Summit DACH
Mergers & Acquisitions security - (ISC)2 Secure Summit DACHMergers & Acquisitions security - (ISC)2 Secure Summit DACH
Mergers & Acquisitions security - (ISC)2 Secure Summit DACH
 
Complete Guide to the Citrix Logon Process
Complete Guide to the Citrix Logon ProcessComplete Guide to the Citrix Logon Process
Complete Guide to the Citrix Logon Process
 
JavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern ImplementationJavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern Implementation
 

Más de Arnauld Loyer

Brown Bag Lunch - BDD an introduction - 2017 feb/mar
Brown Bag Lunch - BDD an introduction - 2017 feb/marBrown Bag Lunch - BDD an introduction - 2017 feb/mar
Brown Bag Lunch - BDD an introduction - 2017 feb/marArnauld Loyer
 
Bdd training v5.2.0 - public
Bdd training   v5.2.0 - publicBdd training   v5.2.0 - public
Bdd training v5.2.0 - publicArnauld Loyer
 
BDD - Writing better scenario
BDD - Writing better scenarioBDD - Writing better scenario
BDD - Writing better scenarioArnauld Loyer
 
Nos premiers pas autour du Behavior Driven Development
Nos premiers pas autour du Behavior Driven DevelopmentNos premiers pas autour du Behavior Driven Development
Nos premiers pas autour du Behavior Driven DevelopmentArnauld Loyer
 
Behavior Driven Development // Brown Bag Lunch v1.0.0
Behavior Driven Development // Brown Bag Lunch  v1.0.0Behavior Driven Development // Brown Bag Lunch  v1.0.0
Behavior Driven Development // Brown Bag Lunch v1.0.0Arnauld Loyer
 
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Arnauld Loyer
 
L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)Arnauld Loyer
 
Confiance&bdd softshake2013
Confiance&bdd softshake2013Confiance&bdd softshake2013
Confiance&bdd softshake2013Arnauld Loyer
 

Más de Arnauld Loyer (11)

Brown Bag Lunch - BDD an introduction - 2017 feb/mar
Brown Bag Lunch - BDD an introduction - 2017 feb/marBrown Bag Lunch - BDD an introduction - 2017 feb/mar
Brown Bag Lunch - BDD an introduction - 2017 feb/mar
 
Bdd training v5.2.0 - public
Bdd training   v5.2.0 - publicBdd training   v5.2.0 - public
Bdd training v5.2.0 - public
 
BDD training v5.0.1
BDD training  v5.0.1BDD training  v5.0.1
BDD training v5.0.1
 
BDD - Writing better scenario
BDD - Writing better scenarioBDD - Writing better scenario
BDD - Writing better scenario
 
Nos premiers pas autour du Behavior Driven Development
Nos premiers pas autour du Behavior Driven DevelopmentNos premiers pas autour du Behavior Driven Development
Nos premiers pas autour du Behavior Driven Development
 
Behavior Driven Development // Brown Bag Lunch v1.0.0
Behavior Driven Development // Brown Bag Lunch  v1.0.0Behavior Driven Development // Brown Bag Lunch  v1.0.0
Behavior Driven Development // Brown Bag Lunch v1.0.0
 
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
Dégraissons le mammouth ou Darwin a encore frappé - La théorie de l'évolution...
 
L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)L'ABC du BDD (Behavior Driven Development)
L'ABC du BDD (Behavior Driven Development)
 
Confiance&bdd softshake2013
Confiance&bdd softshake2013Confiance&bdd softshake2013
Confiance&bdd softshake2013
 
Bdd training - v3
Bdd training - v3Bdd training - v3
Bdd training - v3
 
Bdd training-v1
Bdd training-v1Bdd training-v1
Bdd training-v1
 

Último

Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfkalichargn70th171
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineeringssuserb3a23b
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 

Último (20)

Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdfExploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
Exploring Selenium_Appium Frameworks for Seamless Integration with HeadSpin.pdf
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Software Coding for software engineering
Software Coding for software engineeringSoftware Coding for software engineering
Software Coding for software engineering
 
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort ServiceHot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
Hot Sexy call girls in Patel Nagar🔝 9953056974 🔝 escort Service
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 

Event storming Notes

  • 1. « All models are wrong, but some are useful » George E.P. Box
  • 3. A domain event is anything that happens that is of interest to a domain expert. The domain expert is not interested in databases, web sockets, or design patterns, but in the business domain of the things that have to happen. Domain events capture those facts in a way that doesn't specify a particular implementation. http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html If you start with data modeling, your thinking and conversations will quickly digress into schemas, transactions, and other things that have nothing to do with the business domain. If you start from behavioral modeling, you'll get distracted as you break down behaviors into tasks and link them into processes. Those are implementation concepts, not business-domain concepts. While there are myriad choices for representing data and implementing behaviors, there are no alternatives for domain events. Because domain events represent facts about the domain, these only change significantly when the underlying business changes. Domain events are thus a more stable and resilient scaffolding for your model. Domain Event Why should you start with domain event Explore the domain starting from Domain Events. Item Added Order Accepted past-tense sentence Invoice Sent Order Received "Something that has happened in the past that is of interest to the business"
  • 4. A domain event is anything that happens that is of interest to a domain expert. The domain expert is not interested in databases, web sockets, or design patterns, but in the business domain of the things that have to happen. Domain events capture those facts in a way that doesn't specify a particular implementation. Domain Event Explore the domain starting from Domain Events. Item Added Order Accepted past-tense sentence Invoice was Sent Order Received "Something that has happened in the past that is of interest to the business" UserLogged In UserLogged Out UserAdress Changed Invoice was generated I [Mathias Verraes] personally prefer sentence-style event names (“A product was added to a basket” vs “Product added to basket”). I believe this makes the business people feel more comfortable. Invoice was Paid Invoice was Contested http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html http://verraes.net/2015/03/event-storming-storytelling-visualisations/
  • 5. The first few steps go something like this: • Write down a Domain Event on a sticky (preferably something that happens at the end, like “Bill was paid”). • Ask what happened before that (“Bill was sent”) and before that, until you get to the beginning. • Ask what caused the events to happen. Those are usually Commands (aka user intentions), other events, or simply the passage of time. • Ask for what reason a Command can fail, and find the rules that impact the outcome of the Commands. This pushes you to discover alternative scenarios, missing events, connections between distant events… The group starts with domain events, walking through the model forwards and backwards to ensure that everything is covered. An event might be the predecessor of the follower of another one. Place all of them onto your modeling surface (the convention is to use orange stickies for this purpose) according to a timeline. Domain Event timeline A domain event is anything that happens that is of interest to a domain expert. The domain expert is not interested in databases, web sockets, or design patterns, but in the business domain of the things that have to happen. Domain events capture those facts in a way that doesn't specify a particular implementation. Explore the domain starting from Domain Events. http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html http://verraes.net/2015/03/event-storming-storytelling-visualisations/ Happy path & What can go wrong?
  • 6. Then the group adds the commands, or triggers, that cause the events, and considers all sources of commands, including users, external systems, and even time. Domain Event Command ? Explore the origin of Domain Events Domain Event Some events are the direct consequence of a user action —> represent it as a Command using a blue sticky note. Others are the consequence of something happening in external systems or of the time passing, we’ll use a purple sticky note for them. In some other cases, we’ll have events that will be the direct consequence of some other events. We’ll simply place the two events close together. http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html What does trigger events? A command from a given user or an external system The Time (e.g. end of month, end of week, midnight…) Another event …
  • 7. Domain Event Command Trigger ? ? Explore the origin of Domain Events Domain Event Then the group adds the commands, or triggers, that cause the events, and considers all sources of commands, including users, external systems, and even time. Some events are the direct consequence of a user action —> represent it as a Command using a blue sticky note. Others are the consequence of something happening in external systems or of the time passing, we’ll use a purple sticky note for them. In some other cases, we’ll have events that will be the direct consequence of some other events. We’ll simply place the two events close together. http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html What does trigger events? A command from a given user or an external system The Time (e.g. end of month, end of week, midnight…) Another event …
  • 8. Domain Event Command Trigger Source Of ? user time external system … ? ? Explore the origin of Domain Events Domain Event Then the group adds the commands, or triggers, that cause the events, and considers all sources of commands, including users, external systems, and even time. Some events are the direct consequence of a user action —> represent it as a Command using a blue sticky note. Others are the consequence of something happening in external systems or of the time passing, we’ll use a purple sticky note for them. In some other cases, we’ll have events that will be the direct consequence of some other events. We’ll simply place the two events close together. http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html What does trigger events? A command from a given user or an external system The Time (e.g. end of month, end of week, midnight…) Another event … ! Trigger " # Trigger "
  • 9. Explore the origin of Domain Events Item Added Order Accepted Invoice Sent Order Received UserLogged In UserLogged Out UserAdress Changed UserLogin UserLogout Change Address AddItem Validate Order
  • 10. Domain Event Command ? Aggregate Look for Aggregates Domain Event The group identifies aggregates that accept commands and accomplish events, and begins to group aggregates together into bounded contexts. Along the way, key test scenarios, users, and goals are identified and incorporated into the model. Instead of defining aggregates starting from the code, we’re taking an outside-in approach: the Aggregate is the portion of the system that receives commands and decides whether to execute them or not, thus producing a domain event. http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html Explore Aggregates Outside-In An aggregate can accept or reject commands… … and mostly needs only the data needed for this purpose
  • 11. Order Cart User http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html Explore the origin of Domain Events Item Added Order Accepted Invoice Sent Order Received UserLogged In UserLogged Out UserAdress Changed UserLogin UserLogout Change Address AddItem Validate Order
  • 12. Domain Event Command Aggregate The group identifies aggregates that accept commands and accomplish events, and begins to group aggregates together into bounded contexts. Along the way, key test scenarios, users, and goals are identified and incorporated into the model. Finally, the relationships between bounded contexts are added to create a context map. Group Aggregates into bounded context http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html Domain Event Command Domain Event Command Aggregate Command Domain Event Domain Event Command Aggregate
  • 13. Order Cart User Explore the origin of Domain Events Item Added Order Accepted Invoice Sent Order Received UserLogged In UserLogged Out UserAdress Changed UserLogin UserLogout Change Address AddItem Validate Order
  • 14. Bonus Targets http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html persona Carnet d’entretien Réparation Vendeur de « Carcasse » … Exploring Subdomains Exploring Bounded Contexts Sketching User Persona Sketching Key Acceptance Tests Sketching Key Read Model Artefacts Critical or ambiguous use cases might require a precise completion criteria When discussions arise around meaning and semantics, multiple models are probably involved Different stakeholders will have different areas of expertise Sometimes who is performing the action is more important than other details
  • 15.
  • 16.
  • 17. Facilitating • Hang the first sticky yourself (a tip from Alberto, works really well) • Know when to step back. Don’t do the modeling, guide the modeling • Ask questions: • Is there something missing here? Why is there a gap? • How does this make money? • How does the business evaluate that this is working? What are the targets, how will we know we’ve reached them? • For whom is this event of importance (end user, business, tenant,…) ? • I can’t see this particular role, or type of user, in this model. Should they be on here somewhere? • Change the direction, e.g. start at the end of the flow, move back in time, then later start at the beginning and move forward. • Interrupt long discussions. Visualise both opinions, and, very important: ask both parties if they feel their opinion is accurately represented. • Timebox, using pomodoro’s (25 minutes). After each pomodoro, ask what is going well and what isn’t. It’s a good opportunity to move to the next phase (e.g. from adding events to adding causality, to drawing aggregate boundaries). You may want to move on even if you don’t feel the model is complete. • Constantly move stickies to create room for hotspots. • Hang red stickies with exclamation marks, question marks, or other notes, anywhere you feel there’s an issue. • At the end, make a photo. Then tell them to throw the model away, and to do it over the next day. If possible in the presence of other stakeholders. • I personally prefer sentence-style event names (“A product was added to a basket” vs “Product added to basket”). I believe this makes the business people feel more comfortable. http://verraes.net/2013/08/facilitating-event-storming/
  • 18. References Steven A. Lowe - An introduction to event storming: The easy way to achieve domain-driven design (Oct. 2015) http://techbeacon.com/introduction-event-storming-easy-way-achieve-domain-driven-design Alberto Brandolini - Introducing Event Storming (Nov. 2013) http://ziobrando.blogspot.fr/2013/11/introducing-event-storming.html https://lh3.googleusercontent.com/-2x4VNk-s32g/UouhUvPHbWI/AAAAAAAAAi8/oicOlEmD7i4/w1405-h1123-no/Event+Storming +Cards+-+all.jpg Alberto Brandolini - Event Storming Recipes (Jun. 2014) http://fr.slideshare.net/ziobrando/event-storming-recipes Thomas Pierrain - Event storming: Domain distillation under steroids (Aug. 2015) http://tpierrain.blogspot.fr/2015/08/event-storming-domain-distillation.html Thomas Pierrain - Event Storming: my rookie mistakes (Aug. 2015) http://tpierrain.blogspot.fr/2015/08/event-storming-my-rookie-mistakes.html Emilien Pecoul (Ouarzy) - Event Storming (Sep. 2015) http://ouarzy.azurewebsites.net/2015/09/23/event-storming-another-way-to-design-an-event-driven-architecture/ Mathias Verraes - Facilitating Event Storming (Aug. 2013) http://verraes.net/2013/08/facilitating-event-storming/ Mathias Verraes - Event Storming, Storytelling, Visualisations (Mar. 2015) http://verraes.net/2015/03/event-storming-storytelling-visualisations/