Technische Schulden: praktische Tipps zum richtigen Umgang - messen, verwalten und abbauen
Anmerkung des Editors: Es gibt verschiedene Ursachen, warum technische Schulden entstehen. Unabhängig davon, ob sie bewusst oder unbewusst aufgenommen werden, besteht die Hauptaufgabe eines Entwicklungsteams darin, größere Anhäufungen von technischen Schulden zu vermeiden und deren negative Folgen möglichst gering zu halten. In unserem neuen Blogbeitrag erfahren Sie, wie Sie das tun können. Wenn Sie sich aber im Klaren sind, dass Sie die Kontrolle verloren haben und die Qualität Ihrer Software darunter immer leidet, können Sie die Experten in der Softwareberatung von ScienceSoft kontaktieren, um die entsprechende Hilfe zu erhalten.
Seit mehr als 31 Jahren haben wir zahlreiche Projekte in der individuellen Softwareentwicklung erfolgreich umgesetzt. Während der Projektabwicklung haben wir gelernt, dass jede technische Schuld (in Englisch “tech debt”) von Anfang an erstgenommen werden muss. Aus diesem Grund haben wir unsere Kunden auch dabei unterstützt, eine Reihe von Projekten mit technischen Schulden wiederherzustellen, um Auswirkungen solcher Schulden maximal zu minimieren.
In diesem Artikel werde ich einige wichtige Aspekte rund um technische Schulden behandeln, um Ihnen zu helfen, richtig damit umzugehen.
Technische Schuld: was steckt dahinter?
Dieser Begriff beschreibt alle Konsequenzen, die sich aufgrund schlecht geschriebener Software und Kompromisse hinsichtlich der Codequalität beim Entwicklungsprozess ergeben. Je länger technische Schulden nicht beseitigt werden, desto größer sind Auswirkungen auf Weiterentwicklung, Wartung und Betrieb, was mit zusätzlichen Aufwänden verbunden ist.
Technische Schulden: welche Arten gibt’s?
Wir unterscheiden 3 verschiedene Arten von technischen Schulden:
- Schlecht geschriebener Code vs. schnellere Auslieferung
Teams treffen absichtlich und bewusst eine Entscheidung, eine einfachere und nicht perfekte Lösung schneller auf den Markt zu bringen und die Begleichung von technischen Schulden auf später zu verschieben. Das kann eingeplant sein, wenn man eine Marktchance nutzen will, um seinem Wettbewerb einen Schritt voraus zu sein. Aber hier entsteht eine Gefahr, dass die Situation irgendwann außer Kontrolle gerät. Aus meiner Erfahrung kann ich von solcher Strategie nur abraten. Werden die erforderlichen Maßnahmen für die Beseitigung von Code-Schulden aufgeschoben, kann das die Softwareentwicklung nicht beschleunigen, sondern verlangsamen. Wenn diese Schulden nicht rechtzeitig zurückgezahlt werden, steigen die Kosten der Softwareentwicklung enorm.
Tipp von ScienceSoft: Als eine vernünftige Alternative würde ich empfehlen, bei der Entwicklung Ihres Produktes die MVP-Strategie zu verwenden, die es ermöglicht, ein hochwertiges Produkt mit weniger Funktionen zu entwickeln und schneller auf den Markt zu bringen. Um sich verändernde Anforderungen sowie die Marktsituation zu untersuchen und Funktionen richtig zu priorisieren, empfehlen wir auch einen Business Analysten ins Projekt einzubeziehen.
- Die erforderliche Modernisierung von Altsystemen wird verschoben
Obwohl Legacy-Systeme (häufig sind das unternehmenskritische Anwendungen wie CRM oder ERP) die IT-Landschaft eines Unternehmens belasten, wird die Modernisierung verschoben, weil sie mit bestimmten Risiken in enger Zusammenhang steht. Dadurch entsteht eine kontinuierlich zunehmende Anzahl von technischen Schulden.
Tipp von ScienceSoft: Unseren hochqualifizierten Experten ist es klar, dass die Modernisierung nötiges Fachwissen und Zeit erfordert. Da interne Ressourcen oft einfach überlastet sind, empfehlen wir, sich an einen professionellen Anbieter zu wenden, der praxisbezogene Erfahrung in den Modernisierungsprojekten hat und in der Lage ist, technische Schulden auf der Code-Ebene schneller und effizienter zu beseitigen. Unser Softwarehaus verfügt auch über notwendiges Know-how, um Ihre alten Systeme und Apps zu modernisieren.
- Unvermeidliche Fehler, die über den gesamten Entwicklungsprozess behoben werden müssen
Leider ist keine Software fehlerfrei. Fehler können aus vielseitigen Gründen entstehen. Das ist kein großes Problem, wenn diese Fehler rechtzeitig verwaltet werden und der Trend im Allgemeinen positiv ist. Die Aufgabe eines Entwicklungsteams besteht darin, technische Schulden so niedrig wie möglich zu halten, um langfristige negative Auswirkungen zu vermeiden.
Wie kann man technische Schulden effektiv verwalten?
Unsere Projektmanager und technischen Leiter ergreifen Maßnahmen, die es möglich machen, technische Schulden zu reduzieren und zu messen, um sicherzustellen, dass das Projekt ordnungsgemäß verläuft. Dann schaffen wir ein produktives Arbeitsumfeld, um technische Schulden abzubauen.
Unser Ansatz zum Management von technischen Schulden basiert auf den folgenden Prinzipien:
- Wichtigkeit. Mit technischen Schulden gehen wir gleich wie mit anderen Entwicklungsaufgaben um: als Teil unseres Projekt-Roadmaps werden Details rund um technischen Schulden (zufällig entdeckte oder schon bekannte) besprochen und notwendige Ressourcen zugewiesen, um Probleme rechtszeitig zu lösen und eine Anhäufung von technischen Schulden zu verhindern.
- Sichtbarkeit. Bei der Beseitigung technischer Schulden erstellen wir keinen separaten Issues Tracker, sondern pflegen sie in demselben Backlog, wo die neuen Funktionen gepflegt werden. Das hilft uns, jede einzelne technische Schuld immer unter Kontrolle zu halten.
- Schritt-für-Schritt-Ansatz. Das ist kein guter Weg, technische Schulden tagsüber oder wochenlang zu beseitigen und alle anderen Aufgaben dabei beiseitezulegen. Wir bevorzugen, den Beseitigungsprozess in den gesamten Entwicklungsprozess einzubinden und damit technische Schulden Stück für Stück zu beseitigen. Diese gute Gewohnheit hilft unserem Team, die Überforderungen zu vermeiden.
Wie kann man technische Schulden richtig messen?
Um technische Schulden effizient zu verwalten, muss Ihr Team erst diese messen. Die Projektmanager und technischen Leiter von ScienceSoft verwenden zahlreiche sowohl projektorientierte als auch produktorientierte Metriken, die es ermöglichen, die Transparenz auf verschiedenen Ebenen zu schaffen und den Entwicklungsprozess effizienter zu steuern. Wenn wir auf unsere Frage hinsichtlich der Messung technischer Schulden zurückkommen, empfehle ich die folgenden Indikatoren in Betracht zu ziehen, um den Zustand der zu entwickelnden Software bewertbar zu machen:
- Geschwindigkeit (Velocity) des Entwicklungsteams. Diese Metrik hilft die Produktivität des Teams bestimmen, indem sie zeigt, wie viele Aufgaben das Team normalerweise pro Iteration erledigen kann. Falls die Geschwindigkeit (sprich die Produktivität) sinkt, kann das darauf hinweisen, dass es viele unbezahlte technische Schulden gibt. Dadurch entsteht ein Engpass im Entwicklungsprozess. Werden Probleme rechtzeitig aufgedeckt und behoben, hilft das technische Schulden zu reduzieren.
- Benutzerzufriedenheit während der MVP-Entwicklung. Wenn die Benutzerzufriedenheit sinkt, obwohl die früheren Versionen von Software positiv bewertet wurden, ist es auch ein Zeichen, dass die schlechte interne Codequalität (diese ist sichtbar nur für Entwickler) auch die externe Qualität (diese ist schon für Benutzer sichtbar) beeinträchtigt. Es ist höchste Zeit, in den nächsten Iterationen der Ermittlung und Beseitigung technischer Schulden mehr Raum zu geben.
- Anzahl und Schwergrad von Fehlern. Das ist eine grundlegende Metrik, die wir bei der Messung technischer Schulden verwenden. Erst setzen wir je nach Schwergerad Prioritäten, welche Fehler in der nächsten Iteration behoben werden müssen. Dann stellen wir die Anzahl von Fehlern fest, die pro agile Iteration nicht behoben wurden. Das hilft uns, Aktivitäten zur Fehlerbehebung für die nächste Iteration zu planen und technische Schulden effizienter zu verwalten.
- Code-Komplexität und -größe. Aus meiner Erfahrung heraus rate ich, der Code-Komplexität von Anfang an mehr Aufmerksamkeit zu widmen. Die Fehleranfälligkeit eines Produktes steht in einem engen Zusammenhang mit seiner Komplexität und Größe. Die Komplexität hat auch einen direkten Einfluss auf Software-Performance, ihre Wartbarkeit und Testbarkeit sowie Kosten. Um technische Schulden aufgrund der Code-Komplexität zu verhindern, setzen wir die folgenden Metriken ein:
Zyklomatische Komplexität, Tiefe der Vererbung, Kopplung zwischen Klassen und die Anzahl von Code-Zeilen helfen zu identifizieren, wie komplex der Code aufgebaut ist. Der Wartbarkeitsindex wird auf der Basis von Metriken für die Komplexität berechnet und quantifiziert, wie gut (oder schlecht) wartbar Codeteile sind und wie aufwändig es ist, die Software zukünftig weiterzuentwickeln.
Wie kann man technische Schulden abbauen?
Während das Management von technischen Schulden und die Messung der wichtigsten Metriken helfen, bestehende technische Schulden zu bewältigen, zielt die Optimierung des Entwicklungsprozesses darauf, diese abzubauen. Es gibt unterschiedliche Möglichkeiten, technische Schulden zu reduzieren. Die Projektmanager von ScienceSoft führen die folgenden Aktivitäten durch, um den Entwicklungsprozess zu optimieren.
- Eine flexible und skalierbare Architektur wählen
Ich betone immer wieder, wie es wichtig ist, eine richtige Architektur auszuwählen. Wenn die Architektur nicht genug flexibel und skalierbar ist, auf geänderte Anforderungen zu reagieren, oder das Refactoring immer erfordert, müssen Sie zunehmende Kosten in Kauf nehmen, die Sie für technische Schulden zurückzahlen müssen. Eine flexible und skalierbare Architektur wie Microservices-/Container-basierte Architektur ermöglicht es, zu Beginn einer agilen Iteration die Entwicklung neuer Funktionen zu planen, die Software ständig zu erweitern und an die zunehmende Last (das kann beispielsweise durch die steigende Anzahl von Benutzern oder die Vernetzung von Softwareanwendungen untereinander geschehen) anzupassen.
- Die Code-Review zur Routineaufgabe machen
Ich habe in verschiedenen Entwicklungsteams beobachtet, dass systematisch durchgeführte Code-Reviews helfen, die Codequalität erheblich zu verbessern und folglich technische Schulden zu reduzieren. Aber das funktioniert nur dann, wenn dieser Prozess bequem organisiert ist und die Entwickler nicht belastet sind.
Tipp von ScienceSoft: Ich habe einige praxisbasierte Empfehlungen dazu. Erstens ist es viel einfacher, Pull-Requests in kleinere Anfragen aufzuteilen und jeder Anfrage eine selbsterklärende Überschrift und eine kurze Beschreibung hinzuzufügen. Zweitens finde ich es hilfreich, von Anfang an einen Leitfaden mit gemeinsam vereinbarten Regeln und Praktiken für die Codierung zu erstellen, um den Quelltext in ein einheitliches Format zu bringen, einen saubereren Code zu erzielen und unendliche Debatten über die Codeformatierung zu verhindern. Es ist viel sinnvoller, sich auf die Code-Überprüfung zu konzentrieren.
- Tests automatisieren (für langfristige Projekte)
Den Testexperten von ScienceSoft ist es bewusst, dass mangelnde automatisierte Tests einer der Gründe für technische Schulden sein können. Wir halten automatisierte Tests für wertvolles Werkzeug und setzen diese ein, um technische Schulden in langfristigen Projekten zu reduzieren. Obwohl es uns Mühe kostet, automatisierte Tests erst einzurichten und dann zu warten, helfen sie uns, im Vergleich zu manuellen Tests Probleme schneller und genauer aufzudecken.
- Änderungen dokumentieren
Die kontinuierliche Aufzeichnung von Änderungen in einem gemeinsam genutzten Repository hilft uns, die Quelle von aufgetretenen Problemen einfach zurückzuverfolgen. Meiner Meinung nach ist es eine besonders wichtige Vorgehensweise bei der Software-Migration in eine neue Umgebung oder bei der Modernisierung veralteter Software, um negative Auswirkungen auf andere Komponenten des Systems zu vermeiden.
Lassen Sie keine Chance technischen Schulden!
Obwohl technische Schulden oder Code-Schulden in Softwareprojekten unvermeidlich sind, können angemessene Gegenmaßnahmen – Einsatz von passenden Metriken zur Messung, effektives Management, Optimierung des Entwicklungsprozesses, regelmäßige Durchführung von Code-Reviews und andere – potenzielle Schäden minimieren. Ich empfehle, technische Schulden als einen wichtigen Teil des Projekts ernst zu nehmen und in den Entwicklungsprozess von Anfang an zu integrieren. Wenn Sie denken, dass Sie Hilfe bei Erkennung, Management und Minderung bestehender Probleme und Risiken benötigen, schreiben Sie uns, um sich von unseren Experten beraten zu lassen.