Wenn man einmal anfängt zu kopieren.
Die erste Kopie ist eine vernünftige Entscheidung. Die zweite ist leichter. Ab der dritten ist es Gewohnheit. Eine gelernte Lektion über die Eigendynamik des Kopierens — und den Moment, an dem man hätte innehalten müssen. Kein Heldenstück.
Was ist das? · Engineering Story
Eine gelernte Lektion — ein Fehler, warum er passierte und was er uns lehrte. Anonym, ohne Kunde, ohne Drama. Der Fehler ist der Lehrer, nicht der Held. Zur Übersicht
- Autor
- Batunet Engineering
- Lesezeit
- 4 Min.
- Niveau
- Fortgeschritten
- Status
- Freigegeben
Auf dieser Seite
Es gibt eine verwandte Lektion, die wir an anderer Stelle erzählt haben: dass Duplikation günstig bleibt, bis die Kopien sich gemeinsam ändern müssen — und dass der Fehler darin lag, diesen Umschlag zu übersehen. Diese Geschichte betrachtet denselben Stoff von der anderen Seite. Nicht den Moment, in dem das Kopieren teuer wurde, sondern die Steigung, die dorthin führte. Sie ist bewusst allgemein gehalten — ohne System, ohne Beteiligte, ohne Zeitpunkt.
Situation
In einem bestehenden System existierte eine Funktion nicht einmal, sondern dutzendfach. Dieselbe Aufgabe war an vielen Stellen gelöst, jede Kopie ein wenig an ihren Ort angepasst, keine ganz wie die andere. In der Summe hatten sich so rund 5000 Zeilen nahezu gleichen Codes angesammelt, verteilt über das ganze System.
Ausgangsannahmen
Die erste Kopie war keine Nachlässigkeit, sondern eine vertretbare, lokale Entscheidung. Als die Aufgabe zum zweiten Mal auftauchte, war die gemeinsame Form noch nicht klar, und eine Abstraktion auf Verdacht wäre eine Wette gewesen — womöglich die falsche, die teurer ist als jede Kopie. Kopieren war schnell, unabhängig und sicher. Diese Annahme war für die erste Kopie richtig. Der unausgesprochene Teil war die Annahme, dass, was einmal richtig war, auch beim nächsten Mal und beim übernächsten richtig bliebe.
Problem
Mit der Zeit wurde der Bestand extrem schwer zu pflegen. Musste sich die gemeinsame Regel ändern, war sie in vielen Kopien zugleich zu ändern — und man fand nie sicher alle. Ein Fix an einer Stelle erreichte die anderen nicht; dieselbe Aufgabe verhielt sich je nach Kopie unterschiedlich. Der tiefere Befund lag darunter: Niemand hatte je entschieden, Dutzende Kopien zu haben. Jede einzelne war für sich vertretbar; ihre Summe war es nicht. Die Kosten kamen nicht mit einer bestimmten Kopie — sie sammelten sich unterhalb der Schwelle an, an der jemand innegehalten hätte.
Ursache
Die eigentliche Ursache war die Eigendynamik des Kopierens. Die erste Kopie senkt die Hürde für die zweite; die zweite macht die dritte selbstverständlich. Jedes Vorkommen lässt das nächste natürlicher erscheinen und weniger prüfenswert. Der Fehler lag nicht in einer einzelnen Kopie, sondern im fehlenden Entscheidungspunkt nach der ersten. Duplikation wächst gerade deshalb so leise, weil jeder Schritt für sich klein und begründbar ist — die Gefahr ist die Steigung, nicht der erste Schritt.
Entscheidung
Batunet entschied, die duplizierte Umsetzung durch eine saubere Lösung zu ersetzen — nicht, weil Kopieren verboten wäre, sondern weil die Kopien durch ihre Zahl und ihr gemeinsames Driften gezeigt hatten, dass sie eine einzige Sache in vielen Verkleidungen waren. Die gemeinsame Form, die man früher nur hätte erraten können, war jetzt sichtbar. Damit war die Abstraktion keine Wette mehr, sondern belegt.
Umsetzung
Der Umbau geschah nicht in einem Sprung, sondern in kleinen, umkehrbaren Schritten. Zuerst wurde die tatsächliche Gemeinsamkeit herausgeschält — das, was alle Kopien wirklich teilten, getrennt von dem, was nur zufällig gleich aussah. Diese Gemeinsamkeit wurde genau einmal ausgedrückt, hinter einer klaren Grenze. Dann wurde Kopie für Kopie darauf umgestellt, jede mit dem Anspruch, das Verhalten unverändert zu lassen, bevor irgendetwas verbessert wurde. Am Ende war der Bestand um etwa 90 Prozent kleiner — dieselbe Fähigkeit, an einem Ort statt an vielen.
Trade-offs
Die Konsolidierung ist nicht gratis und nicht immer richtig. Die eine Lösung muss nun gepflegt werden; sie bündelt, was vorher verstreut war, und macht die eine Stelle wichtig. Der Preis der frühen Kopien — das Warten — war die bewusste Gegenleistung dafür, nicht die falsche Abstraktion zu bauen. Anders hätten wir entschieden, wenn die Kopien wirklich unabhängig geblieben wären: Dann wäre Zusammenführen ein Fehler gewesen, der koppelt, was getrennt gehört. Zwei Vorkommen dürfen ein Zufall bleiben; der Punkt ist, das dritte nicht zu übersehen.
Was wir gelernt haben
Der gefährliche Moment ist nicht die erste Kopie, sondern die zweite — der Augenblick, in dem Kopieren aufhört, eine Wahl zu sein, und anfängt, eine Gewohnheit zu werden. Die Regel, die wir daraus mitgenommen haben, ist alt und schlicht: Zwei gleichartige Vorkommen können Zufall sein; das dritte ist ein Muster und ein Entscheidungspunkt. „Don't Repeat Yourself" sagt, dass Wissen, das sich gemeinsam ändert, einmal dargestellt gehört; die Regel der Drei sagt, wann man handelt. Die Lektion ist nicht „nie kopieren" — sie ist „nie unbewusst kopieren".
Wie das Batunet verändert hat
Seither machen wir das zweite Vorkommen sichtbar. Wenn im Review eine Kopie auftaucht, fragen wir bewusst: Ist das die zweite? Die dritte? Wir kopieren ohne schlechtes Gewissen, solange die Kopien unabhängig sind, und behandeln das dritte gleichartige Vorkommen als den Moment, zusammenzuführen. Kopieren ist erlaubt; Kopieren ohne Entscheidung nicht. Aus einer stillen Steigung ist eine Stelle geworden, an der wir bewusst innehalten.
Weiterführend
- Guide: Software, die in zehn Jahren noch läuft — warum Kopplung und Änderbarkeit über die Lebensdauer entscheiden.
- Decision: Modularer Monolith als Ausgangspunkt — Struktur hinzufügen, wenn ein Problem sie verlangt, nicht vorher.
- Playbook: Einen Legacy-Monolithen modernisieren — konsolidieren in kleinen, umkehrbaren Schritten.
- Opinion: Warum vorzeitige Abstraktion Komplexität schafft — die falsche Abstraktion ist teurer als Duplikation.
- Glossar: Rule of Three (Regel der Drei) — beim dritten Mal zusammenführen, nicht beim ersten.
Keine Kopie entsteht aus einer Entscheidung, Dutzende zu haben. Sie entstehen aus lauter kleinen, je für sich vernünftigen Schritten — deshalb muss man den zweiten so bewusst gehen wie den ersten.
Referenzierte Entitäten
Setzen Sie Ihren Engineering-Weg fort.
Verwandte Konzepte, Entscheidungen, Playbooks und Standpunkte — als zusammenhängender Pfad, nicht als Linkliste.
Reference Guides
Verwandte Konzepte
Engineering-Entscheidungen
Ein konkretes Vorhaben in diesem Feld?
Reference Guides zeigen, wie wir denken. Für Ihr System sprechen Sie mit der Geschäftsführung — technisch, ohne Vertrieb.
