Lepsze planowanie i szacowanie
Istnieją niezliczone przypadki, gdzie słabe decyzje oparte na błędnych szacunkach prowadzą do poważnych opóźnień w rozwoju produktu. Zarówno w przypadku planowania na wysokim (długofalowe funkcje) i niskim poziomie (user stories, codzienne zadania), developerzy często nie potrafią trafnie oszacować pracy.
Stoi za tym kilka powodów:
- nie biorą pod uwagę wszystkich czynników
- mają braki w wiedzy
- są nader optymistyczni
- nie rozpoznają każdego możliwego ryzyka
Co wpływa na lepsze oszacowanie tematu?
Istnieją techniki, które mogą sprawić, że szacunki staną się celniejsze.
Szeroka perspektywa
Przed dokonaniem wszelkich szacunków upewnij się, że bierzesz pod uwagę wszystkie czynniki w szerokim zarysie. Jeśli jesteś developerem, nie skupiaj się wyłącznie na pisaniu kodu. Rozważ wszystkie kroki po kolei: analizę, programowanie, audyt kodu, testy manualne, testy automatyczne, build, wdrożenie.
Przykłady pytań, które warto sobie zadać: Czy wymagania biznesowe są jasne i prawidłowo przygotowane? Czy istnieją jakieś problemy w kodzie? Czy testowanie będzie łatwe? Co może pójść nie tak podczas testów? Czy są jakieś automatyczne przypadki testowe, które mogą się nie powieźć? Jakie są szanse na to, że build się zepsuje?
Biorąc pod uwagę wszystkie te czynniki zyskasz lepszy ogląd na cały proces.
Wiem, że nic nie wiem
Jak powiedział Donald Rumsfeld, Sekretarz obrony Stanów Zjednoczonych:
„Mamy znane wiadome. Rzeczy, o których wiemy, że je wiemy.
Wiemy również, że istnieją znane niewiadome. Innymi słowy, wiemy, że są pewne rzeczy, których nie wiemy.
Ale są również nieznane niewiadome – takie, o których nie wiemy, że ich nie wiemy”.
Oczywiste jest, że im więcej wiemy o jakiejś funkcji, którą próbujemy oszacować, tym lepiej. Jednak rzadko zdarza się, że wiemy z wyprzedzeniem dokładnie tyle, ile chcielibyśmy wiedzieć. Rozpoznanie tych rzeczy, których nie wiemy, to również duży plus. Czasami wystarczy wiedzieć, w którym miejscu należy szukać wiedzy, np. kogo spytać o dany moduł projektowy lub gdzie nauczyć się nowej technologii. Najniebezpieczniejsze są nieznane niewiadome, czyli zagadki, które objawią się nam w trakcie pracy i które nas spowolnią. Czasami zadanie wydaje się być prostsze niż jest w rzeczywistości, ponieważ nie zdajemy sobie sprawy z tego, jak niewiele wiemy.
Aby zapobiec takim wypadkom, konieczne jest poświęcenie czasu na to, by jak najlepiej nauczyć się o szacowanym temacie, zanim przystąpimy do dokonywania samych szacunków. Im więcej ujawnimy w ten sposób niewiadomych, tym lepiej. Zajrzyj do kodu, spróbuj rozgryźć, co wymaga pracy od strony technicznej, upewnij się, że pisanie kodu w obecnej architekturze będzie proste. Porozmawiaj z bardziej doświadczonymi programistami w tek dziedzinie, by upewnić się, że nie umknęły Ci żadne kluczowe aspekty. Pamiętaj o wydajności i bezpieczeństwie. Zidentyfikuj umiejętności i technologie, których musisz się nauczyć oraz ile Ci to zajmie.
Ilość czasu potrzebna na przeprowadzenie takiego dochodzenia jest bardzo subiektywna i będzie zależeć zarówno od Twojej istniejącej wiedzy, jak i rozmiaru nowej funkcji. Może wynieść zaledwie 15 minut, jeśli potrzebujesz jedynie upewnić się co do wykonania albo 2–3 dni, gdy musisz przedstawić wysokopoziomowe szacunki dotyczące funkcji z mało znanej Ci dziedziny. Czas poświęcany na przygotowania przed dokonaniem oszacowania to zawsze czas dobrze zagospodarowany.
Jeśli po przygotowaniach wciąż czujesz, że kryją się przed Tobą jakieś nieznane niewiadome, szacunki powinny być wyższe.
Co wpływa na lepsze planowanie?
Spójrz na sprawy z zewnątrz
Nadmierny optymizm to częsty problem nie tylko w szacunkach w programowaniu, ale także w każdej innej dziedzinie wymagającej planowania. Jak wykazuje wiele badań psychologicznych, ludzie zazwyczaj określają swoje szacunki bliżej najbardziej optymistycznych scenariuszy aniżeli tych realistycznych, zwłaszcza jeśli chodzi o czas potrzebny na realizację jakiegoś zadania.
Aby zapobiec błędom przy planowaniu, z odsieczą przybywają statystyki.
Czasami, aby skutecznie rozwiązać kwestie szacunkowe, wystarczy zrobić krok w tył i zastanowić się, jak w przeszłości przebiegało planowanie i wykonywanie podobnych zadań. Niezależnie od wykorzystywanego narzędzia do pomiaru i planowania pracy, staraj się znaleźć porównywalne zadania i uczyć się na nich. Ile story points Twój zespół zaplanował na każdą iterację? Ile z nich zostało zrealizowanych? Jak wyglądają wskaźniki opóźnienia? Jakiego rodzaju zadania zostają najczęściej niedoszacowane? Jak to wygląda w innych zespołach? Im więcej danych zbierzesz, tym bardziej poprawisz przyszłe szacunki. Może okazać się, że 25% zadań było niedoszacowanych o 50%, co stanowi dobry powód do zwiększenia szacunków czasowych następnym razem. Postaraj się podzielić zadania na kategorie – pomoże to w rozpoznaniu korelacji. Odkrycie opóźnień w większości prac związanych z GUI może przynieść zysk przy kolejnych sesjach planowania.
Zarządzanie ryzykiem
Dobrą praktyką przed oszacowaniem jakiegoś zadania jest rozpoznanie i kategoryzacja każdego możliwego ryzyka.
Aby rozpoznać ryzyko, należy zastanowić się, co może pójść nie tak na każdym poszczególnym poziomie (technicznym, projektowym, procesowym i organizacyjnym).
Każde rozpoznane ryzyko należy skategoryzować wedle prawdopodobieństwa wystąpienia oraz wagi (skutków). W tym celu możemy użyć słów kluczowych, takich jak „niskie”, „średnie”, „wysokie” lub, jeśli potrzebujemy precyzyjniejszej analizy, użyć wartości procentowych od 0 do 100.
Ryzyka rozpoznane w obszarze zielonym są mniej poważne od tych bliższych sektorowi czerwonemu. Im więcej potencjalnego ryzyka znajdziemy w obszarze czerwonym, tym wyższy powinien być nasz szacunek.
Za ryzyko można uznać wszelkie czynniki, z którymi wiąże się brak pewności co do terminowej realizacji jakiejś funkcji w wyznaczonym czasie. Ryzyko może wystąpić na każdym etapie procesu i jest związane z każdym aspektem przyszłej pracy, np. brakiem (dowolnego rodzaju) zasobów, wymaganiami biznesowymi podlegającymi zmianom, czy niekompatybilnością oprogramowania stron trzecich.
Planowanie i szacowanie to często niedoceniane umiejętności, które, tak jak każde inne, wymagają pewnego doświadczenia. Na szczęście, dzięki praktycznym technikom można opanować je do perfekcji znacznie łatwiej.