Dieses Blog durchsuchen

Samstag, 16. Oktober 2010

Warum Software agil entwickelt werden sollte

In meinem Studium habe ich gelernt, dass Software-Entwicklung mit dem Bau eines Hauses vergleichbar sei. Die Anforderungen werden aufgenommen, das Haus wird bis ins Detail spezifiziert und nach den Vorgaben des Architekten gebaut. Komplexe Software ließe sich nach genau dieser Vorgehensweise implementieren.

Einige Unternehmen entwickeln Software genauso. Die vermeintlichen Vorteile liegen auf der Hand:
  • Die für das Projekt notwendigen Resourcen und die damit verundenen Kosten lassen sich über Jahre hinweg planen und einteilen.
  • Die Entwicklung kann als Paket an günstige Entwickler in anderen Ländern vergeben werden.
  • Die Entwickler können die Software planen und anschließend nach Plan entwickeln; größere Refactoring-Maßnahmen sind vermeidbar
Bei diesen Vorteilen fällt eines sofort ins Auge: es sind Vorteile für den Verantwortlichen, der das Projekt bezahlt und für die Entwickler. Alle können sich bequem zurücklehnen und dem Kunden (bzw. der Fachabteilung)  sagen: "Na, genauso wolltet ihr es doch haben, es steht doch so in der Spezifikation. Lasst uns doch bitte in Ruhe weiterentwickeln." Der ITIL-Manager sagt dann: "Wir können gerne auf eure Wünsche eingehen. Aber dazu müsst ihr natürlich erstmal einen Change beantragen und diesen auch bezahlen. Ob der Change-Manager dies genehmigt, ist aber eine ganz andere Frage." Nach langer Zeit bekommt der Kunde dann genau das, was er spezifiziert hat - aber leider oftmals nicht das, was er wirklich braucht.

Dies hat m. E. nach hauptsächlich folgende Ursachen:
  • Software ist sehr komplex und lässt sich nur sehr schwer von vornherein bis ins Detail planen
  • Anforderungen und gute Ideen entstehen oft erst, wenn mit der Software tatsächlich gearbeitet wird
  • Rahmenbedingungen ändern sich mit der Zeit
Die agile Software-Entwicklung hat diesen Sachverhalt erkannt und daraus eine Reihe von Konsequenzen gezogen. Eine wichtige Maßnahme ist die iterative Vorgehensweise. Iterativ meint den Zyklus von Anforderungsanalyse, Spezifikation, Implementierung und Test, der sich ständig wiederholt. Software wird nicht komplett geplant und dann Schicht für Schicht von der Datenbank bis zum UI entwickelt, sondern in einzelne Funktionen aufgeteilt. Diese Funktionen werden dem Anforderer dann nach und nach iterativ zur Verfügung gestellt. Aus dieser verblüffend einfachen Vorgehensweise ergeben sich eine ganze Reihe von Vorteilen:
  • Der Anforderer bekommt ein schnelles Feedback und kann entscheiden, ob die Funktion seinen Vorstellungen entspricht
  • Die am höchsten priorisierten Funktionen stehen am schnellsten zur Verfügung.
  • Es kann ständig (nämlich vor jeder Iteration) auf veränderte Rahmenbedingungen eingegangen werden
  • Die Planung wird vereinfacht, da die Komplexität innerhalb einer Iteration reduziert wird
Natürlich gehört zur agilen Software-Entwicklung noch einiges mehr. Um den iterativen und flexiblen Entwicklungsprozess zu optimieren wurden viele wichtige Vorschläge gemacht, wie z. B. die Verwendung von Unit Tests (oder gar die testgetriebene Entwicklung), ständige Refaktorisierungen und der Einsatz eines Vorgehensmodells wie beispielsweise SCRUM, worauf ich an dieser Stelle aber nicht weiter eingehen möchte.

Ich würde mir jedoch für die Zukunft wünschen, dass gerade die Entscheider in den Chef-Etagen der Unternehmen vermehrt die Vorteile der agilen Software-Entwicklung erkennen und nicht auf einer bürokratischen und wenig kundenorientierten, klassischen Software-Entwicklung bestehen.

2 Kommentare:

  1. Sehr schöner Artikel!
    Wie ich feststelle, wird bei uns in der Firma sogar schon die agile Software-Entwicklung gelebt. Als Entwickler wäre mir die klassische Entwicklung manchmal lieber, insbesondere wenn es sehr viele Ansprechpartner mit verschiedenen (und nicht immer vereinbaren) Wünschen gibt.

    AntwortenLöschen
  2. Hi Andi,

    da hast du Recht! Vielleicht lohnt sich in diesem Zusammenhang ein Blick auf Scrum (http://de.wikipedia.org/wiki/Scrum) Dort wird der Product Owner beschrieben, der zentraler Anlaufpunkt für alle Anforderer eines Projekts ist. Dieser priorisiert dann die Anforderungen, sodass das Entwickler-Team sich voll auf die Implementierung konzentrieren kann...

    viele Grüße,
    Jens

    AntwortenLöschen