Der Begriff „Agil“ beschreibt zunächst einmal nur eine Art und Weise, wie man etwas angehen kann, ohne dabei wirklich konkret zu werden. Um eine Software oder ein Projekt agil zu entwickeln, bedarf es etwas mehr. Dafür benötigt man Vorgehensweisen, Praktiken und ein stimmiges Gesamtkonzept. Im Bereich der agilen Software-Entwicklung haben sich eine Handvoll Frameworks und Methodiken etabliert. Diese möchte ich hier vorstellen und aufzeigen, wie sie sich voneinander unterscheiden und welchen Fokus sie jeweils haben.
Folgende agile Frameworks und Methoden werde ich vorstellen:
- Agile Unified Process (AUP) / Disciplined Agile Delivery (DAD)
- Behaviour Driven Development (BDD)
- Crytsal Familie
- Dynamic Systems Development Method (DSDM)
- Feature Driven Development (FDD)
- Kanban
- Lean Software Development (LSD)
- Scrum
- Test Driven Development (TDD)
- Extreme Programming (XP)
Die Liste erhebt keinen Anspruch auf Vollständigkeit. Im Laufe der letzten 15 Jahre, bin ich aber nur mit den oben genannten Frameworks und Methoden in Berührung gekommen. Weil die Liste recht lang ist, werde ich die Betrachtung in drei Gruppen aufteilen, denen ich jeweils einen eigenen Blod-Beitrag widmen werde:
- Gruppe
- Kanban
- Lean Software Development (LSD)
- Scrum
- Extreme Programming (XP)
- Gruppe
- Agile Unified Process (AUP) und Disciplined Agile Delivery (DAD)
- Crytsal Familie
- Dynamic Systems Development Method (DSDM)
- Gruppe
- Behaviour Driven Development (BDD)
- Feature Driven Development (FDD)
- Test Driven Development (TDD)
Kanban
Kanban konzentriert sich auf Tätigkeiten, die gleichzeitig ausgeführt werden (engl. Work in Progress oder kurz WiP). Es wird versucht beim WiP ein Optimum zu erreichen und dadurch die Durchlaufzeiten zu maximieren. Engpässe (engl. Bottlenecks) und Probleme in den Abläufen werden dann schneller sichtbar und können frühzeitig behoben werden.
Kanban enthält als festen Bestandteil eine Kultur der kontinuierlichen Verbesserung (jap. Kaizen; Kai = Veränderung, Wandel; Zen = zum Besseren).
Ursprünge
Kanban ist Japanisch und bedeutet „Signalkarte“ (kan = Signal; ban = Karte). Seine Ursprünge liegen bei Toyota, wo das System entwickelt wurde, um einen gleichmäßigen und optimalen Fluss von Material zu gewährleisten und so Lagerbestände zu reduzieren.
Prominente Konzepte, Tools & Techniken:
- Taskboard
- Pull-System für Tätigkeiten (jeder nimmt sich selbstständig die nächste Aufgabe)
- Selbstorganisierende Teams
- Häufiges Ausliefern von lauffähigen Ergebnissen
Lean Software Development (LSD)
Der englische Begriff Lean lässt sich im Deutschen mit „schlank“ übersetzen. Das „schlank“ bezieht sich hier auf die Abläufe und Prozesse. Ziel des Lean Software Development ist es, Abläufe optimal aufeinander abzustimmen und überflüssige Tätigkeiten (jap. muda; muda = Verschwendung) zu vermeiden.
Ursprünge
Lean Software Development ist eine Weiterentwicklung des Lean Management, dass seinen Ursprung auch bei Toyota hat (siehe Kanban). Lean Management ist etwa Mitte des 20. Jahrhunderts entstanden, als man bei Toyota versucht hat die Prozesse und Abläufe zu stabilisieren, um die Qualität der Produkte zu verbessern.
Prominente Konzepte, Tools & Techniken:
- Pull-System für Tätigkeiten
- Ausrichtung auf Wert (engl. value) aus Sicht des Kunden
- Einbeziehen der Mitarbeiter in Entscheidungsprozesse
- Selbstorganisierende Teams
- Häufiges Ausliefern von lauffähigen Ergebnissen
Scrum
Scrum ist ein Framework und kein Vorgehensmodell. Das Regelwerk ist sehr schlank und definiert nur fünf Aktivitäten, drei Artefakte und drei Rollen. Für die Umsetzung muss man für die einzelnen Bereiche noch weitere Techniken definieren oder hinzufügen.
Das komplette Scrum Framerwork ist auf den drei Säulen Tranparenz, Überprüfung und Anpassung aufgebaut. Was bedeutet, dass idealerweise der Zustand eines Projekts jederzeit sichtbar ist und alle Abläufe regelmäßig zur Diskussion gestellt und gegebenenfalls angepasst werden.
Scrum stammt aus der Entwicklung von Software, ist aber davon unabhängig und wird inzwischen in vielen Bereichen eingesetzt (z.B. Maschinenbau, Medizintechnik).
Ursprünge
Der Begriff Scrum steht im Englischen für das Gedränge im Rugby. Die Anfänge lassen sich auf Ikujirō Nonaka und H. Takeuchi [siehe z.B. „The New New Product Development Game“, Cb.hbsp.harvard.edu, 1. Januar 1986] zurückverfolgen. Damals schuf Jeff Sutherland eine neue Rolle für den Projektleiter, die sich später zum Scrum Master weiterentwickelte. 1995 hat Ken Schwaber auf der OOPSLA einen ersten Konferenzbeitrag zu Scrum veröffentlicht. Ken Schwaber und Jeff Sutherland sind auch heute noch die treibenden Kräfte hinter Scum.
Prominente Konzepte, Tools & Techniken:
- Sprint
- Daily-Meeting
- Scrum Master
- Planungspoker
- Velocity
- Burndown-Chart
- Produkt-/Sprint-Backlog
Extreme Programming (XP)
Bei der Extreme Programmierung steht eher die Entwicklung einer Software im Vordergrund uns es geht weniger um den Prozess oder das Vorgehen. Diesem Ziel (die fertige Software) nähert man sich in kleinen Schritten, die in Iterationen durchgeführt werden.
Teamarbeit, Offenheit und stetige Kommunikation zwischen allen Beteiligten stehen im Vordergrund. Besonders Kommunikation ist hier sehr wichtig.
Extreme Programming geht davon aus, dass die Anforderungen an die zu erstellende Software zum Projektbeginn kaum bekannt sind und sich erst im Laufe des Projekts ergeben bzw. detailliert werden können. Deswegen wird neue Funktionalität permanent entwickelt, integriert und getestet.
Ursprünge
Extreme Programming entstand zwischen 1995 und 2000 im Rahmen eines Projekts im Bereich der Lohnabrechnung bei Chrysler. Das Projekt wurde anfänglich mit klassischem Projektmanagement Methoden (Wasserfallmodell) umgesetzt. In dem Projekt gab es häufig wechselnde Anforderungen und eine hohe Fluktuation der Mitarbeiter. Nachdem das Projekt nicht voran kam, probierten Kent Beck, Ward Cunningham und Ron Jeffries neue Entwicklungsansätze aus und schufen so die Grundlagen für Extreme Programming.
Prominente Konzepte, Tools & Techniken:
- User Stories
- Iterationen
- Pair-Programming
- Test-Driven-Development (TDD)
- Permanente Integration (engl. Continuous Integration)
- Unit Tests
- Refacturing
hier geht es weiter
Den zweiten Blog-Beitrag zu Agile Unified Process (AUP) / Disciplined Agile Delivery (DAD), Crytsal Familie und Dynamic Systems Development Method (DSDM) finden Sie hier.
Den dritten und letzten Blog-Beitrag zu Behaviour Driven Development (BDD), Feature Driven Development (FDD) und Test Driven Development (TDD) finden Sie hier.