👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles BĂźro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine StehhĂśhe
            • VW Bus Erfahrungen
          • Camper gross - StehhĂśhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • SpĂźlmaschine 2021
      • Hebe-SchiebetĂźr
      • Gasgrill
      • Minibar / Mini-KĂźhlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB TalentfĂśrderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • Geschichte
  • Konzept
  • Sprache
  • DurchfĂźhrung
  • Events
  • Tips
  • Bewertung
  • Vor der tatsächlichen Nutzung

Was this helpful?

  1. Softwareentwicklungsprozess

Eventstorming

  • Buch von Alberto Brandolini "Introducing Event Storming (2018 noch nicht fertiggestellt)"

    • Alberto Brandolini - 50.000 Orange Stickies Later

    • Introducing Event Storming - 2013 von Alberto Brandolini

  • infoq - Experiences Using Event Storming

Ich habe einen Bericht im Java Magazin und ein YouTube Video gesehen und fand die Idee ganz interessant. An einem Happy Friday habe ich mir das mal genauer angeschaut.


Geschichte

  • 2013 zum ersten mal unter diesem Namen aufgetaucht

  • kommt aus der Domain-Driven-Design Ecke


Konzept

"It is not the things that matter in early stages of design ... it is the things that happen" (Russ Miles)

Ziel des Event-Stormings ist die interaktive Schaffung eines gemeinsamen Lösungs-/Problemverständnisses. Man beginnt mit einer weißen Wand und Domain-Events, die in eine zeitliche Abfolge gebracht werden müssen und mit Reaktionen angereichert werden. Am Ende hat man Konsens an einigen Punkten erreicht, wichtiges von unwichtigen unterschieden, Dissens gekennzeichnet ... eine gute Grundlage für die Kollaboration im weiteren Verlauf, um gemeinsam ein Outcome zu realisieren. Der Ansatz zwingt zwingt zur (kontroversen) Diskussion und Kollaboration in einer sehr frühen Phase des Projekts. Man identifiziert eine unterschiedliche Erwartungshaltung, entdeckt unterschiedliches Verständnis und Sprache. Schafft man es trotz chaotischen Vorgehens die Diskussion kreativ, offensiv und zielorientiert zu einem weitestgehenden Konsens zu bringen, dann hat man einen sehr guten Grundstein gelegt und im besten Fall die Unternehmenskultur psoitiv weiterentwickelt. Ausgehend von dieser Athmosphäre werden Stakeholder auch in Zukunft nicht mehr übereinander und aneinander vorbei sprechen, sondern miteinander. So werden Probleme auch im weiteren Verlauf frühzeitig adressiert und gemeinsam gelöst.

Die Formulierung von Anforderungen ist nicht Ziel eines Event-Stormings. Stattdessen will man (gruppenßbergreifend - Fachexperten, Architekten, Programmierer, Tester, Operations) Diskussionen fßhren, Silos werden aufgelÜst, gemeinsames Lernen durch Diskussion. Am Ende steht ein besseres und gemeinsames Verständnis der Domäne. Das hilft bei der Adressierung (Formulierung, Priorisierung) von Problemen und dem LÜsungsentwurf. Erst daraus ergeben sich dann die Anfoderungen.

Obwohl es sich um einen Ansatz aus dem Domain-Drive-Design handelt geht es hier im wesentlichen um die Prozesse und nicht um das darunterliegende Domänenmodell. Die Ereignisse (aka Domain Events) sind reale und nicht abstrakt - dadurch bleibt man fokussiert auf die Beschreibung realer Prozesse und ihrer Probleme. Das Domänenmodell kommt erst viel später und ist schon recht implementierungsnah (einige abstrakte Entities sind evtl. vorhanden, die bereits fßr einen bestimmten LÜsungsansatz entworfen wurden). Fokussiert man sich hingegen sofort auf die Modellierung des Domain-Modells, dann kann es leicht passieren, over-engineering zu betreiben, weil man Dinge in das Modell einmodelliert, die fßr die LÜsung nicht relevant sind.

