Ein erfahrener Entwickler kann zwar relativ gut abschätzen, wie lange es dauern wird, Code zu implementieren, wenn das Muster und das Problem, das der Code löst, bekannt sind Die Implementierung besteht zu 95% aus Theorie und Problemlösung und ist nur in sehr geringem Umfang implementiert?
Meine Arbeit besteht oft aus Aufgaben, um klar definierte Ziele zu erreichen. Ich muss jedoch den Weg finden, um dieses Ziel zu erreichen, und bis ich die Lösung verstanden habe, ist nicht klar, welche zusätzlichen Hindernisse es möglicherweise gibt. Insbesondere arbeite ich häufig an Tools zur Codegenerierung oder automatisierten Codemanipulation. Sobald die Lösung vollständig gelöst und das Tool perfektioniert ist, werden 95% der tatsächlichen Änderungen sehr schnell durchgeführt. Ich kann jedoch nicht abschätzen, wie viele zusätzliche Probleme möglicherweise gelöst werden müssen, damit das Generierungs- oder Analysetool unvorhersehbare Randfälle bewältigt.
Zu Planungszwecken möchte mein Unternehmen eine bessere Vorstellung davon haben, wie lange es dauern wird, aber da ich nicht weiß, wie viele zusätzliche Probleme bei der Lösung der einzelnen Lösungsschritte auftreten können. Ich bin mir nicht sicher, wie ich mich einer besseren Schätzung nähern kann.
quelle
Antworten:
Bevor ich zu weit gehe , möchte ich sagen, dass Software Estimation: Demystifying the Black Art eine hervorragende Ressource für Menschen ist, die Schätzungen betrachten und darüber nachdenken. Die beiden folgenden Bilder stammen aus diesem Buch und bilden den Kern der folgenden Ideen.
Wie Sie bereits bemerkt haben, sind Schätzungen ein wichtiger Bestandteil, um die Arbeit genau vorhersagen und planen zu können. Ohne Schätzungen macht das Unternehmen blind, wie lange etwas dauern wird. Es ist nicht ungewöhnlich, dass Unternehmen eine völlig falsche Vorstellung davon haben, wie lange die Dinge dauern werden - was sie für einfach halten, dauert sechs bis acht Wochen, und was als schwierig erachtet wird, ist ein Hack am Freitagnachmittag.
Das erste ist eine Schätzung. Eine Schätzung selbst ist keine einzelne Zahl - das ist eine Verpflichtung. "Wie lange wird ABC dauern" -> "Ungefähr 5 Tage" bedeutet, dass es ungefähr 5 Tage dauert. Eine gute Schätzung ist jedoch ein Bereich, in dem Sie zu 90% davon überzeugt sind, dass Sie ihn in diesem Bereich haben werden. Wenn Sie sagen wollen "Ich bin zu 90% zuversichtlich, dass es zwischen 1 und 5 Tagen dauern wird", dann sagen Sie das. Arbeiten Sie nicht mit "Ich denke, es wird zwischen 1 und 10 Tage dauern, also sind 5 Tage wahrscheinlich durchschnittlich" - das ist keine Schätzung und Sie werden in 50% der Fälle falsch liegen.
Nun, 50% oder mehr der Zeit sind Programmierer berüchtigte Unterschätzer für Aufgabenzeiten.
Betrachten Sie den Konus der Unsicherheit:
Bild von http://www.construx.com - vollständiger Artikel unter http://www.construx.com/Thought_Leadership/Books/The_Cone_of_Uncertainty/
Beachten Sie, dass die erste Schätzung in diesem Bereich das 16-fache beträgt. Dies entspricht der Aussage "Ich denke, es wird zwischen einem Nachmittag und zwei Wochen dauern" - aber Sie wissen es noch nicht. Wenn Sie das Design etwas weiterentwickeln, wird die Reichweite auf 4x verringert. Dies bedeutet nicht , dass es eine Woche dauern wird, sondern dass Sie stattdessen sagen würden: "Nach einigem Hinsehen dauert es drei Wochen." - Ja, die Schätzung ist gestiegen, aber auch die Reichweite der Schätzung ist gestiegen Nieder.
Bei jeder von Ihnen angegebenen Schätzung müssen Sie zu 90% sicher sein, dass die Schätzung innerhalb dieses Bereichs liegt. Sie können sich irren - 10% der Fälle liegen außerhalb dieses Bereichs.
Es gibt viele Möglichkeiten, die Größe von Projekten abzuschätzen. Vergleiche es mit früheren Projekten, benutze einen Proxy (ich denke, es würde 1000 Codezeilen brauchen, was so lange dauert), benutze Funktionspunkte (um in LOC zu konvertieren ...), um Schätzungen von einer Reihe von Leuten zu erhalten und dann iterativ verfeinern ... einige arbeiten für einige projekte, einige arbeiten für andere projekte.
Ein sehr wichtiges Kapitel in diesem Buch, das ich oben erwähnt habe, ist # 23, das sich mit der Politik der Schätzung und dem Umgang mit Managern und Führungskräften befasst.
Der Schlüssel zu einer Schätzung ist der iterative Prozess der Verfeinerung, nachdem ein wenig daran gearbeitet wurde.
Zu früh eine zu genaue Schätzung abzugeben, kann sehr fehleranfällig sein. Wenn Sie sich nicht sicher sind, geben Sie die breite Schätzung an und kommen Sie nach einiger Zeit mit einer weiteren Schätzung zurück, um sich eingehender mit dem Problem zu befassen und möglicherweise zu skizzieren, wie Sie es tun werden, und zu prüfen, für wie viel Code Sie es geschrieben haben das letzte ähnliche Problem und andere Faktoren, die die Schätzung beeinflussen.
Schätzungen erfordern einige Überlegungen - geben Sie die Manschettenschätzungen nicht ab. Diese haben oft große Fehler, verglichen mit dem, was man braucht, wenn man ein bisschen darüber nachdenkt.
Von Wie zu reagieren , wenn Sie eine Schätzung gefragt werden?
Aus Kapitel 4 der Softwareschätzung:
Beachten Sie, dass die Schätzungen nach einer kurzen Überprüfung systematisch weniger fehleranfällig und fehleranfällig sind als die Schätzungen ohne Manschette. Lassen Sie die Manschettenschätzungen nicht außer Acht. Setzen Sie sich, überlegen Sie sich die Aufgabe und schätzen Sie sie nach einigem Überlegen ab.
quelle
Sehen Sie, das Problem, das abschätzt, wie lange es dauert, ein Problem zu lösen, besteht darin, dass verschiedene Personen unterschiedlich viel Zeit benötigen. Wenn Sie in der Vergangenheit ähnliche Probleme gelöst haben, können Sie anhand der Zeit, die Sie zuvor gebraucht haben, abschätzen. Wenn nicht, dann schätzen Sie nicht, Sie raten nur.
Darüber hinaus hat das Problem möglicherweise nicht einmal eine akzeptable Lösung. Oder möglicherweise erfordert die Lösung eine weitere Autorisierung, die das gesamte Projekt zum Erliegen bringen könnte. Oder vielleicht ändert die Lösung die gesamte wahrgenommene Natur des Problems so, dass die Lösung völlig unnötig wird.
Die Moral der Geschichte lautet: Wenn Sie nicht genügend Informationen haben, um eine vernünftige Schätzung vorzunehmen, dann tun Sie dies nicht . Noch nicht. Mehr Informationen bekommen. Mehr recherchieren. In der Regel ist es vollkommen in Ordnung zu sagen: "Ich melde mich in zwei Tagen mit einigen soliden Zahlen bei Ihnen."
Wenn ich eine Lösung für meinen Kunden entwerfe, werde ich erst dann einen Vertrag unterzeichnen, wenn ich genug vom Gesamtentwurf habe, damit ich weiß, wie die Lösung aussehen wird und wie lange das Projekt dauern wird. Dies bedeutet, dass ich das Risiko habe, anfängliche Entwurfsarbeiten zu erledigen, für die ich nicht bezahlt werde (wenn das Projekt nicht abgeschlossen wird), aber das ist besser, als das Risiko, dass die zu erledigende Arbeit erheblich unterbilligt wird .
quelle
Ich würde Ihnen vorschlagen , etwas auf halbem Weg zwischen den Antworten von versuchen tylerl und MichaelT mit den folgenden:
Das Grundprinzip dahinter ist, dass Sie aus Erfahrung wissen, dass Sie X Tage benötigen, um eine bestimmte Codebasis zu analysieren (wahrscheinlich abhängig von ihrer Größe) und eine Reihe grundlegender Tools oder Skripte auszuführen (und möglicherweise fehlerhaft). Die Anzahl der Fehler sollte Ihnen dann einige Informationen über den tatsächlichen Schwierigkeitsgrad der vorliegenden Aufgabe liefern.
Dies ist möglicherweise nicht genau das, was das Management wünscht, aber ich glaube, es ist immer besser, Schätzungen vorzulegen, die Sie tatsächlich treffen werden.
quelle
Da es sich bei dieser Frage in erster Linie um Forschungsarbeiten handelt, ist es ein mutiger Ansatz, Softwareentwickler zu fragen. Eine gängige Metrik ist, dass Softwareentwickler doppelt so lange brauchen, wie ihre Einschätzung wahrscheinlich ein guter Entwickler ist. Allerdings sind Forschungsaufgaben (und Architekturentwurfsaufgaben) ein wesentlicher Bestandteil der Programmierung und werden häufig übersprungen / minimiert. Sie sind auch oft schwer abzuschätzen.
Die erste Frage, die ich mir stellen würde, ist das ein Problem, das gelöst werden kann? Dies ist keine Frage des Intellekts oder der Gehirnleistung, sondern eine Frage der praktischen Realität. Es sei denn , Sie in der Welt von Google Mondaufnahmen sind, bei denen ein Fehler ein erwartetes Ergebnis ist, ist die harte Realität ist, dass ich liefern erwartet wird dies , was auch immer dies stellt sich heraus zu sein. Eine grobe Faustregel scheint zu sein: Wissen wir bereits, wie viel 90% der Lösung sein müssen?
Die zweite Frage, die ich stellen würde, was wäre noch nützlich, um über die Lösung nachzudenken? Dies ist wirklich eine Methode der doppelten Überprüfung. Wissen wir wirklich genug, um eine Lösung zu finden, die akzeptabel ist? Es kann eine Reihe von Informationsfindungsaufgaben generieren , mit deren Hilfe sich die Anforderungen an die Lösung besser definieren lassen. Jede dieser Aufgaben ist in der Regel recht einfach zu definieren und abzuschätzen.
Die dritte Frage ist, wer im Team für diese Art von Problem am besten geeignet ist. Wer diese Aufgabe bekommt, wird das Ergebnis mit seinem eigenen Stil würzen. Diese Art von Problem einem Programmierer zu geben, der zu Beginn einer Aufgabe 10 Millionen Fragen hat und dann beim ersten Mal (wenn auch langsam) weggeht und etwas liefert, ist möglicherweise eine bessere Wahl, als dem Programmierer das Problem zu geben, das die Implementierung schnell zum Erliegen bringt Aber wenn es ein Problem gibt, wird es erst am Ende des Prozesses entdeckt.
Die eigentliche Aufgabe wäre dann, über mögliche Lösungen, Implementierungen und Ansätze nachzudenken und einen festen Zeitrahmen für die Berichterstattung festzulegen.
Wenn sie zurückmelden, haben Sie die Wahl, eine breitere Palette möglicher Lösungen zu erhalten, die Implementierung einer Lösung voranzutreiben oder nachzudenken, da die Lösung immer noch nicht klar genug definiert ist
quelle
Bei Forschungsfragen, bei denen es unklar ist, ob überhaupt eine Antwort vorliegt oder gar eine klare Vorstellung davon, was zu tun ist, schlage ich in der Regel vor, zunächst einmal x Zeit damit zu verbringen.
"Ich habe keine Ahnung, ob dies überhaupt möglich ist, aber ich könnte zwei Tage damit verbringen, es zu untersuchen. Das gibt uns wahrscheinlich keine Lösung, aber vielleicht kann ich einige Dinge ausschließen und ich werde wahrscheinlich eine Idee haben Welche konkreten nächsten Schritte könnten das sein und welche Art von Zeitinvestition würden sie bedeuten? Dann können wir entscheiden, ob es Sinn macht, einen weiteren Schritt zu unternehmen. "
Stellen Sie also die Unsicherheit in die andere Richtung - die Schätzung ist genau (ich verbringe zwei Tage), es ist nur sehr unklar, was bis dahin erreicht wird.
Im Grunde genommen Timeboxing.
quelle