The Power of Event Storming

 Benjamin Nothdurft

 codecentric AG

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

 @dataduke

Context

 @dataduke

As Developers... 

1 Terabyte recorded every 30 min!

Benjamin Nothdurft

 @dataduke

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

Jacek Bilski will rock on!

The End...

Facilitation

 @dataduke

Elements

Facilitation Hints

Text

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

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

CJUG: The Power of Event Storming

By Benjamin Nothdurft

CJUG: The Power of Event Storming

  • 981