Inhaltsverzeichnis:
Softwareprojektschätzung
Pixabay
Einführung
Schätzung ist nur schwer. Leider ist es auch sehr notwendig. Unternehmen verwenden Schätzungen, um Release-Zeitpläne zu erstellen, Verpflichtungen gegenüber ihren Kunden einzugehen, zu entscheiden, ob eine vorgeschlagene Funktion implementiert werden sollte, die Geschwindigkeit der Teams zu verfolgen und die Arbeit effektiv zu priorisieren. Führungskräfte möchten häufig wissen, wann eine Funktion oder ein Ergebnis für die Produktion bereit ist. Softwareentwicklung ist schließlich keine triviale Investition. Wie würde der Projektmanager ohne Schätzungen eine Bewertung vornehmen? Wenn Menschen die Zukunft genau vorhersagen könnten, würden die Menschen in 2% der Fälle nicht bei Pferderennen gewinnen. Schätzung ist das große Rätsel. Für Unternehmen ist es wichtig und notwendig, ihre Mitarbeiter zu bitten, das Unmögliche zu tun: die Zukunft vorherzusagen.
Lassen Sie uns zunächst einige beliebte Schätzmethoden überprüfen (falls Sie etwas von der Aufregung verpasst haben). Dann können wir uns ansehen, was dies für uns und unsere Projekte bedeutet.
Das Wahrsager-Modell
Dieses Modell erfordert fast keinen Aufwand, um eine Schätzung zu erstellen. Schätzer überlegen ein wenig, was getan werden muss, um eine Funktion zu implementieren und zu testen, und werfen dann eine Zahl aus. Es klingt sehr nach "… (lange Pause)… Ähm… 6 Wochen." Dann nicken alle und wir gehen weiter. Sie könnten eine ganze Weile am Frontend verbringen und darüber sprechen, was sie über die Anforderungen wissen (was wahrscheinlich nicht das vollständige Bild ist). Durch diese sorgfältige Analyse fühlt sich ihre Schätzung zuverlässiger an. Am Ende des Projekts gibt es immer eine akzeptierte Begründung dafür, warum die Schätzung so weit von der Realität entfernt war. Es gibt immer unvorhergesehene Umstände, die als Sündenbock dienen können. Oft fällt niemandem ein, dass das Modell stark fehlerhaft ist.
Wie können wir diesen Prozess verbessern? Ich weiß! Wir können die Zerlegungstechnik verwenden (dh teilen und erobern). Bei diesem Ansatz wird davon ausgegangen, dass Sie den gesamten Umfang der Funktion oder des Projekts im Front-End kennen. Jedes Merkmal ist in mundgerechte Stücke unterteilt. Jeder Block wird geschätzt (Wahrsagerstil), dann addieren wir ihn, um eine Gesamtschätzung der Funktionen / Projekte zu erhalten. Dies ist sicherlich ein komplizierterer Ansatz, der jedoch aus zwei Gründen besser erscheint:
- Kleinere Arbeitsblöcke sind in der Regel leichter zuverlässig abzuschätzen.
- Es besteht zwar immer noch die Möglichkeit eines Fehlers (+/- ein gewisser Betrag), es wird jedoch davon ausgegangen, dass sich die Fehler gegenseitig aufheben, wenn Sie alles addieren, und Sie eine zuverlässigere Gesamtschätzung erhalten.
Der grundlegende Fehler bei diesem Ansatz besteht darin, dass einzelne Mitarbeiter (die Personen, die die Arbeit tatsächlich ausführen) allgemein unterschätzen. Sie sind immer noch deutlich besser als die über und um sie herum, aber das ist keine hohe Messlatte. Dies scheint nicht der Fall zu sein, da wir alle Fälle gesehen haben, in denen Entwickler sich selbst überrascht haben, indem sie etwas vorzeitig erreicht haben. Dies ist jedoch ein einzelner Datenpunkt, kein Trend. Die Leute gewinnen tatsächlich gelegentlich im Casino; Geben Sie ein Jahr lang jeden Tag Geld in einem Casino aus und Sie haben weniger Geld als Sie anfingen. Wenn Sie Schätzungen oder Istwerte für ein oder zwei Jahre verfolgen, werden Sie feststellen, dass die Schätzungen nicht der Realität entsprechen. Während viele Geschäftsleute absolut sicher sind, dass Entwickler ihre Schätzungen träge auffüllen und die zusätzliche Zeit nutzen, um ihre Aktien zu "vergolden" oder zu überprüfen,Die Daten zeigen etwas anderes. Die Strategie „Aufheben“ funktioniert nicht.
Also, was jetzt? Lassen Sie uns das Wahrsager-Modell fallen und zu einem größenbasierten Ansatz wechseln. Es stellt sich heraus, dass Menschen zwar ziemlich schrecklich darin sind, die Fertigstellungszeit zu schätzen, wir aber tatsächlich ziemlich gut sagen können, wie groß etwas ist. Wir sind besonders gut in der Vergleichsgröße ("es ist größer als das, aber kleiner als das dort drüben"). Wenn wir eher in Größe oder Komplexität als in Zeit denken, verarbeitet unser Gehirn dies zuverlässiger. Dann können wir die Größenwerte nehmen und die tatsächliche Anzahl der Stunden für das Projekt basierend auf einer raffinierten Zauberformel berechnen! Und dann betritt das beliebte Funktionspunktmodell die Szene (Bühne links).
Funktionspunktanalyse (FPA)
Für die Funktionspunktanalyse müssen wir in unserer Anwendung fünf Arten von Dingen identifizieren: externe Eingaben, externe Ausgaben, externe Abfragen, externe Schnittstellendateien und interne logische Dateien (machen Sie sich nicht zu viele Gedanken über Definitionen; Sie können diese später untersuchen).. Mit jedem Beispiel (einer Funktion) ist eine Komplexität verbunden (niedrig, durchschnittlich oder hoch). Wir verwenden die folgende Tabelle, um herauszufinden, wie viele Punkte jeder Funktion zugewiesen werden.
Wenn wir nun die Punkte für alle unsere Funktionen addieren, erhalten wir möglicherweise eine Zahl wie 457 Funktionspunkte für unser Projekt. Dann brauchen wir nur noch eine Formel, um die Anzahl der Stunden herauszufinden… Basierend auf unserem letzten Projekt betrug unsere „Lieferrate“ 15 Funktionspunkte pro Person und Monat. Das sind ungefähr 30 Personenmonate Arbeit, was für mein 12-köpfiges Team etwas mehr als zweieinhalb Monate dauern sollte. Ta-da!
Dies ist sicherlich komplexer als unser Vorgängermodell. Tatsächlich sind vier Schlüsselbereiche der Komplexität zu erkennen.
- Die fünf Komponententypen sind nicht unbedingt intuitiv, und es ist leicht zu vergessen, etwas in die Liste aufzunehmen oder es dem falschen Bucket zuzuweisen.
- Die Tabelle, die zum tatsächlichen Generieren der Funktionspunkte verwendet wird, enthält magische Zahlen, deren Validierung viel Aufwand erfordern würde. Sind diese Zahlen richtig kalibriert, um verlässliche Schätzungen für meine Teams zu generieren?
- Die Lieferrate (ein kritischer Teil des Puzzles) wird basierend auf der Produktivität Ihres Teams berechnet. Wie oft müssen wir eine neue Zahl berechnen? Es gibt tatsächlich sehr wenig Anleitung dazu.
- Was macht eine niedrige, durchschnittliche oder hohe Komplexität aus? Wie definieren wir das, damit jeder es versteht? Ist es für die Genauigkeit unserer Berechnungen nicht entscheidend, dass dies richtig ist?
In diesem sehr einfachen Beispiel gibt es mehrere bewegliche Teile, und wir haben noch nicht einmal kompliziertere Komplexitätsmodelle und die anderen Daten besprochen, die ins Spiel kommen können (z. B. Kostenrate, Unterstützungsrate, Fehlerdichte usw.). Mehr bewegliche Teile bedeuten mehr Möglichkeiten für Fehler. Machen wir die Schätzung jetzt zu kompliziert? Wir zahlen Entwicklern nicht dafür, viel Zeit für die Schätzung aufzuwenden. Ich kann meinen Kunden keinen Kostenvoranschlag verkaufen. Ich brauche funktionierende Software. Gibt es da draußen noch etwas?
Agil werden
Schauen wir uns nun kurz das agile Scrum an (gerade genug, um einen Vergleich anzustellen). Wie bereits erwähnt, sind Menschen schrecklich darin, die Zeit abzuschätzen, und sie sind ziemlich gut darin, Größen zu vergleichen. Hier sind einige Begriffe zu verstehen:
- Ein Sprint - eine Zeitspanne (normalerweise zwei Wochen).
- User Story - eine diskrete Arbeit, die vorzugsweise klein genug ist, um von einer Person im Sprint ausgeführt zu werden. Dies ist die Sache, die wir schätzen.
Die beliebteste Strategie ist die Verwendung einer Fibonacci-Sequenz (0, 1, 2, 3, 5, 8, 13) für Schätzungen. Es ist nicht linear - wenn Sie die Skala erhöhen, vergrößern sich die Lücken. Der Schlüssel ist, dass die Lücken groß genug sein sollten, dass es keinen Grund gibt, über unbedeutende Unterschiede zu streiten. Sobald Sie über 3 sind, ist der Unterschied zwischen 4 und 5 oder 7 und 8 so vernachlässigbar, dass es sinnlos ist, Zeit damit zu verbringen, herauszufinden, um welches es sich handelt. Eine Base-2-Sequenz würde ebenfalls funktionieren (0, 1, 2, 4, 8, 16 usw.).
„Aber warte, das ist nur eine Zahl. Was bedeutet das? Wie viele Stunden ist ein Punkt? " Punkte sollen nicht direkt mit Stunden korrelieren, denn wenn sie dies tun würden, wären die Teams versucht, wieder in Stunden zu schätzen und diese dann irgendwie in Punkte umzuwandeln. Wie bereits erwähnt, beruht die Genauigkeit unserer Schätzungen auf der vergleichenden Dimensionierung und nicht auf der Schätzung der Anzahl der Stunden, die etwas dauern wird. Wenn Sie dem Team die Möglichkeit geben, in Stunden zu denken, beeinträchtigen Sie Ihre Fähigkeit, genau zu schätzen.
Angenommen, Sie haben mit einer Kalibrierungsübung begonnen. Ziehen Sie Ihr Team in einen Raum und führen Sie es durch eine Liste von 10-12 User Stories. Wählen Sie eine, die klein, aber nicht die kleinste ist, und machen Sie diese zuerst. Überprüfen Sie es und verkünden Sie, dass diese Geschichte eine "3" ist. Du fragst nicht. Du erzählst. Fahren Sie dann mit der nächsten Geschichte fort. "Wenn das eine 3 war, was ist das?" Jetzt misst das Team Geschichten relativ zu anderen Geschichten. Irgendwann haben sie eine ziemlich gute Vorstellung davon, was eine „1“, eine „2“ usw. ausmacht. Sie schätzen nicht. Zeit spielt keine Rolle. Sie bemessen Geschichten im Vergleich zu anderen Geschichten, die bereits eine Nummer haben. Sie können dann Beispielgeschichten für jede Zahl in der Sequenz in ein Dokument einfügen, das als Lineal bezeichnet wird. Sie können dies als Referenz verwenden, wenn sie nicht sicher sind, was eine „5“ ist.
Hier ist der Schlüssel. Die magische Sauce, die diese Arbeit macht, ist „Geschwindigkeit“ (die Anzahl der Punkte, die ein Team in einem Sprint erzielen kann, gemittelt über 3-4 Sprints). Angenommen, Ihr Sprint dauert zwei Wochen und Ihr 8-köpfiges Team hat eine Durchschnittsgeschwindigkeit von 35 Punkten. Sie erhalten 35 Punkte in 640 Arbeitsstunden (8 x 80 Stunden). Wenn wir herausfinden, dass ein Feature ungefähr 100 Punkte Arbeit benötigt, um zu enden, dann weiß ich, dass das ungefähr 6 Wochen Arbeit und ~ 1900 Stunden sind. Das Team ist sehr gut darin, Geschichten konsistent zu dimensionieren, und Sie nutzen dies, um Ihre Projektplanung durchzuführen. Diese Berechnung funktioniert, weil die Dauer von Sprint zu Sprint konsistent ist.
Um eine langfristige Planung auf hoher Ebene durchzuführen, können Sie Ihre Leads bitten, Funktionen auf hoher Ebene in vorläufige einzeilige Storys zu zerlegen und Punktwerte darauf zu setzen. Es geht ein gewisses Maß an Genauigkeit verloren, aber Sie nutzen das Modell, das sie bereits verstehen. Ein genauerer Pfad wäre die relative Größe auf Funktionsebene. "Dieses Feature ist größer als das 40-Punkte-Feature, kleiner als das 120-Punkte-Feature dort drüben und etwas größer als das 65-Punkte-Feature, das wir gerade gemacht haben." Geschichten sind in „Epen“ zusammengefasst. Wenn jedes Feature ein Epos ist, wissen Sie am Ende, wie viele Punkte erforderlich waren, um dieses Feature zu vervollständigen. Behalten Sie einen Verlauf davon und Sie können ihn für Ihre Release-Planung verwenden.
Fazit
Es gibt heute viele Methoden. Jeder hat Vor- und Nachteile. Irgendwie müssen wir herausfinden, wie wir die Genauigkeit unserer Schätzungen maximieren können, damit wir gute Entscheidungen treffen können. Das bedeutet nicht, dass unsere Schätzungen genau sein müssen. Sie müssen nur so genau sein, dass sie nützlich sind. Wenn Sie die Schätzung nicht verstehen, können Sie davon ausgehen, dass die Schätzungen nicht korrekt waren, weil das Team keine gute Arbeit geleistet hat. Sie haben nicht richtig geschätzt oder das Projekt nicht richtig ausgeführt. Die Schläge werden fortgesetzt, bis sich die Schätzungen verbessern. Schätzungen sollten jedoch niemals als Verpflichtung verwendet werden. Es ist eine gute Vermutung basierend auf den begrenzten Informationen, die wir heute haben. Wenn neue Informationen auftauchen, müssen wir zulassen, dass Schätzungen erneut überprüft werden. Alles andere erwartet das Unmögliche, was ein Problem mit der Führung ist (nicht mit dem Team).
Scrums Ansatz ist viel einfacher als das, was wir in der Funktionspunktanalyse sehen. Und ich würde sagen, es ist viel vertrauenswürdiger als magische Tische mit magischen Zahlen. Es ist das Beste für den Geldbeutel (minimaler Aufwand mit einem angemessen hohen Maß an Genauigkeit). Unter dem Gesichtspunkt des Aufwands entsteht kein schwerer Prozess, den die Teams verstehen und anwenden können. Das geschätzte Stück Agilität kann tatsächlich sehr schnell erfolgen, wenn jeder die Details der zu schätzenden Arbeit versteht. Es ist sicherlich besser, als Zahlen aus der Luft zu ziehen. Die Nutzung der Geschwindigkeit ist sehr wichtig: Sie bringt historische Daten in die Berechnung ein. Bei jedem Sprint berechnen Sie Ihre Geschwindigkeit neu. Dies ist wichtig, da sich der Durchsatz im Laufe der Zeit ändert. Teams, die FPA verwenden, können ihre Lieferrate aus ihrem vorherigen Projekt ableiten.das war in einigen Fällen vor einigen Monaten. Seitdem hat sich wahrscheinlich viel geändert. Mein Vorschlag ist, dass Sie Agile erkunden und sich wirklich bemühen, die Punkte und die Geschwindigkeit der Story zu verstehen. Greifen Sie nicht auf die Schätzung in Stunden zurück, nur weil Sie das verstehen. Ich glaube, Sie werden sich später bedanken.