Una parte de la respuesta es la refactorización .
Primero, comience a escribir pruebas unitarias para asegurarse de no romper accidentalmente nada con sus cambios. Luego, comience a mejorar el diseño, elimine las duplicaciones, etc. en pequeños pasos, ejecute las pruebas de su unidad después de cada paso, solucione cualquier problema si alguna de las pruebas falla o revierta de inmediato si se encuentra con un problema mayor del que puede resolver fácilmente.
La otra parte es la educación .
Se debe enseñar a las personas a no dejar atrás el código incorrecto. Esta es ciertamente una batalla a largo plazo, ya que los hábitos y los procesos de pensamiento son difíciles (a veces incluso imposibles) de cambiar . Sin embargo, sin él, continuará recibiendo un suministro interminable de códigos incorrectos que gritan para ser refactorizados.
Puede optar por realizar revisiones de código de grupo para abrir una discusión sobre los hábitos de codificación buenos y malos, y difundir los méritos de los primeros. No es suficiente decir "debes (no) escribir código como este", debes convencer a las personas con lógica y hechos concretos. Por ejemplo, "si tiene este método duplicado en la base de código n veces, ¿qué cree que es probable que si se encuentra un error en ese método, se solucionará en cada copia del código del método?"
Es posible que su empresa también necesite revisar los incentivos y los criterios de aceptación para los consultores : si pueden salirse con la suya al escribir código descuidado, seguramente seguirán eligiendo el camino más fácil. Si la empresa sigue valorando la "entrega rápida" a lo largo del mantenimiento a largo plazo, nada cambiará :-( Por lo tanto, es posible que deba analizar esto también con la gerencia. Una forma de hacerles entender es esto: refactorizar significa mantener el código limpio, fácil de usar. entender y mantener, omitir la refactorización es como acumular deudas en su tarjeta de crédito. Puede salirse con la suya por un tiempo, pero si no está administrando activamente sus hábitos de compra y deudas, inevitablemente se desmoronará sobre sus hombros algún día. En la vida de un proyecto de software, la bancarrota es cuando el proyecto se vuelve imposible de mantener: se hace más fácil reescribirlo desde cero que agregar una nueva característica a la base de código existente. O los usuarios se cansan tanto con el nivel inferior de soporte y características que simplemente cambian a la competencia.