Per prima cosa è necessario capire come invecchia un codice e come può mutare in un famigerato “spaghetti code”. A causa del poco tempo a disposizione, della mancanza di esperienza o di istruzioni poco chiare e di comandi inutilmente complicati, la programmazione di un codice porta a perdite di funzionalità. Un codice viene eroso in maniera proporzionale alla velocità e alla complessità del suo campo di applicazione.
Si chiama spaghetti code un codice sorgente confuso e illeggibile, il cui linguaggio è difficilmente comprensibile per i programmatori. Semplici esempi di codice confuso sono quei comandi di salto superflui (GOTO) che istruiscono un programma a saltare da una parte all’altra del codice sorgente, oppure for/while loop o istruzioni if non necessari.
Sono soprattutto i progetti ai quali lavorano più sviluppatori software ad avere dei testi sorgente poco leggibili. Se il codice sorgente passa per più mani e se già l’originale presenta dei punti deboli, è difficile evitare un aumento di grovigli ricorrendo a “soluzioni di emergenza” e a una costosa revisione del codice. Nel suo scenario peggiore uno spaghetti code può mettere a repentaglio l’intero sviluppo di un software; in tal caso nemmeno il code refactoring può eliminare il problema.
Non così gravi sono poi i code smell e code rot. Con il passare del tempo, un codice, a causa di elementi non puliti, può risultare poco lineare. I punti poco chiari peggiorano ulteriormente in seguito all’intervento di altri programmatori o alle estensioni. Se non si opera un refactoring alle prime avvisaglie di un code smell, il codice sorgente perde a vista d’occhio d’integrità e tramite il code rot (dall’inglese rot “marcio”) perde la sua funzione.