Refactorizar es como recoger tu habitación.
Si mantiene las cosas ordenadas, tiene una sobrecarga lineal, proporcional a la cantidad de trabajo productivo que está haciendo en el código, O (n) en términos de algoritmos. Suponiendo que pasa el 10% de su tiempo refactorizando (o manteniendo su habitación ordenada), ese 10% es un hecho, y se mantendrá constante con el tiempo.
Sin embargo, si tira su ropa sucia en un rincón y continúa haciéndolo, la cantidad de tiempo que pasará recogiendo su habitación aumenta a medida que el desorden se vuelve más complejo. Suponiendo que cada pieza de ropa sucia individual contribuya exponencialmente al tiempo de limpieza requerido, ahora se encuentra en una situación O (e n ).
Cualquiera que haya profundizado en el concepto de complejidad algorítmica observará que hay un punto de equilibrio en alguna parte, es decir, que se acumula una cantidad óptima de ropa sucia; cuánto depende eso de los factores constantes que se descartan en la notación big-O. Otro factor es el valor de su trabajo a lo largo del tiempo: si su trabajo vale mucho ahora, pero es barato la próxima semana (es decir, hay un plazo este viernes para este proyecto y tres más, pero después de eso, estará inactivo en su mayoría ), la ecuación podría resultar a favor de no refactorizar.
Y luego está la complejidad de la masa crítica. En algún momento, el desorden ('desorden crítico', si lo desea) se vuelve tan malo que parece más fácil quemar toda la habitación y comprar ropa nueva. En realidad, generalmente no lo es, pero parece de esa manera, y los efectos psicológicos harán que sea diez veces más difícil abordar la cuestión.
Y obviamente, si entras en un proyecto que ya es un desastre gigante de redundancia múltiple, tienes opciones limitadas.
TL; DR: En caso de duda, refactorizar. Debería tener pruebas realmente buenas antes de decidir no hacerlo.