Technische Schulden sind die Kosten für zusätzliche Arbeit, die dadurch entsteht, dass man sich für die schnellste Lösung statt für die effektivste Lösung entscheidet. Es gibt zwar Situationen, in denen technische Schulden in Kauf genommen werden können; Ihr Team sollte jedoch die Vor- und Nachteile übereilter Entscheidungen kennen und wissen, wie es Nachbesserungen möglichst effektiv vornehmen kann. In diesem Artikel erklären wir Ihnen, was technische Schulden sind, zeigen Ihnen, wie Sie diese vermeiden können und erklären Ihnen, wie Sie Ihre Entscheidungsfindung verbessern können.
Die Arbeit als Softwareentwickler erfordert oft schnelle Entscheidungen über bestimmte Funktionen. Wenn Sie schon einmal in einem DevOps-Team gearbeitet haben, wissen Sie, wie viele Entscheidungen erforderlich sind, bevor neue Funktionen live geschaltet werden können.
Der Begriff „Technischen Schulden“ beschreibt das Ergebnis von Entscheidungen, die vor allem unter Berücksichtigung zeitlicher Vorteile getroffen werden. Diese schnellen Echtzeit-Entscheidungen sind entscheidend für den Erfolg oder Misserfolg neuer Software-Features. Es sollte jedoch ein Gleichgewicht zwischen guten und schnellen Entscheidungen bestehen. Technische Schulden können entweder negative Folgen mit sich bringen oder sich durchaus lohnen – je nachdem, wofür Sie und Ihr Team sich entscheiden.
In diesem Artikel erläutern wir, was technische Schulden sind, wie Sie im Entwicklungsprozess effektiv schnelle Entscheidungen treffen können, und geben Ihnen anhand von Beispielen ein besseres Verständnis dafür, wie Sie künftig Fehlentscheidungen vermeiden können.
Technische Schulden sind die Kosten für zusätzliche Nachbesserungen infolge der Entscheidung für eine schnelle statt einer effektiven Lösung. Der englische Begriff „Technical Debt“ wurde ursprünglich 1992 von dem Softwareentwickler Ward Cunningham geprägt, hat sich aber seither weiterentwickelt.
Technische Schulden, im Englischen auch bekannt als „Tech Debt“ oder „Code Debt“, entstehen heute in der Regel dann, wenn Entwicklungsteams bei der Erstellung neuer Funktionen eines Softwareprodukts schnell viel Code schreiben müssen. Dies kann erforderlich sein, um Termine einzuhalten, und das Eingehen der dadurch entstehenden „Schulden“ kann sich rentieren, muss es aber nicht. Diese können auch negative Folgen haben, wenn falsch mit ihnen umgegangen wird. Die negativen Folgen sind nicht immer vermeidbar, wenn die Entscheidung für technische Schulden erst einmal gefallen ist.
Unabhängig davon, ob Sie durch technische Schulden Vor- oder Nachteile erfahren, gehen wir auf die wichtigsten Fakten zu technischen Schulden ein, damit Sie die richtigen Entscheidungen treffen können.
Agile Teams mit Asana managenÄhnlich wie bei finanziellen Schulden kann man auch mit technischen Schulden entweder gut oder schlecht umgehen.
Manchmal sind technische Schulden einkalkuliert, um Fristen einzuhalten und qualitativ hochwertigen Code innerhalb kurzer Zeit zu liefern. Technische Schulden können aber auch das Ergebnis eines nicht vermeidbaren Fehlers sein, der bei der Veröffentlichung eines Software-Updates gemacht wurde.
Lesenswert: Releasemanagement: 5 Schritte für einen erfolgreichen AblaufEs gibt vier verschiedene Ursachen für technische Schulden, die von Martin Fowler als Quadranten der technischen Schulden bezeichnet wurden. Hierzu gehören „rücksichtslos“, „umsichtig“, „bewusst“ und „versehentlich“.
Durch die Zuordnung technischer Schulden in diese Quadranten lassen sich Absicht und Hintergrund von Problemen im Code besser einschätzen. Während einige Code-Schulden absichtlich sein können und als gute Schulden eingestuft werden, können andere versehentlich sein und als schlechte Schulden kategorisiert werden.
Umsichtig und bewusst: Die Entscheidung, schnell zu liefern und sich später mit den Folgen dieser Entscheidung zu befassen, führt zu umsichtigen und absichtlichen Schulden. Diese Art der Schulden wird am häufigsten verwendet, wenn der Umfang des Produkts relativ gering ist und die Vorteile einer schnellen Lieferung das Risiko übertreffen.
Rücksichtslos und bewusst: Wenn man zwar über die Mittel zur Erstellung des optimalen Codes verfügt, aber der schnellen Lieferung den Vorrang gibt, produziert das rücksichtslose und absichtliche Schulden.
Umsichtige und versehentliche Schulden: Umsichtige und versehentliche Schulden entstehen, wenn man den besten Code produzieren will, aber nach der Implementierung eine bessere Lösung findet.
Rücksichtslos und versehentlich: Rücksichtslose und versehentliche Schulden treten auf, wenn ein Team versucht, den besten Code zu produzieren, ohne über das dafür erforderliche Wissen zu verfügen. Das Team ist sich seiner Fehler oft gar nicht bewusst.
Teams entscheiden sich für bewusste technische Schulden, um eine rasche Fertigstellung zu erreichen. Versehentliche Schulden hingegen sind zufällig – sie entstehen nach der Implementierung. Dieser Unterschied lässt sich am besten mit den Worten des Softwareingenieurs Steve McConnell beschreiben, der die beiden allgemeinen Arten von technischen Schulden beschreibt. Schauen wir uns diese beiden Arten etwas genauer an.
Laut Steve McConnell, Chief Software Engineer bei Construx Software, gibt es zwei Arten von technischen Schulden:
Absichtlich
Unabsichtlich
Absichtliche Schulden treten auf, wenn ein Unternehmen die bewusste Entscheidung trifft, die für den Augenblick praktischste Vorgehensweise zu verfolgen und die Entscheidung nicht mit Weitblick für die Zukunft zu treffen.
Es gibt sowohl kurzfristige als auch langfristige absichtliche Schulden. Absichtliche Schulden, die zur Tilgung früherer Schulden entstanden sind, sind beispielsweise kurzfristige Schulden. Absichtliche Schulden, die entstanden sind, um größere künftige Schulden zu vermeiden, sind dagegen langfristige Schulden.
Kurzfristige Schulden: Kurzfristige Schulden werden reaktiv und aus taktischen Gründen aufgenommen, etwa um vorhandene Ressourcen zu nutzen. Außerdem können kurzfristige Schulden zielgerichtet oder nicht zielgerichtet sein.
Zielgerichtete kurzfristige Schulden: Dazu gehören individuell identifizierbare kurzfristige Prozessverkürzungen.
Nicht zielgerichtete kurzfristige Schulden: Dazu gehören zahlreiche kleine Prozessverkürzungen.
Langfristige Schulden: Langfristige Schulden werden proaktiv aus strategischen Gründen aufgenommen, etwa um eine Frist einzuhalten.
Wie Sie sehen, hängt es von der Art der entstandenen Schulden ab, wie lange die Begleichung der Schulden dauern wird.
Unabsichtliche technische Schulden entstehen durch mangelndes Verständnis, versehentliche Handlungen oder – in einigen Fällen – durch schlecht geschriebenen Code. Ein Beispiel für unabsichtliche technische Schulden wäre ein Designansatz, der sich als fehleranfällig erweist. Dies ist das nicht-strategische Ergebnis eines unvermeidbaren Fehlers.
Unabsichtliche technische Schulden sind, wie der Name bereits vermuten lässt, in der Regel unbeabsichtigt. In den meisten Fällen wird der Fehler erst nach der Implementierung des Software-Updates oder dem Abschluss des Projekts bemerkt.
Auch wenn Sie absichtlich technische Schulden eingehen, fällt es vielen Produktteams schwer, diese zu verfolgen und zu kommunizieren. Dies kann zu mehr Arbeit führen als erwartet, wenn es darum geht, die Lücken im Softwarecode zu schließen.
Es gibt im Wesentlichen zwei Möglichkeiten, mit technischen Schulden umzugehen und mehr Transparenz am Arbeitsplatz über die Schuldenlast zu schaffen.
Führen Sie eine Schuldenliste in einem Nachverfolgungstool: Geben Sie jedes Mal, wenn Sie Schulden aufnehmen, die Aufgaben, die zur Tilgung dieser Schulden erforderlich sind, zusammen mit einem geschätzten Aufwand und Zeitplan in Ihr Tracking-System ein. Verwenden Sie diese Schuldenliste, um Ihre technischen Schulden zu verfolgen. Alle offenen Schulden, die älter als 90 Tage sind, sollten als kritisch betrachtet werden.
Führen Sie eine Schuldenliste als Teil eines Scrum-Produkt-Backlogs: Behandeln Sie jede Schuld als eine Scrum-Userstory und schätzen Sie den Aufwand und den Zeitplan für die Tilgung jeder Schuld – so wie Sie andere Stories in Scrum innerhalb eines Produkt-Backlogs schätzen.
Beide Methoden können Ihnen helfen, die technischen Schulden effektiv zu verfolgen und sie so schnell und effizient wie möglich wieder zu begleichen. Ähnlich wie bei der Abzahlung einer Kreditkarte können Sie bei beiden Ansätzen die Schulden in kleinen Schritten begleichen, bis die Gesamtsumme beglichen ist.
Lesenswert: Effizienz vs. Effektivität: Warum Ihr Team beides benötigtNachdem Sie nun ein Verständnis für den Umgang mit technischen Schulden und wir Ihnen einige der Ursachen für unabsichtliche und absichtliche Schulden nähergebracht haben, lassen Sie uns einige Beispiele aus der Praxis betrachten.
Beschreibung: Das Team wählt ein Framework, das schnell aufgebaut werden kann und über bekannte Leistungsprobleme sowie einen geringen Funktionsumfang verfügt.
Lösung: Das Team nutzt zusätzliche Anwendungen für die nachträgliche Softwareimplementierung, die den fehlenden Funktionsumfang ausgleichen.
Schulden: Obwohl die Frist zur Lieferung des Produkts eingehalten wurde, muss das Team die Funktionen nach der Markteinführung überarbeiten und benötigt dafür zusätzliche Mittel.
Beschreibung: Das Team besteht aus vielen unerfahrenen Entwicklern, die dabei helfen, eine neue Softwarefunktion innerhalb eines knappen Zeitrahmens auf den Markt zu bringen. Es gibt jedoch nicht genügend erfahrene Entwickler, die jeden Teil des Codes überprüfen können.
Lösung: Das Team stellt vorübergehend zusätzliche Unterstützung durch erfahrene Entwickler zur Verfügung, um den Code zu überprüfen und die ordnungsgemäße Funktionalität sicherzustellen.
Schulden: Das Team hat zwar die meisten Probleme erkannt, aber durch die Fehlkommunikation zwischen Vollzeitmitarbeitern und Aushilfskräften wurden einige Fehler im Code übersehen. Das Team wird diese Probleme nach der Einführung beheben müssen.
Wie Sie sehen, sind absichtliche und unabsichtliche Schulden zwar unterschiedlich, müssen aber beide im Laufe der Zeit beglichen werden. Wenn Sie durch Brainstorming eine Lösung für technische Schulden finden, können Sie sicherstellen, dass Ihre Software-Updates pünktlich und mit wenig Schulden auf den Markt kommen.
Bei der Einführung eines Softwareprodukts lassen sich technische Schulden nicht immer vermeiden. Von schwierigen Entscheidungen bis hin zu Fehlern im Code wissen Agile-Teams, wie sich die Menge der angehäuften technischen Schulden auf Software-Updates auswirken kann.
Der Schlüssel zur Begleichung von technischen Schulden liegt in der kontinuierlichen „Rückzahlung“ der Schulden. Auch wenn die Art der Schuldentilgung in jedem Szenario anders ist, können Transparenz und Kommunikation im Team dazu beitragen, dass die Schulden schneller beglichen werden. Dies liegt daran, dass mehr Klarheit bei agilen Projekten zu einer gemeinsamen Lösung für das jeweilige Problem führen kann.
Agile Teams mit Asana managen