Reguła dziewięćdziesiąt dziewięćdziesiąt w praktyce

24

Pierwsze 90 procent kodu stanowi pierwsze 90 procent czasu programowania. Pozostałe 10 procent kodu stanowi pozostałe 90 procent czasu programowania.

- Tom Cargill, Bell Labs

Co to dokładnie znaczy w praktyce? Że programiści wykonują znaczną ilość pracy i że dają z siebie 180% lub?

Josip Ivic
źródło
2
Wszyscy wiemy, że albo 100% jest redefiniowane przez przekroczenie go, albo że jest to 1,8 raza znana ilość. W tym przypadku powiedziałbym jednak, że to prawdopodobnie hiperbola. Drugie dziewięćdziesiąt procent ma na celu uczynienie go niezapomnianym i dodanie kropki na końcu cytatu.
AJFaraday,
1
Szacowany czas opracowania zmienia się w środku zdania.
milleniumbug
180% to czas i budżet, który kosztuje projekt.
Agent_L,
1
Myślę, że jest całkowicie jasne, o co pyta to pytanie, pomimo niezręcznego ostatniego zdania.
Matthew James Briggs,
2
Ten cytat należy rozumieć jako żart, w tym kontekście ma sens. Mówi się, że ostatnie 10% zajmie znacznie dłużej, niż się spodziewałeś
Richard Tingle,

Odpowiedzi:

40

Wyobraź to sobie tak: Kiedy zaczynasz pracę nad oprogramowaniem, możesz napisać ogromne ilości kodu w stosunkowo krótkim czasie. Ten nowy kod może dodać ogromną liczbę nowych funkcji. Problem polega na tym, że często ta funkcjonalność jest daleka od „ukończenia”, mogą występować błędy, niewielkie zmiany (małe w biznesie małe) i tak dalej. Oprogramowanie może więc wyglądać na gotowe (90% zrobione), ponieważ obsługuje większość przypadków użycia. Ale oprogramowanie nadal wymaga pracy. Chodzi o to, że pomimo tego, że oprogramowanie wydaje się prawie gotowe, ilość pracy związanej z doprowadzeniem tego oprogramowania do prawidłowego działania jest tak duża, jak osiągnięcie tego stanu „prawie ukończonego”. Jest tak, ponieważ naprawianie błędów jest często czasochłonne, ale nie generuje dużo kodu.

Problem polega na tym, że większość deweloperów ocenia, że ​​oprogramowanie jest w stanie „prawie ukończonym”, ponieważ jest to stosunkowo proste w porównaniu z faktycznym oszacowaniem całkowitego wysiłku, jaki oprogramowanie to zrobi.

Euforyk
źródło
3
Główną przyczyną iluzji 90-90 jest to, że inżynierowie oprogramowania często wizualizują ścieżkę sukcesu - przekazywanie przypadków błędów i wyjątków jest następstwem. Jeśli oryginalny projekt nie uwzględnia przypadków błędów o niskim prawdopodobieństwie, prawdopodobnie będzie wymagać zmiany, zanim oprogramowanie będzie można nazwać ukończonym.
Rumbleweed,
1
+1, ale wydaje mi się, że drugi akapit wymaga odważnego tekstu, ponieważ jest to naprawdę ważna część lekcji :)
Bob Tway
20

Jest to odniesienie do wspólnego scenariusza, który niestety wciąż występuje dzisiaj:

  1. Zespół jest proszony o oszacowanie (tj. Odgadnięcie) ilości pracy wymaganej do napisania całego kodu,
  2. Projekt podlega licznym naciskom wewnętrznym i zewnętrznym, aby „dotrzymywać terminów i budżetu”,
  3. Tak więc w przypadku znacznego odsetka projektu zgłaszane jest „docelowe”. Często komplikuje się to, wybierając najpierw proste zadania, aby zapewnić dobry postęp.
  4. Następnie na pewnym etapie osiąga się punkt krytyczny, w którym rzeczywistość musi zostać zaakceptowana: projekt nie zostanie ukończony na czas, a data premiery zostanie przesunięta (często wiele razy).

„90%” jest liczbą arbitralną, ale dobrze to rozumie: szacunki są domysłem i prawdopodobnie będą błędne (często bardzo błędne), a natura ludzka zapewnia, że ​​prawie zawsze jesteśmy niedoszacowani, więc sprawy się przekraczają.

David Arno
źródło
14
To, co nazywa się „zwinnym”, nie rozwiązuje problemu; po prostu dzieli go między mniejsze przedmioty, w których dokładnie ten sam stosunek występuje w mniejszej skali bezwzględnej, nawet jeśli Cargill był żartobliwy. Najważniejsze jest to, że każdy projekt ma kilka małych rzeczy, które zajmują dużo czasu na rozwój.
Blrfl,
3
@Blrfl Odpowiedź nie oznacza, że ​​zwinny rozwiązuje problem oszacowań jako trudny, ale łagodzi jego konsekwencje, dokonując mniejszych oszacowań.
Eric
Myślę, że to nie tylko kwestia zarządzania zasobami. Prototypowanie 90% projektu jest bardzo łatwe i szybkie i brudne, ale pozostałe 10% zajmie DUŻO czasu, ponieważ często tutaj zależy nam na pełnej zgodności z początkowymi wymaganiami. Jestem w systemach wbudowanych i mogę sprzedać demo produktu sprzedającemu na kilka miesięcy przed wydaniem produktu, a on nie zobaczy prawie żadnej różnicy między wersją demonstracyjną a produktem końcowym, ale na pewno nie da się tego zrobić. Błędy, optymalizacja, zaawansowane funkcje, zużycie energii, toother 90%
Tim
Zaufaj mi, nawet jeśli zwinne gówno uderza fanów i wysadza!
JonH
2
Usunięto myślenie o zwinności, ponieważ wyraźnie odwraca uwagę ludzi od głównego punktu odpowiedzi.
David Arno,
7

