Der Begriff „Agil“ bzw. englisch „agile“ und die damit verbundenen Führungsprinzipien haben in den letzten Jahren eine enorme Popularität weit über die Softwareentwicklung hinaus gewonnen. Er geht zurück auf das agile Manifest, das eine Gruppe von erfahrenen Softwareentwicklern 2001 veröffentlicht hat und mit dem sie verschiedene neue und bewährte Konzepte unter einem gemeinsamen Begriff vereinte. Zusammen mit zahlreichen weiteren Veröffentlichungen und Vorträgen seiner Autoren ist es seit langem prägend für unsere Arbeit.

Kern der agilen Softwareentwicklung ist aus unserer Sicht, dass sie das Lernen im Projekt, die Bedeutung von Zeit, die Veränderlichkeit der Rahmenbedingungen sowie die Komplexität von Software ins Zentrum ihrer Überlegungen stellt. Ihre Methoden und Tools sind darauf ausgerichtet, unter diesen Voraussetzungen erfolgreiche Projekte zu ermöglichen.

Was bedeutet "agile Softwareentwicklung" für uns?

Angebot und Schätzung

Projekte lassen sich vor dem Start häufig nur grob umreißen, aber niemals vollständig spezifizieren. Da wir das wissen, bestehen wir nicht auf eine solche Spezifikation, sondern versuchen vor dem Projekt, gemeinsam mit unseren Kunden ein möglichst gutes Gefühl für den Umfang des Projekts zu entwickeln. Auf der Basis unserer Erfahrungen in ähnlichen Projekten erarbeiten wir eine T-Shirt-Größen-Schätzung. Das bedeutet, dass wir für jede einzelne Funktion oder jedes Feature eine T-Shirt-Größe, üblicherweise zwischen [S] und [XL], festlegen. Jede T-Shirt-Größe hat dabei einen "Nennwert" und eine Aufwandsspanne. Die T-Shirt-Größe [L] beispielsweise steht für "ungefähr 4 Personentage" und hat eine Spanne von "mindestens 2 Personentage" bis "maximal 8 Personentage". Mit der T-Shirt-Größen-Schätzung haben wir dann eine Größenordnung des Projekts festgelegt, auf die unser Kunde sich einstellen kann – lange bevor die Details vollständig bekannt sind. Mehr dazu in unserem Blogbeitrag zur T-Shirt-Größen-Schätzung.

Die Abrechnung unserer Projekte erfolgt nach tatsächlichem Aufwand, aber immer im Rahmen der vorher vereinbarten T-Shirt-Größen. Das führt zu einer fairen Aufteilung des Kostenrisikos, zu maximaler Transparenz hinsichtlich des Aufwands und ermöglicht gründliche Arbeit in hoher Qualität ohne Fehlanreize.

Agile Projektsteuerung

Unser Ziel ist es, so früh wie möglich ein nutzbares Softwareprodukt zu entwickeln – das kann z. B. eine Website sein, die zunächst nur aus Standardseiten ohne Sonderfunktionalitäten besteht.

Aufbauend auf diesem ersten Produkt entwickeln wir dann die weiteren Funktionalitäten stets so, dass die wichtigsten Features zuerst angegangen werden. Auf diese Weise gibt es zu jeder Zeit ein funktionierendes und möglichst wertvolles Produkt.

Dabei versuchen wir, so wenige Features wie möglich gleichzeitig in Entwicklung zu haben, um fokussiert und schnell arbeiten zu können. Dabei hilft uns Kanban als Steuerungstool.

Durch diese Vorgehensweise ist es jederzeit möglich, noch nicht begonnene Features durch andere, vorher nicht geplante zu ersetzen, die Reihenfolge zu ändern oder auch den ursprünglich geplanten Funktionsumfang zu verkleinern.

Agile Entwicklung

Bei der eigentlichen Entwicklung ist die intensive und vertrauensvolle Zusammenarbeit des webfactory-Teams mit den Fachleuten beim Kunden von zentraler Bedeutung. Hierfür setzen wir auf eine Mischung aus schriftlicher und persönlicher (Video-) Kommunikation.

Für die schriftliche Kommunikation geben wir unseren Kunden Zugriff auf das Code-Repository ihres Projektes bei unserem Code-Hoster GitHub. Hierüber ist nicht nur der komplette Quellcode einsehbar, sondern es lassen sich auch Aufgaben erstellen und kommentieren. Auch die fachliche Kommunikation des webfactory-Teams ist in GitHub einsehbar und dokumentiert.

Ein- bis zweimal pro Woche treffen wir uns in größeren Projekten mit unseren Kunden zu Video-Jours-Fixes, in denen wir kompliziertere Themen von Angesicht zu Angesicht besprechen können.

Jede Codeänderung oder -erweiterung wird über einen Pull Request vorgenommen. Ein Pull Request ist eine Menge von Änderungen, die der Entwickler in den Hauptzweig der Software übertragen möchte. Die Änderungen werden in diesem Pull Request übersichtlich dargestellt und können von anderen Entwicklern und auch vom Kunden kommentiert und diskutiert werden (Code Reviews). Auf Wunsch wird für jeden Pull Request automatisch ein Testserver eingerichtet, auf dem die Auswirkung der Änderung getestet werden kann.

