Szacowanie i prognozowanie w Agile

Szacowanie i prognozowanie w Agile

Czy można prognozować daty ukończenia funkcjonalności produktu bez ich uprzedniego oszacowania w jakiejkolwiek formie?

Artykuł zaktualizowany 18 maja 2024

Kiedy gotowa będzie funkcjonalność produktu, której pilnie potrzebują użytkownicy? Kiedy odbędzie się kolejne wydanie tego produktu? Co się w nim znajdzie? Ile wymagań można podjąć bezpiecznie do realizacji w najbliższej iteracji?

To typowe pytania, z jakimi zmagają się kierownicy projektów, managerowie produktów (np. Product Ownerzy w Scrumie), Developerzy i całe Zespoły. Wydaje się, że jedynym sposobem na uzyskanie odpowiedzi jest wyszacowanie czasochłonności prac i sporządzenie prognozy na ich podstawie. No, chyba że stosowane są metody zwinne, to wtedy jakiś fundamentalista Agile na pewno zaordynuje szacowanie relatywne z użyciem story pointów, wyliczy velocity i będzie wykorzystywał go do klecenia prognoz.

Oczywiście oba te podejścia pozwalają z mniejszą lub większą skutecznością zgadywać, co i kiedy uda się zrobić. Wbrew naiwnej wierze wielu popularyzatorów story pointów, ich użycie do sporządzania prognoz nie będzie ani trochę lepsze, niż posłużenie się wycenami w formie godzin roboczych lub man-daysów.

O ile bowiem punkty są bezwymiarowymi jednostkami porównania relatywnej wielkości szacowanych elementów, to przecież prognozy nieuchronnie sprowadzają się do przewidywania terminów, a więc konieczne będzie przełożenie punktów na czas – za pomocą velocity. Inaczej mówiąc, jeśli szacuje się, ile pracy zostanie wykonane do określonej daty w tempie odpowiadającym wartości velocity, to niejawnie przelicza się te wspaniałe bezwymiarowe punkty na jednostki czasu, czy się to komuś podoba, czy nie.

#NoEstimates

Istnieje podejście #NoEstimates, które jest równie skutecznym generatorem nieporozumień, co wspomniane powyżej story pointy. Czegóż to ludzie nie wymyślają o #NoEstimates! Ponoć technika ta wymaga dzielenia roboty na kawałki tej samej wielkości (a tak naprawdę nie wymaga). Albo trzeba tę robotę tak dzielić, żeby żaden kawałek nie był większy, niż jakiś tam przyjęty limit (kolejna bzdura, bo to tylko jedna z możliwych strategii, a nie wymóg).

A już największą bzdurą jest przekonanie, że #NoEstimates jest tożsame z odejściem od szacowania, co jakoś wielu osobom nie kłóci się w ogóle z dwoma mitami wspomnianymi wcześniej. Jak niby ktokolwiek miałby się upewnić, że robota została poszatkowana na równej wielkości kawałki albo że są one dostatecznie małe, nie dokonując oszacowania ich wielkości?

W rzeczywistości ci, co buńczucznie krzyczą, że radzą sobie świetnie bez szacowania, bo używają #NoEstimates, kompromitują się niewiedzą i brakiem logiki, ale to już ich problem. W praktyce to jest metoda szacowania relatywnego, którą od wielu innych różni to, że nie przypisywane są wycenianym elementom żadne symboliczne, literowe lub cyfrowe wyceny. I stąd zresztą wywodzi się nazwa #NoEstimates – brak oszacowań (a nie #NoEstimation, czyli brak szacowania).

W jaki sposób prognozować daty realizacji czegokolwiek, jeśli brak oszacowań w ogóle albo nie mają one formy numerycznej, więc nie da się wyliczyć velocity? Można posłużyć się przepustowością (ang. throuphput), która jest jedną z miar przepływu i doskonale nadaje się jako zamiennik dla velocity w tym przypadku. Jak się ją wylicza? Bardzo prosto: to liczba rzeczy, którą udało się zrealizować w jednostce czasu.

