Zbierać dowody czy grać w pokera?
March 31st, 2008 Marcin Niebudek
Podczas dyskusji na temat tinyPM, obiecałem odnieść się do opisanej przez Joela Spolsky’ego metody szacowania czasu wykonania projektu o nazwie “Evidence Based Scheduling“. Osobiście ta metoda wydaje mi się nieco przeładowana danymi jakie należy do jej poprawnego działania zbierać, no i w porównaniu z tym, co oferują techniki agile (story points, planning poker), zbyt czasochłonna i skomplikowana. Dodatkowo wydaje mi się, że jest obarczona pewnymi wadami, od których planning pokerowi udaje się uciec. Tak więc EBS bardziej pasuje mi do fixed time, fixed scope, ale po kolei…
Już na samym początku EBS zakłada, że cały nasz plan dla którego będziemy szacowali termin wykonania rozbijemy na zadania nie większe niż 16 godzin. Oczywiście zgadzam się z poglądem Joela Spolsky’ego, że jeśli ktoś mówi już o konkretnym zadaniu i twierdzi, że może ono zając 30 godzin, to zwykle nie wie o czym mówi, i nie zastanowił się nad tym co tak faktycznie będzie robił. Tylko, że jesteśmy na początku projektu i nie do końca chcemy rozbijać teraz wszystkie nasze user story na szczegółowe zadania. EBS wymaga szczegółowego planu całości, backlog z user story niekoniecznie - dopuszczamy tzw. epic stories, które maja większe oszacowania i zajmiemy się nimi jak przyjdzie ich czas (może nigdy nie przyjdzie, więc po co się nimi zajmować już teraz).
W EBS szacowanie odbywa się w idealnych godzinach, po czym śledzimy faktyczny czas wykonania każdego zadania. To da nam współczynnik velocity mówiący o tym ile tak faktycznie idealnych godzin dany programista jest w stanie wykonać w zadanym czasie (np. przez tydzień). Istotne jest to, że każdy szacuje zadania dla siebie a potem mierzy czas ich wykonania, aby uzyskać swoje indywidualne velocity. A co z programowaniem w parach - jak to oszacować? A co jeśli zadanie jednak weźmie ktoś inny niż ten, który je estymował? Czy zebrane w taki sposób velocity będą potem wiarygodne przy planowaniu następnych zadań, kiedy to już ten nowy wykonawca będzie sobie estymował pracę?
No to teraz weźmy planning poker. Podstawowe założenie - estymujemy jako zespół. Każdy programista poprzez swoją kartę z punktami wyraża opinię na temat każdego user story. Dyskutowane są wartości skrajne co daje całemu zespołowi pogląd na ew. obawy na temat zadań, prostsze rozwiązania czy założenia, które komuś mogły umknąć, a ktoś inny o nich pomyślał. W ten sposób powstaje wynegocjowane w zespole oszacowanie, z którym każdy czuje się komfortowo i nie będzie problemu z przejęciem zdania przez dowolną osobę.
Po drugie szacując w punktach nie musimy mierzyć ani indywidualnie, ani grupowo żadnych czasów wykonania. Po prostu w iteracji lub zadanym czasie widzimy ile dany zespół jest w stanie wykonać punktów. Zarówno w EBS jak i w metodzie punktowej na początek musimy coś założyć - ja wolę założyć velocity na zasadzie “przez pierwsze 2-3 iteracje przyjmijmy po 20 punktów” niż “no to teraz wygenerujmy dla każdego członka zespołu trochę losowych, ale jednak zbliżonych do siebie wartości velocity“. Już współczuję tym, których mieliby stosować EBS na kartkach, tablicy lub nawet w Excelu ;-)
No i pozostaje jeszcze jedna kwestia… EBS traktuje programistów jako osobne byty. Programista estymuje, programista wykonuje to co estymował, mierzy jak mu idzie, a swoje dane statystyczne dołączą do wielkiego planu. Programiści pracują różnie w różnych zespołach i dlatego widzę mały sens w śledzeniu ich indywidualnego velocity, które ma potem posłużyć jako dokładna baza przy kolejnych projektach. Moim zdaniem rozpoczynając nowy projekt można równie dobrze od nowa wygenerować trochę tych indywidualnych velocity na start. EBS próbuje zniwelować zmienność trafności oszacowań poszczególnych programistów poprzez jak najdokładniejsze rozbijanie zadań na części pierwsze.
W agile stawiamy na to, żeby to zespół jako całość zrobił wszystko najlepiej jak umie. Jeśli nasz zespół dostarcza określoną ilość user story w ciągu jednej iteracji i nie mamy zamiaru co chwilę zmieniać jego składu (prawda, że nie mamy? nie zmienia się przecież zwycięskiego składu), to velocity zespołu jest wystarczającą podstawą do szacowania terminu ukończenia projektu. Prostą metodą i kilkoma spojrzeniami na tablicę można zarówno dokonać prognozy jak i jej weryfikacji w dowolnym momencie. Metoda Monte Carlo… hmm doskonale nadaje się do narzędzia wspomagającego zarządzanie, no bo kto by to sobie liczył na piechotę… Tak się dobrze składa, że pomysłodawca zaimplementował te obliczenia w swoim produkcie. No dobrze, może o jedno szyderstwo za daleko - w końcu mam bardzo duży szacunek do Joela Spolsky’ego. Wolę jednak prostotę i przejrzystość velocity opartego na punktach i mierzonego na zespół i przez zespół.
Wreszcie ostatnia rzecz… Jaki jest sens podawania klientowi, że wszystkie zadania w określonym przez niego terminie wykonamy z prawdopodobieństwem 72%? Każdy klient z jakim miałem do tej pory do czynienia po takim oświadczeniu spojrzałby się na mnie z politowaniem i zadał mi pytanie jeszcze raz… To jesteście w stanie to zrobić czy nie? Ach… czyli jednak nie, no to ile jesteście w stanie zrobić? Przecież tak faktycznie każdego klienta w danym momencie interesuje prawdopodobieństwo 100% i to czy wszystkie zadania zmieszczą się w jego wymarzonym terminie. A i tak wiemy, że to 100% dzisiaj i tak nie daje żadnej gwarancji. Już po tygodniu okaże się, że to już jednak bliżej 98%.
Tutaj po raz kolejny lepsze wydaje mi się planowanie iteracji wg. priorytetów, oszacowań punktowych i założonego (na początku) lub zbadanego (w trakcie trwania projektu) velocity zespołu. Mamy listę user story uszeregowaną w kolejności od najważniejszych do tych “fajnie byłoby mieć”. Każde user story ma przydzielone punkty. Zespół wykonuje N punktów w ciągu tygodnia, więc na tej podstawie możemy określić kiedy projekt powinien się zakończyć. Za późno, no to patrzymy na tą bliższą naszemu sercu datę… Odpadają 2 iteracje i od razu widać co się w tych iteracjach nie załapało… Nie, nie możemy jednak żyć bez kliku user story ale i data jednak lepsza ta wcześniejsza… Trudno, bierzemy coś z tych dwóch iteracji, ale trzeba będzie (z ciężkim sercem) wyrzucić coś innego i to nie na 72%… Trzeba będzie coś wyrzucić na 100% :-)
Tak więc zacięcia detektywistycznego nie mam, wybieram jednak partyjkę pokera w story cards.
Kategorie: Agile dla managerów, Agile dla programistów, Agile dla klientów



