Application Kata “Comparative Estimation”

 
Schätzungen werden in der Softwareentwicklung zumindest verwendet, um den Wert einer Anforderung und das für ihre Umsetzung erforderliche Budget zu bewerten. Wie in unzähligen Teams zu sehen ist, ist eine solche Einschätzung jedoch sehr, sehr schwer zu treffen. Trotzdem werden Product Owner und Entwickler gebeten, ständig Schätzungen abzugeben.
 

Absolute Schätzung

 

Eine beliebte Methode, um den voraussichtlichen Aufwand zur Umsetzung einer Anforderung abzuschätzen, ist die Verwendung von Story Points (SP). Anstatt die Echtzeit in Stunden oder Tagen zu schätzen, wird eine abstrakte Metrik verwendet. Ob ein auf 5 SP geschätzter Bedarf 5 Stunden oder 5 Tage oder 10 Tage dauert, ist nicht bekannt und nicht wichtig. Wichtig ist, dass 5 SP mehr als 3 SP und weniger als 10 SP sind.

Das ist zumindest die Theorie. In der Praxis wird jedoch derjenige, der bald eine Schätzung benötigt, damit beginnen, SP-Schätzungen in Zeitdauern umzuwandeln. Der Grund dafür ist: „Wenn das Team beim letzten Mal für die Implementierung von 85 SP 10 Tage gebraucht hat, werden sie das nächste Mal wieder 10 Tage brauchen. Jeden Tag ist das Team in der Lage, 8,5 SP zu liefern.“

Diese Argumentation ist verständlich – aber absolut kontraproduktiv. Es übt Druck auf die Entwicklung aus, sobald eine Schätzung in eine Frist umgewandelt wird: „Oh, Sie schätzen das also auf 110 SP? Das bedeutet, dass Sie es in 13 Tagen fertig haben.“

Obwohl die SP-Schätzung vielleicht nie auf diese Weise verwendet werden sollte, ist sie es sicherlich oft.

Ähnlich verhält es sich, wenn Schätzungen auf T-Shirt-Größen basieren, z.B. S, M, L, XL.

Das Kernproblem liegt in der absoluten Metrik: Ein bestimmter Wert (z. B. 8 oder M) wird verwendet, um die Höhe eines benötigten Budgets auszudrücken.

Vergleichende Schätzung

 

Um die Abbildung abstrakter Schätzungen auf absolute Zeit- und Geldwerte zu überwinden, können relative Schätzungen verwendet werden. Anstatt einer Anforderung eine Nummer zuzuweisen, wird sie nur mit einer anderen Anforderung verglichen. Das Ergebnis des Vergleichs ist eine Bestellung.

Absolute Schätzung: Anforderungen A, B, C werden auf A=5, B=8, C=3 geschätzt.

Relative Schätzung: Anforderungen A, B, C werden mit B>A>C geschätzt.

Wenn dann A+B+C 10 Tage zur Umsetzung braucht, kann nichts auf die nächste Schätzung von X, Y, Z übertragen werden! Und das ist ein Feature, kein Fehler.

Relative Schätzung oder vergleichende Schätzung funktioniert, indem Alternativen paarweise verglichen werden. Bei den Anforderungen A, B, C, D sind diese Paare zu vergleichen: A:B, A:C, A:D, B:C, B:D, C:D. Das sind 3+2+1=6 Vergleiche für 4 Alternativen. Allgemeiner ist für n Alternativen (n-1)((n-1)+1)/2 = n(n-1)/2 Vergleiche.

Für jedes Paar muss entschieden werden, welche Alternative als „größer“, „schwerer“, „wertvoller“, „aufwendiger“ eingestuft wird… Beispiel:

  1. A:B -> B>A
  2. A:C -> A>C
  3. A:D -> D>A
  4. B:C -> B>C*
  5. B:D -> D>B
  6. C:D -> D>C*

Die resultierende Reihenfolge: D,B,A,C

Die Vergleiche 4. und 6. sind mit * gekennzeichnet, da ein anderes Ergebnis eine Inkonsistenz verursachen würde. Sie hätten nicht einmal geschaffen werden müssen.

Da B>A (1.) und A>C (2.) ist, muss B wegen der Transitivität auch > als C (4.) geschätzt werden.

