Jak oszacować czas na zadania polegające przede wszystkim na rozwiązywaniu problemu?

56

Chociaż doświadczony programista jest stosunkowo możliwe do oszacowania, ile czasu zajmie wdrożenie kodu, gdy wzorzec i problem, który rozwiązuje kod, jest dobrze zrozumiany, jak możesz dokonać dobrego oszacowania, kiedy - choć cel końcowy jest dobrze zrozumiany - implementacja jest w 95% teoretyczna / w rozwiązywaniu problemów i ma bardzo małe ilości realizacji?

Moja praca często składa się z zadań mających na celu osiągnięcie dobrze określonych celów, jednak muszę znaleźć sposób na osiągnięcie tego celu i dopóki nie zrozumiem rozwiązania, nie jest jasne, jakie mogą być dodatkowe bariery. Mówiąc dokładniej, często pracuję nad narzędziami do generowania kodu lub automatycznej manipulacji kodem. Gdy rozwiązanie zostanie w pełni rozwiązane, a narzędzie udoskonalone, bezpośrednio bardzo szybko wykona 95% rzeczywistych zmian. Nie mam jednak sposobu, aby oszacować, ile dodatkowych problemów musiałoby zostać rozwiązanych, aby narzędzie do generowania lub analizy radziło sobie z nieprzewidywalnymi przypadkami na krawędzi.

Na potrzeby planowania moja firma chce mieć lepszy pomysł na to, jak długo to potrwa, ale ponieważ nie wiem, ile dodatkowych problemów może pojawić się podczas pracy nad rozwiązaniem każdego kroku rozwiązania. Nie jestem pewien, jak mogę podejść do lepszego oszacowania.

AJ Henderson
źródło
Jakie podajesz szacunki? Jeśli zapytam: „Chcę funkcji, która obsługuje XYZ dla klienta ABC”, jaki typ odpowiedzi dajesz? Zauważ, że na każdą odpowiedź, którą udzielam, duży wpływ ma ocena oprogramowania: Demystifying the Black Art
W szczególności staram się oszacować czas potrzebny na wykonanie zadania. Byłoby to więc coś w rodzaju „Usuń cały określony rodzaj kodu” lub „Zmień cały kod, który robi coś takiego jak XYZ, aby zachowywał się jak ABC”.
AJ Henderson
Ok ... więc jeśli poproszę cię o „Zmień funkcjonalność XYZ, tak aby robiło ABC” ... jaki typ odpowiedzi udzielasz? Czy mówisz „Może tydzień”, czy „5 dni”, czy też „od 1 dnia do 10 dni, w zależności od tego, co znajdę, kiedy się w to zagłębię?”
Zwykle staram się podać szacunkową wartość od 4 dni do 8 dni (rodzaj pożądanej precyzji), choć często bardziej realistyczne byłoby powiedzenie czegoś takiego jak 4 dni i 3 tygodnie. Próbuję wymyślić sposoby zawężenia zasięgu.
AJ Henderson
1
@gnat Dziękuję za wyjaśnienie, jednak uważam, że moje pytanie jest już jasne, ponieważ inne odpowiedzi wydają się rozumieć, o co pytano, i szczerze mówiąc, nie widzę żadnego sposobu, aby można było wywnioskować, że jest to duplikat zaznaczonego pytania. Dlatego uważam, że komentarz jest wystarczający i dalsza zmiana nie przyniosłaby korzyści temu pytaniu.
AJ Henderson

Odpowiedzi:

41

Zanim przejdę za daleko, powiem, że Software Estimation: Demystifying the Black Art jest doskonałym źródłem informacji dla osób, które patrzą i myślą o szacunkach. Oba poniższe obrazy pochodzą z tej książki, podobnie jak rdzeń przedstawionych poniżej pomysłów.

Jak już zauważyłeś, szacunki są ważną częścią możliwości dokładnego przewidywania i planowania pracy. Brak oszacowań powoduje, że firma nie wie, jak długo to zajmie. Często zdarza się, że biznes ma całkowicie błędny pomysł na to, jak długo to zajmie - to, co uważają za łatwe, zajmuje sześć do ośmiu tygodni, a to, co uważa się za trudne, to piątek po południu.

