Estymowanie — z czym zmagają się programiści?

Gdybym miał wytłumaczyć komuś, czym są estymacje — podszedłbym do tego w następujący sposób. 

Estymacja jest niczym innym, jak określeniem w jakim czasie, uda się osiągnąć określony efekt. Osoby chcące być przy tym dokładne, zazwyczaj rozbijają sobie dane zadanie na kilka części (składowych), których suma daje nam finalny efekt. Przykładowo: 

Dodanie na stronie formularza, do zapisu na newsletter, składa się z kilku czynności: 

  • przełączenie się na najnowszy kod i ściągnięcie zmian – 10 min 
  • dodanie formularza wraz z logiką – 1 h 
  • wystylizowanie zgodnie z makietą – 30 min
  • napisanie kilku przypadków testowych i ręczne testy – 1 h

Łącznie: 2 h 40 min 

Możemy wówczas usłyszeć:

Cześć Zenon — powinno mi się udać, zmieścić w 3 h.

Można również do tego tematu, podejść na wiele innych sposobów, zobaczmy inne podejście. 

W przypadku, gdzie jest więcej nieznanych i zależności, programista może podejść do estymacji, stosując metodę trzypunktową (lub PERT’a), którą w uproszczeniu można rozumieć następująco: 

a. (czas minimalny) – najkrótszy możliwy czas, czyli zakładamy, że zadanie pójdzie nam idealnie, wszystko zadzieje się zgodnie z tym, jak sobie planujemy, nie będzie żadnych komplikacji 

b. (czas uśredniony) – najbardziej prawdopodobny czas, czyli zakładamy, że mogą pojawić się jakieś komplikacje, ale nie powinny one być zbyt trudne

c. (czas maksymalny) – najdłuższy możliwy czas, czyli spełnią się wszystkie ryzyka i trzeba będzie rzeźbić koło od nowa

W takim podejściu nasza estymacja może wyglądać następująco:

Dodanie na stronie formularza, do zapisu na newsletter: 

  • przełączenie się na najnowszy kod i ściągnięcie zmian – 10 min / 10 min / 10 min
  • dodanie formularza wraz z logiką – 30 min /  2 h  /  3 h
  • wystylizowanie zgodnie z makietą  –  30 min / 1.5 h  / 4 h
  • napisanie kilku przypadków testowych i ręczne testy  –  1 h  /  2 h / 4 h

Łącznie wartości:

min: 2 h 10 min

avg: 5 h 40 min

max: 11 h 10 min

Tym razem usłyszymy:

Cześć Zenon, powinienem się zmieścić w 2,5 h, ale jak napotkam problemy, może mi zejść nawet 11 h. Zakładam jednak, że nie będzie to więcej niż 4 h. 

Jak widzicie na powyższych przykładach, ciężko jest określić dokładnie, ile zadanie może zająć czasu. Jest to również problematyczne dla programistów, bo finalny czas zależy od wielu składników i doświadczenia w przewidywaniu, jakie problemy mogą wystąpić po drodze. 

Dlatego tak często się zdarza, że estymacje są przestrzelone, tj. programista zakładał 5 h, a zajęło mu to 20 h. Zdarza się. Z perspektywy PM’a, o wiele lepiej jest, gdy informujemy o potencjalnym przekroczeniu na bieżąco, niż po fakcie. Na bieżąco, z taką informacją można jeszcze coś zdziałać, po fakcie jest już o wiele ciężej. 😉 

Dobrą wiadomością jest natomiast to, że umiejętność estymowania przychodzi z czasem. Im więcej programista próbuje określać ile czasu coś mu zajmie z rozbijaniem to na mniejsze zadania, tym szybciej się uczy na własnych błędach i staje się dokładniejszy w estymowaniu.

Ciekawi mnie wasze podejście — co byście doradzili swojemu koledze, w celu podszkolenia go z estymowania? Co sprawdzało się u Was, zanim doszliście do wprawy?

Facebook
LinkedIn