¿Por qué se utiliza el legacy code si tiene tantos inconvenientes? Simplemente, porque es inevitable: a menudo, durante un proyecto un nuevo programador se hace cargo del mantenimiento y desarrollo del código. Mientras el desarrollador original del código podía comprenderlo en la mayoría de los casos intuitivamente, los nuevos miembros del equipo tienen que esforzarse para descubrir qué hace. En ese caso, es posible que partes del código no se puedan leer o no se comprendan correctamente.
Cuando un código es mantenido, mejorado y editado por varios programadores diferentes durante muchos años, puede acabar convirtiéndose en un mosaico muy difícil de comprender y de modificar. En algún momento de su historia, el código y sus efectos se vuelven incomprensibles, lo que hace imposible actualizarlos o corregirlos correctamente.
Otro inconveniente del legacy code es que no permite realizar pruebas de regresión o pruebas automatizadas debido a su naturaleza irregular, poco eficiente y difícil de manejar. Por esto, los desarrolladores que se enfrentan al legacy code tienen que invertir mucho más esfuerzo realizando pruebas manuales, lo que hace que los errores sean más difíciles de solventar y las actualizaciones más complicadas de implementar.