De código legacy a estándares modernos: transformando la infraestructura de Holafly
El éxito comercial puede convertirse en una trampa. Holafly, empresa española líder en soluciones de conectividad para viajeros con operaciones en más de 180 países y atención al cliente 24/7, experimentó un crecimiento exponencial que expuso las debilidades de su infraestructura. Lo que funcionaba para unos pocos clientes se convirtió en un lastre cuando la escala se multiplicó.
En este contexto surgió la necesidad de un partner tecnológico que modernizara su infraestructura sin detener el negocio. Necesitaban profesionalizar el desarrollo, eliminar el conocimiento aislado en unos pocos desarrolladores y establecer estándares de calidad que permitieran escalar sin acumular más deuda técnica.
Nuestra solución fue implementar mejoras incrementales de alto impacto: desde 0% a 90% de test coverage, adopción de Open Telemetry para observabilidad moderna, y sacar a producción en menos de 1 semana un proyecto bloqueado durante meses. El resultado: una operación profesional preparada para crecer.
Escalar con una infraestructura que no estaba preparada
Holafly enfrentaba el dilema clásico de las empresas de rápido crecimiento: su éxito comercial superó la capacidad de su tecnología. La deuda técnica acumulada amenazaba su capacidad de seguir innovando. Para transformar esta situación, necesitaban un partner que les ayudara a enfrentar cuatro desafíos principales.
Eliminar la dependencia de conocimiento concentrado
Solo unos pocos desarrolladores conocían el funcionamiento crítico del sistema. No había documentación formal ni procesos de onboarding efectivos. El conocimiento estaba en las cabezas de unas pocas personas, creando cuellos de botella ante cualquier ausencia o salida.
Implementar estándares profesionales de calidad
La situación técnica era preocupante:
- 0% de test coverage: ninguna línea de código tenía pruebas automatizadas
- Ausencia total de tipado: errores en tiempo de ejecución por variables mal usadas y métodos con parámetros incorrectos
- Cada despliegue era un salto al vacío, confiando únicamente en pruebas manuales
Modernizar la observabilidad del sistema
Los protocolos de trazas estaban deprecados y el monitoreo era prácticamente inexistente. El equipo operaba a ciegas: identificar el origen de una incidencia podía tomar horas o días. La arquitectura incluía el uso innecesario de PM2 en Kubernetes, causando pérdida de trazas.
Desbloquear proyectos críticos paralizados
La nueva plataforma de soporte llevaba meses estancada sin lograr salir a producción. La aplicación mostraba datos mockeados, las APIs no funcionaban y el equipo no sabía cómo avanzar. La frustración crecía y la confianza disminuía.

Modernización incremental sin bloquear el negocio
Nuestra estrategia fue clara: implementar testing, tipado y observabilidad sin reescribir código existente ni detener el desarrollo en curso. Cada decisión respondió al mismo principio: resultados medibles en semanas, no en trimestres.
El corazón de nuestra solución se construyó sobre tres pilares: calidad, observabilidad y ejecución rápida.
Tests de integración y tipado incremental
El primer obstáculo fue cultural. El equipo de arquitectura se mostraba reacio a adoptar TypeScript. Nuestra respuesta: implementar tipado mediante jsconfig.json, detectando typos y errores de parámetros sin cambiar el stack tecnológico.
El verdadero reto era el testing. Con 0% de coverage y una librería propietaria que no soportaba bien las pruebas, diseñamos una estrategia de tests de integración black-box:
- Validación del comportamiento completo de cada endpoint
- Documentación viva del comportamiento esperado del sistema
- Detección de casos de uso no probados y flujos incorrectos
- Red de seguridad para futuros cambios
El resultado: cobertura de entre 50% y 90% en servicios críticos. El equipo aprendió a escribir y mantener tests, eliminando la dependencia de validación manual en cada despliegue.
Ingeniería inversa de la librería propietaria
Para mejorar la trazabilidad, necesitábamos acceder al código fuente de la librería propietaria que gestionaba todos los BFF. Usando ingeniería inversa y análisis exhaustivo del node_modules, logramos entender su funcionamiento interno y solicitamos formalmente acceso al repositorio. Una vez conseguido:
- Migración al estándar Open Telemetry, soportado y mantenido por la comunidad
- Eliminación del uso innecesario de PM2 en clusters de Kubernetes
- Monitorización efectiva en tiempo real
El equipo pasó de operar a ciegas a tener visibilidad completa de cada servicio.
Reestructuración completa del proyecto bloqueado
El mayor éxito fue desbloquear la plataforma de soporte. El equipo llevaba meses sin conseguir llevarla a producción. Al hacernos cargo, conseguimos:
- Reestructuración completa de APIs y endpoints
- Creación de 6 pantallas nuevas y 8 endpoints funcionales con tests
- Uso estratégico de IA (Cursor) para acelerar el maquetado
- Definición clara del alcance con backlog estructurado
En menos de 1 semana, la plataforma estaba en producción. En 2 semanas, teníamos un MVP completo y funcional.

