Wie können Sie die Zeit für Aufgaben einschätzen, die hauptsächlich darin bestehen, ein Problem herauszufinden?

56

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.

AJ Henderson
quelle
Welche Arten von Schätzungen geben Sie an? Wenn ich Sie frage "Ich möchte eine Funktion, die XYZ für Client ABC ausführt", welche Art von Antwort geben Sie? Beachten Sie, dass jede Antwort, die ich gebe, stark von der Software-Schätzung
Ich versuche speziell, die Zeit einzuschätzen, die benötigt wird, um die Aufgabe abzuschließen. Es wäre also so etwas wie "Entferne alle Codes eines bestimmten Typs" oder "Ändere alle Codes, die so etwas wie XYZ bewirken, dass sie sich stattdessen wie ABC verhalten."
AJ Henderson
Ok ... also, wenn ich Sie frage "Ändern Sie die Funktionalität von XYZ, damit es ABC" ... welche Art von Antwort geben Sie? Sagen Sie "Vielleicht eine Woche" oder sagen Sie "5 Tage" oder sagen Sie "zwischen 1 Tag und 10 Tagen", je nachdem, was ich finde, wenn ich darin grabe?
Normalerweise versuche ich, eine Schätzung zwischen 4 Tagen und 8 Tagen (die Art der gewünschten Präzision) anzugeben, obwohl es oft realistischer wäre, etwas wie 4 Tage und 3 Wochen zu sagen. Ich versuche Wege zu finden, um den Bereich einzugrenzen.
AJ Henderson
1
@gnat Danke für die Erklärung, jedoch glaube ich, dass meine Frage bereits klar ist, da andere Antworten zu verstehen scheinen, was gefragt wird, und ich ehrlich gesagt keine Möglichkeit sehe, die Frage als Betrug der markierten Frage abzuleiten. Daher halte ich einen Kommentar für ausreichend und eine weitere Änderung würde der Frage nicht zugute kommen.
AJ Henderson

Antworten:

41

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?

Was ist zu sagen, wenn Sie um einen Kostenvoranschlag gebeten werden?

Sie sagen: "Ich melde mich wieder bei Ihnen."

Sie erzielen fast immer bessere Ergebnisse, wenn Sie den Prozess verlangsamen und einige Zeit damit verbringen, die in diesem Abschnitt beschriebenen Schritte durchzuarbeiten. Schätzungen, die an der Kaffeemaschine abgegeben wurden, werden (wie der Kaffee) zurückkommen, um Sie zu verfolgen.

Aus Kapitel 4 der Softwareschätzung:

Abbildung 4-8 Durchschnittliche Abweichung von den Manschettenschätzungen

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.

Glorfindel
quelle
1
Diese Antwort ist interessant und hat eine Menge Verdienste, aber sie beantwortet wahrscheinlich eher die Frage, wie man mehr umsetzungsbasierte Aufgaben abschätzt, als wie lange es dauern wird, bis man eine Gehirnwelle hat ...
Michael Shaw
@Ptolemy wie auch immer - ob Implementierung oder Konzept, es ist eine Schätzung. Ich kann abschätzen, wie lange es dauern wird, sodass ich zu 90% sicher bin, dass der Bereich das Endergebnis abdeckt. Es mag ein sehr weiter Bereich sein, aber das ist auch eine Schätzung - viel zu viele Leute geben Schätzungen von "6-8 Wochen" an und verfehlen diese Schätzung dann, weil sie zu eng war - sie gaben ein 30% -Vertrauen anstatt 90% -Vertrauen. Dies befasst sich mit der Fähigkeit zum Abschätzen, iterativen Verfeinerungen und häufigen Fallstricken beim Abschätzen von Aufgaben, da dies die ersten Fähigkeiten sind, an denen gearbeitet werden muss, um das Problem zu lösen.
15

Boss : AJ, wir haben 3 Hunde, 2 Kaninchen, ein Katapult und eine Nonne. Wir müssen einen Weg finden, um alle 7 (ja, auch das Katapult) über eine 20-Fuß-Mauer in den See auf der anderen Seite zu bringen, ohne dass die Hunde Kaninchen fressen und ohne die Nonne zu ertrinken. Wie lange brauchen Sie, um die Lösung zu finden?

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 .

tylerl
quelle
9
In diesem Fall scheint das Design 90% der Arbeit zu sein. Und die Aussage "Ich gebe Ihnen einen Kostenvoranschlag, nachdem ich 90% der Arbeit erledigt habe" macht selten jemanden glücklich.
22.
1
Wie wäre es mit "Das Design macht 90% der Arbeit aus und ich werde nicht wissen, wie lange es dauern wird, bis das Design fertig ist. Kann Ihnen jetzt eine ungefähre Reichweite geben, das Design starten und Sie über Änderungen am Kostenvoranschlag auf dem Laufenden halten wie erfahre ich mehr über die lösung? "
Rob Baillie
Da es sich um ein komplexes Problem handelt, arbeiten wir an einigen Ideen, um es zu lösen. Als Team werden wir diese Ideen nächste Woche überprüfen und im Rahmen dieser Überprüfung die Zeitpläne für die verschiedenen Lösungen festlegen. Möchten Sie an diesem technischen Meeting teilnehmen?
Michael Shaw
4

Ich würde Ihnen vorschlagen , etwas auf halbem Weg zwischen den Antworten von versuchen tylerl und MichaelT mit den folgenden:

  • Teilen Sie die zu erledigende Arbeit in 3 oder 4 Phasen auf. Die Phasen sollten sein:
    1. Problemanalyse
    2. Lösungs-Prototyping
    3. Reale Lösung
    4. Leistungsbewertung (Test)
  • Stellen Sie Ihrem Management eine Schätzung nur für Phase 1 (Analyse) auf der Grundlage Ihrer Erfahrung oder für Phase 1 + 2 (Analyse + Prototyp) zur Verfügung. Stellen Sie ihnen dann eine Schätzung für die Phasen 3 + 4 zur Verfügung, wenn die Problemphasen 1 und 2 abgeschlossen sind (oder zumindest so weit fortgeschritten sind, dass Sie auf Ihre Schätzung vertrauen können).

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.

Sansuiso
quelle
+1 Sie wissen vielleicht noch nicht, wie lange etwas dauern wird, aber Sie können sagen: "Geben Sie meinem X Zeit zum Nachdenken und ich melde mich wieder" - eine Stunde, ein Tag, eine Woche, was auch immer.
Rory Hunter
1

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

Michael Shaw
quelle
1

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.

RemcoGerlich
quelle