In der Praxis herrschen neunzig und neunzig

24

Die ersten 90 Prozent des Codes machen die ersten 90 Prozent der Entwicklungszeit aus. Die restlichen 10 Prozent des Codes machen die restlichen 90 Prozent der Entwicklungszeit aus.

- Tom Cargill, Bell Labs

Was bedeutet das konkret in der Praxis? Dass Programmierer viel arbeiten und 180% aus sich heraus geben, oder?

Josip Ivic
quelle
2
Wir alle wissen, dass entweder 100% neu definiert werden, indem sie überschritten werden, oder dass es sich um das 1,8-fache einer bekannten Menge handelt. In diesem Fall würde ich jedoch sagen, dass es wahrscheinlich eine Übertreibung ist. Die zweiten neunzig Prozent sind dazu da, es einprägsam zu machen und am Ende des Zitats eine Pointe einzufügen.
AJFaraday
1
Die Schätzung für die Entwicklungszeit ändert sich in der Mitte des Satzes.
Milleniumbug
Die 180% sind der Zeit- und Budgetaufwand, den das Projekt am Ende kostet.
Agent_L
1
Ich denke, es ist völlig klar, was diese Frage trotz des peinlichen Schlusssatzes stellt.
Matthew James Briggs
2
Dieses Zitat soll als Scherz gelesen werden, in diesem Zusammenhang macht es Sinn. Es heißt, die letzten 10% werden viel länger dauern, als Sie sich vorgestellt haben
Richard Tingle

Antworten:

40

Stellen Sie sich das so vor: Wenn Sie mit der Arbeit an Software beginnen, können Sie in relativ kurzer Zeit große Mengen an Code schreiben. Dieser neue Code kann eine Menge neuer Funktionen hinzufügen. Das Problem ist, dass die Funktionalität oft nicht "erledigt" ist, dass es Bugs, kleine Änderungen (kleine Unternehmen) und so weiter geben kann. Die Software scheint also fast fertig zu sein (zu 90%), da sie die meisten Anwendungsfälle unterstützt. Die Software braucht aber noch Arbeit. Der Sinn dieser Regel ist, dass trotz des Gefühls, dass die Software fast fertig ist, der Arbeitsaufwand, um diese Software in den ordnungsgemäßen Betriebszustand zu versetzen, so groß ist, wie der, fast fertig zu werden. Das liegt daran, dass die Fehlerbehebung oft zeitaufwändig ist, aber nicht viel Code produziert.

Das Problem ist, dass die meisten Entwickler davon ausgehen, dass die Software "fast fertig" ist, da dies relativ einfach ist, verglichen mit der tatsächlichen Schätzung des Gesamtaufwands, den die Software in Anspruch nehmen wird.

Euphorisch
quelle
3
Ein großer Teil des Grundes für die 90-90-Illusion ist, dass Software-Ingenieure häufig den Erfolgspfad visualisieren - die Übermittlung der Fehler- und Ausnahmefälle erfolgt nachträglich. Wenn das ursprüngliche Design die Fehlerfälle mit geringer Wahrscheinlichkeit nicht berücksichtigt, muss es wahrscheinlich überarbeitet werden, bevor die Software als fertig bezeichnet werden kann.
Rumbleweed
1
+1, aber ich denke, der zweite Absatz braucht etwas fetten Text, weil das der wirklich wichtige Teil der Lektion ist :)
Bob Tway
20

Es ist ein Hinweis auf ein weit verbreitetes Szenario, das leider noch heute auftritt:

  1. Das Team wird gebeten, den Arbeitsaufwand für das Schreiben des gesamten Codes abzuschätzen (dh zu schätzen).
  2. Das Projekt wird mit zahlreichen internen und externen Anstrengungen fortgesetzt, um "Zeit und Budget einzuhalten".
  3. Für einen signifikanten Prozentsatz des Projekts wird "on target" angegeben. Dies wird oft noch dadurch verschärft, dass zuerst die einfachen Aufgaben ausgewählt werden, um sicherzustellen, dass gute Fortschritte erzielt werden.
  4. Irgendwann ist dann ein kritischer Punkt erreicht, an dem die Realität akzeptiert werden muss: Das Projekt wird nicht rechtzeitig abgeschlossen und der Veröffentlichungstermin wird zurückgeschoben (oftmals mehrmals).