Sind alle einverstanden, wird der Pull Request gemergt, also in den Hauptzweig übernommen. Die Diskussion zu einem Pull Request bleibt für Recherchezwecke dauerhaft erhalten und ermöglicht später häufig wichtige Einblicke in die Überlegungen, die zu einer bestimmten Entscheidung geführt haben.

Automatisierte Tests

Eine wichtige Voraussetzung für dauerhaft agile Softwareentwicklung sind automatisierte Tests: Bereits vor oder während der Entwicklung wird für jedes Feature auch Testcode geschrieben, der dieses Feature nutzt und überprüft, dass es sich erwartungsgemäß verhält.

Neben Unit Tests, die die einzelnen Bausteine der Software isoliert voneinander prüfen, entwickeln wir auch automatisierte Akzeptanz- bzw. Verhaltenstests. Hierbei entstehen natürlichsprachliche Funktionsbeschreibungen (auf Deutsch oder Englisch), die wir gemeinsam mit dem Kunden ausarbeiten, und hinter denen sich ebenfalls ausführbarer Testcode verbirgt.

Alle Tests werden bei jedem Pull Request und jeder Änderung auf dem Hauptzweig der Software automatisch ausgeführt und bei Fehlern wird der Entwickler benachrichtigt.

Dadurch wird es möglich, bestehende Funktionalitäten laufend zu überarbeiten und weiterzuentwickeln, ohne Gefahr zu laufen, dass sich hierdurch unbemerkt Fehler einschleichen – und ohne jedes Mal einen hohen Aufwand für manuelle Tests in Kauf zu nehmen.

Automatisiertes Deployment

Wird ein Pull Request gemergedt und besteht alle Tests, wird er vollautomatisch auf den Produktivservern installiert und in Betrieb genommen.

Dabei verwenden wir ein System, das uns jederzeit das Zurückspringen auf die letzte Version mit einem einfachen Button-Klick ermöglicht. Auf diese Weise können wir, sollte es doch einmal einen Fehler geben, der erst im Produktivbetrieb auffällt, innerhalb von Sekunden den vorherigen, fehlerfreien Codestand wieder aktivieren, bevor wir das Problem analysieren und lösen.

Betriebsüberwachung (Monitoring)

Das beste Tool zum Rückgängigmachen von Deployments würde nichts nützen, wenn wir Fehler im Produktivbetrieb nicht bemerken. Daher überwachen wir unsere Server-Logdateien mit Hilfe einer speziellen Software und lassen uns alle Fehlermeldungen automatisch in den Teamchat posten. Den haben alle Entwickler im Blick und stimmen sich dann ab, wer sich um den Fehler kümmert.

Codequalität

Hohe Qualität und eine saubere Softwarearchitektur sind Voraussetzungen für langlebige Software und unser täglicher Anspruch. Um ihn einzulösen, unterstützen sich die Entwickler gegenseitig in Form von Pair Programming und Code Reviews.

Zusätzlich nehmen wir viele Prüfungen und Verbesserungen automatisch vor, z. B. die einheitliche Formatierung des Quellcodes gemäß "Coding Standards" und die Prüfung auf vollständige und korrekte Definition und Verwendung von Schnittstellen. Die automatischen Prüftools werden von uns laufend erweitert.

Automatisierung

Nicht nur bei Tests und Deployment, auch bei anderen Routineaufgaben setzen wir auf Automatisierung, um unseren Entwicklern volle Konzentration auf die eigentliche Softwareentwicklung zu ermöglichen. So haben wir z. B. für Youthpass den Upload von Sprachkatalogen in eine Übersetzungsplattform sowie den Rückübertragung der fertigen Übersetzungen in den Quellcode auf einen automatischen Prozess umgestellt, der jetzt bei jeder Codeänderung und jeder neuen Übersetzung abläuft.

Bei folgenden Projekten hat sich die agile Arbeitsweise besonders bewährt

  • Beispielansicht des Projektes OBELIS Öffentlich

    OBELIS Öffentlich

    OBELIS ist die Online-Plattform für die Berichterstattung aller geförderten Ladestationen des Bundesförderprogramms Ladeinfrastruktur

    Projekt ansehen
  • Beispielansicht des Projektes Erasmus+ JUGEND IN AKTION

    Erasmus+ JUGEND IN AKTION

    Website zum Programmteil für nicht formale und informelle Bildung junger Menschen innerhalb des EU-Programms Erasmus+

    Projekt ansehen
  • Beispielansicht des Projektes krankenkassen.de

    krankenkassen.de

    Journalistisch aufbereitete, aktuelle Informationen und Services rund um gesetzliche und private Krankenversicherungen.

    Projekt ansehen
  • Beispielansicht des Projektes Europäisches Solidaritätskorps

    Europäisches Solidaritätskorps

    Website für das neue Jugendförderprogramm der EU

    Projekt ansehen