Wie man technische Schulden bewertet, verwaltet und vermeidet
Veröffentlicht: 2020-05-26Wenn technische Schulden wie etwas aus einem Finanzhandbuch klingen, liegt das daran, dass der Begriff mit Finanzen zusammenhängt. Technische Schulden im eigentlichen Sinne hängen jedoch mit der Programmierung zusammen. Es ist die Idee, dass während der Entwicklung eines Softwareprojekts bestimmte notwendige Schritte übersprungen oder ganz weggelassen werden, um eine Frist einzuhalten.
Bei dem Versuch, die perfekte App oder Software zu entwickeln, haben Entwickler oft wenig Zeit – genau wie jede beliebige Person, die ohnehin eine beliebige Aufgabe ausführt. Daher ist es normalerweise sinnvoll, einen Kompromiss zwischen der Bereitstellung eines perfekten Produkts mit perfektem Code und der Maximierung der Zeit einzugehen.
Die Frage ist dann: Gibt es eine Grenze für diese Kompromisse? Gibt es inhärente Schäden, die sich aus diesem Kompromiss ergeben könnten? Ist der Entwickler auf Dauer wirklich besser dran? In diesem Artikel über technische Schulden werde ich versuchen, all diese Fragen zu beantworten.
Was sind technische Schulden?
Bei der Definition technischer Schulden müssen wir uns auf den Mann beziehen, dem zugeschrieben wird, dass er den Begriff überhaupt erfunden hat: Ward Cunningham. Als technische Schulden bezeichnet Cunningham die zusätzliche Entwicklungsarbeit, die in die Programmierung eines Codes gesteckt werden muss, um das Defizit, das durch die Programmierung entsteht, innerhalb kurzer Zeit auszugleichen.
Um es anschaulicher zu machen, stellen Sie sich vor, Sie hätten die Aufgabe, ein unordentliches Zimmer aufzuräumen, und Sie kommen zu spät zum Unterricht. Um sicherzustellen, dass Sie die Anweisungen ausführen und pünktlich zum Unterricht erscheinen, machen Sie eine schnelle Reinigung und fegen den größten Teil des Schmutzes unter die Couch. Die Folge davon ist, dass Sie sich schließlich die Zeit nehmen müssen, das Durcheinander zu sortieren. Wenn Sie bei der Softwareentwicklung die erforderlichen Schritte überspringen und einem einfacheren Weg mit „nicht so sauberen“ Codes folgen, wird es später in der Zukunft schwieriger, den Code zu bereinigen. In den Softwareprojekt-Dominos treten mehrere Phasen auf, und je länger Sie ein vorhandenes Problem ignorieren, desto länger dauert es, bis es gelöst ist.
Arten von technischen Schulden
Technische Schulden sind unterschiedlicher Art, darunter:
Geplante technische Schulden
Dies tritt in Situationen auf, in denen Unternehmen sich bewusst dafür entscheiden, technische Schulden einzugehen. Wie bereits erwähnt, dient dies normalerweise dazu, festgelegte Fristen zu übertreffen und ein bestimmtes Ziel zu erreichen. Beim Eingehen geplanter technischer Schulden muss sich die Organisation darüber im Klaren sein, was sie bereit ist aufzugeben und was nicht. Sie müssen genaue Aufzeichnungen führen und bedenken, dass Sie eventuell die Fehler, die Sie am Anfang übersprungen haben, zurückgeben und korrigieren müssen.
Unbeabsichtigte technische Schulden
Diese Art der technischen Schuld ist das direkte Gegenteil der ersten. Es entsteht, wenn eine Organisation technische Schulden nicht vorhersieht oder plant. Der Grund dafür ist typischerweise ein Zusammenbruch der Kommunikation zwischen den verschiedenen Einheiten in der Organisation oder lausige Arbeitspraktiken zwischen den Einheiten.
Unvermeidbare technische Schulden
Dies ist die Art von technischer Schuld, die keine Aktion seitens der Organisation hätte verhindern können. Angesichts der schnellen Veränderungen in der Technologie ist es beispielsweise sinnvoll, dass einige in der Vergangenheit geschriebene Codes hinter den aktuellen prognostizierten Standards zurückbleiben.
Diese Art von technischer Schuld kann auch entstehen, wenn Änderungen angefordert werden, während der Code bereits geschrieben wird. Wenn mitten im Design der Software bestimmte Änderungen vorgenommen werden, könnte dies die Dynamik durcheinander bringen und den alten Code obsolet oder unnötig machen.
Ursachen der technischen Schuld
Einige der Gründe für technische Schulden wurden oben diskutiert, aber ich werde sie nur nacheinander herausgreifen, um sie klarer zu machen.
Eile
Die häufigste Ursache für technische Schulden ist Eile. Entwickler haben oft strenge Fristen, von denen einige Fristen für die Einführung bestimmter Software beinhalten. In solchen Situationen ist es oft verständlich (und zu erwarten), dass der Entwickler auf diesem Weg technische Schulden macht. Diese Art von technischer Schuld ist oft beabsichtigt und kann zu Problemen führen, die von Fehlern im Code bis hin zum Auftreten von Spaghetti-Codes reichen können.
Versehen/Fehler
Manchmal schreiben Programmierer einfach nur schlechten Code, der schließlich zu technischen Schulden führt. Unabhängig davon, ob der schlechte Code durch den Fehler des Programmierers entstanden ist oder nicht, Fakt ist, dass Fehler zu technischen Schulden führen und, da sie nicht skalierbar sind, irgendwann behoben werden müssen.
Mangelndes Bewusstsein für die Auswirkungen
Manchmal entstehen technische Schulden, weil der Programmierer nicht erkennt oder anerkennt, wie schädlich technische Schulden auf lange Sicht sind. Dies kann auf eine legitime Unkenntnis der schädlichen Auswirkungen von Abkürzungen während des Programmierens zurückzuführen sein, oder es könnte sich um eine vorsätzliche Missachtung der Folgen handeln.
Absicht
Technische Schulden können absichtlich durch absichtliche Handlungen des Programmierers oder der Organisation entstehen.
Mangelnde Modularität
Dies liegt vor allem daran, dass ein Code gleichzeitig verschiedene Geschäftslogiken bedienen kann. Diese Art von Situation macht den Umgang mit Software viel schwieriger. Mit jedem Code, den ein Entwickler schreibt, steigt die Wahrscheinlichkeit, dass er Herausforderungen in Bezug auf Modularität begegnet.
Bewertung der technischen Schuld
Technische Schulden sollten niemals manuell berechnet werden, da dies ziemlich mühsam wäre. Es würde bedeuten, dass Sie den Code manuell eingeben müssten, um die aktuellen und die möglichen zukünftigen Probleme zu ermitteln. Abgesehen davon, wie zeitaufwändig der manuelle Prozess ist, besteht die Möglichkeit, dass sich die Codes am Ende des manuellen Prozesses geändert haben.
Eine Möglichkeit, die Bewertung durchzuführen, besteht darin, eine statische Analyse mit einigen unterstützenden Tools durchzuführen. Zu den Tools, die verwendet werden können, gehören Coverity, SonarQube, Check Style und Closure Compiler.
Grundsätzlich gibt es zwei Möglichkeiten, technische Schulden zu berechnen. Im ersten Ansatz könnte es durch Berechnung des technischen Schuldenverhältnisses nach dem Codeverhältnis ermittelt werden. Hier würde die anfängliche Schätzung oder die Gesamtzeit, die für die Entwicklung der App benötigt wird, verwendet, um die Zeit zu bestimmen, die erforderlich ist, um die technische Schuld zu beheben.
Beim zweiten Ansatz könnten Sie direkt auf die Schätzungen der verschiedenen Tools wie SonarQube zurückgreifen. Diese wird mit den Listen der technischen Schulden sowie deren Referenzcodes kombiniert. Anhand der Tools können Sie eine genaue Schätzung der Zeitdauer erhalten, die für die Behebung des Problems erforderlich ist.
Die Bewertung der technischen Schulden gibt Ihnen ein Gefühl dafür, wie viele Tage es dauern wird, die technischen Schulden zu beheben. Je mehr Schulden vorhanden sind, desto länger dauert es, bis Sie diese beheben.
Auflösung technischer Schulden
Was ist, wenn technische Schulden aufgetreten sind und Sie nicht wissen, was Sie tun sollen? Es gibt bestimmte Schritte, die Sie unternehmen können, um die technischen Schulden zu verwalten.
Zunächst sollten Sie anerkennen, dass die technischen Schulden bestehen, und dies Ihrem Team mitteilen. Bei der Kommunikation sollten Sie sich darüber im Klaren sein, was passiert ist und was getan werden muss, um es zu korrigieren. Sie sollten sicherstellen, dass Sie die Notwendigkeit, sich um die technischen Schulden zu kümmern, so früh wie möglich klar kommunizieren.
Nachdem Sie Ihr Team über die technischen Schulden informiert haben, gibt es drei mögliche Vorgehensweisen. Im ersten Ansatz könnten Sie sich dafür entscheiden, das System so fortzusetzen, wie es ist. In diesem Szenario wird die Anwendung unverändert verwendet.
Alternativ können Sie die Anwendung umgestalten. Refactoring wird mit dem Ziel durchgeführt, die Komplexität in der App zu reduzieren und die Struktur der App zu bereinigen. Beim Refactoring wird das Verhalten der Software nicht verändert; Der einzige betroffene Teil wird die interne Struktur sein.
Wenn die beiden oben beschriebenen Optionen nicht funktionieren, müssen Sie schließlich den Code vollständig ersetzen. Ein Problem dabei ist, dass es zu neuen technischen Schulden führen könnte, aber das könnte langfristig ein besserer Kompromiss sein.
Vermeidung von technischen Schulden in der Zukunft
Natürlich ist es ein Kinderspiel, dass es definitiv klüger ist, technische Schulden zu vermeiden, als zu versuchen, sie zu beheben, wenn sie entstehen. Abgesehen davon, dass Sie Zeit und Nerven sparen, sorgt es auch dafür, dass die Restfolgen, die durch technische Schulden von Anfang an entstehen, ausbleiben.
Man könnte argumentieren, dass technische Schulden an und für sich nichts Schlechtes sind. Sie sind im Allgemeinen problematisch, weil sie Schulden sind, die zurückgezahlt werden müssen, und Menschen nicht die verantwortungsbewussteste Spezies auf der Erde sind. Die konsequente Wahl einer schwächeren Option wird im Allgemeinen die Stärke Ihrer Software schwächen und es schwieriger machen, die Funktionalitäten später zu verbessern. Alles in allem ist die Vermeidung technischer Schulden die beste Wahl für alle.
Wie vermeiden Sie also, dass technische Schulden entstehen:
Die Idee hier ist, alle über den Prozess auf dem Laufenden zu halten und sie mit den Anforderungen für jede auszuführende Aufgabe auf den neuesten Stand zu bringen. Durch das Erstellen eines Backlogs kann jeder die unerledigten Aufgaben und die Wege zu ihrer Erreichung sehen.
Wenn Sie selbst Programmierer sind, müssen Sie lernen, qualitativ hochwertige Arbeit gegenüber viel Arbeit zu priorisieren. Stellen Sie sicher, dass Ihre Codes sauber sind und Ihre Apps oder andere Software perfekt entwickelt sind. Verstehen Sie, dass die Versuchung, Abkürzungen zu nehmen, es nicht wert ist, weil Sie schließlich immer noch die Aufgaben ausführen müssen, die Sie über Bord geworfen haben.
Wenn Sie ein Team leiten, müssen Sie den Teammitgliedern dieselben Werte vermitteln. Den Mitgliedern sollte beigebracht werden, ergebnisorientierte Lösungen zu entwickeln und Abkürzungen zu meiden.
Generell kann ein fundiertes Wissen darüber, was technische Schulden sind und wie man sie vermeidet, hilfreich sein, um sie erst gar nicht entstehen zu lassen. Wenn Sie Ihre Entwickler mit dem erforderlichen Wissen ausstatten, werden sie die Fallen technischer Schulden besser vermeiden.
Einige Codierungspraktiken machen es wahrscheinlicher, dass Sie in technische Schulden geraten. Daher wäre es großartig, eine enge Kopplung zu vermeiden, Abstraktion und Refactoring einzusetzen.
Regelmäßige Technologie-Updates können ein hervorragendes Mittel sein, um technischen Schulden vorzubeugen. Bei der Aktualisierung müssen Sie sicherstellen, dass die neuesten Frameworks, Datenbanken und Anwendungssoftware verwendet werden.
Fazit
Technische Schulden sind in den allermeisten Fällen unvermeidbar, solange Sie weiterhin Programme entwickeln und Codes schreiben. Die Wahrscheinlichkeit ihres Auftretens kann jedoch stark reduziert werden, wenn die oben aufgeführten Schritte befolgt werden. Auch bei eventuellen technischen Schulden ist nicht alle Hoffnung verloren. Bleiben Sie ruhig, seien Sie zuversichtlich, handeln Sie entsprechend.