Featured image of post Event Storming: Pierwsze Starcie z big picture i process level

Event Storming: Pierwsze Starcie z big picture i process level

W niniejszym artykule przedstawiam wstęp do Event Stormingu wystarczający do przeprowadzania małych warsztatów wewnętrznych. W końcu chcemy pisać kod tylko raz, więc najlepiej robić to od razu dobrze :).

Spis treści

Wstęp

Podstawowa koncepcja techniki EventStorming polega na zapewnieniu prostej notacji modelującej, używanej do wizualizacji zachowań systemu w sposób zrozumiały dla każdego.
— Alexey Zimarew
Domain-Driven Design dla .NET Core (DDDNetCore)
Jeśli chcemy pisać dobry kod, musimy rozumieć proces i model biznesowy, a tego nie dowiemy się lepiej od nikogo innego jak od biznesu i ekspertów domenowych.
— Tomasz Stolarczyk
NAJobszerniejsze wprowadzenie do Event Stormingu. Z przykładem! [DevStyleStolarczyk]

Metodę Event Stormingu opracował w 2013 roku Alberto Brandolini, polega ona na zebraniu faktów (zwanych także zdarzeniami dziedzinowymi), które się wydarzyły i są nieodwracalne w rozumieniu per se.

Warsztaty w postaci Event Stormingu służą do wymiany wiedzy między uczestnikami, dlatego ważne jest, aby zaprosić ludzi z różnych kręgów: zarówno programistów, jak i ekspertów dziedzinowych. W konsekwencji powodują one otwarcie silosów wiedzowych, wymiany doświadczeń pomiędzy nimi, co prowadzi dalej do zidentyfikowania możliwych problemów i usprawnień [DDDNetCore][DevStyleStolarczyk]. W dalszej perspektywie Event Storming pozwala na zamodelowanie architektury aplikacji, która zostanie przeniesiona do kodu – ta część nazywa się Event Storming: Desing Level i nie będzie tutaj omawiana.

Jak wygląda główna część warsztatów – po krótce

Na początku uczestnicy umieszczają pomarańczowe karteczki ze zdarzeniami domenowymi na ścianie. Zależy nam tutaj, aby tej wiedzy pojawiło się jak najwięcej, dlatego nie przejmujemy się duplikacją lub chronologią. Aczkolwiek nie naciskajmy, aby pojawiły się tutaj koniecznie wszystkie możliwe zdarzenia – będą one dodawane również sukcesywnie w trakcie kolejnych etapów. Każdy z uczestników w tym momencie będzie najpewniej zajmował się fragmentem, który zna najlepiej. Kiedy dojdzie do konfliktów związanych z tym, że nie wiadomo jak jakiś podsystem ma działać, zaznaczamy to karteczką zwaną hotspotem (z ang. hot spot – gorące miejsce) lub karteczką system zewnętrzny jeśli dotyczy to zewnętrznej integracji. Ważne jest to, abyśmy skupili się na zdarzeniach, które dotyczą naszego systemu, nie na tych, które dzieją się w świecie rzeczywistym lub w systemie towarzyszącym – choć i te warto umieścić na tablicy, aby uzyskać lepszy kontekst. Tę część nazywamy chaotyczną eksploracją [DevStyleStolarczyk]. Czasem można ją potraktować jako właściwą rozgrzewkę przed następnymi etapami mającą na celu zapoznanie się uczestników z ze sobą nawzajem [kolinskaEventStormingGuide].

Następnie na tablicy wprowadzamy oś czasu: układamy karteczki zgodnie z chronologią i wstępnie grupujemy w podsystemy. Przy okazji można usunąć duplikaty i ujednolicić język niektórych karteczek.

Te dwa elementy dają nam część zwaną Big picture. Po czym przechodzimy do Process Level. W tym momencie będziemy wchodzić w szczegóły związane z każdym ze zdarzeń poprzez dodanie karteczek z:

  • aktorami – osobami i systemami wywołującymi lub odbierającymi dane zdarzenie,

  • systemami – identyfikując zakresy odpowiedzialności,

  • reakcjami naszego systemu na poszczególne zdarzenia domenowe,

  • widokami – na podstawie których użytkownik podejmuje decyzje.

Dopiero mając tak usystematyzowany system zdarzeń, przechodzimy do szczegółowego wyszukiwania możliwości i problemów, które również oznaczamy jako gorące miejsca. Na koniec wybieramy zagadnienie, którym będziemy chcieli się zająć – po krótkiej przerwie lub na osobnym spotkaniu [DevStyleStolarczyk].

