Painless Iterations

Das Wort der Iteration ist in den Sprachgebrauch der Softwarebranche eingedrungen, wie kaum ein anderes und ich muss zugeben: Ich habe es jahrelang falsch verstanden! Damit war/bin ich aber nicht allein, daher möchte ich nun etwas Licht in diese Sache bringen.

Zunächst möchte ich bestimmte Begriffe trennen:

Iterations

Ein Release ist eine Produktversion, die an den Kunden ausgeliefert wird. Dieses Wort ist sicherlich leicht verständlich.

Eine Iteration gilt i.d.R. als etwas potentiell Auslieferbares, also ein potentielles Release. Ich werde aber noch darauf kommen, dass dies eine Definition ist, die in die Irre führt.

Am untersten Ende steht ein Inkrement. Ein solches kann eine einzelne Funktion oder sogar nur ein technischer Teil einer Funktion sein. Inkremente sind offensichtlich nicht Release-fähig. Für Inkremente ist es sinnvoll das WIP (Work In Progress) zu reduzieren.

Der Schlüssel zum Verständnis der Iteration liegt im Inkrement. Auch vollständig umgesetzte Funktionen sind nur Inkremente und nicht im Sinne von Business Value nutzbar!

Beispielsweise benötigen viele Anwendungen eine Nutzerverwaltung. Selbst wenn diese Funktionalität vollständig fertig programmiert und getestet ist und dazu noch mit einem fantastischen Layout aufwartet, hat kein Nutzer irgendeinen Wert davon sich in die Anwendung einzuloggen.

Was ist also nun iterative Entwicklung?

Bei der iterativen Entwicklung geht es darum auf einem möglichst direkten Weg ein Produkt zu entwickeln, was als Gesamtheit nutzbar ist und für den Anwender einen Nutzen bringt.

Hier geht es also offensichtlich um End-to-End Funktionalität. Im Blickpunkt früher Iterationen müssen Kernfunktionen oder Kernprozesse stehen. Komfortfunktionen innerhalb der Funktionen oder Randfunktionen kann man verschieben. Man wird in späteren Iterationen eine vorhandene Funktion wieder “anfassen” müssen. Das ist ein Kernaspekt iterativer Entwicklung.

Dieses “wieder anfassen” enthält natürlich Overhead in Bezug auf Code, der vielleicht wieder gelöscht werden muss, Testaktivitäten und sogar Risikoanalysen in stark regulierten Branchen. Daher ist die Länge der Iteration ganz unterschiedlich sinnvoll. Vielleicht 3 Tage, vielleicht 3 Monate!

Manchmal kann eine Iteration und ein Inkrement das Gleiche sein, wenn man an unabhängigen Stellen Features erweitert.

Die Iteration als etwas potentiell Lieferbares zu sehen, ist für mich daher nicht zielführend. In der Praxis kann dies zu leicht mit Inkrementen verwechselt werden. Eine Iteration ist die Realisierung von End-to-End Value.

Wenn diese Iteration dann gut genug für den Markt ist, wird sie zum Release.