Application Kata „Software Forecasting“

 

Schreibe eine Anwendung, die dich bei der Prognose von Softwareentwicklung unterstützt. Ja, Prognose statt Schätzung. Denn Prognosen verlagern die Last vom Entwickler auf das Management.

Normalerweise werden Entwickler vom Management gefragt, wie sie ihrer Meinung nach eine Reihe von Aufgaben (zukünftige Aufgaben) in Anspruch nehmen werden (Aufwand). Die Entwickler tun dann, was immer sie tun müssen, und kommen am Ende auf eine Zahl – die höchstwahrscheinlich weit von dem entfernt ist, was sie am Ende brauchen wird.

Dieser Ansatz wird trotz seiner notorisch schlechten Ergebnisse akzeptiert. Aber die Ergebnisse sind nicht nur schlecht und führen daher zu viel Konflikt und Stress und Geldverschwendung, sie zu produzieren kostet in erster Linie viel Zeit. Auch diese Zeit wird verschwendet.

Die Bewerbung zum Schreiben soll in dieser Situation helfen. Es nimmt den Entwicklern die Last der Schätzung ab. Es gibt keine Einschätzung mehr nach einem gewissen Bauchgefühl. Stattdessen werden historische Daten verwendet, um eine Prognose zu erstellen. Und das kann jederzeit von der Geschäftsleitung selbst durchgeführt werden. Außerdem bietet die Prognose eine Reihe von Werten, die mit einem Risiko gekennzeichnet sind. Wer also in die Zukunft blicken muss, kann dies nach seinem Sicherheitsbedürfnis tun.

Historische Daten

 

Historische Daten abgeschlossener Aufgaben müssen als CSV-Datei in diesem Format an die Anwendung geliefert werden:

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser

Jede Zeile enthält den Aufwand, der nötig war, um die Aufgabe zu erledigen. Die Zahl ist eine ganze Zahl und ihre Einheit hängt vom Benutzer ab. Es können Tage, Stunden, Minuten, was auch immer sein – solange die Einheit für alle Daten gleich ist.

Jede Anstrengung kann optional mit einer oder mehreren Kategorien versehen werden, zu denen sie gehört.

Prognoseanfrage

 

Eine Prognose wird angefordert, indem eine Reihe von zukünftigen Aufgaben eingegeben werden, die erledigt werden müssen. Jede Aufgabe kann mit einer Reihe von Kategorien beschriftet werden, die in den historischen Daten zu finden sind, z.B.

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 2

Wenn mehr als eine zukünftige Aufgabe zum gleichen Kategorien-Mix gehört, könnte dies mit einem Multiplikator angegeben werden, z.B.

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 3

Wie die zukünftigen Aufgaben eingegeben werden, bleibt Ihnen überlassen. Wählen Sie nach Belieben eine Konsole oder GUI oder Web-Benutzeroberfläche.

Der Sinn dieses Ansatzes besteht darin, die Entwickler nicht mit Schätzungen zu belasten. Vielmehr sollten sie lediglich aufgefordert werden, zukünftige Aufgaben Kategorien zuzuordnen. Das sollte ganz einfach gehen.

 

Prognose durch Simulation

 

Bei einer Reihe zukünftiger Aufgaben und einer langen Liste historischer Daten wird eine Prognose berechnet, indem die Ausführung der zukünftigen Aufgaben simuliert wird, indem ihre Anstrengungen aus den historischen Daten ausgewählt werden. Beispiel:

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 4

Im Vorfeld einer Simulation werden passende historische Daten gesammelt, z.B.

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 5


Dann wird ein zufälliger (!) Aufwand aus diesen Wahlmöglichkeiten gewählt, wie oft eine zukünftige Aufgabe mit diesen Kategorien geplant ist:

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 6

Abschließend werden die Anstrengungen zu einem simulierten Gesamtaufwand aufsummiert, z.B.

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 7

Dies ist nun 10, 100, 1000 oder 5000 Mal zu wiederholen. Das Ergebnis ist ein großer Satz potenzieller Gesamtaufwendungen aus historischen Daten.