Jeżeli zdecydowałeś się zamodelować cały system dojście do tego momentu może zająć Ci nawet kilka dni, dlatego warto rozważyć, czy aby część Process Level nie przeprowadzać etapami, nad kolejnymi elementami systemu.

Na koniec przechodzimy do etapu Desing Level, na którym tworzymy model, który można przenieść bezpośrednio do kodu.

Ze względu na objętość tego artykułu pominąłem tę część warsztatów. Nie mniej, element Big picture można z powodzeniem wykorzystać do zamodelowania już istniejącego systemu w celu jego diagnozy i wymiany wiedzy.

Jak może wyglądać rezultat warsztatów

W tej sekcji pokażę mocno uproszczony i wymyślony przykład w celu zachowania pewnej spójności. Ilustrację bardziej rozbudowanej sesji Event Stormingu planuję pokazać w przyszłości w osobnej serii artykułów.

Przykładowy element systemu po chaotycznej eksploracji

chaotic exploration example

Jak widać, na początku napisaliśmy możliwie dużo zdarzeń. Pojawiły się przy tym dwie wątpliwości oraz uściśliliśmy słownictwo, które mogło być problematyczne w trakcie warsztatów. Jedyny system, który nam się pojawił to Facebook jako dostawca logowania – został tutaj umieszczony, ponieważ jest systemem zewnętrznym, od którego zależy nasz przepływ.

Następnie postępujemy zgodnie z tym, co zostało napisane wcześniej: dodajemy pozostałe karteczki. Dobrze jest dodać je wszystkie od razu, ponieważ dodawanie ich pojedynczo może stanowczo przedłużyć warsztat i doprowadzić do lekkiej irytacji uczestników ciągłym przekładaniem karteczek.

Przykładowy element systemu po uporządkowaniu (obrazek należy otworzyć w osobnym oknie, aby zobaczyć szczegóły)

process level example

Rozbudowaliśmy logowanie o rejestrację oraz przypadek, w którym próbował zalogować się użytkownik, który jeszcze nie jest w naszej bazie. Każdą swoją akcję mógł podjąć na podstawie pewnego widoku, z którego wykonywał polecenie na pewnym systemie, co generuje zdarzenia. Każde z nich może wygenerować kolejny widok lub politykę/reakcję, gdzie ta znów może kontynuować ciąg przyczynowo skutkowy.

Opis każdego typu karteczki znajduje się poniżej.

Notacja w chaotycznej eksploracji

Z racji, że Event Storming ma za zadanie zapewnić prostą notację, to przedstawiam ją poniżej. W tej sekcji znajduje się opis karteczek, które są używane w trakcie chaotycznej eksploracji oraz podczas części Process Level.

notacja 01
Ilustracja 1. Obrazek, który wjaśnia wszystko – Alberto Brandolini – „Introducting Event Storming”

Cóż tu może się stać? Na początku mamy świat zewnętrzny, który wpływa na naszego aktora. Ten mając na uwadze, to co się dzieje wokół niego oraz patrząc na widok, podejmuje decyzję o wykonaniu pewnego polecenia. To polecenie jest wykonywane na którymś z systemów, czy to naszym, czy zewnętrznym. System generuje zdarzenie domenowe, które jest tłumaczone na widok oraz może wyzwolić jakąś reakcję naszego systemu. I tak koło się zamyka. Aktor po wykonaniu jakiejś akcji otrzymuje odświeżony widok, przez co może podjąć nową akcję poprzez zlecenie polecenia [stolarczykProcessLevelEvent2021].

Osobno istnieją gorące miejsce oraz rysunki poglądowe, które możemy umieszczać w miejscach zapalnych, co do których, trzeba podjąć pewne decyzje lub na ten moment nie wiadomo co tam się dzieje, oraz przy widokach, aby podkreślić, co na nich musi się znaleźć.

Zdarzenie domenowe

domain event
Ilustracja 2. Przedstawienie zdarzenia domenowego

