Con todos los comentarios sobre la sobreestimación, creo que se está perdiendo una pequeña cantidad de puntos (bueno, oportunidad).
No se trata de estimar el tiempo que se tarda en realizar el cambio (solo) y luego agregar un poco, se trata de estimar el tiempo necesario para modificar el código (¡refactor!) para llevarlo a un punto donde el cambio se pueda realizar de manera segura y luego haga el cambio (probablemente un poco amañado). Ok, esto equivale a lo mismo ... pero no se trata de hacer movimientos bruscos, estirarse o sobreestimarse, es simplemente una cuestión de decir que para hacer esto primero debo hacer eso y este es el tiempo que tomará. en total. La clave aquí es que trabajas en aquellas partes del sistema de las que depende el cambio y no más, si hay un código horrible en otra parte ... difícil, cógelo cuando estés allí.
Volver a la pregunta original un poco, después de muchos años, se trata de un problema para mí, cuando implementa algo a menos que sepa (no crea, no espere (¿sospechoso?) , no piense, pero sepa ) que también se requieren cosas adicionales, entonces debe hacer lo que necesita para implementar ese requisito y no más en la forma más ordenada y elegante que pueda.
Cuando venga a implementar lo siguiente, algo más tarde, tome los pasos necesarios para llevar el código base (y la base de datos) al estado necesario para implementar esa funcionalidad de la manera más ordenada y elegante que pueda. puede. Esta refactorización es donde tratas el desorden que surge naturalmente a medida que un proyecto evoluciona y, con suerte, evitas crear más desorden (o al menos mantén el nivel consistente).
Una de las áreas de discusión aquí es "Deuda técnica": es como un sobregiro, usted tiene que devolverlo y, mientras más tiempo lo deje, más interés (en este caso, el tiempo requerido para corregir) acumulará. es un buen argumento para pasar parte de su tiempo minimizando la deuda técnica.
Aquí es también donde comienzan las pruebas de unidad y otras pruebas automatizadas (si pudiera hacerlo tan bien como digo que estoy bastante seguro de que sería una persona más feliz) combinada con un servidor de compilación adecuado (que puede ejecutarse al menos algunas de tus pruebas). Combinados con esos, pero de valor en sí mismos, hay patrones como la inyección de dependencia y la inversión de control (nunca estamos seguros de cuán "iguales" son esos dos) porque hacen que sea más fácil cambiar la tubería y, por lo tanto, lidiar con los cambios en aislamiento.
Por último, recuerda, si no está roto, no lo arregles. Poner en orden su código con el único fin de ponerlo en orden puede ser satisfactorio, pero también es una oportunidad para introducir errores, mientras que puede ser doloroso si no necesita cambiarlo y no lo está desarrollando. Quizás sea mejor dejar algunos bultos solos. ¡La oportunidad de reparar o reemplazar se extenderá eventualmente!