4 komentarzy Dodaj komentarz
1. Piotr Gabryanczyk | April 2nd, 2008 at 08:33
Chce sie tylko odniesc do Montecarlo.
Istota oszacowan w tej metodzie jest znalezienie zakresu pewnosci, ktory ci odpowiada. Wiec mowimy tu raczej o 95%. Jesli nie masz pewnosci >95% to po prostu musisz zmniejszyc liste zadan albo przesunac termin i powtorzyc symulacje.
2. Jacek Rybicki | April 8th, 2008 at 09:34
Do tego żeby planować trzeba znać swoje możliwości. To że pracujemy w grupie skutkuje tym że poznajemy swoją szybkość pracy w grupie. Jednak cały czas trzeba opierać się na niepodzielnych jednostkach, które powinny być świadome swojej pracy, w grupie, czy poza nią. Takie techniki jak zebrane w Personal Software Process uczyć mają samokontroli i realizmu.
To jak są przetwarzane zebrane dane, to inna sprawa. Można używać metod bardziej lub mniej złożonych. Ale najważniejszą sprawą są dane albo możliwość zebrania danych. Świadomość ludzi dotycząca własnego szacowania i jego skuteczności.
Firmy, nawet te wdrażające praktyki agile, będą żądać od pracowników estymacji. Może kiedyś będą żądać estymacji w gumisiach, ale najważniejsze żeby takie dane były wiarygodne, czyli wypowiadane z przekonaniem. A najlepiej to uzyskać przez samokontrolę. I to odczytałem z artykułu, zabawy z ruletką to tylko ciekawostka, jedna z możliwych dróg.
3. Piotr Uryga | April 8th, 2008 at 10:15
Wszystko fajnie, ale np. w Scrum podczas Sprint Planning planujesz dokładne zadania, rozbijasz poszczególne zadania. Story Points, które określasz podczas Release Planning, podczas Sprint Planning stają się konkretnymi zadaniami i już wtedy przydaje się historyczne spojrzenie na trafność naszych wcześniejszych oszacowań. Zespoły z którymi współpracuję realizując projekty z wykrozystaniem Scrum chwalą sobie możliwość zaglądnięcia w swoje wcześniejsze oszacowania zadań, którą to możliwość daje im XPlanner.
Zgadzam się, że stosowanie EBS zamiast Release Planning z Planning Pokerem totalnie mija się z celem, ale już dla jednego Sprintu/Iteracji przy wsparciu sensownego narzędzia (tak się składa, że jest tylko jedno :] ) mogłoby się przydać. Oczywiście to już zależy od zespołu, który miałby z tego korzystać.
4. Marcin Niebudek | April 8th, 2008 at 23:38
Jacku, absolutnie nie neguje spoglądania na historyczne dane, wydaje mi się jedynie, że śledzenie velocity zespołu na bazie wykonanych story points jest wystarczające we w miarę trafnym planowaniu. Dla mnie to taki kompromis pomiędzy prostotą metody a efektami. A ESB wygląda mi na być może nieco bardziej dokładne, ale za cenę dużo większego skomplikowania i czasochłonności.
Piotrze, a i owszem rozbijać user story na taski. Sam tak robię, tylko to faktycznie jest dużo bardziej sensowne na poziomie planowania iteracji/sprintu. :-) Dziękuję za feature requesty :D
Skomentuj wpis
Some HTML allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>
Trackback this post | Subscribe to the comments via RSS Feed