Vielleicht sollten dann die Vergleiche 4. und 6. gar nicht angeboten werden. Auf der anderen Seite wäre es vielleicht lohnenswert, Inkonsistenzen auftreten zu lassen, weil sie bisher versteckte Verwirrung oder Missverständnisse anzeigen, die gelöst werden müssen, bevor eine vernünftige Schätzung abgegeben werden kann.

Wenn mehr als eine Person eine relative Schätzung von Alternativen vornimmt, kann das Gesamtergebnis durch Zählen von Rängen berechnet werden, z.B.

Rank
Estimator 1
Estimator 2
Estimator 3
1.
D
D
B
2.
B
A
D
3.
A
B
C
4.
C
C
A
Der Gesamtrang der Alternativen wäre die Summe ihrer Ränge, z. 1+1+2 für D.
 
 
A
B
C
D
Estimator 1 ranking
3
2
4
1
Estimator 2 ranking
2
3
4
1
Estimator 3 ranking
4
1
3
2
Total rank
9
6
11
4

Nach dem Gesamtrang geordnet wäre dies das Ergebnis der relativen Schätzung: D(4),B(6),A(9),C(11)


Anwendung

 

Die relative Schätzung kann verwendet werden, um den voraussichtlichen Aufwand für die Umsetzung von Anforderungen abzuschätzen. Eine Möglichkeit, das obige Beispielergebnis zu interpretieren, könnte sein: D wird länger dauern als B, was länger dauert als A, was länger dauert als C, um implementiert zu werden.

Es ist jedoch weder bekannt, wie lange D oder B brauchen, noch wie viel länger D als B brauchen wird.

Oder eine solche Schätzung kann verwendet werden, um den Wert zu schätzen, den eine Anforderung für einen Kunden (oder eine Vertriebsabteilung) haben könnte. Dann könnte das obige Ergebnis so interpretiert werden: D wird mehr Wert liefern als B, was noch mehr Wert liefert als A, das wertvoller wäre als C.

Wie viel absoluten Wert eine Anforderung hat, ist jedoch nicht bekannt.

Auch dies ist ein Feature, kein Fehler dieses Ansatzes!

Absolute Schätzungen sind schwierig, vielleicht sogar unmöglich innerhalb angemessener Fehlerspannen. Dies gilt sogar für die Zuordnung abstrakter Zahlen zu Anforderungen. D mit 13 und B mit 8 gleichzusetzen ist schon ziemlich genau, auch wenn SPs nur relative Werte ausdrücken sollen.

Aber bei rein vergleichender paarweiser Einschätzung reicht ein Bauchgefühl. Das ist ehrlich. Denn Entwickler haben beim Schätzen nicht mehr als ein Bauchgefühl. (Und selbst das könnte falsch sein.)

Die Entscheidung für B>A in Schritt 1. oben steht nicht für mehr als „Mein Bauchgefühl ist, dass B länger dauert als A. Aber um wie viel…? Ich weiß nicht.” oder „Mein Bauchgefühl ist B ist wertvoller als A. Aber um wie viel? Ich weiß nicht.”

Vielleicht könnte ein Vergleich mit einem Faktor wie „B dauert etwas länger“ oder „B dauert viel länger“ versehen werden. Aber mehr als 2 oder 3 Faktoren (z.B. „mehr“ (>), „viel mehr“ (>>), „enorm mehr“ (>>>)) machen keinen Sinn. Präziser kann ein Bauchgefühl nicht sein.

Ein solcher Faktor würde dann natürlich den Gesamtrang beeinflussen. Dies könnte durch größere Abstände (>=1, >>=3, >>>=10) zwischen Alternativen erleichtert werden. Anstatt ihnen zusammenhängende Ränge zuzuweisen, könnte die Rangfolge spärlich sein. Beispiel: D>B>>A>>>C könnte übersetzt werden in

1. D
2. B
5. A
15. C

Deine Aufgabe

Funktionale Anforderungen

Schreibe ein Programm, um die vergleichende Schätzung in einem Team zu unterstützen.

Jede Schätzung beginnt mit der Eingabe eines optionalen Titels für das Schätzungsprojekt (z. B. „Sprint 12“) und die zu vergleichenden Items (User Stories). Die Anzahl der Artikel muss nicht begrenzt werden. Sind aber alle Items eingetragen, wird die max. Anzahl der Vergleiche angezeigt werden.

Das Schätzprojekt wird dann an die Teammitglieder verteilt (z. B. indem es ihnen seine ID mitteilt oder ihnen eine URL sendet), damit sie ihren Vergleich durchführen.

