Tengo una aplicación web antigua ¿la hago nueva o la evoluciono?

turned-off laptop computer
WebDev

La respuesta corta: si tu proyecto tiene un cierto volumen de personalización sobre el negocio y sigue cumpliendo su función, mantenlo y hazlo evolucionar.

Desarrollar una aplicación web (o cualquier software) lleva tiempo. Llegar al punto actual ha requerido horas de trabajo, decisiones tomadas, aprendizajes, correcciones y ajustes para llegar al estado actual. Aunque muchas veces se puede plantear que ese tiempo es un coste hundido, yo creo que tirar todo eso a la basura porque “el código es viejo” suele ser una reacción aún más emocional que racional.

Cuando el código se puede mantener y evolucionar poco a poco, casi siempre es mejor mantener que rehacer. El mito de “empezar desde cero” suena liberador, pensando que nos libraremos de deuda técnica, de arquitecturas antiguas. Pero también significa perder todo lo que ya se aprendió sobre el dominio, la lógica del negocio y los errores pasados. Construir de nuevo sobre terreno conocido, en cambio, permite avanzar con más seguridad.

¿Como evolucionar un código legacy?

Para mejorar algo antiguo, el primer paso no es reescribirlo, sino entenderlo. Antes de cambiar nada, hay que estudiar el código: documentar lo que hace, detectar sus dependencias ocultas y evaluar qué partes realmente sostienen el sistema. Es una fase casi arqueológica: levantar capas, anotar hallazgos, identificar patrones.

A continuación hay que apuntalarlo. Preparar una serie de tests e2e basados en snapshots que nos den la tranquilidad de que aunque cambiemos cosas por dentro la aplicación se comportará de igual manera. Podremos empezar con los caminos más habituales (sería interesante tener estadísticas de uso) y los caminos críticos. Además, si hicimos los deberes de estudio, también de algún punto que hayamos visto propenso a romper en situaciones límite.

Una vez que se entendemos el terreno y tenemos la estructura sujeta, llega el momento de actualizar su contexto: librerías, frameworks, y dependencias. Aquí suelen aparecer las funciones deprecated o incompatibilidades que habrá que resolver con paciencia. Es un ejercicio de poda selectiva, no de tala indiscriminada. Ir leyendo documentación para detectar que actualizaciones pueden romper y cuales son las nuevas funciones que las sustituyen.

En este punto, cuando el código vuelve a estar estable, entonces se puede empezar a evolucionar. El cambio real vendrá pieza a pieza, de forma iterativa, renovando módulos, introduciendo tests donde no los había, y mejorando pequeñas partes sin poner en riesgo lo que ya funciona. No habrá un día de lanzamiento de una nueva versión, sino una nueva versión cada día.

Aquí el avance será híbrido entre añadir nuevas funcionalidades y detectar como refactorizar el código por donde pasemos, siguiendo la regla del boyscout (enunciada por Robert C. Martin en Clean Code) de dejar el código más limpio de lo que lo encontramos. Esto puede ser refactorizaciones a fondo al poder detectar código repetido, o simplemente hacer un código más legible al mejorar el nombre de las variables.

¿Y los nuevos lenguajes y frameworks?

Siempre hay que preguntarse ¿para qué? y ¿a qué precio? Sin duda existen ventajas al desarrollar con un nuevo lenguaje, stack o framework. Pero, ¿va a suponer aumentar la capacidad de evolución futura de la aplicación? ¿Cuanto tiempo vamos a tardar en llegar a todas las funcionalidades que ya están en la aplicación actual?

Una visión más madura del desarrollo

Evolucionar un código legacy es óptimo en muchos casos: hace uso del trabajo previo, del conocimiento acumulado y aprovecha el tiempo de las personas que lo mantienen. No se trata de conservar por miedo al cambio, sino de cambiar solo si hay una ventaja real. La madurez técnica no está en elegir la herramienta más moderna, sino en saber cuándo no hace falta usarla. Mantener y evolucionar exige tanto criterio como escribir desde cero. Porque en el fondo, trabajar con legado no es solo tratar con código viejo, sino con algo que sigue vivo.

SobrE MÍ

Desarrollo centrado en las personas

Soy Pablo R.M., desarrollador full‑stack y consultor técnico con más de 15 años de experiencia liderando proyectos web en entornos complejos. Además de organizador de los encuentros de la comunidad Betabeers.

Más de 20 años desarrollando en PHP. ¿tienes algún proyecto legacy entre manos? ¿una web WordPress que mantener?

Tags:

No responses yet

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *