Softwareentwicklung bewegt sich in der Regel in einem komplexen Umfeld bei dem zu Beginn nicht alle Anforderungen und Rahmenbedingungen bekannt sind und diese sich mit der Zeit auch ändern können. Eine vollständige Analyse und damit Lösungsdefinition vor der Umsetzung ist daher in der Regel nicht möglich oder wie es Edward V. Berard bereits treffend auf den Punkt brachte: “Walking on water and developing software from a specification are easy if both are frozen.” Welche Möglichkeiten bieten agile Methoden in diesem Umfeld?Aufgrund der im Vorfeld nicht möglichen Lösungsdefinition werden in agilen Vorgehensmodellen die Architekturentscheidungen erst dann getroffen, wenn die Implementierung diese erforderlich machen. So können Erfahrungen aus den vorangegangen Produktinkrementen einfließen und späte Anforderungsänderungen möglichst lange ohne höhere Aufwände berücksichtigt werden.
Als Folge dieser Verschiebung wird die Architekturarbeit nicht durch einen von der Umsetzung losgelösten Softwarearchitekten geleistet, sondern muss durch das Entwicklungsteam wahrgenommen und verantwortet werden. Viele unerfahrene Teams sind sich der daraus resultierenden Aufgaben nicht bewusst, da es hierfür keine konkreten Artefakte oder Methoden in agilen Vorgehensmodellen wie Scrum oder Kanban gibt. Eine Reihe von Problemfeldern sind die Folge, von denen mir die folgenden immer wieder begegnen.
- Flache Lernkurve
Neue Mitarbeiter benötigen eine sehr lange und damit teure Einarbeitungsphase bis sie sich in der Architektur zurechtfinden und wissen, wie Erweiterungen oder Änderungen implementiert werden können, da keine aktuelle Beschreibung zum Aufbau und den Schnittstellen der Software existiert.
- Angst vor Verbesserung
Bereits getroffene Architekturentscheidungen werden nicht neu bewertet, da weder die damals gültigen Rahmenbedingungen noch die aktuellen Qualitätsanforderungen bekannt sind.
- Fehlende Architekturdokumentation
Das Agile Manifest bewertet funktionierende Software höher als eine umfangreiche Dokumentation. Bedauerlicherweise wird dieses oft so interpretiert, dass eine Beschreibung der aktuellen Architektur als wertlos erachtet und diese daher nicht erstellt wird. Die Folge sind Mängel in der Nachvollziehbarkeit der getroffenen Entscheidungen sowie der Konsistenz der aktuellen Architektur.
Um diesen Gefahren vorzubeugen, haben sich in agilen Entwicklungsteams Praktiken und Artefakte entwickelt.
- Constraints im Product Backlog
- Architecture Round Table
- Codenahe Dokumentation
- Cookbooks
Ergänzend zu den in der Architekturdokumentation beschriebenen, zugrunde liegenden Konzepten und Mustern helfen konkrete Beispiele, die Konsistenz innerhalb der entwickelten Software zu wahren. Neue Mitarbeiter erfahren durch diese Cookbooks in kürzester Zeit, wie neue Anforderungen in der bereits existierenden Struktur umgesetzt und integriert werden können.
- Technical Debt Backlog
Trotz gewissenhafter Analyse und umfänglich abgestimmter Architekturentscheidungen lässt sich im Laufe der Entwicklung die Entstehung von Technischen Schulden nicht vermeiden. Sich ändernde Rahmenbedingungen ebenso wie die technologische Weiterentwicklung führen mit der Zeit zu Problemen, die sowohl die Softwarequalität als auch die Umsetzungsgeschwindigkeit beeinträchtigen können. Die notwendigen Verbesserungen müssen zusammen mit den damit verbundenen Aufwände und Auswirkungen in einem Technical Backlog transparent gemacht werden.
Mehr zum Einsatz dieser Methoden, wie sie in den Scrum-Prozess integriert werden und welche Werkzeuge hilfreich sind, erfahren Sie in meinem Vortrag “Kollaborative Software Architektur in Agilen Teams” auf dem Frankfurter Entwicklertag am 10. März 2016.
Kommentare