Ingeniería inversa y adopción de estándares
El proyecto requirió superar obstáculos técnicos complejos: una librería propietaria sin documentación, un entorno hostil para testing y la necesidad de modernizar sin pausar el desarrollo. Las soluciones aplicadas no solo resolvieron estos problemas, sino que establecieron nuevas capacidades en el equipo.
Retos técnicos superados
Cada obstáculo requirió un enfoque diferente. No bastaba con aplicar buenas prácticas estándar: había que adaptarlas a un entorno con restricciones técnicas y culturales específicas.
- Librería propietaria sin documentación: Aplicamos ingeniería inversa sobre una librería crítica heredada de Ikea, sin acceso al código fuente ni documentación pública. El código estaba en el ordenador personal del arquitecto principal. Usando herramientas de análisis estático y dinámico, entendimos su funcionamiento e implementamos mejoras sin romper nada.
- Testing en entorno hostil: La librería no estaba diseñada para ser testeada. Diseñamos tests black-box que validaban comportamiento sin necesidad de entender detalles internos. Creamos pipelines para ejecutar estos tests en cada PR, pasando de 0% a 50-90% de coverage.
- Modernización sin detener desarrollo: Cada mejora se implementó sin pausar sprints ni bloquear al equipo. Usamos feature flags y despliegues progresivos para validar cambios sin interrumpir la operación.
- Cambio cultural en el equipo: Pasamos de un equipo reacio al testing a uno que escribe tests en cada PR. De silos de conocimiento a pair programming activo y espacios de formación como el IT.all.
Innovaciones aplicadas
Nuestras soluciones aportaron capacidades concretas al equipo:
- Tipado progresivo sin TypeScript: jsconfig.json permitió detectar errores sin cambiar el stack, eliminando la resistencia del equipo de arquitectura.
- Testing como documentación viva: Los tests de integración documentan el comportamiento de cada endpoint. Un desarrollador nuevo puede leerlos y entender la API sin documentación adicional.
- Observabilidad desde el diseño: Adopción de Open Telemetry para que el equipo considere trazabilidad desde la primera línea de código, no como parche posterior.
- Formación continua: Pair programming y revisiones de código convirtieron cada tarea en transferencia de conocimiento.
De caos técnico a operación profesional
Los resultados se miden en cambios concretos que eliminaron los principales cuellos de botella técnicos de Holafly.
90% de test coverage
El sistema pasó de 0% a un rango entre 50% y 90% de coverage en servicios críticos. Los pipelines rechazan automáticamente código sin tests. El tipado detecta errores de parámetros antes de compilar.
Resultado: menos bugs en producción y menos hotfixes de emergencia.
Velocidad de entrega
La plataforma de soporte, bloqueada durante meses, salió a producción en menos de 1 semana:
- Reestructuración completa de todas las APIs
- 6 pantallas nuevas y 8 endpoints funcionales creados en 2 semanas
- El equipo de soporte pudo empezar a operar de forma efectiva
Trazabilidad moderna
La adopción de Open Telemetry eliminó los puntos ciegos del sistema. Las trazas muestran el recorrido de cada petición a través de microservicios. Los dashboards identifican el servicio exacto que falla.
Impacto: de horas buscando errores a minutos identificando la causa raíz.
Transferencia de conocimiento
El conocimiento dejó de estar en 2-3 desarrolladores clave:
- Cualquier desarrollador puede ahora trabajar en cualquier servicio mediante pair programming y formación continua
- No hay bloqueos por vacaciones ni dependencias de personas específicas para despliegues críticos
- Los tests funcionan como documentación viva del sistema
Tecnología utilizada
- JavaScript – Lenguaje runtime
- jsconfig.json – Type safety sin TypeScript
- Node.js – Entorno de ejecución
- Open Telemetry – Estándar de trazas distribuidas
- SonarCloud – Análisis de calidad de código
- Kubernetes – Orquestación de contenedores
- Cursor AI – Desarrollo asistido por IA
- GitHub Actions/CI – Pipelines automatizados