"90%" ist eine willkürliche Zahl, aber es macht den Punkt gut: Schätzungen sind Vermutungen und werden wahrscheinlich falsch (oft sehr falsch) sein, und die menschliche Natur stellt sicher, dass wir fast immer unter der Schätzung liegen, so dass die Dinge überlaufen.

David Arno
quelle
14
Was als "agil" bezeichnet wird, löst das Problem nicht. es verteilt es einfach auf kleinere Gegenstände, wobei auf einer kleineren absoluten Skala genau dasselbe Verhältnis auftritt, selbst wenn Cargill scherzhaft war. Das Fazit ist, dass jedes Projekt ein paar kleine Dinge hat, die viel Entwicklungszeit in Anspruch nehmen.
Blrfl
3
@Blrfl Die Antwort impliziert nicht, dass Agile das Problem schwieriger Schätzungen löst, aber es mildert seine Konsequenzen, indem es kleinere Schätzungen vornimmt.
Eric
Ich denke, es ist nicht nur eine Frage des Ressourcenmanagements. Es ist sehr einfach, 90% eines Projekts schnell und schmutzig zu erstellen, aber die restlichen 10% werden eine Menge Zeit in Anspruch nehmen, da es uns hier oft wichtig ist, die anfänglichen Anforderungen vollständig zu erfüllen. Ich beschäftige mich mit eingebetteten Systemen und kann dem Verkäufer Monate vor der Produktfreigabe eine Produktdemonstration geben. Er wird fast keinen Unterschied zwischen der Demo und dem Endprodukt feststellen, aber die Demo ist mit Sicherheit nicht lieferbar. Bugs, Optimierung, erweiterte Funktionen, Stromverbrauch, das ist derother 90%
Tim
Vertrauen Sie mir auch mit Agile Scheiße trifft den Fan und sprengt!
JonH
2
Der nachträgliche Gedanke an Agilität wurde entfernt, da er die Leute eindeutig vom Hauptpunkt der Antwort ablenkt.
David Arno
7

Ich habe eine andere Version davon gehört (auch "90-90-Regel" genannt), die so aussieht:

Nachdem ich 90% der Funktionalität implementiert habe, muss ich noch die anderen 90% implementieren .

Beide Versionen beziehen sich auf die Schwierigkeit, den Aufwand für die Entwicklung von Softwareprodukten richtig einzuschätzen, und auf die häufigen Fallstricke, in die Menschen fallen:

  • Statistiken veröffentlichen, wenn Schätzungen erforderlich sind und im Grunde genommen geraten wird ("Ich bin zu 80% fertig")
  • Konzentration auf die algorithmische Komplexität des zu schreibenden Codes zum Nachteil des Arbeitsvolumens (Unterschätzung des erforderlichen Aufwands für allgemeine Aufgaben)
  • fehlende Schritte ("aus den Augen, aus dem Kopf")
  • Unterschätzen Sie den Aufwand für die Pflege und Änderung des vorhandenen Codes
  • Unterschätzung des Aufwands für den Kesselschild- / "Kleber" -Code
utnapistim
quelle
6

Diese Regel ergänzt die 80-20-Regel. Nun gibt es viele verschiedene Interpretationen der 80-20-Regel, aber die beiden, die mir am besten gefallen, sind:

  1. Die ersten 80% der Produktentwicklung machen 20% des Aufwands aus.
  2. 80% der Fehler sind in 20% des Codes enthalten.

