Service as Software

Refactor incremental vs reescritura: qué elegir

Fernando Blanco DosilFernando Blanco Dosil

Llega un momento en casi todo proyecto en que el código se ha vuelto difícil de mantener. Cada cambio cuesta más, aparecen errores en sitios inesperados y el equipo avanza despacio. Ahí surge la gran pregunta: ¿refactorizamos poco a poco o reescribimos desde cero? Es una de las decisiones técnicas con más impacto en el negocio.

La respuesta correcta casi siempre es el refactor incremental, pero no siempre. Elegir mal en cualquier dirección es caro: refactorizar lo que estaba muerto es perder el tiempo, y reescribir lo que se podía salvar es jugarse el negocio. Conviene entender bien las dos opciones antes de decidir.

Qué es cada cosa

El refactor incremental mejora el código por partes manteniéndolo funcionando todo el tiempo. Cambias un módulo, lo verificas, sigues con el siguiente. El sistema nunca se detiene y el riesgo se reparte en pasos pequeños y reversibles. Es lento pero seguro, y conserva todo el conocimiento acumulado en el código existente.

La reescritura tira el código actual y construye uno nuevo. Promete un sistema limpio, pero esconde un peligro enorme: durante meses no entregas valor nuevo, reintroduces errores que ya estaban resueltos y apuestas todo a que la versión nueva funcione. La historia del software está llena de reescrituras que hundieron empresas.

  • Refactor incremental: cambios pequeños, sistema siempre vivo, riesgo repartido.
  • Reescritura: sistema nuevo, valor parado durante meses, riesgo concentrado.
  • El refactor conserva el conocimiento del código actual; la reescritura lo pierde.
  • El refactor permite parar a mitad; la reescritura te obliga a terminar.

Por qué casi siempre gana el incremental

El refactor incremental gana porque reparte el riesgo y te deja resultados desde el primer paso. Si las prioridades cambian, puedes parar sin haber tirado nada. Además, mantiene el negocio en marcha: no hay ese periodo muerto en el que compites contra tu propio producto antiguo sin entregar nada nuevo a los clientes.

La mayoría del código que parece irrecuperable se puede mejorar por partes con paciencia. La sensación de empezar de cero es tentadora, pero rara vez compensa el riesgo real que conlleva.

Cuándo la reescritura tiene sentido

Reescribir se justifica cuando la tecnología base ya no tiene soporte ni futuro, cuando el código está tan acoplado que no se puede tocar una parte sin romper todo, o cuando los requisitos han cambiado tanto que el sistema actual resuelve un problema que ya no existe. Incluso entonces, conviene hacerlo módulo a módulo, no en un único salto al vacío.

Más sobre service as software
Fernando Blanco Dosil

Escrito por

Fernando Blanco Dosil

Product Engineer al que le mueve convertir ideas en producto. Escribe sobre desarrollo, datos y cómo llevar proyectos de la chispa a la realidad.

Ver perfil →