Wie Agile Softwareentwicklung entstand
Klassische, lineare Softwareentwicklung hat seit Dekaden mit gravierenden Problemen zu kÀmpfen.
Als Beispiel, das Wasserfallmodell. Die Bearbeitung der Phasen von Planung, Entwurf, Implementierung Test und Wartung, erfolgt nacheinander. Die nÀchste Phase beginnt, wenn die vorhergehende abgeschlossen ist.
Dieser Prozess dauert von Monaten bis hin zu Jahren. AnschlieĂend wird die Software geliefert oder veröffentlicht und es beginnt die Wartungsphase.
Die Phasen des Wasserfall-Modells entsprechen dem Deming Kreis. Dieser wird auch PDCA-Zyklus (Plan, Do, Check, Act) genannt und wurde von Edward Deming beschrieben.
Durch die Rahmenbedingungen des Wasserfallmodell und ergeben sich gewichtige Probleme:
- Umsetzungsfehler werden erst spÀt erkannt
- Durch die Entwicklungsdauer ist das Produkt fĂŒr den Markt uninteressant geworden.
- Es gibt kein Feedback aus dem Nutzerkreis. Potenzial fĂŒr Verbesserungen bleibt verborgen.
- Fehler zu beheben, kostet viel Geld.
- Designfehler lassen sich, wenn ĂŒberhaupt, schwer beseitigen.
- usw.
Was ist der Unterschied zwischen klassischen und agilen Softwareentwicklungs-Modellen?
Bei klassischen Modellen liegt zwischen Anforderung und Auslieferung eine lange Zeitspanne. Es dauert mitunter Jahre, bis ein lieferbares Produkt fertiggestellt ist. Das fĂŒhrt zu den oben genannten Probleme.
Agile Softwareentwicklungs-Modelle durchlaufen die gleichen Phasen des PDCA-Zyklus, mehrfach in wesentlich kĂŒrzerer Zeit. Die Phasen Plan, Do, Check, Act werden in wenigen Wochen, statt Monaten und Jahren durchlaufen.
Wird die Entwicklung durch agile Softwareentwicklung-Modelle schneller?
Nein und Ja.
Nein, weil der Menge der zu erledigen Arbeit, bei kĂŒrzeren Zyklen gleich bleibt.
Ja, wenn gleichzeitig die Werte und Prinzipien vom Agile Manifest gelebt werden. Dies verdeutlicht das zehnte agile Prinzip: Einfachheit, die Kunst, die Menge nicht getaner Arbeit zu maximieren, ist essenziell.
Durch das Befolgen aller agilen Prinzipien, verstÀrkt sich deren Wirkung und agile Softwareentwicklungsprojekte erreichen schneller ihr Ziel.
Kurze Zyklen ermöglichen die regelmĂ€Ăige Bereitstellung, eines potenziell lieferbaren Produkts. Jedes potenziell lieferbare Produkt ist eine nĂŒtzliche Erweiterung des Produkts, aus dem vorhergegangenen Zyklus.
Das Agile Manifest
Einige Leiter von Softwareentwicklungsprojekten fanden heraus, dass deren klassisch durchgefĂŒhrte Projekte, signifikant erfolgreicher waren als der allgemein Durchschnitt.
Warum waren diese Projekte erfolgreicher als der Durchschnitt? Siebzehn Projektleiter versuchten dies im Jahr 2001 in Utah, USA, herauszufinden.
Im Ergebnis, formulierten sie aus den Erkenntnissen das Agile Manifest.
Werte & Prinzipien aus dem Agile Manifest
Das Agile Manifest liefert Werte und Prinzipien fĂŒr die agile Softwareentwicklung, die das Resultat aus der Betrachtung erfolgreicher Projekte sind. Sie sind das Fundament agiler Modelle.
Die agilen Werte
Das Agile Manifest beinhaltet vier Werte:
- Wir schÀtzen Individuen und Interaktionen mehr als Prozesse und Werkzeuge
- Wir schÀtzen funktionierende Software mehr als umfassende Dokumentation
- wir schÀtzen Zusammenarbeit mit dem Kunden mehr als Vertragsverhandlungen
- wir schÀtzen das Reagieren auf VerÀnderung mehr als das Befolgen eines Plans
Im agilen Manifest heiĂt es weiter: âObwohl wir die Werte auf der rechten Seite wichtig finden, schĂ€tzen wir die Werte auf der linken Seite höher ein.â
Das bedeutet nicht, dass die rechte Seite unwichtig ist. Die rechte Seite ist wichtig, wenn sie nĂŒtzlich und sinnvoll ist.
Die Prinzipien agiler Softwareentwicklung
ZusÀtzlich zum Agile Manifest wurden noch 12 Prinzipien formuliert, die agiles Vorgehen ermöglichen.
- Unsere höchste PrioritĂ€t ist es, den Kunden durch frĂŒhe und kontinuierliche Auslieferung wertvoller Software zufriedenzustellen. Dahinter verbirgt sich nichts weiter als: Baue, Liefere und Lerne daraus. Schau dir den Demingkreis an.
- HeiĂe âĂnderungen, selbst spĂ€t in der Entwicklung willkommen. Agile Prozesse nutzen VerĂ€nderungen zum Wettbewerbsvorteil des Kunden. Dieses Prinzip fordert dich auf, zu jeder Zeit Ănderungen in der Entwicklung zu akzeptieren und umzusetzen. Nutze den Wettbewerbsvorteil frĂŒhzeitiger Lieferungen. Sei bereit, Ănderungen zu akzeptieren und realisiere einen schnelleren Return on Invest.
- Liefere funktionierende Software regelmĂ€Ăig innerhalb weniger Wochen oder Monate und bevorzuge die kĂŒrzere Zeitspanne. Beschreibt das âIterative Vorgehen. Je kĂŒrzer die Zeitspanne, umso schneller kann Feedback in die Entwicklung einflieĂen.
- Fachexperten und Entwickler mĂŒssen wĂ€hrend des Projektes tĂ€glich zusammenarbeiten. Baue mit allen Beteiligten ein gemeinsames VerstĂ€ndnis fĂŒr das Ziel auf und halte eine positive Kommunikation aufrecht.
- Errichte Projekte rund um motivierte Individuen, gib ihnen das Umfeld und die UnterstĂŒtzung, die Sie benötigen und vertraue darauf, dass sie die Aufgabe erledigen. Es ist herausfordernd, Teams motivierter Individuen zu bilden. Versuche alles, um motivierte Teams zusammenzustellen und motiviert zu halten.
- Die effizienteste und effektivste Methode, Information an und innerhalb eines Entwicklungsteams zu ĂŒbermitteln, ist im GesprĂ€ch von Angesicht zu Angesicht. HeiĂt auch: Schreib keine E-Mails, sondern begebe dich direkt zu deinem GesprĂ€chspartner und interagiere mit ihm persönlich. Der Prozess lautet: Miteinander sprechen, vereinbaren, dokumentieren.
- Funktionierende Software ist das wichtigste FortschrittsmaĂ. Das bedeutet egal, was du tust, am Ende zĂ€hlt die funktionierende Software.
- Agile Prozesse fördern nachhaltige Entwicklung. Die Auftraggeber, Entwickler und Benutzer sollten ein gleichmĂ€Ăiges Tempo auf unbegrenzte Zeit halten können. Hier hilft es, die Velocity, die Geschwindigkeit der Entwicklung, im Auge zu behalten und die Teams nicht permanent zu 100 % auszulasten. Es ist wie mit einem Fahrzeugmotor. Bei andauernder Volllast, verkĂŒrzt sich die Zeit bis zu einem Ausfall.
- StÀndiges Augenmerk auf technische Exzellenz und gutes Design fördert AgilitÀt.
Mike Beedle schrieb in einem Tweet:
„Agile heilt keine INKOMPETENZ. Sie können Teams coachen, um engagierter und kollaborativer zu sein, aber KEIN agiles Framework, keine agile Methode oder Denkweise wird Sie vor âEKLATANTEM âMISSERFOLG bewahren, wenn ihr Entwicklungsteam in Konstruktionspraktiken INKOMPETENT ist. Technische Exzellenz ist ein MUSS!“ - Einfachheit, die Kunst, die Menge nicht getaner Arbeit zu maximieren, ist essenziell. FĂŒr Softwareentwickler ist dieser Hinweis entscheidend. Jeder, der in einem agilen Prozess mitwirkt, soll den einfachen Weg wĂ€hlen. Keine Sonderlocken, keine goldenen Henkel, sondern: Mache weniger und liefere mehr.â Sind Profis schneller, wenn man sie antreibt? Nein, Profis sind schneller, indem sie TĂ€tigkeiten auf das notwendige reduzieren.
- âDie besten Architekturen, Anforderungen und EntwĂŒrfe entstehen durch selbstorganisierte Teams. Harte Vorgaben verhindern optimale Lösungen und KreativitĂ€t.
- âIn regelmĂ€Ăigen AbstĂ€nden reflektiert das Team, wie es effektiver werden kann und passt sein Verhalten an.Die Verpflichtung zur kontinuierlichen Verbesserung. âPerfektion existiert nicht.â StĂ€ndige Verbesserung ist ein Grundbaustein der AgilitĂ€t. Strebe nach Perfektion, um nĂ€her an Perfekt heranzukommen, ohne sie zu erreichen.
Das Agile Mindset
Um AgilitÀt sinnvoll zu leben, bedarf es der richtigen Einstellung. AgilitÀt ist keine Methode oder Anleitung. AgilitÀt ist ein Mindset, die gedankliche Einstellung einer Person.
Du kannst agile Methoden einsetzen, ohne ein agiles Mindset zu besitzen. Im Ergebnis wird es schlechter, anstatt besser.
Vor- und Nachteile agiler Softwareentwicklungs-Modelle
Agile Softwareentwicklungs-Modelle funktionieren gut, weisen aber auch Nachteile auf. Die wichtigsten davon sind:
- Vorhersagbarkeit steigt erst mit dem Projektfortschritt
- Schwierige Budgetplanung
- GefĂŒhl von Kontrollverlust bei den FĂŒhrungskrĂ€ften
- Laterale FĂŒhrung erforderlich
- Ungenaue Terminplanung
So schwerwiegend wie die Nachteile erscheinen, die Vorteile agiler Softwareentwicklung ĂŒberwiegt deutlich:
- Der Auftraggeber darf den Projektverlauf direkt beeinflussen.
- Flexibles reagieren auf VerÀnderung und Neuerung
- FrĂŒhzeitige Fehlererkennung
- Motivierte Mitarbeiter
- Schneller Return on Invest
- Schnelle Anpassung an MarktverhÀltnisse
Agile Softwareentwicklung bedarf enger Zusammenarbeit und dem Reagieren auf VerÀnderung
Voraussetzungen fĂŒr eine agile Softwareentwicklung ist einerseits die enge Zusammenarbeit zwischen Auftraggeber, Auftragnehmer und den Anwendern. Sind die Anforderungen nicht im Voraus bekannt, werden diese Schritt fĂŒr Schritt wĂ€hrend des Entwicklungsprozesses definiert.
Eine enge Zusammenarbeit ist unumgĂ€nglich. Ăber die Beschaffenheit des Produkts muss eine stete Diskussion bestehen.
Andererseits wird vorausgesetzt, dass das Entwicklungsteam auf VerĂ€nderung eingestellt sein muss. Zu jeder Zeit sind Ănderungen möglich, auf die das Entwicklungsteam reagieren muss.
Wann sind Modelle fĂŒr agile Softwareentwicklung sinnvoll?
Woran erkennst du, wann eine agile Vorgehensweise einem klassischen Modell vorzuziehen ist? Entscheide dich fĂŒr das geeignete Modell, anhand des Entwicklungsziels.
Klassische Entwicklungsmodelle sind PrÀdiktive / Inkrementelle Modelle. Agile Entwicklungsmodelle sind Adaptiv / Iterativ.
PrÀdiktive / Inkrementelle Projekte
Wenn das Endprodukt vorhersagbar ist, entscheide dich fĂŒr ein klassisches Modell. In klassischen Modellen ist es möglich, einzelne Komponenten als Inkremente parallel zu erstellen und hinterher zusammenzufĂŒgen. Klassische Modelle sind PrĂ€diktive/Inkrementelle Modelle und heiĂen unter anderem Wasserfallmodell, V-Modell, Spiralmodell und so weiter.
Adaptiv / Iterative Projekte
Entscheide dich fĂŒr ein agiles Modell wie Scrum, Kanban oder XP, wenn das Endprodukt nicht klar definierbar ist. Weil nicht feststeht, welche Bestandteile erforderlich sind und die Ănderung von Anforderungen möglich ist, kommt eine prĂ€diktive Herstellung nicht infrage. In agilen Modellen ist nach jedem Zyklus, ein potenziell lieferbares Produkt verfĂŒgbar.
Halten wir fest: Bei unvollstÀndigen Anforderungen an das Zielprodukt, erwÀge eine agile Entwicklungsmethode.
Existieren zu Beginn der Entwicklung klare Anforderungen an das Zielprodukt, ziehe ein klassisches Modell oder prozessorientiertes Modell, wie Kanban, in Betracht.
Agile Softwareentwicklung in Organisationen einfĂŒhren
Es scheint leicht zu sein, agile Softwareentwicklung und deren Modelle in Organisationen zu implementieren.
Der Schein trĂŒgt. Viele Organisationen tragen auf der Verpackung die Bezeichnung âAgilâ ohne AgilitĂ€t zu leben. In der Praxis hat die Implementierung agiler Modelle Hindernisse zu bewĂ€ltigen. Zu nennen sind:
- Die Organisationsphilosophie oder -kultur steht im Widerspruch zu den zentralen agilen Werten.
- Es besteht mangelnde Erfahrung mit der agilen Methode
- mangelnde UnterstĂŒtzung des Managements
- Es formiert sich allgemeiner organisatorischer Widerstand gegen die anstehenden VerÀnderungen.
- Mitarbeiter sind fĂŒr die Anwendung agiler Modelle, unzureichend ausgebildet.
FĂŒhren Organisationen agile Modelle ein, scheitern sie, wenn:
- Organisationen gegen VerÀnderung resistent sind,
- Ein Kulturwandel in der Organisation nicht erfolgt,
- FĂŒhrungskrĂ€fte ihre Machtpositionen schĂŒtzen und ihre Komfortzone nicht verlassen.