Alla luce di questa serie di svantaggi, perché si continua a utilizzare il legacy code? Semplicemente perché non si può sempre evitare: spesso accade che nel corso di un progetto subentri un nuovo programmatore a occuparsi della manutenzione e dell’ulteriore sviluppo del codice. Mentre lo sviluppatore originale ha scritto il codice in maniera intuitiva, i nuovi membri del team devono prima di tutto comprenderlo per poterne continuare lo sviluppo. Può accadere che parti del codice vengano trascurate o che non vengano completamente comprese.
Se un codice viene mantenuto, migliorato e modificato diversamente da più programmatori nel corso degli anni, il codice può diventare col tempo un’accozzaglia sempre più difficile da comprendere e modificare. Il problema è che, a un certo punto, gli aggiornamenti o le modifiche necessarie non possono essere effettuati se nessuno riesce più a comprendere il codice e i suoi effetti.
Il codice legacy ha un ulteriore svantaggio: i test di regressione, cioè i test automatizzati, non possono essere eseguiti a causa della programmazione troppo voluminosa, ingombrante e disomogenea. Agli sviluppatori che devono occuparsi del legacy code è richiesto quindi un impegno manuale per la verifica decisamente più elevato. I bug sono più difficili da risolvere, gli aggiornamenti più complicati da implementare.