Pierwszą rzeczą jest oszacowanie. Szacunek sam w sobie nie jest pojedynczą liczbą - to zobowiązanie. „Ile czasu zajmie ABC” -> „Około 5 dni” oznacza, że ​​jest to około 5 dni. Jednak dobrym oszacowaniem jest zakres, w którym masz 90% pewności, że będziesz go mieć w tym zakresie. Jeśli chcesz powiedzieć „Jestem w 90% pewien, że zajmie to między 1 a 5 dni”, powiedz to. Nie pracuj od „Myślę, że zajmie to od 1 do 10 dni, więc 5 dni to prawdopodobnie średnio” - to nie jest szacunek i będziesz mylił się w 50% przypadków.

Cóż, 50% lub więcej czasu, programiści są znani z niedoszacowania czasów zadań.

Rozważ stożek niepewności:

Zdjęcie z http://www.construx.com - pełny artykuł na http://www.construx.com/Thought_Leadership/Books/The_Cone_of_Uncertainty/

Uświadom sobie, że pierwsze oszacowanie w tym zakresie to 16x. Jest to podobne do powiedzenia „Myślę, że zajmie to od popołudnia do dwóch tygodni” - ale jeszcze nie wiesz. W miarę postępów w projekcie zakres zawęża się do 4x. Ten sposób nie oznacza, że to zajmie jeden tydzień, oznacza to, że można zamiast mówić „po patrząc na ten kawałek, to zajmie od trzech tygodni” - tak, szacunek poszły w górę, ale również zakres oszacowania poszedł na dół.

Przy każdym podanym oszacowaniu musisz mieć 90% pewności, że oszacowanie mieści się w tym zakresie. Możesz się mylić - 10% czasu wypadnie poza ten zakres.

Istnieje wiele sposobów oszacowania wielkości projektów. Porównując go do poprzednich projektów, używając proxy (myślę, że zajęłoby to 1000 wierszy kodu, którego napisanie zajęłoby tak dużo czasu), używając punktów funkcyjnych (do konwersji na LOC ...), otrzymując oszacowania od wielu osób, a następnie udoskonalając iteracyjnie ... trochę pracy dla niektórych projektów, trochę pracy dla innych projektów.

Bardzo ważny rozdział w tej książce, że wspomniałem na początku jest nr 23, który zajmuje się polityką estymacji i radzenia sobie z menedżerów i kadry kierowniczej.

Kluczem do oszacowania jest iteracyjny proces udoskonalania go po odrobinie pracy.

Podanie zbyt dokładnego oszacowania zbyt wcześnie może być bardzo podatne na błędy. Jeśli nie jesteś tego pewien, podaj ogólną ocenę, a po pewnym czasie wróć z inną oceną, aby uzyskać więcej introspekcji problemu i być może naszkicować, jak to zrobisz, sprawdzając, ile kodu napisałeś ostatni podobny problem i inne czynniki, które będą miały wpływ na oszacowanie.


Szacunki wymagają przemyślenia - nie podawaj szacunków mankietu. Często wiążą się z nimi olbrzymie błędy w porównaniu z tym, czego potrzeba, gdy się nad tym trochę zastanowić.

Od Jak odpowiedzieć, gdy zostaniesz poproszony o wycenę?

Co powiedzieć, gdy zostaniesz poproszony o wycenę

Mówisz „Wrócę do ciebie”.

Prawie zawsze uzyskujesz lepsze wyniki, jeśli spowolnisz proces i poświęcisz trochę czasu na wykonanie kroków opisanych w tym rozdziale. Szacunki podane w ekspresie do kawy wrócą (podobnie jak kawa), aby cię prześladować.

Z rozdziału 4 Szacowania oprogramowania:

Rysunek 4-8 ​​Średni błąd z szacunków mankietu

Zauważ, że pod tym względem szacunki po krótkim przeglądzie są systematycznie mniej dzikie i podatne na błędy niż szacunki pozorne. Nie rób szacunków mankietu. Usiądź i pomyśl o zadaniu i oszacuj je po krótkiej przemyśleniu.