I w ten sposób, jeśli np. zastanawiamy się, ile roboty uda się wykonać w ciągu najbliższego kwartału, to można powiedzieć, że będzie tego mniej więcej tyle samo, co w kwartale minionym. Oczywiście już słyszę ten wrzask, jak nieprecyzyjne i bezużyteczne takie prognozowanie jest. Jasne, zgadzam się. Podobnie bezużyteczne, jak to oparte o velocity i story pointy, bo przecież polega w istocie na tym samym i różni się jedynie mechaniką. To właśnie dlatego przepustowość, użyta w ten sposób (marny, bo da się lepiej, o czym za moment) jest doskonałym zamiennikiem dla velocity.

Kiepskie prognozy

Przewidywanie dat realizacji na podstawie tempa pracy (wyrażonego czy to za pomocą velocity, czy poprzez przepustowość) ma kilka wad.

Po pierwsze, bardzo często używane są wtedy wartości średnie tego tempa pracy, co jest wynikiem działania tzw. chłopskiego rozumu, który podpowiada, że średnie wartości są najbardziej prawdopodobne. Bzdura, bo nie są, a przynajmniej nie w każdym przypadku.

Po drugie, prognozy tego typu opisują zazwyczaj tylko jeden wariant przebiegu przyszłych prac. Bez rozważenia różnych scenariuszy ciężko powiedzieć, czy jest on pesymistyczny (zachowawczy), czy optymistyczny (ambitny, ale być może mało realny). Oczywiście można sporządzić wiele prognoz zamiast jednej, lecz to będzie zwykle dość kosztowne i nie ma co ukrywać – wielu odbiorców dostarczonej w ten sposób informacji zwyczajnie nie zdoła wyciągnąć z niej sensownych wniosków.

Po trzecie wreszcie, każda prawdziwa prognoza powinna zawierać nie tylko przewidywania, ale też ocenę prawdopodobieństwa ich trafności. I w tym obszarze kryje się największa słabość prognoz opracowywanych z użyciem czy to velocity, czy przepustowości, czy nawet oszacowań czasochłonności. Można oszacować błąd takich prognoz, ale niewiele to będzie miało wspólnego z faktycznym rachunkiem prawdopodobieństwa albo wymagało będzie jednej z dwóch rzeczy: stworzenia modelu matematycznego (nierealne, bo jest za dużo niewiadomych) lub wykonania mnóstwa różnych prognoz (nieopłacalne, bo czasochłonne).

Prognozowanie bez użycia oszacowań

Istnieje sposób prognozowania, którego da się użyć niezależnie od tego, czy cokolwiek jest szacowane, czy też nie. I wcale nie chodzi tu o jakieś mniej lub bardziej pokrętne użycie podejścia #NoEstimates, tylko o wykorzystanie wspomnianej już przepustowości, ale w zupełnie inny sposób, czyli nie jako prostej alternatywy dla velocity.

Zamiast zastanawiać się, ile pracy zwykle udaje się ukończyć w czasie tygodnia, miesiąca, Sprintu w Scrumie czy jakimkolwiek innym okresie i na tej podstawie przewidywać, co zostanie zrobione w porównywalnych okresach w przyszłości, można posłużyć się przepustowością dzienną do sporządzenia symulacji Monte Carlo. Ta przepustowość dzienna to po prostu liczba rzeczy ukończonych każdego dnia i to z uwzględnieniem dni wolnych od pracy (świąt, weekendów itd.).