Jak już napisałem we wstępie, zdarzenie domenowe reprezentuje fakt nieodwracalny. Mówiąc, że fakt jest nieodwracalny, znaczy to, że gdy użytkownik kupił produkt – nie może już tego cofnąć (maszyna pakowania i nadawania przesyłki już ruszyła), może on rozpocząć procedurę przeciwną, to znaczy zwrotu zakupionego produktu. Co niezwykle ważne, fakty zapisujemy za pomocą formy przeszłej, czyli „użytkownik zapłacił za produkt”, „użytkownik zgłosił żądanie zwrotu zakupu”. Pozwala to uciąć dywagację na temat tego, co jeśli zdarzenie się nie udało, lub zaszło częściowo – w takim przypadku mamy do czynienia z innym zdarzeniem (na przykład: „użytkownik zapłaci połowę kwoty”). Zdarzenie domenowe musi być zrozumiałe przez ludzi nietechnicznych więc w konsekwencji nie może ono odnosić się do szczegółów implementacyjnych. Mimo iż w przykładach znajduje się kto i co, zrobił, co zwiększa czytelność, jednak nie zapominajmy, że twórca danego zdarzenia zostanie jasno określony w dalszym etapie za pomocą karteczki aktora [DDDNetCore].

Mimo iż piszę o tym, że fakt już się stał, to nie należy się bać dodawania zdarzeń, które reprezentują pomysły i funkcje zaplanowane do realizacji w przyszłości. Dobrze jest je odpowiednio oznaczyć, na przykład, poprzez inny kolor karteczki.

Przykład 1. Przykłady zdarzeń

events example

W przykładzie mamy już uszeregowany ciąg zdarzeń, tak, że każde ze zdarzeń następuje po sobie. Karteczki są zapisane w formie przeszłej i do tego są krótkie i zwięzłe.

Gorące miejsce

hotspot
Ilustracja 3. Przedstawienie gorącego miejsca

Jest to zazwyczaj fioletowa lub jaskraworóżowa karteczka (ważne, aby miała wyróżniający się kolor), która służy do oznaczania miejsc spornych, gdzie znalezienie odpowiedzi w trakcie warsztatów nie jest możliwe [bourgauDetailedAgendaDDD2018].

Przykład 2. Przykłady gorących miejsc

hotspot example

Takie gorące miejsce zostało użyte w przykładzie. Pojawiło się pytanie, na które odpowiedź Event Storming nie koniecznie przyniesie (bo jest pytaniem mocno technicznym), jednak to, jak dużo transferu używamy, może być już kwestią domenową, na przykład wtedy, gdy chcemy konstruować system wyróżniający się oszczędnością.

System

system
Ilustracja 4. Przedstawienie systemu

Początkowo, podczas chaotycznej eksploracji, karteczka ta służy do określania systemów zewnętrznych, które generują zdarzenia dla naszego systemu. Następnie, w trakcie porządkowania, będziemy na niej zapisywać nasze systemy, takie jak „wyszukiwarka”, „użytkownicy”, „zamówienia”. Uzupełnienie tej karteczki pozwoli nam jasno zobaczyć, które zdarzenia i operacje są wykonywane w tym samym miejscu, a które są w jakiś sposób niezależne. Doprowadzi nas to do wyodrębnienia subdomen, które mogą później posłużyć jako punkt zaczepienia dla luźniejszej architektury aplikacji.

Przykład 3. Przykłady systemów podczas chaotycznej eksploracji
systems example

Powyżej widać przykłady systemów. W tym przypadku pierwszy system to po prostu czujnik, który stanowi samodzielny moduł, backend – który stanowi aplikację internetową oraz Termostat, który również jest samodzielnym urządzeniem.

Czasem można spotkać się z propozycją, aby zewnętrzne systemy oznaczać innym kolorem karteczek. Jednak ile kolorów można znaleźć w sklepie?
Przykład 4. Przykłady systemów po Process Level
system processlevelexample

Tutaj mamy już dużo więcej systemów, które wyraźnie pokazują ich zakres odpowiedzialności. Użycie nazw jak Backend czy Frontend nie jest może najszczęśliwsze, ale w przypadku najprostszych systemów wystarczające.

Słowo domenowe

domain word
Ilustracja 5. Przedstawienie słowa domenowego

Z umieszczeniem słowa domenowego spotkałem się raz ([bourgauDetailedAgendaDDD2018]) i traktuję je jako rozszerzenie podstawowej notacji Event Stormingu. Niemniej, uważam je za ciekawy, acz nieobowiązkowy element, gdyż w niektórych projektach może pojawić się problem ze słownictwem szczegółowym.