Fßr diesen Ansatz braucht man nur Post-Its und viel Platz (Wand, Tisch, Boden). Ausgehend von Ereignissen identifiziert man die AuslÜser der Ereignisse (Commands - User, externes System, Zeit) kommt man zur Diskussion ßber die Reaktion auf dieses Ereignis. Auf diese Weise schafft man interaktiv ein dokumentiertes gemeinsames Verständnis, ohne sich in Technologie-Diskussionen zu verstricken. Die Domänenmodelierung entsteht praktisch von selbst.

Das Konzept Post-Its statt digitale Modellierungstools zu verwenden ist charmant, wenn man in der Gruppe modellieren will. Jeder kann sich beteiligen ... es gibt nicht DEN EINEN, der das Tool bedient. Stattdessen wird evtl. an ganz unterschiedlichen Events gleichzeitig gearbeitet, die Ergebnisse sind für jeden jederzeit vollständig sichtbar. Außerdem ist man in seiner Modellierungssprache in keinster Weise eingeschränkt ... es ist kein UML und kein BPMN und kein xyz, stattdessen entwickelt sich die Sprache gemeinsam weiter. BEDENKE: an der Diskussion sind häufig verschiedene Fachrichtungen beteiligt ... niemand soll durch die Festlegung auf eine bestimmte Notation ausgegrenzt werden - der Weg ist das Ziel. Die Verwendung einer weißen Fläche ermöglicht viele weitere einfache Modellierungsansätze:

  • Post-Its mit verschiedenen Farben und Formen

  • Linien um die Post-Its in verschiedenen Farben

    • beispielsweise, um Bounded Contexts oder Komponenten/Services zu visualisieren

  • ausgedruckte Icons, Bilder und SchriftzĂźge

  • Anordnung vollkommen frei - Umordnung jederzeit mit ein wenig Aufwand mĂśglich

    • Events sind meistens zeitlich gegliedert ... von links nach rechts

Formalismen von Tools (UML-Editoren zwingen zu korrekter Notation), Einschränkungen und Bedienungsprobleme dieser Tools stehen nicht im Weg. Selbst wenn das Tool von ein paar Teilnehmern exzellent beherrscht wird, dann sind die anderen außen vor.

Man kann es auf verschiedenen Levels durchfĂźhren

  • Big-Picture Event-Stormings

  • Design Event-Storming

Sprache

In der Farbgebung, Formen und Semantik der Zettel ist man vollkommen frei ... einige Standards haben sich aber schon etabliert. Die Sprache wird während der Diskussion weiterentwickelt. Findet man ein Konzept, das man mit den bisherigen Mitteln nicht ausdrßcken kann, dann wird ein neues Spracheelement definiert und in einer Legende festgehalten. Typischerweise sieht das dann so aus:

  • Domain Events: oranger Post-It

    • in Vergangenheitsform formuliert (z. B. "Taxi verpasst")

  • Command: blauer Post-It

  • Read Model: grĂźnes Post-It

    • hiermit sind Benutzereingaben gemeint

  • Attention/Hot-Spot (Risiko, Problem, Dissens): roter Post-It

  • Externes System: pink Post-It


DurchfĂźhrung

Events

In einer Stillen Anfangsphase schreiben die Beteiligten Domain Events auf die organgenen Zettel und kleben sie an die Wand - chronologisch (schon hier wird es zu einer Diskussion kommen). Dabei wird man im Zuge von Diskussionen die Events umgestalten

  • Doubletten entdecken

  • konkretisieren

  • umformulieren

  • voneinander abgrenzen

  • neue Events entdecken

Tips

  • "Focus on Behaviour, Not Data"

  • "Postpone Naming"


Bewertung

Vor der tatsächlichen Nutzung

Ich glaube, daß die Fokussierung auf Events - im Gegensatz zur Fokussierung auf die Substantive (wie bei DDD häufig empfohlen) - dazu führt, daß die tatsächlichen Use-Cases der Domäne identifiziert und davon ausgehend ein sehr schlankes Domain-Modell entwirft. Geht man von den Substantiven aus, dann verleitet es dazu ein Modell zu entwerfen, das nicht zugeschnitten ist auf die Use-Cases, sondern zuviele Real-World-Eigenschaften aufweist, die in der Problem-Domäne gar nicht benötigt werden. Es entstehen also schlankere Modelle - weniger Komplexität.

PreviousSchätzungenNextOKR

Last updated 3 years ago

Was this helpful?