W dzisiejszym artykule omawiam tajemną sztukę estymowania czasu. Wiele osób ma do siebie pretensje, że nie potrafi poprawnie przewidzieć wymaganego czasu na zadanie i projekt. Prawdopodobnie zapominają oni jakie jest znaczenie słowa estymata. Aby rozjaśnić temat wychodzę od statystyki i pewnych faktów o estymatorach, a następnie formułuję wnioski dotyczące estymowania czasu.  Nie należy tego traktować jako żadne tezy naukowe, tylko zwykłe dostrzeżenie analogii. W dalszej części te pseudonaukowe rozważania zderzają się z rzeczywistością i opisuję częste problemy z estymacją czasu.

Estymacja – podpatrujemy optymalny estymator

Estymata, czyli inaczej oszacowanie, jest próbą przybliżonego określenia pewnej wartości dysponując niepełnymi danymi. Podkreślone słowo w poprzednim zdaniu sygnalizuje niedokładność takiego oszacowania. Każda estymata jest więc obarczona błędem.

Na początek przeanalizujmy jak działa naukowa metoda estymowania wartości – Filtr Kalmana. Jest to optymalna metoda szacowania szacowania wartości takich jak np. położenie w przestrzeni. Dokładność oszacowania jest zależna od wiedzy a priori (wyrażonej przez wartości początkowe i wariancje zakłóceń), od modelu badanego procesu i od danych pomiarowych. Estymator aktualizuje swoje oszacowanie w oparciu o nowe dane pomiarowe i poprzednie iteracje. Z czasem uczy się na ile wierzyć swoim przewidywaniom w oparciu o model i dane historyczne, a na ile nowemu pomiarowi. Wiedza ta jest reprezentowana przez wzmocnienie Kalmana.

Skoro wiemy jak działa najlepszy możliwy estymator, możemy wykorzystać tą wiedzę na własny użytek i spróbować go naśladować. Na wynikowe oszacowanie mają wpływ trzy czynniki:

  • nasze zdolności estymacji,
  • wiedza o estymowanym zadaniu,
  • dane historyczne.

Pierwszym wnioskiem jest potrzeba zbierania danych o wcześniejszych oszacowaniach i rzeczywistym czasie trwania zadania. Po drugie nawet optymalny estymator na początku potrzebuje trochę czasu zanim oszacowania zbiegną się z rzeczywistością. Oznacza to, że:

  • Po rozpoczęciu zadania ,wiedząc ile nam zajęła jakaś część, możemy podać dokładniejszą estymatę.
  • Jeśli przeanalizujemy z czego wynikają błędy naszych oszacowań, w przyszłości będziemy szacować dokładniej.

Musimy jednak pamiętać, że estymaty są obarczone błędem. Bazują one na pewnych założeniach, które mogą okazać się mylne. Dlatego nie mamy co oczekiwać, że jak nabierzemy wprawy, nasze oszacowania zawsze się sprawdzą.

Predykcja

W przypadku estymacji czasu mamy dodatkowo utrudnione zadanie. Nie estymujemy aktualnej wartości, tylko staramy się przewidzieć przyszłość. Mamy więc do czynienia z prognozowaniem. Estymacja aktualnej wartości sama w sobie obarczona jest niepewnością, a tutaj dodatkowo musimy jeszcze dokonać ekstrapolacji na przyszłość. Nasze zadanie jest więc jeszcze trudniejsze.

Predykcja ma to do siebie, że im bardziej wychodzimy w przyszłość, tym dokładność się zmniejsza. Szybkość z jaką błąd się zwiększa zależy od dokładności modelu, lecz nawet najlepszy predyktor po pewnym czasie osiągnie bardzo duży błąd. Odnosząc to do estymacji czasu – nie ma sensu zbyt szczegółowo planować zadań z dalekiej przyszłości. Można ustalić ramowy plan, ale wchodzenie w detale jest stratą czasu.

Praktyka

Wiemy już, że oszacowanie czasu jest tylko przybliżeniem i jest obarczone błędem. Wartość jaką podajemy nie jest więc wyryta w skale. Jednak to na podstawie estymat podejmowane często są wiążące decyzje biznesowe. Manager musi wiedzieć ile czasu potrzeba na wykonanie projektu, żeby zaplanować budżet, harmonogram i skład zespołu. Od oszacowań zależy decyzja, czy w ogóle dany projekt realizować.

Świadomi wagi estymacji czasu, developerzy starają się wykonać ją możliwie dokładnie. Wtedy okazuje się, że aby zwiększyć dokładność oszacowania, należy poświęcić więcej czasu na analizę problemu. Rozbijamy taski na mniejsze i zaczynamy tak naprawdę wykonywać prace projektowe. Może się okazać, że ostatecznie projekt nie będzie realizowany i poświęcony czas okaże się zmarnowany. Zarówno manager jak i developer powinni być świadomi niedokładności estymaty i uwzględnić ją określając terminy. Poza tym podczas realizacji projektu można monitorować estymaty i iteracyjnie wprowadzać zmiany w harmonogramie. Unikniemy w ten sposób nieprzyjemnego momentu tuż przed deadlinem kiedy nagle uświadamiamy sobie, że nie zdążymy. Będziemy wiedzieli wcześniej, że coś idzie nie tak i będzie więcej czasu na reakcję.

Często również brakuje odpowiedniej atmosfery do tworzenia wiarygodnych estymat. No bo jak developer ma podać realistyczną prognozę, jeśli wie, że jest dłuższa niż zakładana. Jego estymata spotka się od razu z atakiem i często ulegnie presji.

Często też estymaty są podawane jako przedziały. Ma to swoje uzasadnienie – w końcu są one obarczone błędem, więc można znaleźć jakieś wartości optymistyczne i pesymistyczne. Często jednak developerzy podają jako optymistyczną wersję nierealistyczne terminy. Managerowie natomiast biorą dolną granicę jako ostateczny czas wykonania.

Podsumowanie

Najważniejsza konkluzja jest taka, że estymacje są obarczone błędem. Nie da się zawsze dobrze przewidzieć potrzebnego czasu. Możemy jedynie założyć sobie jakiś zakres, o który możemy się pomylić (w statystyce np. używa się elipsoid kowariancji). Nie oznacza to jednak, że nasze oszacowania nie mogą być lepsze. Aby poprawić swoją umiejętność szacowania najlepiej po prostu zbierać doświadczenie i dane historyczne. Warto również przeczytać, co ma w tej sprawie do powiedzenia Joel Spolsky, przedstawia on ciekawy sposób estymacji czasu bazujący właśnie na statystyce i danych historycznych.