Przykład 5. Przykład problemu ze słownictwem domenowym
domain word example

W niektórych miejscach spotykałem się z problemem rozróżnienia słów badanie i pomiar, które przez niektórych były stosowane zamiennie, mimo iż ostatecznie jedno było składową drugiego.

Notacja w Process Level

W tej sekcji znajdziesz elementy notacji wykorzystywane głównie podczas części Process Level, co nie znaczy, że przedstawione chwilę wcześniej karteczki już nie obowiązują. Podziału dokonałem głównie ze względu na objętość materiału.

Aktor

aktor
Ilustracja 6. Przedstawienie aktora

Aktor, mimo iż brzmi to ludzko, to nie musi być to człowiek – jest to karteczka, która reprezentuje, kto może wyzwolić daną akcję. Także może to być zarówno człowiek (na przykład poprzez interakcję z aplikacją), jak i na przykład czujka zalania mieszkania może wyzwolić alarm bądź powiadomienie.

Przykład 6. Przykłady aktorów
actors example

Aktorem może być zarówno użytkownik, jak i upodmiotowione źródło zdarzeń, takie jak czasomierz (z ang. timer), który może wywoływać akcje co pewien czas. Aktor jest karteczką, która pojawia się na samym początku łańcucha przyczynowo-skutkowego co pokazuje, kto jest twórcą danej akcji.

Polecenie

command

Polecenie służy do pokazania zamiaru. Umieszczenie ich na tablicy powoduje, że łatwiej zobaczyć jakie zdarzenia mogą zostać wykonane w przypadku, kiedy zamiar się nie powiedzie, lub powiedzie się częściowo. Doklejanie karteczek z poleceniem może wydawać się czysto mechaniczne, jednak nie musi takie być, dzięki metodzie 0, 50, 100 i 150 (więcej o niej w sekcji W trakcie warsztatów). Dlatego zaczynamy od zdarzeń, a nie od poleceń, ponieważ taka kolejność może prowadzić do zbytniego skupienia się nad nowymi funkcjami [kolinskaEventStormingGuide].

Przykład 7. Przykłady poleceń
commands example

Polecenia są pisane w formie rozkazującej (czasem z ang. imperatywnej) i mają za zadanie ukazać zamiar wykonania czegość. A z zamiarem bywa tak, że czasem się nie udaje.

Reakcja

policy

Reakcja (czasem zwana również polityką) pozwala nam zaprezentować to, jak system reaguje automatycznie na pewne zdarzenia. Łatwo rozpoznać reakcję po tym, że zaczynamy używać składki "kiedy, …, to…". Ważne jest to, aby karteczka ta trafiała pomiędzy zdarzeniem, którego jest adresatem, oraz poleceniem, które ma wykonać [EventStormingDomaindriven2019].

Przykład 8. Przykłady polityk
policy example

W przykładowym systemie mamy tylko dwie polityki, które mówią nam jasno, że:

  • użytkownik, który jest niezalogowany, powinien zostać przekierowany do strony zakładania konta. Tutaj można by się pokusić, że jest to część typowo oparta na kontrolkach (niezmieniająca nic w systemie), jednak jeśli biznesowi zależy na takiej funkcji, to czemu nie?

  • mamy wysyłać powiadomienie, kiedy wartość temperatury przekroczy tę zadaną.

Widok

view

W widokach, we wszelkiej literaturze, znalazłem najmniej. Jednak uważam je za tyle ciekawe, że pozwalają nam powiedzieć, czy dany widok istnieje w naszej aplikacji oraz, czy pewne rzeczy są uruchamiane ręcznie, czy też automatycznie (przed widokiem stoi człowiek a za nim polecenie).

Przykład 9. Przykłady widoków
views example

Na karteczkach przykładowych mamy cztery widoki, które jasno pokazują, co użytkownik widzie. Poza ostatnim, który jest widokiem sprzętowym dla zdarzenia czasowego. Alternatywnie można by za modelować to za pomocą polityki, jednak o tyle podoba mi się takie podejście, że wyraźnie wskazuje nam, że musimy mieć tutaj połączenie ze światem zewnętrznym (w końcu po to są widoki – aby łączyć się z zewnątrz, co nie?).

Rysunek poglądowy

mockup