Słyszałem inną wersję tego (zwaną także „regułą 90–90”), która wygląda następująco:

Po zaimplementowaniu 90% funkcjonalności nadal muszę zaimplementować pozostałe 90% .

Obie wersje odnoszą się do trudności z prawidłowym oszacowaniem wysiłków związanych z opracowywaniem oprogramowania i typowych pułapek, w które ludzie wpadają:

  • publikowanie statystyk tam, gdzie wymagane są oszacowania, i zgadywanie („jestem w 80% gotowy”)
  • skupić się na złożoności algorytmicznej kodu, który ma zostać napisany, ze szkodą dla ilości pracy (nie doceniając wymaganego wysiłku przy wykonywaniu typowych zadań)
  • brakujące kroki („poza zasięgiem wzroku, poza zasięgiem umysłu”)
  • niedocenianie wysiłków na rzecz utrzymania i zmiany istniejącego kodu
  • niedoszacowanie wysiłku wymaganego dla kodu płyty kotła / „kleju”
utnapistim
źródło
6

Ta reguła uzupełnia zasadę 80-20. Istnieje wiele różnych interpretacji reguły 80-20, ale dwie najbardziej mi się podobają:

  1. Pierwsze 80% opracowanie produktu zajmuje 20% wysiłku.
  2. 80% błędów dotyczy 20% kodu.

W praktyce oznacza to: rozwój rozpocznie się i będzie trwał do pewnego momentu, w którym zauważone zostaną pierwsze opóźnienia. Opóźnienia mogą mieć różny charakter:

  • Słaba kontrola jakości, powodująca błędy
  • Dodatkowe wymagania, które klient wymyślił po drodze (a przyczyny tego mogą być również liczne)
  • Niejasne wymagania od samego początku, które powodują odrzucanie części poprzedniego rozwoju (co może również powodować błędy regresji)
  • Początkowe niedoszacowanie z powodu niejasnego zakresu, błędu ludzkiego lub nieprzewidzianych okoliczności. Te nieprzewidziane okoliczności to zwolnienia chorobowe, rezygnacje, awarie sprzętu lub, w skrajnych przypadkach, wybuchy wulkanów (kiedyś musieliśmy opóźnić projekt, ponieważ nie mogliśmy latać na miejscu z powodu erupcji wulkanu na Islandii).

Najważniejsze jest to, że o wiele łatwiej jest zbliżyć się do celu niż faktycznie go osiągnąć.

Vladimir Stokic
źródło
1
Zasada 80-20 jest również znana jako en.wikipedia.org/wiki/Pareto_principle
Peter M. - oznacza Monikę
4

Uważam Wikipedia wyjaśnienie dość pouczające:

To sumuje się do 180%, co jest bardzo aluzją do rozgłosu projektów tworzenia oprogramowania, które znacznie przekraczają ich harmonogramy (patrz szacowanie nakładów na opracowanie oprogramowania). Wyraża zarówno przybliżony przydział czasu na łatwe i trudne części projektu programistycznego, jak i przyczynę spóźnienia wielu projektów jako brak przewidywania trudnych części. Innymi słowy, wykonanie projektu wymaga więcej czasu i więcej kodowania niż oczekiwano.

Nadir Sampaoli
źródło
1

Co to dokładnie znaczy w praktyce? Że programiści wykonują zastępczą ilość pracy i że dają z siebie 180% lub?

Nie, programiści zawsze wykonują taką samą pracę na jednostkę czasu. Oferta dotyczy niedoszacowania kosztów i przekroczeń. 180% to czas i pieniądze, które projekt kosztuje.

Z grubsza oznacza to „Zajmie ci to dwa razy tyle, ile myślisz” i „Będziesz myślał, że dobrze sobie radzisz, dopóki nie będzie już za późno (termin jest bliski)”.

Agent_L
źródło
1

W praktyce oznacza to, że ludzie okłamują samych siebie.

Jeśli programista powie „skończyliśmy w 90%”, oznacza to, że 90% wysiłku na rzecz zbudowania funkcji zostało wydane.

Jeśli kierownik projektu powie „skończyliśmy w 90%, potrzebuję tylko kogoś, kto to dokończy”, oznacza to, że jest to 90% z budżetu (i prawdopodobnie 50% zrobione). To klient bez pieniędzy, wysokich oczekiwań i złego nastawienia.

Różnica polega na tym, że ukończenie projektu wymaga więcej wysiłku niż funkcji kodowania: qa, poprawki błędów, kopiowanie edycji, wdrożenie.

Tymi rzeczami należy zarządzać w projekcie, a odpowiedzialność za nie ponosi kierownik projektu. Często zaskakuje to nowych premierów, którzy wybierają „ukończenie 90% funkcji”, tylko po to, aby zdać sobie sprawę, że są w połowie drogi do „projektu zakończonego”.

Michael Cole
źródło