Cykl artykułów na temat przepustowości wypada zakończyć omówieniem ograniczeń i problemów, które wiążą się z wykorzystaniem tej miary jako podstawy do sporządzania prognoz. Zachęcam do zapoznania się z poprzednimi dwoma tekstami, najlepiej w kolejności, w jakiej zostały opublikowane (część pierwsza, część druga) – to ułatwi zrozumienie, o czym piszę poniżej.
Niska precyzja prognoz?
Niektórzy wskazują, że przepustowość pozwala jedynie na dosyć zgrubne prognozowanie tego, co i kiedy uda się zrealizować. Nie dość, że throughput wyliczany jest z pominięciem informacji o wielkości tego, co już zostało ukończone, to potem przy ustalaniu tempa przesuwania się w dół listy rzeczy do zrobienia ignoruje się również i ich rozmiar. Zetknąłem się wręcz z opiniami, że przepustowość nadaje się wyłącznie do początkowych, orientacyjnych prognoz, a potem niezbędne ma się stać wykorzystanie velocity lub być może innych miar i związanych z nim narzędzi.
Cóż, te opinie zawierają w sobie tyle prawdy, co każde dobre kłamstwo. Już wyjaśniam, czemu oskarżenia o brak precyzji są chybione. Najlepiej pokazać to na przykładzie, zaczynając od rozjechania walcem przekonania o „precyzyjnych wycenach”.
Wiarygodność wycen
Przyjmijmy, że jakiś Zespół wycenia wszystko w story pointach, które są bezwymiarowymi jednostkami relatywnej wielkości. Co to znaczy i jak działają takie punkty? Jeśli coś jest większe (trudniejsze, bardziej czasochłonne, bardziej złożone, mniej pewne itd.) od czegoś innego, to dostaje punktów więcej niż coś, co jest mniejsze (prostsze, mniej czasochłonne, mniej złożone, pewniejsze itd.). Tylko tyle i aż tyle. Nie proporcjonalnie więcej punktów, ale po prostu więcej.
To oznacza w praktyce, że jeśli jakaś rzecz wyceniona została na jeden punkt a inna na dwa punkty, różnica ich wielkości wcale nie musi być w proporcji jeden do dwóch. Oznacza to tylko, że są one różnej wielkości i że druga rzecz jest do tego stopnia większa, by nie można uznać jej za taką samą jak pierwsza.
Wedle tej samej zasady rzecz wyceniona na trzy punkty wcale nie jest trzy razy większa od tej jednopunktowej – wystarczy, by była na tyle większa od dwupunktowej, by nie dało się ich uznać za mniej więcej równe sobie.
Notabene dokładnie tak samo działa to, gdyby pokusić się o wyceny np. w dniach roboczych. Nikt przy zdrowych zmysłach nie będzie się upierał, że jeśli na zrealizowanie jednej rzeczy trzeba takich dni trzy a innej dni sześć, to różnią się one wielkością dokładnie w proporcji trzy do sześciu. Jest też mało prawdopodobne, że prace, gdy już się rozpoczną, potrwają dokładnie tyle dni, ile zapisano w wycenie. Zmieniać się może liczba osób zaangażowanych w realizację, pomiędzy różnymi czynnościami zdarzą się przestoje itd.
Wniosek: wyceny są zawsze obciążone błędem szacowania i nie da się nic z tym zrobić. To prowadzi wprost do pytania, co powoduje większe obniżenie wiarygodności prognoz: całkowite pominięcie wycen czy uwzględnienie ich wraz z nieuchronnymi niedokładnościami? Dobre pytanie, na które ciężko odpowiedzieć i… niekoniecznie warto.
Dzielenie listy rzeczy do zrobienia na kawałki
Wróćmy do przykładowego Zespołu, który wycenia wszystko w story pointach. Może wyliczyć swoją prędkość – niech wynosi ona średnio 25 punktów na tydzień. Prognozowanie z użyciem tej wartości velocity polegać będzie zatem na przejściu przez listę rzeczy do zrobienia, zliczaniu wycen poszczególnych elementów i przewidywaniu, w których miejscach na liście wypadną granice tygodni.
Oczywiście na liście są rzeczy różnej wielkości, dlatego tak bardzo zależy nam na ich wycenieniu i stąd obawa, że bez uwzględnienia wycen prognoza będzie marna. Nie ma takiej możliwości, by przesuwając się w dół listy i dzieląc ją na zbiory rzeczy, które mogą zostać zrealizowane w ciągu tygodnia, zawsze uda się idealnie wstrzelić w sumę wycen równą 25 punktów. Nieuchronnie część tych teoretycznych granic między tygodniami wypadać będzie np. w połowie kolejnego elementu na liście. Co wtedy?
Można uznać, że jeśli dodanie kolejnego elementu do listy rzeczy, jakie potencjalnie uda się zrealizować w jakimś prognozowanym tygodniu, powodowałoby uzyskanie velocity większego niż 25 story pointów, to znaczy, że granica między tygodniami wypadać powinna przed tym elementem.
Równie dobrze można uznać, że skoro 25 punktów to średnia prędkość, w niektórych tygodniach będzie ona wyższa, w innych niższa i dlatego w opisanym powyżej przypadku granica między tygodniami wypadać powinna za pierwszym elementem, który skutkuje uzyskaniem prędkości większej niż średnia.
Można wprowadzić zasadę, że jeśli nadmiar wielkości kolejnego elementu nie przekracza jakiegoś odsetka średniego velocity (np. nie jest to więcej niż 20%, czyli 5 punktów), to granica między tygodniami wypada za tym elementem, a w przeciwnym razie przed nim.
Można w końcu uznać, że granica między tygodniami wypadnie wtedy gdzieś w trakcie prac nad elementem, a to oznacza, że zostanie on ukończony dopiero w tym tygodniu, w którym po raz ostatni trwać będą nad nim jakieś prace.
I teraz moje wredne pytanie: która z tych strategii skutkować będzie stworzeniem najprecyzyjniejszej prognozy dat ukończenia poszczególnych elementów z listy rzeczy do zrobienia? Bo jako żywo każda skutkuje jakimś uproszczeniem i tym samym utratą dokładności.
W pierwszym przypadku, mimo że posługujemy się średnią wartością dotychczas uzyskiwanego velocity, w ramach prognozowania traktujemy ją jako spodziewaną wartość maksymalną, która nigdy nie zostanie przekroczona. Czyli zupełnie jakbyśmy zakładali, że w przyszłości prędkość Zespołu będzie nieco niższa niż obecnie. A to implikuje, że proces jakoś się musi zmienić. Jaki zatem jest sens prognozować jego przebieg na podstawie danych o prędkości mierzonej przed tą spodziewaną zmianą?
Dokładnie taki sam problem stwarza druga strategia. Używamy w niej wartości średniej velocity jako przyszłej wartości minimalnej prędkości. Znów: skąd wiadomo, że Zespół zacznie pracować szybciej? I jaki sens jest budowanie prognozy na podstawie danych zebranych w procesie, który ma się istotnie zmienić?
Trzeci wariant jest niewiele lepszy. W jaki sposób ustalić procentowy limit użyty do rozstrzygania, w którym tygodniu umieścić należy kolejny element z listy? Jak uniknąć zawyżenia lub zaniżenia prognozowanej wartości przyszłego velocity? Czy podany jako przykład dwudziestoprocentowy margines bezpieczeństwa jest sensowny, choć wyciągnąłem go z kapelusza? Jaki wpływ na wiarygodność prognozy będzie miało przyjęcie takiej lub innej wartości limitu?
A ostatnia opcja, czyli przyjęcie, że granice tygodni wypadają np. w połowie prac nad czymś? Wydaje się to rozsądne, ale sprawia problem i to spory: niektóre rzeczy zahaczą o kolejny tydzień w minimalnym stopniu, inne w znacznym, ale w obu przypadkach w prognozie przyjmiemy koniec tygodnia jako czas ich zakończenia. To dopiero „precyzja” ustalania dat realizacji, nieprawdaż?
Duże rzeczy do zrobienia
Wrzucam w moim walcu drugi bieg i zwracam uwagę, że skoro elementy na liście rzeczy do zrobienia są różnej wielkości, to niektóre z nich będą naprawdę spore. Zazwyczaj im niżej na liście się znajdują, czyli im bardziej odległy jest moment rozpoczęcia realizacji, tym elementy są większe.
Powiedzmy, że przykładowy Zespół wyszacował kilka elementów na wielkość 100 story pointów. W praktyce to oznacza, że żadnego z nich nie da się zrealizować w trakcie jednego tygodnia. Można natomiast uznać, że każdy z nich wymagał będzie realizacji przez miesiąc. Skąd miesiąc? Bo 100 punktów podzielone przez średnią prędkość 25 story pointów na tydzień daje cztery. Brzmi sensownie? Na razie być może tak…
Wycena 100 punktów to sygnał, że rzecz jest bardzo duża. Nie można tej wyceny traktować jako precyzyjnej, bo nikt nie jest w stanie z dużą pewnością określić, co kryje się w środku czegoś, co jest naprawdę wielkie.
Dodatkowo pamiętać trzeba, jak działają story pointy: rzeczy nie różnią się od siebie wielkością w takich proporcjach, w jakich różnią się ich numeryczne wyceny. Dwie jedynki nie są dokładnie takie same, a jedynie mają podobną wielkość. Dwójka nie jest dwukrotnie większa od jedynki itd. I tak dzieje się już na początku skali, przy niewielkich wartościach wycen.
Kto więc może racjonalnie twierdzić, że rozumie, jak duże jest coś, co wyceniono na 100 punktów? Toż taka informacja w zasadzie ma wartość informacyjną taką samą, jak stwierdzenie „ta rzecz jest ogromna”. Co ważne, przy tej skali niepewności dwie setki mogą się bardzo różnić od siebie wielkością, ale z racji tego, że są ogromne, obie dorobiły się wyceny 100 punktów.
Biorąc to wszystko pod uwagę, czy ma sens teza, że na realizację każdej z takich setek potrzeba będzie około miesiąca przy prędkości średniej 25 punktów na tydzień?
Jeśli Zespół się uprze na takie przeliczenia, to wciąż pozostaje problem z tym, gdzie wypaść powinny granice tygodni w przypadku elementu, który jest z definicji o wiele za duży, by dało się go zrealizować w tydzień. Przyjęcie zasady, że granica nie może wypaść w połowie elementu, powoduje, że prognoza dojdzie do pierwszej dużej rzeczy na liście i tu będzie trzeba się zatrzymać. Aby objąć prognozą całość listy, z czterech opisanych wcześniej strategii wytyczania granic między tygodnia pozostanie jedna – będą one wypadać gdzieś w środku dużego elementu.
Oczywiście rozwiązaniem wydaje się poszatkowanie każdego dużego elementu na kawałki takie, żeby dało się je wycenić na niewielką liczbę punktów. Efektem będzie natychmiastowe i gwałtowne rozrośnięcie się listy rzeczy do zrobienia, która stanie się niezarządzana (pisałem o tym niedawno).
A żeby dodać do płonącej sterty problemów kolejny, to zwracam uwagę, że niemal na pewno Zespół nie realizuje rzeczy sekwencyjnie jedna po drugiej (choć czasami to byłby bardzo dobry pomysł). Dlatego też przewidywanie granic tygodni, iteracji, miesięcy itd. w odniesieniu do dużych rzeczy do zrobienia jest pozbawione sensu, ponieważ na pewno zostaną one podzielone na kawałki, których realizacja wymiesza się radośnie z innymi tematami, nad którymi prace toczyć będą się równolegle. Jak wtedy dokładnie określić, kiedy praca nad nimi się skończy?
Precyzja dech w piersiach zapierająca…
Jeśli poskładać to wszystko w całość, jasne staje się, że większa precyzja prognoz opartych o velocity w porównaniu do tych stworzonych na podstawie przepustowości jest pozorna. Wydaje się, że może być wyższa, w praktyce nie wiadomo, czy taka jest. Równie dobrze może okazać się niższa.
Zwracam też uwagę, że prognozy, o jakich piszę, co do zasady nie powinny wybiegać zbyt daleko w przyszłość i to niezależnie od sposobu ich sporządzania. Elementy znajdujące się daleko na liście rzeczy do zrobienia mogą bardzo istotnie się zmienić, zanim podpełzną w górę, więc wszelkie próby przewidzenia terminu ich realizacji z dużym wyprzedzeniem są objawem braku rozsądku. Jasne, jakaś zgrubna prognoza jest potrzebna, ale nawet do niej nie warto przesadnie się przywiązywać.
Wydaje się więc, że opisywana przeze mnie forma prognozowania powinna być stosowana przede wszystkim w odniesieniu do tego, co realizowane będzie całkiem niedługo.
Przyjrzyjmy się elementom na początku listy, czyli temu, nad czym Zespół będzie pracował wkrótce:
- żadna z tych rzeczy nie może być przesadnie duża, bo przecież ogromne tematy dzielone są na mniejsze kawałki, by dało się je realizować w rozsądnym czasie,
- różnice wielkości między poszczególnymi elementami na szczycie listy rzeczy do zrobienia nie mogą być duże, bo dopuszczenie do tego grozi zdestabilizowaniem procesu, który wtedy stanie się zupełnie nieprzewidywalny, lub wręcz jego zatrzymaniem (zadławi się tematem przerastającym możliwości wytwórcze Zespołu).
Skoro wyceny rzeczy objętych prognozą będą zbliżone do siebie, to uznanie ich za mniej więcej takie same nie jest objawem szaleństwa. Owszem, uśredniony zostaje rozmiar, ale wyceny też obarczone zostają błędem. Niekoniecznie mniejszym, niż błąd spowodowany uznaniem, że różnice rozmiarów nie są znaczące.
Dodatkową korzyścią będzie to, że przechodząc od liczenia velocity i tworzenia prognoz na jego podstawie do ustalania przepustowości i prognozowania z jej pomocą, uprościmy sobie życie. Obie miary, sposób ich wyliczania i prognozowania na ich podstawie, skutkują jakąś niedokładnością, natomiast nakład pracy, z jakim wiąże się wybranie jednej z nich, jest różny. Velocity wymusza sporządzanie wycen, jest też nieco ciężej go użyć, a nie daje realnie nic w zamian poza opisanymi wcześniej fałszywymi obietnicami większej dokładności.
Prognozowanie w epickiej skali
Co jednak zrobić, gdy chcemy mimo wszystko objąć prognozą duże tematy znajdujące się w połowie lub na końcu listy rzeczy do zrobienia?
Jak już pisałem, velocity nie ma sensu do tego używać, bo skala błędu będzie tak duża, że równie dobrze możemy zacząć wróżyć z fusów. Zamiast tego Zespół może oszacować, ile czasu potrzebował będzie na zrealizowanie każdej z tych rzeczy. Wyceny te sporządzić trzeba w kwartałach, miesiącach, iteracjach, może tygodniach, ale na pewno nie dniach – bo przy ogromnych tematach nie da się szacować tak precyzyjnie. Przy czym, z racji dużej niepewności, zamiast pojedynczej wyceny lepiej użyć przedziału, np. oceniając, że realizacja wymagać będzie od trzech do pięciu iteracji.
Taka prognoza (bo to już prognoza, a nie oszacowanie) może zostać połączona z tymi sporządzanymi dla początkowej części listy na podstawie prędkości lub przepustowości. Oczywiście w zależności od rozważanego wariantu sumarycznej prognozy (pozytywnego lub negatywnego), posłużyć trzeba się odpowiednio albo minimalną, albo maksymalną spodziewaną czasochłonnością dużych elementów.
Czy aby nie będzie błędem porzucenie wycen relatywnych np. w story pointach na rzecz oszacowania czasochłonności? Nie w trym przypadku, bo to jest i tak bardzo zgrubna prognoza, sporządzona na podstawie minimalnej wiedzy. Jej celem nie jest precyzyjne zaplanowanie realizacji (tego nie da się zrobić odpowiedzialnie z dużym wyprzedzeniem), ale wstępna ocena opłacalności, dostarczenie informacji o zapotrzebowaniu na dostępność Zespołu itd. Jest pewne, że z upływem czasu prognoza ta zostanie doprecyzowana, najpewniej po tym, jak nastąpi dekompozycja dużego tematu na mniejsze kawałki.
Co ciekawe, jeśli Zespół posługuje się przepustowością, może uniknąć prognozowania czasochłonności i sklejania uzyskanej w ten sposób informacji z prognozami opartymi o velocity. Jak?
Wystarczy, że sporządzi prognozę tego, na jak wiele małych kawałków trzeba będzie podzielić duże tematy. Punktem odniesienia mogą być rzeczy typowej wielkości, które są zwykle realizowane. Taka prognoza również powinna być wyrażona przedziałem, np. od trzech do pięciu rzeczy po podziale dużego elementu na szereg mniejszych. Samego podziału nie trzeba oczywiście na tym etapie dokonywać.
Dysponując informacją o liczbie małych elementów kryjących się potencjalnie w dużych tematach, da się sporządzić jednolitą prognozę dla całej listy rzeczy do zrobienia. Np. można powiedzieć, że jeśli spodziewana sumaryczna liczba rzeczy do zrobienia wynosi minimum 100 a maksimum 120, to przy średniej miesięcznej przepustowości Zespołu równej 20 ukończonych rzeczy zrealizowanie wszystkiego zajmie od pięciu miesięcy do pół roku.
Ktoś może zaprotestować, że dokładnie to samo dałoby się zrobić z zastosowaniem velocity. Owszem, arytmetycznie da się podzielić sumę oszacowań wszystkich rzeczy na liście przez średnią prędkość, tyle że nie wolno zapominać, jak zwodnicze są same wyceny. 100 story pointów to niekoniecznie sto razy więcej niż jeden punkt…
Poza tym, aby uczynić te dwa sposoby porównywalnymi, należałoby duże elementy wycenić w story pointach w wariancie optymistycznym i pesymistycznym, czyż nie? A praktycznie nikt tego nie zrobi i do prognoz użyta zostanie jedna wycena. Inaczej mówiąc, po zsumowaniu wszystkich wycen elementów z listy dostaniemy konkretną liczbę, a nie przedział liczb. Ot, drobna różnica.
Wielkość nie ma znaczenia?
Wróćmy na moment do prognozowania z użyciem przepustowości i prób przewidzenia, na jaką liczbę mniejszych kawałków podzielić trzeba duże rzeczy przed ich realizacją. Wydaje się, że to podniesie dokładność prognozy, ale ja darowałbym sobie i to, traktując każdą rzecz do zrobienia (nawet potencjalnie bardzo dużą), jako jeden element. Taki, którego realizacja zwiększa przepustowość dokładnie o jeden. Dlaczego?
Duże rzeczy najczęściej nie będą realizowane w najbliższym czasie, co oznacza, że do momentu, zanim przesuną się w górę listy rzeczy do zrobienia, wiele może się zmienić. Najpewniej nastąpi dekompozycja i z jednego elementu zrobi się kilka mniejszych. Poza tym prace wykonywane nad wcześniejszymi elementami mogą spowodować, że wielkość dużej rzeczy spadnie lub wzrośnie.
Konsekwencją tego będzie albo konieczność nieustannego odświeżania wycen i prognoz (kosztem czasu i wysiłku), albo ich niska wiarygodność, bo będą się szybko dezaktualizować. Przy czym w sytuacji, gdy duża rzecz zostanie wyrzucona z listy, bo okaże się zbędna, cały wysiłek w nią włożony do tej pory zostanie zmarnowany.
Co by się stało, gdyby potraktować takie duże elementy jako po prostu jedną rzecz do zrealizowania? Zaburzy to prognozy! – krzyknie wielu, a ja się z nimi nie zgodzę. Przecież równie dobrze elementy, które teraz wydają się małe, za chwilę mogą z jakiegoś powodu stać się ogromne, a jakoś nikt nie krzyczy, że w związku z tym nie można ich liczyć jako jedną rzecz do zrobienia. Albo więc żadnych elementów nie powinniśmy traktować ilościowo i powinniśmy wrócić do używania velocity, albo nie ma uzasadnionego powodu, by wszystkich nie traktować tak samo.
Prawda jest taka, że w prognozowaniu nie chodzi o to, by raz-a-dobrze przewidzieć, co się może stać, a potem kurczowo trzymać się poczynionych ustaleń. Prognozowanie to proces, który powinien być powtarzany często, a zatem musi być lekki i prosty. Jeśli będzie czasochłonny i wymagać będzie dużo wysiłku, prognozy odświeżane będą zbyt wolno.
To uproszczenie, jakim jest potraktowanie każdego elementu na liście jako jednej rzeczy do zrobienia, niekoniecznie przekłamuje prognozy – przecież nie wiadomo, jakie te elementy ostatecznie się okażą. Natomiast można w sten sposób uprościć proces prognozowania do tego stopnia, że będzie można go powtarzać raz za razem.
Jeśli coś rzeczywiście nie jest jedną rzeczą do zrobienia, zostanie wcześniej czy później podzielone. Na skutek dekompozycji pojawią się nowe elementy na liście rzeczy do zrobienia, a kolejna prognoza uwzględni ich zmienioną liczbę. Dokładnie to samo stanie się, jeśli coś początkowo małego z czasem zacznie się gwałtownie rozrastać. A często (być może najczęściej) okaże się, że element do samego końca pozostanie w jednym kawałku i zrealizowany zostanie w ramach jednej krótkiej iteracji.
Symulacje Monte Carlo
Przepustowość łatwo wyliczać i równie prosto sporządza się prognozy na jej podstawie. Pozwala to przygotować wiele prognoz nawet wtedy, gdy robi się to ręcznie. Zawsze jednak jest ich dość ograniczona liczba, bo przecież nikt nie sporządzi tysiąca różnych przewidywań – to zajęłoby za dużo czasu.
A gdyby tak zautomatyzować proces? Czy dałoby się rozważyć więcej scenariuszy w ramach prognozy? Oczywiście, ale pojawi się nowy problem. Jakimi różnymi wartościami przepustowości się do tego posłużyć? Bo przecież nie ma sensu powtarzać kilka razy tego samego przewidywania i spodziewać się, że każdorazowo uzyskany zostanie inny wynik.
Nie oznacza to jednak, że nie da się posłużyć przepustowością do zautomatyzowanego sporządzania prognoz – trzeba to po prostu zrobić w zupełnie inaczej, niż opisywałem do tej pory. I w ten sposób na scenę wchodzą symulacje Monte Carlo z wykorzystaniem przepustowości. O tym napiszę jednak już w osobnych artykułach, przy okazji udowadniając za pomocą konkretnych liczb, że throughput faktycznie może zastąpić velocity.
Ważne zastrzeżenie
W ramach cyklu artykułów, którego ten tekst jest częścią, czynię założenie, że elementy na liście rzeczy do zrobienia to problemy do rozwiązania przez Zespół albo potrzeby interesariuszy, na które Zespół w jakiejś formie odpowiada. Że nie tworzą tej listy zadania do wykonania jednoosobowo przez pojedynczego człowieka z Zespołu. Że prognoza jest sporządzana dla Zespołu pracującego wspólnie, a nie indywidualnie dla różnych osób.
W przypadku, gdyby lista składała się z takowych zadań, które realizowane byłyby indywidualnie, to przyjmując, że da się je w ogóle zdefiniować z dużym wyprzedzeniem bez ryzyka szybkiej dezaktualizacji, ich opisy będą na tyle detaliczne, że możliwe stanie się szacowanie czasochłonności albo wręcz stworzenie klasycznego harmonogramu np. w formie wykresu Adamieckiego (znanego też jako wykres Gantta).
Jak prognozować daty realizacji w takim przypadku? W sukurs mogą przyjść klasyczne metody projektowe z całą ich mechaniką i powiązanymi praktykami albo zastosować można również przepustowość i wspomniane powyżej symulacje Monte Carlo. Natomiast nakładanie na harmonogram konkretnych dat niekoniecznie ma sens, bo z wyjątkiem nieodległej przyszłości, każda taka prognoza długoterminowa będzie równie wartościowa, co rumpologia.