Die Teammitglieder vergleichen die Projektelemente paarweise. Dies kann so einfach sein, wie einfach nur auszuwählen, welcher Gegenstand eines Paares als größer/wertvoller angesehen wird. Oder es kann auch ein Faktor angegeben werden, z.B. „viel größer“ oder „viel, viel wertvoller“.

Der Gesamtrang der Artikel kann jederzeit eingesehen werden. Es wird jedes Mal aktualisiert, wenn ein Teammitglied seine/ihre Vergleiche einreicht. (Die mehrfache Übermittlung von Vergleichen für dasselbe Projekt überschreibt vorherige Vergleiche.)

Der Benutzer identifiziert sich einfach durch die Eingabe seiner E-Mail-Adresse. Es ist keine weitere Authentifizierung/Autorisierung erforderlich.

Nicht-funktionale Anforderungen

Das Programm sollte in einem Intranet laufen. Mehrere Teammitglieder können an ihren Computern gleichzeitig an ihren Vergleichen arbeiten. Eine Auswertung ist jederzeit möglich.

Die Anzahl der Teammitglieder ist gering (1..10). Die Anzahl der Elemente pro Projekt ist gering (2..10).

Die Anzahl der Schätzprojekte pro Team liegt im Bereich von 4 bis 100 pro Jahr.

Eine echte Verteilung der Teammitglieder über das Internet zu ermöglichen wäre schön, ist aber nicht notwendig.

Projekte werden durch eine automatisch generierte ID identifiziert. Diese ID ist an den Ersteller des Projekts gebunden. Projektlisten zeigen nur Projekte, die dem aktuellen Benutzer gehören. Bei einer vergleichenden Schätzung kann jedoch jede gültige Projekt-ID eingegeben werden. Keine Autorisierung ist notwendig. Wer zufällig eine Projekt-ID kennt, gilt als ausreichend durch dieses Wissen autorisiert, um Beiträge zu leisten.

Benutzeroberflächenskizze der Konsole

Die App benötigt keine schicke GUI. Eine einfache Konsolen-Benutzeroberfläche reicht auch. So könnte es aussehen. Das ¶ gibt an, wo der Benutzer nach einer Eingabe die EINGABETASTE drückt.
 
$ compest teamlead@acme.com¶
N(ew estimation project, C(ompare, E(valuate project, L(ist projects, eX(it: N¶
 
Project #3
Title (optional): Sprint 12¶
Item A: Add button¶
Item B: Change background¶
Item C: Personalize UI¶
Item D: Add persistence¶
Item E:¶
4 items, max. number of comparisons: 6
Ok [Y/n]:¶
 
N(ew estimation project, C(ompare, E(valuate project, L(ist projects, eX(it: X¶
 
$ compest peter@acme.com¶
N(ew estimation project, C(ompare, E(valuate project, L(ist projects, eX(it: C¶
 
Project number: 3¶
 
Sprint 12
Compare A:"Add button" to B:"Change background": B¶
Compare A:"Add button" to C:"Personalize UI": C¶
Compare A:"Add button" to D:"Add persistence": D¶
Compare B:"Change background" to C:"Personalize UI": C¶
Compare B:"Change background" to D:"Add persistence": D¶
Compare C:"Personalize UI" to D:"Add persistence": D¶
 
Your ranking:
 1. D: Add persistence
 2. C: Personalize UI
 3. B: Change background
 4. A: Add button
 
N(ew estimation project, C(ompare, E(valuate project, L(ist projects, eX(it: X¶
 
$ compest mary@acme.com¶
...
$ compest paul@acme.com¶
...
$ compest teamlead@acme.com¶
N(ew estimation project, C(ompare, E(valuate project, L(ist projects, eX(it: e¶
 
Project number: 3¶
 
Total ranking of Sprint 12:
 
 1. D: Add persistence
 2. C: Personalize UI
 3. A: Add button
 4. B: Change background
 
N(ew estimation project, C(ompare, E(valuate project, L(ist projects, eX(it: L¶
 
1. Sprint 11
2. Refactoring
3. Sprint 12
 
N(ew estimation project, C(ompare, E(valuate project, L(ist projects, eX(it: x¶
 
$

Variation: Aufwändigere Benutzeroberfläche

Eine Web-UI oder eine Desktop-GUI ist natürlich willkommen.

de_DEGerman