Widokowi może towarzyszyć rysunek poglądowy. Dodajemy je wtedy, gdy osoby od doświadczeń użytkownika (z ang. user experience, zapisywane skrótem UX) uznają jakiś element za szalenie istotny. Taki obrazek pozwala na lepszą komunikację pomiędzy UXowcami a osobami odpowiedzialnymi za wygląd aplikacji, gdyż tym drugim pokazano, co jest najważniejsze.

Przykład 10. Przykład rysunku poglądowego
mockup example

Mimo iż powyższy rysunek nie wystąpił w przykładach, to postanowiłem opisać go dla porządku. Widzimy na nim wyraźnie, że jest trochę tekst, jest rysunek, który symbolizuje górną partię ciała człowieka oraz przycisk OK. Można z tego wysnuć wniosek, że obrazek musi być dość duży, jednak nie to jest najważniejsze – największa wartość stanowi dyskusja, która urodziła się podczas tworzenia takiej makiety.

Świat zewnętrzny

external world

Świat zewnętrzny, podobnie jak rysunek poglądowy znalazł się tylko na notacji. Niemniej uważam, że może być on ważny, zwłaszcza w przypadkach, gdy nasz system silnie operuje na tym, co dzieje się w świecie rzeczywistym. Karteczki, które mogłyby trafić pod ten szyld, powinny reprezentować swojego rodzaju zdarzenia (być sformułowane w przeszłej formie), gdyż to właśnie czasowniki napędzają nasz świat i go zmieniają, rzeczowniki natomiast stoją w miejscu.

Warsztaty

W tej sekcji omówię wszystko to, co uważam za ważne zarówno przed, w trakcie, jak i po warsztatach

Planowanie warsztatów

Pamiętaj, że pojedyncza sesja nie powinna przekraczać 2 godzin.

W trakcie warsztatów niezwykle problematyczna może być ilość miejsca, której będziesz potrzebować do zaprezentowania wszystkich zdarzeń. Dlatego zawczasu zadbaj o bardzo dużo przestrzeni i odpowiednią przyczepność karteczek do ściany. Jak podaje Zimarev warto kupić rolkę papieru do plotera, którą umocujesz jako podkład, w przypadku, gdy goła ściana nie jest w stanie zapewnić odpowiedniej przyczepności [DDDNetCore].

Dlaczego to takie ważne? Ponieważ jak się okazuje, gdy ludziom zacznie brakować miejsca, to zaczną się ograniczać ze swoją kreatywnością. Może się to skończyć tym, że część systemu w ogóle nie zostanie za modelowana, gdyż zostanie uznana za nieważną, a z racji ograniczonego miejsca, pominięta.

Dlatego sala wybrana do warsztatów Event Storming powinna być jak największa. W skrajnym przypadku można do tego wykorzystać korytarz, jednak upewnij się, że w trakcie, gdy będziesz go wykorzystywać, nie będzie przechodzić tamtędy duża ilość osób, co może rozpraszać uczestników.

Innym pomysłem może być działanie hybrydowe – uczestnicy siadają w jednej sali z własnymi komputerami, na których będą pracować. Dobrze, aby znajdował się w niej też jeden duży wyświetlacz dla prowadzącego. Następnie wszyscy równocześnie działają na jednej tablicy, na przykład przy pomocy oprogramowania https://miro.com/. Dlaczego mówię o siedzeniu w jednej sali? W trakcie warsztatów jest niesamowita ilość dyskusji, która wydaje się niemożliwa przy użyciu tradycyjnych form pracy i komunikacji zdalnej, gdzie jedna osoba mówi, a reszta musi słuchać.

Lista rzeczy do zrobienia

Koncepcja
  • Określ cel warsztatów (znalezienie problemów lub miejsc zapalnych) i nie zapomnij umieścić go w agendzie!

  • Jeśli nie wszyscy mają pojęcie o domenie, roześlij jej krótki opis oraz zestaw widoków dla uczestników

Zakupy
  • Sprawdź, czy karteczki trzymają się ściany,

    • jak nie, to zakup papier do plotera.

  • Przygotuj spory zapas karteczek samo przylepnych:

    • pomarańczowych zwykłych do zapisu zdarzeń (faktów),

    • jaskraworóżowych do oznaczania hotspotów,

    • niebieskich do zapisu poleceń (z ang. comamnds),

    • łososiowe lub zwykłe różowe do oznaczania systemów wewnętrznych,

    • fioletowe do zapisywania reakcji naszego systemu na zdarzenia

    • zielone do reprezentacji widoków,

    • żółte wąskie do zaprezentowania aktorów,

    • białe do rysowania szkiców interfejsów użytkownika,

    • Opcjonalnie

      • Karteczki do zapisu zdarzeń środowiskowych,

      • Karteczki do zapisu wspólnego języka domenowego.

  • Pisaki do pisania po karteczkach.

  • Taśma malarska do pisania etykiet wszelakich

  • Coś słodkiego do jedzenia.

