Heredé una base de código existente para un producto que es reprensiblemente descuidado. El diseño fundamental es lamentablemente inadecuado, que desafortunadamente puedo hacer poco sin un refactor completo (acoplamiento ALTO, cohesión BAJA, duplicación desenfrenada de código, sin documentación de diseño técnico, pruebas de integración en lugar de pruebas unitarias). El producto tiene un historial, una alta exposición a clientes críticos de "vaca de efectivo" con una tolerancia mínima al riesgo, una deuda técnica que hará sonrojar a los griegos, una base de código y complejidad MUY grande, y un enfoque derrotista de errores por parte del equipo antes de la batalla. yo.
El viejo equipo saltó a otra división para que tengan la oportunidad de arruinar otro proyecto. Es muy raro que experimente una falla de proyecto de incompetencia técnica en lugar de una falla de gestión de proyecto, pero este es de hecho uno de esos casos.
Por el momento estoy solo, pero tengo mucho tiempo, libertad de decisión y dirección futura y la capacidad de construir un equipo desde cero para ayudarme.
Mi pregunta es reunir opiniones sobre la refactorización de bajo impacto en un proyecto como este cuando tiene algo de tiempo libre durante la fase de recolección de requisitos funcionales. Hay miles de advertencias del compilador, casi todas importaciones no utilizadas, variables locales no leídas, ausencia de verificación de tipos y conversiones inseguras. El formato del código es tan ilegible y descuidado que parece que el codificador sufrió la enfermedad de Parkinson y no pudo controlar la cantidad de veces que se presionó la barra espaciadora en una línea determinada. Los recursos adicionales de bases de datos y archivos generalmente se abren y nunca se cierran de manera segura. Argumentos de métodos sin sentido, métodos duplicados que hacen lo mismo, etc.
Mientras espero los requisitos para la próxima función, he estado limpiando cosas de bajo impacto y bajo riesgo a medida que avanzo, y me preguntaba si estaba perdiendo el tiempo o haciendo lo correcto. ¿Qué pasa si la nueva característica significa extraer código en el que pasé tiempo antes? Voy a comenzar un enfoque ágil y entiendo que esto es aceptable y normal refactorizar constantemente durante el desarrollo ágil.
¿Puedes pensar en algún impacto positivo o negativo de mí haciendo esto que te gustaría agregar?