Zunächst ist es nötig zu verstehen, wie ein Code altern und zum berüchtigten Spaghetti-Code mutieren kann. Ob aus Zeitdruck, durch mangelnde Erfahrung oder unklare Anweisungen: Die Programmierung eines Codes führt durch unnötig komplizierte Befehle zu Einbußen in der Funktionalität. Ein Code erodiert zunehmend, je schneller und komplexer sein Anwendungsbereich ist.
Spaghetti-Code steht für einen verworrenen, unlesbaren Quellcode, dessen Sprache für Programmierer nur schwer verständlich ist. Einfache Beispiele für verworrenen Code sind überflüssige Sprung-Befehle (GOTO), die ein Programm anweisen, im Quellcode hin und her zu springen, oder überflüssige for-/while-Schleifen und if-Anweisungen.
Besonders Projekte, an denen viele Software-Entwickler arbeiten, neigen zu unübersichtlichem Quelltext. Geht ein Code durch viele Hände und enthielt das Original bereits Schwachstellen, so lässt sich eine zunehmende Verknotung durch „Umschiffungslösungen“ und ein kostspieliges Code-Review schwer vermeiden. In den drastischsten Ausprägungen kann Spaghetti-Code die komplette Entwicklung einer Software gefährden. Dann kann selbst Code-Refactoring das Problem nicht beheben.
Nicht ganz so drastisch sind Code-Smells und Code-Rot. Mit dem Alter kann ein Code durch unsaubere Stellen im übertragenen Sinne zu riechen anfangen. Schlecht verständliche Stellen verschlimmern sich durch Eingriffe anderer Programmierer oder Erweiterungen. Findet bei ersten Anzeichen von Code-Smell kein Refactoring statt, so erodiert der Quellcode zusehends und verliert durch Code-Rot (von engl. rot für „verrotten“) seine Funktionalität.