Rozpoczęcie warsztatów

workshop

W celu uprzedniego przygotowania sali warto przyjść do niej nawet 30 minut przed planowanym startem. Rzeczy, które trzeba zrobić to:

Przed startem
  • Jeśli karteczki nie trzymają się ściany, przymocuj papier,

  • Umieść notację w widocznym miejscu,

  • Usuń krzesła, jeśli chcesz pracować przy pomocy karteczek, w przypadku gdy je zostawisz, to zobaczysz, że niektórzy odłączą się od grupy i zaczną sobie po cichu robić własne rzeczy,

  • Rozmieść pisaki, karteczki i coś do zjedzenia.

Kiedy wszyscy już się zbiorą i warsztaty się zaczną nie zapomnij o:

Przy rozpoczynaniu warsztatów:
  • Przedstawienie celu, uczestników

  • Krótkiej zabawy, aby pobudzić ludzi (możesz znaleźć je na stronie funretrospectives.com) [bourgauDetailedAgendaDDD2018], Najmniej wymagająca zabawa, według mnie, to „Poszedłem na plaże i wziąłem…" [1],

  • Przedstawienie metody Event Stormingu i wymaganej całości notacji wraz z zasadami ich użycia. Na początek skup się na: zdarzenia domenowego, gorącego miejsca oraz zewnętrznego systemu.

Zauważyłem, że niezwykle ważne jest, aby przedstawić całość notacji uczestnikom warsztatów. Nie próbuj „chować” przed nimi tego, co będą robić w późniejszych etapach – pozwoli im to od razu układać karteczki w większych odstępach oraz załapać kontekst tego, co będą robić. Jedną z formą przedstawienia notacji, z którą się spotkałem, jest poproszenie jednego z uczestników o to, aby przedstawił, co widzi na rysunku. Jeśli czegoś nie rozumie, może zadawać pytania prowadzącemu.

Z racji, że Event Storming to warsztat grupowy, gdzie wszyscy powinni brać udział, należy zachęcić ludzi do tego, aby sami zapisywali zdarzenia na ścianie. Aby to osiągnąć, należy zacząć od siebie – zapisz karteczkę jednym zdarzeniem, które znajduje się gdzieś w środku systemu, np. „użytkownik dodał przedmiot do koszyka”. Jest to niezwykle ważne, aby nie próbować zaczynać od początku lub od końca, gdyż zawsze będzie coś wcześniej i później. Dzięki takiemu podejściu można próbować zachęcić uczestników, aby zapisali zdarzenia, które następują lub są przed twoim [DDDNetCore][bourgauHowPrepareDDD2018].

Uważaj na pomysł z cichą burzą mózgów, gdy masz do czynienia z grupą niedoświadczoną w Event Stormingu. Może się to skończyć dużą ilością karteczek, które nijak nie wpasowują się w notację.

W trakcie warsztatów

Jak zostało to powiedziane we wstępie, zajmiemy dwoma zasadniczymi częściami warsztatów Event Stormign: Big Picture i Process Level. W warsztatach niezwykle ważne jest to, aby udział brali wszyscy uczestnicy, przez to prowadzący powinien ich obserwować i dawać wskazówki, a nie próbować kierować całością dyskusji.

