DeusterDevelopment
← Zurück zur Übersicht

Rewrites, die nichts heilen (5/8)

Rewrites bleiben verführerisch, weil alter Code fremde Entscheidungen enthält und neuer Code sich nach Fortschritt anfühlt, während die Domäne unverändert bleibt. Die meisten verschieben Komplexität, statt sie zu reduzieren, und beruhen auf emotionaler statt messbarer Begründung. Das Härteste an Software ist nicht, neuen Code zu schreiben, sondern alten zu lesen und zu verstehen, warum er funktioniert.

Rewrites, die nichts heilen  (5/8)

Einleitung

Jeder, der lange genug in der Branche arbeitet, war irgendwann dabei,

als ein Team beschlossen hat, das alte System „einfach komplett neu zu schreiben”.

Fast alle, die das erlebt haben, haben auch erlebt,

wie das Projekt nach zwei Jahren leise in einem Statusbericht erwähnt wird,

bevor es ein Jahr später stillschweigend eingestellt wird.


Ein alter Text, immer noch richtig

Joel Spolsky schrieb „Things You Should Never Do, Part I” im Jahr 2000.

Netscape war damals mitten im eigenen Rewrite.

Das wurde Mozilla.

Es hat sehr lange gedauert, bis daraus etwas wurde, das funktionieren konnte.

Der Text ist immer noch richtig.

Er wird immer noch kaum gelesen.


Warum Rewrites verführen

Die Antwort ist psychologisch, nicht technisch.

Alter Code ist das Werk fremder Leute.

Er ist unordentlich, weil er zehn Jahre Änderungen aufgenommen hat, die niemand mehr begründen kann.

Ihn zu lesen fühlt sich an wie Archäologie.

Neuer Code fühlt sich an wie Fortschritt.

Man entscheidet selbst.

Jede Zeile ist eine eigene Aussage.

Niemand mag es, an fremden Entscheidungen zu arbeiten.


Die Domäne schreibt sich nicht um

Die Geschäftsregeln bleiben.

Die Randfälle bleiben.

Die stillen Anforderungen bleiben.

Das neue Team löst dieselben Probleme in einer anderen Sprache.

Und es sieht eine Zeit lang besser aus — weil die neuen Bugs noch nicht gefunden wurden.

Viele Rewrites gelten als gelungen, solange sie nicht in Produktion laufen.

Sobald sie laufen, beginnt die zweite Welle:

  • Altlasten werden wiederentdeckt
  • Die elegante Architektur zeigt ihre Lücken
  • Nach drei Jahren hat das neue System seine eigene Schuldenkurve — manchmal steiler als die des alten

Wann Rewrites sinnvoll sind

Nicht nie. Aber selten.

Sinnvoll sind sie, wenn sich die Anforderungsbasis grundlegend verändert hat:

  • Das alte System stammt aus dem Client-Server-Zeitalter, heute ist die Welt mobil und verteilt.
  • Der Datenmodellkern kann ein neues Geschäftsmodell strukturell nicht abbilden.
  • Die Sicherheitsannahmen des alten Systems sind fundamental überholt — Nachrüsten wäre teurer als neu machen.

In diesen Fällen ist der Rewrite kein Theater.

Dann ist er eine Investition mit prüfbarer Begründung.


Die emotionale Begründung

Die meisten Rewrites, die ich gesehen habe, hatten diese Begründung nicht.

Sie hatten stattdessen eine emotionale:

„Das System ist einfach nicht mehr zeitgemäß.”

Das ist keine Begründung.

Das ist ein Gefühl.

Man darf es ernst nehmen.

Aber man sollte es nicht mit einem Projekt von mehreren Millionen Euro beantworten.


Eine ehrliche Faustregel

Eine gute Faustregel, die ich mir angewöhnt hatte:

Wenn ich einen Rewrite vorschlug, musste ich vorher erklären können,

was genau ich durch den Umbau erwartete.

Nicht „sauberere Architektur”.

Sondern:

  • Welches konkrete Problem wird gelöst?
  • Welches messbare Verhalten ändert sich?
  • Welche Kosten fallen an?
  • Über welchen Zeitraum amortisieren sie sich?

Wenn ich das nicht konnte, wollte ich keinen Rewrite.

Dann wollte ich nur mein Unbehagen an fremdem Code in ein Projekt verwandeln.

Das ist menschlich, aber keine Strategie.


Zentrale Beobachtung

Das Härteste an Software ist nicht, neuen Code zu schreiben.

Es ist, alten Code zu lesen und zu verstehen, warum er funktioniert.


Abschlussgedanke

Ein Rewrite ist oft die Flucht davor.

Manchmal ist sie nötig.

Meistens ist sie nur bequemer.

Verwandte Beiträge

Der Strangler Fig und andere ehrliche Strategien (6/8)

Der Strangler Fig und andere ehrliche Strategien (6/8)

Inkrementelle Ablösemuster — Strangler Fig, Anti-Corruption Layer, Parallel Run, Branch by Abstraction — funktionieren, weil jeder Zwischenschritt produktionsfähig bleibt und das Risiko pro Schritt begrenzt ist. Auf Folien wirken sie ineffizient, in der Realität sind sie die einzigen Varianten, die zuverlässig ankommen. Disziplin, nicht Geschwindigkeit, ist das knappe Gut.

Warum COBOL 2026 immer noch läuft (2/8)

Warum COBOL 2026 immer noch läuft (2/8)

COBOL läuft in Banken und Versicherungen nicht aus Nostalgie, sondern aus nüchterner Kalkulation: deterministisches Verhalten, keine Dependency-Drift, belegbare Stabilität. Ablöseprojekte scheitern selten an der Sprache, sondern an jahrzehntealten, undokumentierten Geschäftsregeln, die erst beim Umzug sichtbar werden. Die Alternative zu Legacy ist nicht Modernität, sondern Risiko.

Legacy ist kein Defekt, sondern ein Zustand (1/8)

Legacy ist kein Defekt, sondern ein Zustand (1/8)

„Legacy" ist ein soziales Urteil, kein technisches Kriterium — es beschreibt meist nur, dass ein System länger existiert, als die Leute im Raum darüber reden wollen. Alter und Veraltetsein werden routinemäßig verwechselt, obwohl sie nichts miteinander zu tun haben müssen. Die ehrliche Designfrage lautet nicht, wie man Legacy vermeidet, sondern wie man Systeme baut, die diesen Zustand würdig erreichen.