Wspomniana symulacja Monte Carlo opiera się o trzy założenia:

  1. Proces w przyszłości będzie przebiegał mniej więcej tak samo, jak przebiegał do tej pory (a przynajmniej w tym okresie, z którego zaczerpniemy dane do sporządzenia symulacji).
  2. Charakter pracy, jaka jest wykonywana, nie ulegnie istotnej zmianie.
  3. Osoby zaangażowane w wykonanie pracy będą dbać o to, by posuwała się ona do przodu, a nie będą zaczynać realizacji kolejnych rzeczy, nie kończąc tego, co rozbabrali wcześniej.

Jeśli te warunki są spełnione, można zasymulować jaką przepustowość dzienną uda się uzyskać w kolejnych dniach w przyszłości, wykorzystując historyczne dane. A że są to dane bardzo proste (bo wystarczy wiedzieć, ile każdego dnia rzeczy udało się skończyć), sama symulacja jest trywialna. Można więc wykonać takich symulacji w parę minut nie kilka czy kilkanaście, ale np. kilkadziesiąt albo kilkaset tysięcy. Lub choćby milion.

Powstanie wtedy ogromna liczba różnych scenariuszy opisujących możliwy przebieg prac w przyszłości. Ponieważ generowane są one tak, by odtworzyć rozkład przepustowości dziennej, jaki zaistniał w przeszłości, niektóre scenariusze będą zdarzać się częściej, inne rzadziej. To pozwoli ocenić prawdopodobieństwo wystąpienia każdego z nich w banalny sposób: jeśli symulacji było milion, a jakiś scenariusz wystąpił 25 tysięcy razy, to jego prawdopodobieństwo jest równe 2.5% (czyli jest to liczba jego wystąpień wśród wszystkich wykonanych symulacji).

Zwracam uwagę, że zupełnie niepotrzebne do tego typu prognozowania są oszacowania zrealizowanych rzeczy lub tego, co na realizację oczekuje. Jedyną informacją, jaką trzeba dysponować, są daty ukończenia tego, co zostało już ukończone, czyli wiedza o dziennej przepustowości w przeszłości.

Zaproszenie do SPA

Podejście do prognozowania opartego o probabilistykę budzi u wielu osób wątpliwości. Przykładowe pytania, jakie się nasuwają:

  • Jak to działa, gdy czas realizacji poszczególnych rzeczy znacząco się różni?
  • Jak uwzględnić w prognozie dni wolne i urlopy?
  • Czy da się tak prognozować, jeśli realizowane rzeczy wymagają zupełnie różnych działań, narzędzi i kompetencji?

Najlepszym sposobem na rozwianie wątpliwości i dostarczenie odpowiedzi jest pokazanie w praktyce, jak tego typu symulacje są realizowane. Warto przy okazji wspomnieć, że wymaga to nieco odmiennego postępowania w zależności od tego, co jest celem symulacji. A może nim być:

  1. Prognozowanie liczby rzeczy, jaką uda się zrealizować w określonym czasie (to się przydaje przy planowaniu zakresów wydań produktu lub choćby Planowaniach Sprintu w Scrumie).
  2. Prognozowanie daty zrealizowania określonej liczby rzeczy (to dla odmiany przydatne jest przy planowaniu dat wydań produktu lub np. do zarządzania dostępnością ludzi, którzy mają wykonywać pracę).

Wszystkich zainteresowanych tym tematem i ogólniej sposobami szacowania i sporządzania prognoz w metodach zwinnych, zapraszam do SPA, czyli na warsztat Szacowanie i Prognozowania w Agile.

Udostępnij ten artykuł

Ten portal używa cookies aby zapewnić jego sprawne działanie. Akceptacja cookies jest do tego wymagana. Można też odmówić zgody na użycie cookies i opuścić portal. Aby dowiedzieć się jak używamy cookies zapoznaj się z naszą Polityką Prywatności.
Akceptuję cookies Nie zgadzam się
Cookies utworzone podczas przeglądania portalu zostały usunięte i można go teraz bezpiecznie opuścić. Dalsze przeglądanie naszych stron spowoduje ponowne wyświetlenie monitu o akceptację cookies.