In der Praxis bedeutet dies Folgendes: Die Entwicklung beginnt und schreitet bis zu einem bestimmten Zeitpunkt fort, an dem die ersten Verzögerungen bemerkt werden. Die Verzögerungen können unterschiedlicher Natur sein:

  • Schlechte Qualitätskontrolle, was zu Fehlern führt
  • Zusätzliche Anforderungen, die der Kunde auf dem Weg gefunden hat (und die Gründe dafür können auch vielfältig sein)
  • Unklare Anforderungen von Anfang an, die dazu führen, dass Teile der vorherigen Entwicklung verworfen werden (was auch zu Regressionsfehlern führen kann)
  • Anfängliche Unterschätzung aufgrund unklaren Umfangs, menschlichen Versagens oder unvorhergesehener Umstände. Diese unvorhergesehenen Umstände können Krankheitstage, Rücktritt, Hardwareausfälle oder im Extremfall Vulkanausbrüche sein (einmal mussten wir ein Projekt verschieben, weil wir aufgrund eines Vulkanausbruchs auf Island nicht vor Ort fliegen konnten).

Fazit ist, dass es viel einfacher ist, sich dem Ziel zu nähern, als es tatsächlich zu erreichen.

Vladimir Stokic
quelle
1
80-20 Regel ist auch bekannt als en.wikipedia.org/wiki/Pareto_principle
Peter M. - steht für Monica
4

Ich finde die Wikipedia- Erklärung ziemlich aufschlussreich:

Dies summiert sich zu 180% in einer Anspielung auf die Bekanntheit von Softwareentwicklungsprojekten, die ihre Zeitpläne erheblich überschreiten (siehe Schätzung des Softwareentwicklungsaufwands). Es drückt sowohl die grobe Zuordnung von Zeit zu einfachen und schwierigen Teilen eines Programmierprojekts als auch die Ursache für die Verspätung vieler Projekte aus, da die schwierigen Teile nicht vorhergesehen werden können. Mit anderen Worten, es braucht mehr Zeit und mehr Programmieraufwand als erwartet, um ein Projekt zum Laufen zu bringen.

Nadir Sampaoli
quelle
1

Was bedeutet das konkret in der Praxis? Dass Programmierer eine Menge Arbeit leisten und 180% aus sich heraus geben, oder?

Nein, Programmierer erledigen immer die gleiche Menge an Arbeit pro Zeiteinheit. Das Zitat handelt von einer Unterschätzung von Kosten und Überschreitungen. Die 180% sind der Zeit- und Geldaufwand, den das Projekt am Ende kostet.

Es bedeutet ungefähr "Es wird doppelt so lange dauern, wie Sie denken" und "Sie werden denken, dass es Ihnen gut geht, bis es bereits zu spät ist (die Frist ist nahe)".

Agent_L
quelle
1

In der Praxis bedeutet dies, dass die Menschen sich selbst belügen.

Wenn ein Programmierer sagt, "wir sind zu 90% fertig", bedeutet dies, dass 90% des Aufwands für die Erstellung der Funktionen aufgewendet wurden.

Wenn ein Projektmanager sagt, "wir sind zu 90% fertig, ich brauche nur jemanden, der das erledigt", bedeutet dies, dass er zu 90% über das Budget verfügt (und wahrscheinlich zu 50% fertig ist). Dies ist ein Kunde ohne Geld, mit hohen Erwartungen und einer schlechten Einstellung.

Der Unterschied besteht darin, dass das Fertigstellen eines Projekts mehr Aufwand erfordert als das Codieren von Funktionen: qa, Fehlerkorrekturen, Kopierbearbeitungen, Bereitstellung.

Diese Dinge müssen im Projekt verwaltet werden und liegen in der Verantwortung des Projektmanagers. Dies überrascht häufig neue PMs, die auf "90% Feature Complete" auslaufen, nur um zu erkennen, dass sie nur auf halbem Weg zu "Projekt erledigt" sind.

Michael Cole
quelle