Glorfindel
źródło
1
Ta odpowiedź jest interesująca i ma wiele zalet, ale prawdopodobnie odpowiada na pytanie o oszacowanie większej liczby zadań opartych na implementacji, a nie na pytanie, jak oszacować, ile czasu zajmie fala mózgowa ...
Michael Shaw
@Ptolemy tak czy inaczej - czy to wdrożenie, czy koncepcja, jest to szacunek. Potrafię oszacować, jak długo to potrwa, że ​​jestem w 90% przekonany, że zakres obejmuje ostateczny wynik. Może to być bardzo szeroki zakres, ale jest to również szacunek - zdecydowanie zbyt wiele osób podaje szacunki „6-8 tygodni”, a następnie pomija ten szacunek, ponieważ był zbyt wąski - dawali 30% pewności, a nie 90% pewności. Dotyczy to umiejętności szacowania, iteracyjnych udoskonaleń i typowych pułapek w szacowaniu każdego zadania, ponieważ są to pierwsze umiejętności niezbędne do pracy nad rozwiązaniem problemu.
15

Szef : AJ, Mamy 3 psy, 2 króliki, katapultę i zakonnicę. Musimy znaleźć sposób, aby wszystkie 7 (tak, katapulta) przekroczyło 20-metrową ścianę do jeziora po drugiej stronie, tak aby psy nie zjadały królików i nie topiły zakonnicy. Jak długo zajmie Ci wymyślenie rozwiązania?

Widzicie, problem z oszacowaniem czasu potrzebnego do rozwiązania problemu polega na tym, że zajmuje to różnym ludziom różną ilość czasu. Jeśli masz historię rozwiązywania podobnych problemów, możesz oszacować na podstawie tego, ile czasu zajęło ci to wcześniej. Jeśli nie, to nie szacujesz, po prostu zgadujesz.

Ponadto problem może nawet nie mieć akceptowalnego rozwiązania. A może rozwiązanie będzie wymagało dodatkowej autoryzacji, która może zepsuć cały projekt. A może rozwiązanie zmienia całą postrzeganą naturę problemu tak, że rozwiązanie staje się całkowicie niepotrzebne.

Morał tej historii jest taki, że jeśli nie masz wystarczającej ilości informacji, aby dokonać rozsądnej oceny, nie rób tego . Jeszcze nie. Zdobądź więcej informacji. Dowiedz się więcej. Zazwyczaj można powiedzieć „wrócę do ciebie za 2 dni z kilkoma solidnymi liczbami”.

Projektując rozwiązanie dla mojego klienta, nie podpiszę umowy, dopóki nie będę mieć wystarczającej ilości ogólnego projektu, aby wiedzieć, jak będzie wyglądać rozwiązanie i jak długo potrwa projekt. Oznacza to, że jestem narażony na ryzyko wykonania wstępnej pracy projektowej, za którą nie otrzymam zapłaty (jeśli projekt nie zostanie zrealizowany), ale to lepsze niż ryzyko znacznego obniżenia rachunków za wykonaną pracę .

tylerl
źródło
9
W tym przypadku projekt wydaje się stanowić 90% pracy. A powiedzenie „Dam ci szacunek po tym, jak wykonałem 90% pracy” rzadko sprawia, że ​​ktoś jest szczęśliwy.
Móż
1
Co powiesz na „Projekt stanowi 90% pracy i nie będę wiedział, ile czasu zajmie wykonanie projektu. Mogę podać przybliżony zakres teraz, rozpocząć projektowanie i na bieżąco informować o zmianach w szacunkach kiedy dowiem się więcej o rozwiązaniu? ”
Rob Baillie
Mówiąc „to złożony problem, pracujemy nad kilkoma pomysłami, aby go rozwiązać. Jako zespół dokonamy przeglądu tych pomysłów w przyszłym tygodniu, a częścią tego przeglądu będą ramy czasowe dla różnych rozwiązań. Czy chciałbyś być na tym spotkaniu technicznym?
Michael Shaw
4

Proponuję ci wypróbować coś w połowie drogi między odpowiedziami Tylerla i MichaelT z następującymi elementami :

  • podzielić pracę do wykonania na 3 lub 4 fazy. Fazy ​​powinny być:
    1. Analiza problemu
    2. Prototypowanie rozwiązań
    3. Prawdziwe rozwiązanie na świecie
    4. Ocena wyników (test)
  • przedstaw oszacowanie tylko dla fazy 1 (analiza) na podstawie własnego doświadczenia lub dla faz 1 + 2 (analiza + prototyp) dla swojego kierownictwa. Następnie podaj im oszacowanie dla faz 3 + 4, gdy problematyczne etapy 1 i 2 zostaną zakończone (lub przynajmniej na tyle zaawansowane, abyś mógł mieć pewność co do swoich oszacowań).

