Was ist eigentlich agile Softwareentwicklung? Das interessante daran ist, das wenn man verschiedene Leute dazu befragt, man von jedem eine andere Definition bekommen wird. Dies verdeutlicht einen der großen Vorteile agiler Entwicklung. Jedes Team kann sie adaptieren und auf die eigenen Bedürfnisse anpassen, egal ob es sich um Manager, Entwickler, Qualitätsmanager oder Tester handelt. Agile Entwicklung hilft dabei diesen normalerweise riesigen Prozess eine komplexe Software zu entwickeln, zu vereinfachen und vor allem zu beherrschen.
Schauen wir uns kurz einmal den herkömmlichen Softwareentwicklungszyklus an. Aus dem erstellten Pflichtenheft werden Anforderungen definiert, zu jeder Anforderung existiert ein eigenes Dokument. Dann gibt es Projektbedingungen, die sagen in Version X wird dies und jenes enthalten sein, sollte dies nicht möglich sein, dann wird etwas anderes integriert. Natürlich kann niemals jemand all diese Anforderungen, Bedingungen und Dokumente im Hinterkopf behalten und so nimmt es dann auch nicht wunder, das viele Projekte, gerade in der Webentwicklung, 100% mehr Zeit benötigen als eingeplant und 100% teurer werden. Viele Kunden kennen auch die Enttäuschung, wenn man dem Dienstleister sagen muss "Aber ich hatte doch gesagt, die Software soll dies und jenes können, warum ist diese Funktion nicht enthalten?".
Der Vorteil von agiler Entwicklung ist nun, das man komplexe Projekte für eine lange Zeit voraus planen kann. Jedoch teilt man das Projekt jeweils in viele kleine Schritte auf, so das man jederzeit in eine andere Richtung gehen kann, wenn es notwendig wird, ohne dabei Zeit oder Geld zu verlieren.
Agile bedeutet das richtige Feature zur richtigen Zeit auszuliefern. Ein großes Projekt wird in mehrere Einzelschritte, sogenannte "Releases" aufgeteilt. An erster Stelle eines Release Zyklus, definiert der Projektmanager die Features, die in dem nächsten Release enthalten sein sollen. Dies Geschieht in Absprache mit dem Kunden und dem Entwicklungsteam, unter Berücksichtigung der aktuellen Fehlerliste.
Ein Release sollte in der Regel zwischen 7 und maximal 15 Features enthalten. Zu jedem Feature schreibt der Projektmanager bis zu 20 Karten. (Wenn man mit einer zentralen Projekttafel arbeitet, dann ist das wörtlich zu verstehen, jedoch gibt es auch viele Agile Tools, die diese Karten virtuell auf dem Bildschirm repräsentieren). Die Karten enthalten eine Story, die die Features erklärt.
Diese Karten schaut sich die Entwicklungsabteilung an, nummeriert diese, nach der Priorität, denen sie den Features einräumen würden und geben eine grobe Zeiteinschätzung, wie lange die Umsetzung jedes Features benötigen wird. Ist ein Releaszyklus abgeschlossen, erhält man eine Auswertung der Zeit, wie sie eingeschätzt wurde und wie lange wirklich benötigt wurde.
Basierend auf der Grundlage wie viel Zeit in Werktagen mal verfügbare Entwickler für ein Release bis zur Veröffentlichung zur Verfügung stehen, kann der Projektleiter nun erkennen, ob voraussichtlich alle Features in diesem Release umgesetzt werden können. Falls nicht, muss in Absprache mit dem Kunden priorisiert werden und nicht hoch priorisierte Features können im übernächsten Release nachgeliefert werden.
Hat man nun alle Features für das nächste Release zusammen, sortiert man die Karten dieses Releases in die Mitte des Task Boardes (Tafel oder Applikation). Hat ein Entwickler keine Aufgaben mehr, geht er zur Tafel, nimmt sich eine Karte und bearbeitet diese. Hat der seine Arbeit abgeschlossen, sortiert er die Karte in die Rechte spalte und jeder weiß damit, das dieses Feature, das die Karte Repräsentiert, fertig gestellt wurde.
Das wichtige an den Releasezyklen ist, das sie den gesamten Entwicklungsprozess einer Applikation wiederspiegeln, jedoch auf einen kleinen Zeitrahmen herunter gebrochen. Wir haben also innerhalb eines Releasezyklus Die Planungsphase, die Einschätzungsphase, die Codierphase, die Testphase und letztendlich die Qualitätssicherungsphase. Ein Releasezyklus sollte maximal 2 Wochen, also 10 Werktage betragen. So das man alle 2 Wochen praktisch ein "fertiges Produkt" dem Kunden übergeben kann. Dies birgt den enormen Vorteil, das der Kunde ständig in den Entwicklungsprozess eingebunden ist und Ergebnisse sieht. Er muss also nicht Monate warten um dann schließlich enttäuscht fest zu stellen, das die Software nicht seinen Erwartungen entspricht. Durch Agile erkennt er bereits früh Abweichungen von seinen Vorstellungen und diese können dann innerhalb der nächsten 2 Wochen komplett ausgemerzt werden. Auf diese Weise entsteht eine Software, die zum Vereinbarten Zeitpunkt fertig wird und den Erwartungen des Kunden genau entspricht.