„Eine Notlösung bauen“ oder „mit Krücken abstützen“ bedeutet, eine temporäre Lösung für ein Problem zu schaffen, die einen Fehler behebt oder Funktionalität hinzufügt, aber die Ursache nicht beseitigt und nicht den Architekturstandards des Projekts entspricht. Krücken sind in jeder Entwicklung unvermeidlich: Deadlines, unvollständiges Systemverständnis und externe Einschränkungen erzwingen Kompromisse. Laut Refactoring Guru liegt der Hauptunterschied zwischen einer pragmatischen Krücke und technischen Schulden im Bewusstsein der Entscheidung und der Existenz eines Plans zu deren Beseitigung. Der kompetente Einsatz temporärer Lösungen erfordert Disziplin und Dokumentation.
Wichtige Erkenntnisse
Eine Krücke (crutch) ist eine Softwarelösung, die funktioniert, aber „auf die Schnelle“ gemacht ist: Sie behebt ein spezifisches Problem, beseitigt aber nicht dessen Ursache, folgt nicht der Architektur des Projekts und kann bei kleinsten Änderungen in der Umgebung kaputtgehen. Die Metapher ist treffend — wie eine echte Krücke hilft dieser Code beim „-Gehen“, heilt aber nicht das „Bein.“
Entwickler „stützen mit Krücken ab“: Bugs, Versionsinkompatibilitäten, Plattformbesonderheiten und dringende Kundenanforderungen. Eine typische Krücke ist eine bedingte Krücke: Wenn iOS 15, füge einen Abstand hinzu; wenn Huawei, verstecke den Button. Solche Prüfungen vermehren sich und verwandeln den Code in einen „Schichtkuchen“ aus Plattform- und Versionsverzweigungen.
Krücken gibt es in verschiedenen Größenordnungen: von einer einzelnen Zeile mit einer Krückenbedingung bis hin zu einem ganzen Wrapper-Modul, das das Verhalten einer Bibliothek „korrigiert“. Es ist wichtig zu verstehen, dass eine Krücke nicht immer schlecht ist: In den richtigen Händen ist sie ein Werkzeug, das es ermöglicht, ein Produkt rechtzeitig auszuliefern. Das Problem beginnt, wenn die Krücke für immer im Code bleibt.
Der Hauptgrund für das Auftreten von Krücken ist der Konflikt zwischen der idealen Lösung und den realen Einschränkungen des Projekts. Der Entwickler weiß, wie es richtig geht, aber Zeit, Geld oder technische Einschränkungen verhindern es. Als Ergebnis entsteht eine Kompromisslösung, die „einfach funktioniert.“
Betrachten wir vier Hauptgründe, warum Entwickler bewusst zu Krücken greifen. Das Verständnis dieser Gründe hilft, Krücken nicht als Fehler, sondern als pragmatisches Werkzeug zu betrachten, das verwaltet werden muss.
Der häufigste Grund. Der Release ist morgen, der Bug tritt nur auf einem bestimmten Modell auf, und die architektonische Behebung würde zwei Wochen dauern. Eine bedingte Krücke dauert eine Stunde und schließt das Problem. Nach dem Release verspricht das Team, zurückzukommen und es richtig neu zu schreiben. „Nichts ist beständiger als ein Provisorium“ — das gilt genau für solche Krücken.
Bibliothek A erfordert Android 12, aber Ihre App unterstützt Android 10. Die Lösung ist, einen Wrapper zu schreiben, der die OS-Version prüft und den Ausführungspfad wählt. Dies ist eine Krücke, denn bei der Aktualisierung der Bibliothek muss der Wrapper neu geschrieben werden. Aber die Alternative — die Bibliothek oder die Unterstützung alter Geräte aufzugeben — könnte schlimmer sein.
// Krücke für API-29-Kompatibilität
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
useModernApi()
} else {
useLegacyFallback()
}
Eine Bibliothek, von der das Projekt abhängt, hat einen Bug, aber deren Aktualisierung könnte Wochen dauern (PR, Code-Review, Veröffentlichung). Statt zu warten, schreibt das Team einen Wrapper, der das Verhalten der Bibliothek im laufenden Betrieb patcht. Wenn die korrigierte Version der Bibliothek veröffentlicht wird, wird der Wrapper entfernt. Wird er nicht entfernt, ist das bereits ein Architekturproblem.
Ein neuer Entwickler in einem Legacy-Projekt versteht nicht, warum der Code so funktioniert, wie er tut. Anstatt es herauszufinden, fügt er eine neue Bedingung zu den bestehenden hinzu. Dies ist die gefährlichste Art von Krücke, weil der Autor nicht erkennt, dass es eine Krücke ist. Das einzige Heilmittel sind Code-Reviews und Pair Programming für neue Teammitglieder.
Nicht jede Krücke ist schlecht. In der realen Entwicklung ist absolute Code-Reinheit unerreichbar und oft unpraktisch. Ein pragmatischer Ansatz erkennt an, dass temporäre Lösungen Teil des Prozesses sind, verlangt aber Bewusstsein, Dokumentation und einen Beseitigungsplan. Eine Krücke ist gerechtfertigt, wenn sie ein Geschäftsproblem schneller löst als eine saubere Architekturlösung.
Die Kriterien für eine gerechtfertigte Krücke: Sie behebt ein spezifisches Problem, hat einen Verantwortlichen (jemand, der für ihre Entfernung zuständig ist), und es existiert ein Refactoring-Plan. Fehlt mindestens eine dieser drei Bedingungen, verwandelt sich die Krücke in technische Schulden. Werkzeuge wie TODO-Kommentare mit einem Ticket im Tracker sind die minimale Dokumentationsmethode.
Ein kritischer Bug im Release-Branch, der vor dem morgigen Deployment behoben werden muss. Die saubere Lösung erfordert ein Architektur-Refactoring und würde zwei Wochen dauern. Die Krücke: eine Nil-Prüfung hinzufügen und den Fix als Hotfix senden. Bedingungen der Rechtfertigung: Ein Refactoring-Ticket wurde im Tracker erstellt, ein Verantwortlicher wurde zugewiesen und die Krücke ist mit einem Kommentar markiert. Zwei Wochen später kehrt das Team zur Aufgabe zurück.
// TODO: IT-1234 — diese Krücke nach AuthService-Refactoring entfernen
guard let userId = session.user?.id else {
return Result.failure(.notAuthenticated)
}
Die Grenze zwischen einer bewussten Krücke und einem Architekturproblem (technische Schulden) verläuft entlang zweier Parameter: Bewusstsein der Entscheidung und Existenz eines Plans zu deren Beseitigung. Eine Krücke ist immer eine temporäre Lösung mit bekannter Lebensdauer. Technische Schulden sind die Folge vieler unbeaufsichtigter Krücken.
| Parameter | Bewusste Krücke | Technische Schulden |
|---|---|---|
| Bewusstsein | Das Team weiß, dass dies eine temporäre Lösung ist | Niemand erinnert sich, warum der Code so ist |
| Dokumentation | Hat TODO, ein Ticket im Tracker | Keine Kommentare, Referenzen oder Beschreibungen |
| Beseitigungsplan | Ein Sprint ist für das Refactoring vorgesehen | „Irgendwann schreiben wir es neu“ |
| Auswirkung | Lokal, beeinträchtigt keine neuen Funktionen | Blockiert Änderungen, verlangsamt die Entwicklung |
Die Situation verschlechtert sich, wenn die Anzahl der Krücken eine kritische Masse überschreitet. Jede neue Krücke erhöht die „-Zerbrechlichkeit“ des Systems: Eine Änderung an einer Stelle bricht eine andere. Schließlich verlangsamt sich die Entwicklung, Bugs vermehren sich und ein neuer Entwickler kann den Code ohne Hilfe des Autors nicht verstehen. An diesem Punkt hören Krücken auf, temporäre Lösungen zu sein, und werden zu einem Architekturproblem.
Wenn der Code fünf verschachtelte Prüfungen auf OS-Version, Gerätehersteller und Vorhandensein einer bestimmten Bibliothek enthält — ist das keine Krücke, sondern ein Architekturproblem. Wenn das Hinzufügen einer Korrektur drei Regressionen in verwandten Modulen verursacht — sind Krücken nicht mehr lokal. Wenn Code-Reviews regelmäßig wegen „-noch einer Krücke“ abgelehnt werden — ist es Zeit, ein Refactoring zu planen.
Refactoring von Krücken ist der Prozess, temporäre Lösungen durch architektonisch korrekte zu ersetzen. Dies erfordert Zeit, daher ist eine Priorisierungsstrategie notwendig: Nicht alle Krücken müssen sofort beseitigt werden. Eine gute Strategie ist, jede Krücke nach zwei Parametern zu bewerten: Änderungshäufigkeit in diesem Codebereich und Auswirkung auf die Benutzer.
Hohe Priorität — Krücken in häufig geänderten Modulen (Geschäftslogik, Allzweck-UI), die die Entwicklung verlangsamen und Regressionen verursachen. Mittlere Priorität — Krücken in selten geänderten Modulen, aber mit potenzieller Auswirkung auf Benutzer (Zahlungsabwicklung, Autorisierung). Niedrige Priorität — Krücken in Legacy-Code, der stabil läuft und nicht zur Änderung vorgesehen ist.
Schritt 1: Inventur — finden Sie alle TODOs und FIXMEs im Zusammenhang mit Krücken. Schritt 2: Bewertung — bestimmen Sie, welche noch relevant sind. Schritt 3: Planung — planen Sie das Krücken-Refactoring in einem Sprint, beginnend mit hoher Priorität. Schritt 4: Ersetzung — implementieren Sie die saubere Lösung, entfernen Sie die Krücke und ihren TODO-Kommentar. Schritt 5: Verifikation — stellen Sie sicher, dass Tests bestanden werden und keine Regressionen auftreten.
# Alle TODO-Krücken im Projekt finden
grep -r "TODO\|FIXME\|HACK\|XXX" --include="*.kt" --include="*.swift" .
Der beste Weg, Krücken zu bekämpfen, ist, sie nicht unnötig zu schaffen. Bevor Sie eine Krücke schreiben, stellen Sie sich drei Fragen: Kann ich in angemessener Zeit eine saubere Lösung implementieren? Gibt es eine Alternative, die keine Krücke ist? Wird das Team Zeit haben, zurückzukommen und dies neu zu schreiben? Wenn die Antwort auf mindestens eine Frage „-Nein“ lautet — denken Sie noch einmal nach, bevor Sie den Code „-abstützen.“
Häufig gestellte Fragen
Eine Notlösung bauen bedeutet, eine temporäre Lösung zu schreiben, die das Problem behebt, aber nicht dessen Ursache beseitigt. Der Code funktioniert, entspricht aber nicht der Architektur des Projekts und kann bei Änderungen kaputtgehen.
Eine Krücke ist eine bewusste temporäre Lösung mit einem Beseitigungsplan. Technische Schulden sind die Folge vieler vergessener Krücken. Eine Krücke ist lokal, Schulden sind systemisch und blockieren die Entwicklung.
Wenn die Deadline kritisch ist, die saubere Lösung Zeit braucht und die Krücke mit einem TODO-Kommentar und einem Ticket im Tracker dokumentiert ist. Bedingung: Die Krücke hat einen Beseitigungsplan in absehbarer Zukunft.
Fügen Sie ein TODO oder FIXME mit der Ticketnummer und einer kurzen Beschreibung der korrekten Lösung hinzu. Beispiel: // TODO: IT-567 — rewrite using Factory pattern. Ohne Ticket wird die Krücke vergessen.
Führen Sie eine Inventur aller TODOs durch, priorisieren Sie, beginnen Sie mit häufig geänderten Modulen. Ersetzen Sie die Krücke durch eine saubere Lösung, entfernen Sie den Kommentar und verifizieren Sie mit Tests.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch