The Power of Event Storming

 Benjamin Nothdurft

 codecentric AG

From a Pile of Sticky Notes to a Domain-Driven Design Microservices Architecture

Context

Basics

Iterations

Architecture

Take-Aways

Agenda

Basics

 @dataduke

What is Event Storming?

  • lightweight method to model a domain
    • within an event storming workshop we work in iterations to add layer by layer of elements to sharpen the picture of a domain
  • typical elements
    • ​​domain events, commands, aggregates
    • issues/hot spots, chances

    • external systems, read models, policies

    • users/actors, timers, loops

Why do we use Event Storming?

  • knowledge distribution
    • bring together people from different silos
    • domain experts/analysts/developers/architects
  • enforcing a sharp timeline
    • experts will create locally ordered sequence of events
    • trigger long-awaited conversation
  • following steps
    • structure will emerge
    • people and systems will be displayed
    • every layer sparkles a new type of conversation
    • ...

Iterations

 @dataduke

Phase: Kick-off

  • Invite the right people (diversity in background/attitude, knowledge, curiosity)

  • room setup (space to move, plenty of sticky notes/markers/food, timer)

  • workshop structure (incremental notation, mostly stand-up, time-boxed warm-up e.g. Cinderella fairy tale story, explicit goal is to explore business process, uncomfortable/chaotic/awkward > take care of people, icebreaker)

Phase: Chaotic Exploration

product added to cart
  • domain event (past tense)

  • orange sticky note

  • relevant for domain experts

Phase: Enforcing the timeline

  • Make sure there’s enough space available

  • Choose a sorting strategy (Pivotal Events, Swimlanes, Temporal Milestones, Chapters Sorting, or Combination)

  • e.g. pivotal/Key Events: Article Added to Catalogue, Order Placed, Order Shipped, Payment Received and Order Delivered

Example (First Iteration)

Phase: Explicit walk-through

  • talking about events while walking in front of the surface
  • manage discussions (mark hot spots)
  • telling the story backward (starting at terminal events)
  • emerging consistent narrative

Phase: Problems and opportunities

  • looking for key impediments, problems and opportunities (10-15 minutes time-box to capture risks and ideas)

Phase: Pick your problem

  • arrow voting (target most important with e.g. 2x blue arrows per person)

First Iteration with all phases

Command-Event-Pairs

  • command (present tense)

  • blue sticky note

  • triggers a domain event

product add to cart

Aggregates / Entities

  • aggregate/entity

  • yellow sticky note

  • data that is interacted with

product

Borders & Flow

  • find borders where a domain model has a different meaning

  • domain events flow between different models

Bounded Contexts

  • bounded context/sub-domain

  • red sticky note

  • core name that is relevant/valid

checkout

Outcome / Big Picture

  • narrative/stories/user journey

  • line(s)

  • multiple storytellings

  • common language for everyone

Example

More Elements...

Iterate / Color Puzzle Thinking

event
command
external system
policy
user
user
command
  • add new colours/sticky notes: e.g. policies

  • challenging value (discover new opportunities, inconsistencies)

  • reveal pain points

  • enable cross-perspective conversation

Example (End of Day 2)

Example (End of Day 2)

Patterns

  • Add more space
  • Be the worst
  • Conquer first, Divide later
  • Do first, Explain later
  • Fuzzy Definitions
  • Guess First
  • Icebreaker
  • Go Personal
  • Keep your mouth shut
  • Make some noise
  • One man one marker
  • The Right to be wrong
  • ...

Anti-Patterns

  • Ask questions first
  • Big table at thhe center of the room
  • Committee
  • Do the right thing
  • Dungeon Master
  • Follow the leader
  • Human bottleneck
  • Religion war
  • The spoiler
  • Start from the beginning
  • ...

Architecture

 @dataduke

Example

provider-ui

storefront-ui

merchant-ui

Frontend

api proxy

tenant

auth

Core

business unit

site

shop

Shop Admin

Product

product

. . .

. . .

. . .

. . .

Bounded Contexts > Microservices

Exe / Jar / Zip

Objects

Classes

OOP

Design Patterns

Modules

Layers

Project

Developer cares about ...

Strategic Design

Service

Service

Service

Sub-Domain

Sub-Domain

Domain

Domain-Driven-Design

Exe / Jar / Zip

Objects

Classes

OOP

Design Patterns

Modules

Layers

Project

Tactical Design

Upstream / Downstream

Call Flow
Model Flow

Context Map Patterns Categorized

Model Flow

 Upstream Patterns

  • Open Host Service

  • Event Publisher

 Downstream Patterns

  • Customer / Supplier

  • Conformist

  • Anticorruption Layer

 In-Between Patterns

  • Shared Kernel

  • Published Language

  • Seperate Ways

Upstream System
Down-stream System

provider-ui

storefront-ui

merchant-ui

Frontend

api proxy

tenant

auth

Core

business unit

site

shop

Shop Admin

Product

product

. . .

. . .

. . .

. . .

Microservices

Context Map

Strategic Design Tools

Tactical Design Tools

Building Blocks in DDD

Take-Aways

 @dataduke

Try Event Storming!

Ubiquitous Language

  • use the same vocabulary for the same concepts
  • e.g. domain experts, analysts, developers use same language to describe a problem on the whiteboard

Bounded Context

  • area of the problem space where the ubiquitous language is valid
  • e.g.
    • customer in sales = social interests, likes, needs
    • customer in support = history, tickets
    • customer in accounting = method of payment
    • customer in order = addresses, availability

Most important terms... I/II

Domain Model

  • interpretation of reality
  • includes the chosen aspects for implementation
  • refers to the abstraction of the subdomain

Most important terms... II/II

A domain model is to a bounded context

what classes are to objects

Context Map

  • relation between bounded contexts

References

For more Domain Modelling

Questions?

 @dataduke

 Benjamin Nothdurft

 codecentric AG

 Developer Open Space

2019-10-11 in Leipzig

The End...

Benjamin Nothdurft

 @dataduke

As Developers... 

1 Terabyte recorded every 30 min!

Facilitation

 @dataduke

Elements

Facilitation Hints

Text

  • ​invite the right people
  • room setup
  • workshop structure (possible warm-up excercise: Cinderella etc.)

Context

 @dataduke

Each sub-domain is implemented as vertical:

  • represents a deployable unit (one or more)
  • is exclusively responsible for its services
  • owns its data
  • communicates with other verticals predominantly by using asynchronous messaging
  • provides a REST-API to leverage access to its function

Sub-Domains / Verticals

Strategic Design Tools

Iterate / Color Puzzle Thinking

event
command
external system
policy
user
read model
user
command
  • add new colours/sticky notes: e.g. policies

  • challenging value (discover new opportunities, inconsistencies)

  • reveal pain points

  • enable cross-perspective conversation

Process

Process

Actors & Policies

Let's start!

Exe / Jar / Zip

Objects

Classes

OOP

Design Patterns

Modules

Layers

Project

Developer cares about ...

Tactial Design

Service

Exe / Jar / Zip

Objects

Classes

OOP

Design Patterns

Modules

Layers

Project

Copy of Copy of Copy of Power of Event Storming

By Benjamin Nothdurft

Copy of Copy of Copy of Power of Event Storming

2019-11-21 Event Storming at DOAG Nuremberg

  • 1,020