Jeśli filozofia zrodziła się ze zdziwienia pierwszych filozofów, to Definition of Done - jako pewna praktyczna potrzeba - zrodziła się ze zdziwienia “pierwszego” Product Ownera i niepewności “pierwszego” zespołu scrumowego, który słówko “done” rozumiał nader dowolnie.
Tak, dość anegdotycznie i humorystycznie, można określić źródła Definition of Done. Sprawa jest jednak, jak zwykle, dość poważna. “Definition of Done Scrum”, “Definition of Done Agile”, “Definition of Done przykłady” to frazy bardzo często używane w wyszukiwarce.
Ich popularność jest dość zrozumiała. Jest zrozumiała tym bardziej, im większą mamy świadomość problematyczności - jednego z ważniejszych pojęć w ramach frameworku Scrum - mianowicie pojęcia Definicji Ukończenia (Definition of Done).
Dlaczego? Z dość błahego, a jednocześnie bardzo znamiennego w skutkach, powodu.
W procesie tworzenia produktów cyfrowych być może jednym z trudniejszych zadań jest rozstrzygnięcie, czy dana funkcjonalność jest już gotowa, czy wymaga jeszcze jakiejś dodatkowej pracy.
Bez uzyskania jednoznaczności w tej kwestii trudno jest prowadzić projekt w sposób płynny, racjonalny, celowościowy i zrozumiały dla wszystkich zaangażowanych w niego osób.
Mówiąc wprost:
Definicja Ukończenia, Definition of Done jest kwestią o kluczowym znaczeniu dla sprawnie działającego zespołu scrumowego, przebiegu projektu, i koniec końców jakości produktu cyfrowego.
Warto od razu zaznaczyć, że wykonanie danej pracy nie oznacza bowiem w procesie tworzenia produktów cyfrowych ukończenia pracy.
I co jeszcze ważniejsze: ukończenie, wykonanie danych zadań nie może być kwestią deklaracji, ale powinno być rozstrzygane za pomocą klarownych, konkretnych kryteriów, które w sposób bezstronny rozstrzygają, czy dany element Backlogu (Product Backlog) można uznać za ukończony.
W niniejszym artykule, który stanowią kolejną cegiełkę do korpusu tekstów poświęconych frameworkowi Scrum, przyjrzymy się problemowi definiowania, wyłaniania kryteriów zakończenia.
Serdecznie zapraszamy do lektury!
Definition of Done - co to jest?
Nim przejdziemy do definicji zacznijmy od uwagi ogólnej, która powinna wybrzmieć z całą mocą już na samym wstępie.
Definition of Done (często skracane do - DoD) pozwala pracować nie tylko sprawniej, ale także w poczuciu pewności, że założony cel rzeczywiście został osiągnięty.
Komfort psychiczny członków zespołu scrumowego, ale szerzej także wszystkich interesariuszy, jest niezwykle cenną wartością i konkretną korzyścią, której z pewnością nie należy bagatelizować.
Ma bowiem bardzo głęboki i rozległy wpływ na czas trwania projektu, atmosferę panującą w zespole scrumowym, budżet, końcowym efekt - jakość produktu cyfrowego.
Warto o tym przypominać, choćby z tego powodu, że Definition of Done nie zawsze jest - niestety - praktyką powszechną oraz w pełni docenianą.
A brak DoD skutkuje prawie zawsze tym samym - chaosem, niepewnością, stresem, konfliktami, problemami komunikacyjnymi - lub mówiąc bardziej wymownie skutkuje “przepalaniem” czasu oraz budżetu.
No dobrze, czym zatem jest Definition of Done?
Definicja Ukończenia na gruncie metodyk zwinnych jest dość często definiowana jako zbiór kryteriów, po spełnieniu których dany projekt lub jego składnik można uznać za wykonany, skończony.
O Definition of Done można także myśleć jako o swoistej liście kontrolnej (Checklist), która pozwala niepewność zastąpić jednoznacznością.
Definition of Done pozwala także usunąć z projektu domniemania, wyobrażenia i w ich miejsce wstawić wspólną, podzielaną przez wszystkich “platformę” rozumienia wymagań.
Przy czym, do powyższego konieczne jest dodanie niezwykle istotnej uwagi, komentarza. Definition of Done nie jest po prostu “listą kryteriów do odfajkowania”.
Definition of Done powinna być tworzona jako komplementarne połączenie:
- klarownie, jednoznacznie zdefiniowanej pracy
- wartościowych z punktu widzenia interesariuszy - w szczególności biznesowych - Przyrostów (Increments).
Przyrost powstaje, gdy dany element Backlogu (Product Backlog) spełnia Definicję Ukończenia, a więc jest zgodny z formalnym opisem stanu, jaki powinien być osiągnięty.
Ukończenie (Done) oznacza więc, że w danym zadaniu (Task) lub Historyjce Użytkownika (User Story) żadna praca nie jest już konieczna do wykonania, a osiągnięty efekt jest wartościowy z punktu widzenia biznesowych potrzeb.
Mówiąc jeszcze nieco innym językiem, Przyrost staje się wartościowy, gdy dany element z Backlogu Produktu (Product Backlog) spełnia kryteria zdefiniowane w Definicji Ukończenia.
W artykule pt. “What is the Definition of Done (DoD)?” Definicja Ukończenia definiowana jest jako:
“prosta lista czynności (np. pisanie kodu, komentarze do kodowania, testy jednostkowe, testy integracyjne, informacje o wydaniu, dokumenty projektowe itp.), które nadają produktowi możliwą do wykazania wartość”.
Z kolei zgodnie z wykładnią zaproponowaną w Scrum Guide, Definicja Ukończenia powinna przede wszystkim zapewnić przejrzystość oraz zaoferować wspólne zrozumienie tego, jaka praca została wykonana w ramach Przyrostu.
Co jeszcze ważniejsze, a co jest rekomendowane przez autorów Scrum Guide`a, element, który nie spełnia Definicji Ukończenia nie powinien mieć nadawanego statusu Wydania i nie powinien być prezentowany na Przeglądzie Sprintu.
Ważną funkcją Definition of Done jest także raportowanie. Będąc pewnym, że dana funkcjonalność jest ukończona możliwe jest przekazanie tej informacji członkom zespołu, Product Owner`owi oraz pozostałym interesariuszom.
Definition of Done ma także tę zaletę, że może być używana na różnych poziomach - na przykład osobno dla danej funkcjonalności, User Story, osobno dla całego Sprintu lub calego Wydania.
Definicja Ukończenia we frameworku Scrum jest listą kontrolną, określającą warunki, jakie muszą zostać spełnione, by można uznać pozycję z Backlogu (Product Backlog) Produktu za ukończoną, tym samym uzyskać Przyrost.
Warto przy tym pamiętać, że od Definition of Done zależna jest jakość produktu cyfrowego (np. jego doskonałość, bezbłędność, co przekłada się na jego użyteczność), konkurencyjność produktu cyfrowego, jak również oferowane User Experience.
Na koniec rozważań definicyjnych, dotyczących cech konstytutywnych dla Definition of Done koniecznie trzeba dodać, że DoD jest rozumiane i wykorzystywane na trzech różnych poziomach.
Myśląc o Definition of Done możemy mieć na myśli:
- Definicję Ukończenia User Story (Definition of Done for User Story) - a więc zbiór kryteriów, które muszą zostać spełnione, aby User Story została uznana za skończoną
- Definicję Ukończenia Sprintu (Definition of Done for Sprint) - która odnosi się do zestawu warunków koniecznych do uznania Sprintu za wykonanego
- Definicję Ukończenia Wydania (Definition of Done for a Release) - która obejmuje zestaw kryteriów pozwalających uznać aktualizację produktu cyfrowego za gotową do Wydania.
Powyższe zdania brzmią dość prosto i sugerują, że mamy do czynienia z zadaniem dość prostym. Niestety, tak nie jest. Definition of Done w praktyce stanowi pewne wyzwanie.
Zdefiniowanie Definition of Done bywa zadaniem kłopotliwym, w którym bardzo pomocne są poniższe pytania, które powinny być uwzględnione:
- Czy testy akceptacyjne zostały przeprowadzone i zakończone?
- Czy testy jednostkowe zostały pomyślnie zaliczone?
- Czy kod został sprawdzony całościowo?
- Czy kod został ukończony?
- Czy testy funkcjonalne zostały zdane?
Najważniejsze zalety Definition of Done
Definition of Done przykład może brzmieć następująco:
Powyższy przykład dość jasno ilustruje i pokazuje, że Definition of Done służy jednoznacznemu określeniu zakresu zadań, prac, w sposób zrozumiały i nie pozostawiający (na tyle na ile jest to możliwe) wątpliwości, co twórcy DoD mieli na myśli, formułując dane kryterium.
W efekcie Definition of Done zapewnia zespołowi scrumowemu:
- konkretność oraz jednoznaczność
- zrozumiałość oraz wspólny punkt odniesienia
- jasność oraz przejrzystość
- jakość oraz minimalizowanie ryzyka
- wydajność oraz harmonię pracy.
Definicja Ukończenia daje wszystkim członkom zespołu scrumowego wspólne rozumienie wykonanej pracy.
Stanowi także wspólny punkt odniesienia, który powinien być przestrzegany przez wszystkich członków zespołu scrumowego.
Posługiwanie się wspólnymi dla wszystkich kryteriami pozwala zachować wysoką jakość wytwarzanego oprogramowania. Pozwala także szybciej wdrażać nowych członków zespołu scrumowego oraz usprawniać współpracę między zespołami.
Warto powrócić do wspomnianej powyżej kwestii wartości, jaką powinno się jednocześnie wraz z pracą osiągać.
Otóż, oferowanie skończonych (w sposób bezsprzeczny, jednoznaczny i niewątpliwy) Przyrostów pozwala osiągać, utrzymywać przewagę konkurencyjną.
Kolejną korzyścią jest możliwość szybszego, lepiej zaadresowanego adaptowania się do zmieniających się warunków rynkowych, technologicznych, projektowych.
Definicja Ukończenia w dużej mierze odpowiada za miejsce, jakie produkt cyfrowy, organizacja zajmuje na rynku, jak jest postrzegany, jakie User Experience oferuje.
Jednoznaczność statusu “Gotowe” pozwala uniknąć także podejmowania nietrafionych, niepotrzebnych, czasami wręcz szkodliwych decyzji, które najczęściej są efektem właśnie niepewności, niejednoznaczności, czy nadinterpretacji.
Status “Gotowe” jest w pewnym sensie bezdyskusyjny, konkluzywny i przejrzysty. Sprawia, że wszyscy członkowie zespołu oraz interesariusze dokładnie wiedzą, co on oznacza i tym samym pozbywają się domysłów.
Definicja Ukończenia pełni także funkcję diagnostyczną. Jeśli nie dosłownie, to na pewno w pewnym sensie.
Zauważmy, że niemożność spełnienia danego kryterium zawsze jest dowodem na pewien deficyt kompetencji, doświadczeń, wiedzy, narzędzi.
W wielu wypadkach jest także wskaźnikiem błędu, który został gdzieś popełniony.
Diagnostyczna funkcja Definicji Ukończenia może skutkować pewnym rodzajem prewencji - eliminowania problemów, by nie zakłócały procesu w przyszłości.
Definition of Done ma także wpływ na zdolność zespołu scrumowego do planowania pracy, określania celów w różnych perspektywach czasowych.
W artykule pt. “What is Definition of Done in Agile?” autorzy wymieniają trzy fundamentalne korzyści, płynące z korzystania z Definition of Done.
Definicja Ukończenia zapewnia:
- przejrzystość (Transparency) - mając wspólny punkt odniesienia, zestaw zasad zespół nie jest zagrożony działaniem opartym na chaosie, niepewności
- kontrolę (Inspection) - która pozwala szybciej wyłapywać błędy oraz agregować opinie i informacje zwrotne
- przystosowanie (Adaptation) - która bazując na kontroli pozwala na wdrożenie adaptacji, ulepszeń, poprawek.
Ponadto, wykorzystywanie Definicji Ukończenia sprzyja:
- poczuciu odpowiedzialności – każdy członek zespołu wie, co ma robić i czego się od niego oczekuje
- terminowości - jasne zasady motywują i w pozytywnym sensie dyscyplinują terminowość dostaw
- planowaniu i szacowaniu - jednoznaczne kryteria, definicje pozwalają określać, co jest konieczne do ukończenia projektu
- płynności odbioru - wiedząc, co jest celem oraz jaki produkt ma być dostarczony wiadomo, co należy uczynić, by takim się stał
- konkretności, precyzji - także w kwestii rozwoju produktu.
Podsumowując: Definicja Ukończenia jest bezpośrednio odpowiedzialna za wydajność zespołów pracujących w metodykach zwinnych. Ma także niebagatelne znaczenie w kwestii atmosfery pracy, jej jakości.
Pozwala zespołom scrumowym wypracować najlepsze praktyki, standardy oraz wzorce zachowania, które gwarantują wysoką jakość, przejrzystość i spójność w tworzeniu oprogramowania.
Definicja Ukończenia dla developerów oznacza jasność w kwestii oczekiwań oraz równie ważną jednoznaczność w kwestii celów.
Dobrze zdefiniowana Definicja Ukończenia skutkuje poczuciem, że potencjalnie możliwy do wdrożenia przyrost oprogramowania spełnia standardy pod względem jakości i użyteczności.
Dobre praktyki tworzenia Definition of Done
Od tego, jaka jest jakość samej Definicji Ukończenia zależy jakość finalna implementowanej User Story, funkcjonalności, czy szerzej produktu cyfrowego.
Samo zdefiniowanie Definition of Done powinno mieć charakter zespołowy, a w zadanie to powinni być aktywnie włączeni wszyscy interesariusze.
Częstokroć techniką pozwalającą szybciej i efektywniej “napisać” Definicję Ukończenia jest burza mózgów (Brainstorm), która może być inicjowana przez zespół developerski.
Pytaniami, które sprzyjają tworzeniu Definition of Done są pytania dotyczące:
- warunków, jakie muszą być spełnione, by produkt mógł być używany
- środowiska, w jakim powinien on działać zgodnie z oczekiwaniami
- testów potwierdzających jego niezawodność oraz jakość
- dokumentacji.
Dobrą praktyką jest także delegowanie do każdego kryterium osobnego właściciela, który powinien spełniać rolę swoistego arbitra w sytuacji różnicy zdań.
Celem nadrzędnym jest bowiem uzyskanie spójności oraz eliminowanie wszelkich niejasności oraz wątpliwości.
W czasie “pisania” Definition of Done warto pamiętać o kilku zasadach, które pozwalają uczynić ją możliwie najbardziej skuteczną, użyteczną, praktyczną oraz wartościową.
Przede wszystkim Definicja Ukończenia powinna być:
- wymagająca, ale jednocześnie optymalna - nie grożąca frustracją członków zespołu scrumowego
- realistyczna - możliwa do ukończenia
- zrozumiała i komunikatywna
- prosta i zwięzła
- jednoznaczna
- rozstrzygalna.
Wielu autorów podkreśla, że cechą bez której nie sposób pomyśleć użytecznej Definicji Ukończenia jest widoczność dla wszystkich interesariuszy.
Definition of Done powinno być efektem współpracy, dokumentem, z którego aktywnie korzystają różni interesariusze, a to oznacza, że powinien on być napisany jasnym, zwięzłym językiem.
Ponadto, tworzenie Definition of Done oznacza konieczność określenia działań, środków niezbędnych do uzyskania spodziewanego efektu.
Wymusza także przemyślenie oraz wskazanie adresata, czyli określenia kto może spełnić dane kryterium, za pomocą jakich narzędzi oraz w jakim czasie, w którym z kolei Sprincie.
Tworząc Definition of Done warto także mieć na uwadze pewne pułapki, o których wspominają autorzy związani z Agile Alliance w artykule pt. “Definition of Done”.
Słusznie zwracają oni uwagę na konieczność odpowiedniego wyważenia ilości oraz poziomu trudności kryteriów.
Typowe pułapki (Common Pitfalls) trakcie tworzenia Definition of Done to:
- nadmierna drobiazgowość listy kryteriów, która zamiast sprzyjać osiągnięciu celu ewidentnie mu szkodzi
- pomijanie kryteriów ukończenia na poziomie User Story i operowanie tylko kryteriami wyższego poziomu - Epika
- zawężone grono odbiorców DoD, co zdecydowanie zmniejsza jej skuteczność.
Definition of Done powinna być narzędziem “żywym”, pomocnym, tym samym prace nad nią mają zawsze charakter procesualny. Nie wystarczy raz utworzyć Definition of Done, konieczne jest aktualizowanie tego dokumentu.
Konieczność dokonywania inspekcji, adaptacji jest niezbędna. Równie ważna jest regularność tych działań, podobnie, jak równie ważny jest dzielący ich stosunkowo niewielki odstęp czasu.
W sensie merytorycznym, przedmiotowym szczególną uwagą należy obdarzyć sposób uzyskiwania pewności. Stąd też kluczowymi pytaniami są pytania o kryteria rozstrzygające o spełnieniu wymagań biznesowych, związanych z jakością.
Co to jest Definition of Done. Podsumowanie
- W procesie tworzenia produktów cyfrowych jednym z trudniejszych zadań jest rozstrzygnięcie, czy dana funkcjonalność, implementowana User Story jest już gotowa, czy wymaga jeszcze dodatkowej pracy.
- Tworząc produkty cyfrowe (np. strony internetowe, aplikacje mobilne) należy pamiętać, że wykonanie danych zadań nie może być kwestią deklaracji, ale powinno być rozstrzygane za pomocą klarownych, konkretnych kryteriów.
- Brak Definition of Done skutkuje najczęściej rosnącą niepewnością, stresem, problemami komunikacyjnymi.
- Brak Definicji Ukończenia rodzi ryzyko straty czasu oraz zwiększenia budżetu koniecznego do obsługi projektu.
- Warto pamiętać, że Definition of Done nie jest po prostu “listą kryteriów do odfajkowania”.
- Ukończenie (Done) oznacza, że w danym zadaniu (Task) lub Historyjce Użytkownika (User Story) żadna praca nie jest już konieczna do wykonania, a osiągnięty efekt jest wartościowy z punktu widzenia biznesowych potrzeb.
- Definition of Done jest rozumiane i wykorzystywane na trzech różnych poziomach. Może być tworzone dla danej funkcjonalności, User Story, osobno dla całego Sprintu lub calego Wydania.
- Definicja Ukończenia daje wszystkim członkom zespołu scrumowego wspólne rozumienie wykonanej pracy. Stanowi także wspólny punkt odniesienia, który powinien być przestrzegany przez wszystkich członków zespołu scrumowego.
- Definicja Ukończenia w dużej mierze odpowiada za miejsce, jakie produkt cyfrowy, organizacja zajmuje na rynku, jak jest postrzegany, jakie User Experience oferuje.
- Definicja Ukończenia jest bezpośrednio odpowiedzialna za wydajność zespołów pracujących w metodykach zwinnych.
- Dobrze zdefiniowana Definicja Ukończenia skutkuje poczuciem, że potencjalnie możliwy do wdrożenia przyrost oprogramowania spełnia standardy pod względem jakości i użyteczności.
- „Definiowanie” Definition of Done powinno mieć charakter zespołowy, a w zadanie to powinni być aktywnie włączeni wszyscy interesariusze.
- Definition of Done to dokument, z którego aktywnie korzystają różni interesariusze, a to oznacza, że powinien być napisany jasnym, zwięzłym językiem.
- Definition of Done powinno być narzędziem “żywym”, pomocnym, tym samym prace nad nim mają zawsze charakter procesualny.
- Nie wystarczy raz utworzyć Definition of Done, konieczne jest aktualizowanie tego dokumentu.