W trakcie warsztatów, niezależnie od etapu, zwróć szczególną uwagę na to, że:

  • Ludzie mają tendencję do kreślenia drogi w przypadku gdy wszystko idzie po ich myśli, dlatego zachęć ich aby prześledzili przypadki poza właściwą ścieżką, takie jak „dokonano płatności na dwu krotność kwoty”, bądź „login i hasło zostało odrzucone” [DDDNetCore]. Szczególnie przydatna może być tutaj metoda „fantastycznej czwórki” Mateusza Gila, zwaną również 0, 50, 100 i 150, która polega na szukaniu możliwości zdarzenia w wersji na 0% (gdy zdarzenie nie zaszło), 50% (zdarzenie zaszło w wersji częściowej) lub 150% (zdarzenie zaszło w wersji przesadzonej), np. co się stanie, gdy użytkownik zapłaci za mało, lub za dużo, bądź wcale [DevStyleStolarczyk]?

  • Gdy zobaczysz ożywioną dyskusję, zwłaszcza taką, która kręci się w kółko i nie generuje nowych karteczek, najpewniej jest to punkt zapalny zwany z angielskiego hot spot, który według propozycji twórcy metody Event Stormingu Alberto Brandolini należy oznaczyć jaskrawym kolorem (np. jaskrawy róż) [DDDNetCore].

  • Należy wyłapywać karteczki, których formy sugerują życzenia czy reprezentują całe funkcjonalności (np. „zaloguj użytkownika” lub „lista produktów”) a ich twórcom wyjaśnić, że interesuje nas przepływ zdarzeń, którego nie można cofnąć.

Jeśli natomiast widzisz, że dyskusja powoli się wypala, to możesz spróbować dwóch sposobów:

  1. Poproś uczestników o prześledzenie zdarzeń wstecz (od początku do końca) – może nie umieszczono jakiegoś, z pozoru nieistotnego, zdarzenia? Może ktoś zapomniał, że przed dokonaniem zakupu należy wybrać metodę dostawy?

  2. Wyśledź pieniądze – poproś uczestników, aby prześledzili te ścieżki, które bezpośrednio generują przychód [DDDNetCore].

  3. Zwróć uwagę na polecenia, przy których jest tylko jedno zdarzenie: czy na pewno jest tylko jedna ścieżka wykonania polecenia (pamiętaj o „fantastycznej czwórce”)?

Podczas porządkowania tablicy po pierwszym etapie burzy mózgów może pojawic się wątpliwość, czy dane zdarzenie należy do naszego systemu, czy też nie. Wcześniej już wspomniany Mateusz Gil zaprezentował podział na 4 poziomy (więcej na YouTube) [DevStyleStolarczyk]:

  1. Zdarzenia środowiskowe, które występują poza systemem (samochód wjechał na parking),

  2. Zdarzenia interfejsowe, które nie wpływają na stan systemu (użytkownik wybrał opcję w formularzu),

  3. Zdarzenia infrastrukturalne, które również nie mają wpływu na system i reprezentują typowe technikalia (plik został załadowany na dysk),

  4. Zdarzenia domenowe – te, które nas interesują – reprezentują domenę i zmieniają stan systemu.

Na zakończenie warsztatów

finishing

Podobno ludzki mózg uwielbia historię, dlatego w celu utrwalenia treści, które pojawiły się w trakcie warsztatów, warto poprosić któregoś z uczestników (lub wspólnie całą grupą), aby opowiedział historię, która dzieje się od początku do końca, od lewej do prawej [bourgauDetailedAgendaDDD2019c]. W przypadku gdy idzie to dość niemrawo, warto zaproponować zmianę opowiadającego.

Po zakończeniu warsztatów

Jak wskazuje Zimarev, najważniejsze jest to, aby programiści zadawali pytania. Jeśli na twoich warsztatach nie było dyskusji to możliwe, że problem był zbyt prosty lub zaproszeni byli nieodpowiedni ludzie [DDDNetCore].

Nie obawiaj się również rozszerzać notacji warsztatów. Na przykład, gdy domena mocno operuje na bazach danych można spróbować zaprezentować je w trakcie warsztatów za pomocą osobnych karteczek, gdzie każda z operacji, jak SELECT czy UPDATE, ma swój własny kolor [DevStyleStolarczyk].

Bibliografia

Artykuł na podstawie:


1. źródło zabawy: https://www.funretrospectives.com/went-to-the-beach-and/, w skrócie polega ona na tym, że prowadzący mówi: „Poszedłem na plaże i wziąłem ze sobą…" i następnie wymienia jedną rzecz. Osoba stojąca obok prowadzącego powtarza to, co powiedział prowadzący, dodając swoją rzecz. Zabawa trwa aż wszyscy się wypowiedzą.
comments powered by Disqus
Proszę pamiętaj, że blog jest na ten moment w wersji poglądowej i może zawierać wiele błędów (ale nie merytoycznych!). Mimo to mam nadzieję, że blog Ci się podoba! Wiele ilustracji pojawiło się na blogu dzięki unsplash.com!
Zbudowano z Hugo
Motyw Stack zaprojektowany przez Jimmy