Desarrollo basado en trunk: cómo diseñar un sistema de Feature Flags escalable desde cero
Adoptar Trunk-Based Development no es solo una decisión técnica, sino organizacional. Permite integrar cambios de forma continua, reducir conflictos y acelerar el delivery. Sin embargo, exige un mecanismo sólido para controlar funcionalidades incompletas en producción. Este artículo explora cómo implementar una herramienta interna de Feature Flags compatible con OpenFeature, los desafíos operativos que surgen y cómo resolverlos con observabilidad y disciplina técnica.

Table of Contents
Introducción
Moverse hacia integración continua real implica eliminar ramas largas y fusionar código a la rama principal diariamente. Si una funcionalidad incompleta llega a producción, el impacto puede ser inmediato. Aquí es donde los Feature Flags dejan de ser una herramienta opcional y se convierten en infraestructura estratégica.
Antecedentes: el riesgo oculto en la integración continua
Antes de implementar Feature Flags en el backend, existía una asimetría estructural:
- Solo el frontend utilizaba flags.
- Las funcionalidades incompletas no tenían mecanismo de aislamiento en backend.
- Las soluciones externas (FFaaS) implican costos elevados y dependencia de terceros.
- No existía una política clara de gestión, expiración o limpieza de flags.

En este contexto, adoptar Trunk-Based Development sin una capa de control habría sido técnicamente imprudente, integrar cambios diariamente al branch principal sin un mecanismo de activación controlada implica que cualquier funcionalidad parcialmente desarrollada podría impactar producción. El problema no era solo técnico. Era de gobernanza, riesgo operativo y sostenibilidad arquitectónica.
Idea central: diseñar sistema, no solo herramienta
El objetivo no era simplemente activar o desactivar funcionalidades. Era construir una capa estructural que permitiera:
- Integración continua segura.
- Compatibilidad con estándares abiertos (OpenFeature).
- Minimizar riesgo de vendor lock-in.
- Controlar la deuda operativa asociada a los flags.
- Escalar sin fricción futura.
No se trataba de comprar una herramienta, se trataba de alinear arquitectura con estrategia de ingeniería. La decisión de desarrollar una solución interna basada en variables de entorno respondía a una necesidad concreta: simplicidad operativa hoy, flexibilidad estratégica mañana.
Desarrollo técnico: de cultura a implementación
Trunk-Based Development como disciplina
- Trunk-Based Development elimina ramas largas y obliga a integrar cambios pequeños diariamente.

Esto genera:
- Reducción drástica de conflictos de merge.
- Menor fricción en code reviews.
- Mayor velocidad de entrega.
- Integración continua real, no declarativa.
En este modelo exige control fino sobre qué se activa en producción. Sin flags, trunk-based development se convierte en un riesgo.
Feature Flags como capa de seguridad y experimentación
Los Feature Flags permiten:
- Desplegar sin activar.
- Habilitar funcionalidades progresivamente.
- Ejecutar A/B testing.
- Restringir acceso por segmento de usuario.
- Separar despliegue de lanzamiento.
En backend, su implementación debe ser:
- Determinística.
- Observable.
- Simple de auditar.
- Fácil de revertir.
Por eso se optó por una implementación compatible con OpenFeature, permitiendo estandarización y futura migración a soluciones externas si fuese necesario. Diseñar estándares abiertos no es una decisión táctica, es una decisión de arquitectura.
Gobernanza y sostenibilidad: evitar la deuda silenciosa
El verdadero problema de los Feature Flags no es técnico, es operativo. Con el tiempo tienden a:
- Acumularse.
- Quedar olvidados.
- Permanecer activos innecesariamente.
- Generar caminos lógicos difíciles de mantener.
Sin disciplina, el sistema se degrada. Para evitarlo, se introdujo una política clara:
- Documentación obligatoria en comentarios (where, status, note, expire).
- Clasificación por estados: Active, Development, Disabled.
- Definición de fecha de expiración.
- Reporte automático semanal enviado a Slack antes del sprint planning.
Se desarrolló un Flag Reporter que:
- Analiza el código.
- Extrae metadatos de los comentarios.
- Detecta flags expirados.
- Reporta acumulación por estado.
- Genera alertas accionables.
No es solo automatización, es introducir observabilidad y gobernanza en el ciclo de desarrollo, porque en sistemas maduros, la calidad no depende solo del código, depende de cómo se controla su evolución.

Recomendaciones
- Diseña tu sistema de flags antes de adoptar trunk-based development.
- Usa estándares abiertos para reducir riesgos futuros.
- Documenta cada flag con contexto y fecha de expiración.
- Automatiza la detección de flags obsoletos.
- Incluye la revisión de flags en tu ritual de sprint planning.
Conclusiones
Los Feature Flags no son solo condicionales en el código. Son una capa de control estratégico dentro del ciclo de entrega. Adoptar Trunk-Based Development sin una gestión disciplinada de flags es abrir la puerta a incidentes invisibles. Implementarlo con estándares abiertos, automatización y gobernanza convierte la integración continua en una ventaja real. La velocidad sin control genera deuda. La velocidad con arquitectura genera ventaja competitiva.
Glosario
- Trunk-Based Development: Modelo de desarrollo donde todos integran cambios frecuentemente a la rama principal.
- Feature Flag: Mecanismo para activar o desactivar funcionalidades mediante una condición en el código.
- OpenFeature: Especificación abierta que estandariza la implementación de Feature Flags.
- FFaaS: Feature Flags as a Service, plataformas externas de gestión de flags.
- Vendor lock-in: Dependencia tecnológica que dificulta cambiar de proveedor.

