El Contexto (El Estado “Pesadilla”)
El cliente, una empresa del sector turístico, nos contactó en estado de emergencia. Su aplicación interna de gestión de flota — crítica para sus operaciones — estaba fallando en producción y ningún desarrollador la había tocado en más de 3 años.
- Bugs críticos: Los tiempos de respuesta de la API se habían degradado gravemente, tardando habitualmente más de 150 segundos en responder. Simultáneamente, la interfaz estaba atrapada en un bucle, recargándose continuamente cada 5 minutos.
- Entornos irreproducibles: La aplicación dependía de un stack tecnológico anticuado: PHP 7 con una versión antigua de Symfony para la API, junto con un frontend web que ejecutaba Node 15 y React 12.
- Pérdida de conocimiento tribal: Nadie en la organización sabía cómo arrancar la aplicación localmente, y mucho menos depurar la compleja interacción entre el frontend y el backend. Era esencialmente considerada “intocable.”
Necesitaban estabilizar la plataforma de inmediato, pero los desarrolladores no podían arreglar lo que no podían ejecutar.
La Arquitectura
Tuvimos que sacar la caja negra de la oscuridad medieval, transitando de un proceso manual y aterrador a un flujo de trabajo moderno y reproducible.
Antes:
- Un entorno de producción frágil que no podía replicarse localmente.
- Procesos de despliegue manuales con alto riesgo de fallo.
- Sin documentación estándar ni metodología de configuración local.
Después (El Camino Dorado):
- Desarrollo local reproducible: Usando
devboxpara crear entornos locales completamente aislados y reproducibles que replicaban perfectamente las versiones antiguas de producción. - Entrega automatizada: Pasando de despliegues completamente manuales a un pipeline automatizado gestionado por GitLab CI.
La Implementación
Dividimos la operación de rescate en cuatro fases diferenciadas.
1. El Hack: Reproducibilidad mediante Devbox
El mayor obstáculo técnico no era el código en sí, sino el entorno. No podíamos simplemente instalar PHP 7 y Node 15 globalmente sin causar conflictos para los desarrolladores en máquinas modernas.
Usando Devbox, creamos entornos de desarrollo local altamente aislados y deterministas. Empaquetamos las versiones exactas requeridas tanto para la API (PHP 7 / Symfony) como para la UI (Node 15 / React 12). Esto permitió a cualquier desarrollador clonar el repositorio, ejecutar un único comando y tener al instante una réplica perfecta del entorno de producción ejecutándose localmente — sin instalaciones globales.
2. Mejoras de Seguridad y DX
Una vez que finalmente pudimos ejecutar la aplicación, migramos los componentes mínimos necesarios para parchear las vulnerabilidades de seguridad críticas y mejorar el día a día de los desarrolladores, sin arriesgar una reescritura completa y desestabilizadora.
3. Resolución de Bugs
Con la depuración ahora posible, aislamos las causas raíz de los fallos en producción. Atacamos los graves cuellos de botella en la API que causaban los retrasos de más de 150s y resolvimos los problemas de gestión de estado que provocaban que la UI se recargara cada cinco minutos. La aplicación volvió a ser usable de inmediato.
4. Pipeline CI/CD con GitLab
Para garantizar que la aplicación nunca volvería a un estado “intocable”, implementamos un pipeline completo de integración y despliegue continuos usando GitLab CI. Incorporamos pruebas automatizadas, pasos de despliegue predecibles y mecanismos de rollback fiables.
Los Resultados
Al priorizar la developer experience y la replicación del entorno, conseguimos desenredar con éxito una pesadilla legacy.
| Métrica | Antes | Después |
|---|---|---|
| Tiempo de configuración local | Días (frecuentemente abandonado) | Menos de 5 minutos |
| Despliegues | Completamente manuales y de alto riesgo | Completamente automatizados (GitLab CI) |
| Estado del sistema | Fallando (retrasos >150s / recargas continuas) | Estable y usable |
| Fiabilidad futura | Dependiente del conocimiento tribal | Completamente documentado y testeado |
Conclusión
A veces la parte más difícil de arreglar un bug es simplemente conseguir que el código se ejecute. Usando herramientas de desarrollo aisladas como devbox y modernizando el pipeline de entrega con GitLab CI, demostramos que incluso las aplicaciones legacy más arraigadas e “intocables” pueden volver a la vida y ser mantenidas de forma fiable por los equipos de ingeniería existentes.