Feature flag
Un interruptor en el código que prende o apaga una función sin publicar otra versión.
Un feature flag es un if cuya respuesta vive fuera del código. El programa pregunta "¿está prendido new_checkout para este usuario?" y una configuración, guardada casi siempre en un servicio aparte o en una base de datos, contesta sí o no. Cambiás esa configuración y la app se comporta distinto al instante, sin compilar ni hacer deploy de nuevo.
Así se separan dos cosas que antes pasaban en el mismo momento: subir el código a los servidores y dejar que la gente lo use. Un equipo puede mergear una función a medio terminar escondida detrás de un flag, prenderla primero para la gente de la empresa, después para el 1% de los usuarios, después para el 10%, mirando errores y ventas en cada paso. Si algo sale mal, alguien apaga el flag y en segundos vuelve el comportamiento anterior, sin tener que revertir toda la versión.
Los flags también sirven para tests A/B (la mitad de los usuarios ve la versión A y la otra mitad la B), para funciones premium que solo ven los clientes que pagan y para "kill switches" que apagan una parte cara o rota del sistema en medio de un incidente. Servicios como LaunchDarkly, Unleash o Flagsmith los administran a gran escala.
La contra es que cada flag duplica los caminos posibles dentro del código. Los flags viejos que nadie borra se acumulan como deuda técnica, y uno olvidado que alguien prende por error puede despertar código que no corre hace años. Los buenos equipos le ponen a cada flag un responsable y una fecha de vencimiento.
Para quedarse
- Separa hacer el deploy del código de liberar una función a los usuarios.
- Permite lanzamientos graduales, tests A/B y kill switches instantáneos.
- Apagar un flag es mucho más rápido que revertir una versión.
- Los flags viejos son deuda técnica: hay que borrarlos cuando la función ya quedó.
Para seguir leyendo
- Feature Toggles, de Pete Hodgson (martinfowler.com, en inglés)
- Feature toggle en Wikipedia (en inglés)