Die Prämisse dahinter: Zukünftige Aufgaben erfordern genauso viel Aufwand wie erledigte Aufgaben. Je mehr historische Daten Sie eingeben können, desto besser ist die Zuordnung zu Kategorien, desto besser die Prognose.

Dies wird als Monte-Carlo-Simulation bezeichnet. Denn für jeden Simulationslauf werden die berücksichtigten Daten zufällig ausgewählt.

Risiken berechnen

 

Aber was bedeuten 1000 oder mehr potenzielle Gesamtanstrengungen? Wie lange wird es dauern, die zukünftigen Aufgaben zu erledigen? Ist nicht jede Simulation gleich wahrscheinlich?

Auch wenn dies wahr ist, wird es Cluster von Gesamtaufwänden geben und einer Verteilung folgen, die in den historischen Daten verborgen ist. Um zu einem Ergebnis zu gelangen, ist es erforderlich, Entscheidungen auf einen letzten Schritt zu stützen.

Sortieren Sie zuerst alle Simulationsergebnisse, z.B.

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 8

Unterteilen Sie die Ergebnisse dann nach den Risiken, die Sie eingehen möchten. Sie könnten zum Beispiel fragen, wie hoch der Gesamtaufwand ist, der ein 50-%-Risiko des Scheiterns oder ein Risiko von 30 % oder ein Risiko von 0 % darstellt? Das Programm könnte nach diesen Risikostufen fragen oder die Risiken einfach in 10 %-Schritten ausgeben, z.B.

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 9

Wenn zukünftige Aufgabenaufwände wie fertige Aufgabenaufwände verteilt werden, dauert es nicht länger als 48 Zeiteinheiten. Das ist die sicherste Anzahl zur Umsetzung. Wenn ein Manager jedoch bereit ist, ein gewisses Risiko einzugehen, könnte er 38 Zeiteinheiten auswählen und eine 30-prozentige Chance akzeptieren, dass das Budget nicht eingehalten wird. Zumindest nach 20 Simulationen auf Basis historischer Daten.

Der erwartete Gesamtaufwand für ein bestimmtes Risiko (z.B. 80%) wird aus der sortierten Liste entnommen, indem das Simulationsergebnis unter Index (100-Risiko)/100*Anzahl Simulationen nachgeschlagen wird, z.B.

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 7

WARNUNG: Jede Prognose ist genau das, eine Prognose, d. h. ein mögliches Ergebnis, aber kein Versprechen. Selbst ein 0% Aufwand kann in der Realität überschritten werden. Es ist wie beim Glücksspiel. Nur weil Sie beim Würfeln mehrmals gewonnen haben, heißt das nicht, dass Sie wieder gewinnen. Alles eine Frage des Zufalls, d.h. es hängt alles von der Verteilung der Werte ab. Und natürlich hängt es auch davon ab, wen Sie genau messen und mit Tags versehen und wie Sie Anforderungen aufteilen, um überhaupt zu Aufgaben zu gelangen.

Dennoch hält dieser Ansatz viele Versprechungen. Es entlastet die Entwickler, macht die Prognosen sehr schnell, es bietet eine Reihe von Werten mit unterschiedlichen Risiken.

Ausgabe

 

Die Ausgabe der Anwendung sollte eine Prognose wie oben und eine Liste der eingegebenen zukünftigen Aufgaben sein, um zu dokumentieren, was als Simulationsbasis verstanden wurde.

Außerdem könnte eine Datei mit komprimierten Simulationsergebnissen geschrieben werden, um ein Histogramm mit Excel zu zeichnen, z.B.

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 11

Oder fügen Sie der Histogrammdatei vielleicht sogar Risiken hinzu, sodass zwei Diagramme angezeigt werden können: eines für die Verteilung der simulierten Anstrengungen (Balken) und eines für das damit verbundene Risiko (Linie):

Application Kata_ Software Forecasting – Clean Code Developer Akademie Stefan Lieser 12