Codequalität: "Funktioniert" ist nicht genug

Technische Schulden

Leider gibt es ein Problem, dass sich wohl am besten mit der von Ward Cunningham geprägten Metapher der „technischen Schulden“ („technical debt“ [1]) beschreiben lässt: Wenn wir anfangen, mehr Produktivität auszugeben, als uns aufgrund unserer Fähigkeiten und der Komplexität des zu lösenden Problems zur Verfügung steht, häufen wir technische Schulden an. Technische Schulden haben viele Gesichter: Fehlendes Softwaredesign, unzureichende Test- oder Projektautomatisierung, unsauberer Code oder unbeabsichtigte Komplexität sind häufig anzutreffende Facetten. Gemein ist allen Formen technischer Schulden, dass sie zu einem Verschleiß der Software führen. Dieser Verschleiß wiederum erschwert die Weiterentwicklung und erhöht das Risiko von Regressionsfehlern. Dadurch werden Zinsen fällig (Kasten: „Zinsen auf technische Schulden“), die Nettoproduktivität sinkt. Tilgen wir nicht durch geeignete Maßnahmen, kommt es im schlimmsten Fall zur Überschuldung. Erweiterungen an der Software werden unbezahlbar, Projekte müssen abgebrochen, bestehende Softwaresysteme ohne funktionalen Mehrwert abgelöst werden. Hier schließt sich der Kreis: Der auf den ersten Blick rationale Versuch, durch unbedingte Beschleunigung schneller ans Ziel zu kommen, führt auf der kurvigen Strecke eines Softwareentwicklungsprojekts bisweilen in den Straßengraben.

Zinsen auf technische Schulden

Exemplarisch möchte ich einige häufig anzutreffende „Zinsarten“ und die ihnen zugrundeliegenden Formen technischer Schulden erwähnen:

  • Regressionsfehler, die erst außerhalb der Entwicklung festgestellt werden, deuten auf mangelnde Automatisierung funktionaler Tests hin.
  • Stark überschrittene Aufwandsschätzungen insbesondere bei weniger komplexen Arbeitspaketen deuten auf unsauberen oder schlecht faktorierten Code oder unklares Design hin.
  • Lange Debugging-Sessions in Kombination mit schwer lokalisier- und nachstellbaren Fehlerfällen sind ein Zeichen für geringe Unit-Test-Abdeckung.
Das Ziel

Im Umkehrschluss kann aber ein bewusster Umgang mit technischer Qualität erhebliche Vorteile bieten. Für den Projektverantwortlichen bedeutet nachhaltig entwickelte Software:

  • Aufwandsschätzungen werden präziser, wenn keine versteckten Risiken in der Software selbst liegen.
  • Die Produktivität bleibt über alle Phasen des Projekts konstant, wenn Entwickler nicht von Altlasten ausgebremst werden.
  • Das Softwaresystem wird gegenüber Änderungen flexibel, wenn das Design sorgfältig durchdacht und kontinuierlich gepflegt wird.
  • Neue Projektmitarbeiter können einfacher eingearbeitet werden, wenn der Code sauber und lesbar ist.
  • Nachbesserungen und Regressionsfehler sowie die damit verbundenen Planungsunsicherheiten können vermieden werden, wenn Abnahmekriterien konsequent automatisiert getestet werden.
  • Technische Schulden und die damit kurzfristig realisierbaren Produktivitätsschübe werden zu einem gezielt taktisch einsetzbaren Instrument, wenn die „Qualitätsbilanz“ des Projekts für alle sichtbar ist.

Ähnlich Vorteile ergeben sich für Kunden oder Produktverantwortliche:

  • Die bessere Wartbarkeit sauber hergestellter Software wirkt sich positiv auf Gesamtkosten und Lebensdauer aus.
  • Wenn Änderungen sich mit besser vorhersehbarem und geringerem Aufwand realisieren lassen, können Geschäftschancen besser genutzt werden.

Hinzu kommt der menschliche Aspekt. Beobachtet man Teams, die über lange Zeit an Software mit schlechter interner Qualität arbeiten, stellt man fast immer entweder einen hohen Stresspegel oder sehr geringe Motivation fest. So genannter „Legacy Code“, also Software, in der hohe technische Schulden angesammelt sind oder die sich bereits im Zustand der Überschuldung befindet, stellt eine erhebliche Belastung für die Entwickler dar: Nachbesserungen, Debugging und gefühlt mangelhafte Produktivität sind an der Tagesordnung. Gleichzeitig lässt ein Softwaresystem ab einem bestimmten Verfallsgrad auf den ersten Blick kaum noch kosteneffiziente Verbesserungen zu. Für den Entwickler entsteht ein Teufelskreis, in dem er durch schlechte interne Qualität gezwungen ist, mehr technische Schulden anzuhäufen, um überhaupt noch produktiv zu sein. Wenn dieser Teufelskreis unterbrochen wird, kann man praktisch immer einen deutlichen Anstieg der Mitarbeitermotivation mit allen damit verbundenen Vorteilen beobachten.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.