Uzasadnieniem jest to, że wiesz z doświadczenia, że ​​potrzebujesz X dni na przeanalizowanie danej bazy kodu (prawdopodobnie w zależności od jej wielkości) i posiadanie zestawu podstawowych narzędzi lub skryptów działających (i może się nie powieść). Następnie liczba błędów powinna dostarczyć ci informacji na temat faktycznej trudności danego zadania.

To może nie być dokładnie to, czego chce zarząd, ale uważam, że zawsze lepiej jest przedstawić szacunki, które faktycznie spotkasz.

sansuiso
źródło
+1 Być może jeszcze nie wiesz, jak długo to zajmie, ale możesz powiedzieć: „Daj mi X czasu na przemyślenie, a ja wrócę do ciebie” - godzina, dzień, tydzień, cokolwiek.
Rory Hunter
1

Ponieważ pytanie dotyczy przede wszystkim rodzajów badań, pytanie twórców oprogramowania jest odważnym podejściem, powszechną miarą jest to, że twórca oprogramowania zajmuje dwa razy więcej czasu, niż szacuje się, prawdopodobnie jest dobrym programistą. Jednak powiedziawszy, zadania badawcze (i projektowanie architektury) są w dużej mierze częścią programowania i często są pomijane / minimalizowane. Często są również trudne do oszacowania.

Pierwsze pytanie, które sobie zadam, to problem, który można rozwiązać? To nie jest problem intelektu czy siły mózgu, ale praktyczna rzeczywistość. Jeśli nie jesteś w świecie ujęć księżyca Google, gdzie brak jest oczekiwanym rezultatem, twarda rzeczywistość jest taka, że będę się spodziewać, aby zapewnić to , cokolwiek to okazuje się. Wydaje się, że ogólną zasadą jest to, czy wiemy już, jakie powinno być 90% rozwiązania?

Drugie pytanie, które zadałbym, co jeszcze warto wiedzieć, myśląc o rozwiązaniu? To naprawdę sposób na podwójne sprawdzenie, czy naprawdę wiemy wystarczająco dużo, aby znaleźć rozwiązanie, które będzie możliwe do zaakceptowania. Może wygenerować szereg zadań służących do wyszukiwania faktów, które pomagają lepiej zdefiniować, jakie powinno być rozwiązanie, z których każde jest zwykle dość łatwe do zdefiniowania i oszacowania.

Trzecie pytanie brzmi: kto najlepiej pasuje do zespołu w przypadku tego rodzaju problemów? Ktokolwiek dostanie to zadanie, skosztuje wyniku własnym stylem. Przekazywanie tego rodzaju problemów programistom, którzy mają 10 milionów pytań na początku zadania, a następnie znika i dostarcza coś za pierwszym razem (choć powoli), może być lepszym wyborem niż dać programistom, który szybko realizuje implementację , ale gdy pojawia się problem, zostaje wykryty dopiero pod koniec procesu.

Następnie faktycznym zadaniem byłoby zastanowienie się nad możliwymi rozwiązaniami, wdrożeniami i podejściami oraz ustalenie skali czasowej, w której muszą oni składać sprawozdania.

Kiedy składają raport, masz wybór, czy chcesz uzyskać szerszy zestaw możliwych rozwiązań, czy chcesz kontynuować wdrażanie rozwiązania, czy też zastanowić się, ponieważ rozwiązanie nie jest jeszcze wystarczająco jasno określone

Michael Shaw
źródło
1

Z pytaniami badawczymi, w których nie jest jasne, czy w ogóle istnieje odpowiedź, nie mówiąc już o jasnym wyobrażeniu o tym, co należy zrobić, zwykle proponuję poświęcić na to x czasu.

„Nie mam pojęcia, czy to w ogóle możliwe, ale mógłbym spędzić dwa dni na badaniu tego. Prawdopodobnie nie da nam to rozwiązania, ale może uda mi się wykluczyć niektóre rzeczy i prawdopodobnie będę miał pomysł jakie mogą być konkretne kroki i jaki rodzaj inwestycji będą oznaczały czas. Wtedy możemy zdecydować, czy warto zrobić kolejny krok. ”

Skierujmy więc niepewność w innym kierunku - szacunek jest całkiem precyzyjny (spędzę dwa dni), po prostu bardzo nieokreślone, co zostanie osiągnięte do tego czasu.

Zasadniczo Timeboxing.

RemcoGerlich
źródło