Der "Punkt der übermäßigen Komplexität" wird im Englischen bezeichnet als:
OH MEIN GOTT, WAS IST DIESER MIST.
Das Problem ist, dass dies auf etwas zutreffen kann, das eigentlich einfach ist, aber so schrecklich umgesetzt wird, dass Sie dieselbe Reaktion haben.
Es kann schwierig sein, etwas sehr Komplexes von etwas sehr Schrecklichem zu unterscheiden.
JEDOCH: Was eigentlich mit jeder Software passiert, ist ein Prozess wie dieser:
Schritt 1: Haben Sie eine schöne Spezifikation, machen Sie ein schönes Design, implementieren Sie schöne Sachen. Alle glücklich.
Am Ende von Schritt 1: Die Entwickler beglückwünschen sich zu der wunderbaren Eleganz ihres Designs und denken glücklich: "Ich habe hier ein wunderbares Vermächtnis, das andere in Zukunft ergänzen können. Es wird wunderbar sein und die Welt wird ein besserer Ort."
Schritt 2: Es werden einige Änderungen vorgenommen, Dinge hinzugefügt und neue Funktionen hinzugefügt. Die Architektur und Struktur von Schritt 1 machten dies zu einem ziemlich schmerzlosen Prozess. [Aber hoppla, der "Cruft-Faktor" hat sich nur ein bisschen erhöht.]
Am Ende von Schritt 2: Die Entwickler beglückwünschen sich zu der wunderbaren Eleganz ihres Designs und denken glücklich: "Ich bin so schlau, all diese Dinge in Schritt 1 berücksichtigt zu haben. Das ist so gut gelaufen. Ich habe ein wunderbares Erbe hier, damit andere in Zukunft etwas hinzufügen können, wird es wunderbar sein und die Welt wird ein besserer Ort sein. "
Schritt 3: Es werden mehr Änderungen vorgenommen, es werden mehr Dinge hinzugefügt, es werden mehr neue Funktionen hinzugefügt, eine Menge Dinge werden geändert, das Feedback der Benutzer wird tatsächlich angehört.
Am Ende von Schritt 3: Die Entwickler beglückwünschen sich zu der wunderbaren Eleganz ihres Designs und gehen ziemlich fröhlich davon über X und Y und Z. Sie könnten jetzt ein bisschen aufgeräumt werden. Aber !!! Ahhh !!! Ich bin so schlau, all diese Rücksichten in Schritt 1 gemacht zu haben. Das lief so gut. Ich habe ein wundervolles Vermächtnis hier für andere Dinge in Zukunft hinzuzufügen, wird es wunderbar sein und die Welt wird ein besserer Ort sein. "
Schritt 4: Genau wie Schritt 3. Außer:
Am Ende von Schritt 4: Die Entwickler denken: "Dieses Zeug, das so gut war, wird immer hässlicher. Es braucht wirklich einige gravierende Änderungen. Ich mag es nicht wirklich, daran zu arbeiten. Es muss umgestaltet werden. Ich frage mich, was der Chef ist werde sagen, wenn ich ihm sage, dass es 6 Wochen dauert und am Ende nichts für die Benutzer zu sehen sein wird ... aber ich werde weitere 5 Jahre leckeren zukünftigen Änderungsumfang haben, indem ich dies tue ... hmmm ... Zeit, in die Kneipe zu gehen und ein Bier zu trinken. "
Schritt 5: Es müssen einige Änderungen vorgenommen werden.
Und WÄHREND Schritt 5 sagen die Entwickler zueinander: "Dieser Code ist zum Kotzen. Wer hat das geschrieben? Sie sollten erschossen werden. Es ist schrecklich. Wir MÜSSEN ES NEU SCHREIBEN."
Schritt 5 ist tödlich. Dies ist der Punkt, an dem der Cruft-Faktor so schlecht geworden ist, dass der Code nicht nur ein paar weitere Änderungen aufweisen kann, sondern auch einige BIG-Änderungen erforderlich sind.
Das Problem bei Schritt 5 ist das Verlangen, es wegzuwerfen und von vorne zu beginnen. Der Grund dafür ist "The Netscape Factor". Go google es. Unternehmen sterben an diesem Punkt, denn wenn man wieder anfängt, beginnt man mit ungefähr 50% Annahmen anstelle von Fakten, 150% Enthusiasmus anstelle von Wissen, 200% Arroganz anstelle von Demut ("Diese Leute waren so doof!"). Und Sie führen eine ganze Reihe neuer Fehler ein.
Am besten umgestalten. Ändern Sie ein wenig nach dem anderen. Wenn die Architektur etwas müde wird, beheben Sie sie. Hinzufügen, erweitern, verbessern. Allmählich. Testen, testen und testen Sie bei jedem Schritt auf dem Weg etwas mehr. Inkrementelle Änderungen wie diese bedeuten, dass der aktuelle und ursprüngliche Code 10 Jahre später wie die Axt des Großvaters ist ("es hatte 10 neue Köpfe und 3 neue Griffe, aber es ist immer noch die Axt des Großvaters"). Mit anderen Worten, es gibt nicht mehr viel Gemeinsamkeiten. Aber Sie sind allmählich und vorsichtig vom Alten zum Neuen übergegangen. Dies reduziert das Risiko und für die Kunden den Verärgerungsfaktor.