# Feature flag

> Un interruptor en el código que prende o apaga una función sin publicar otra versión.

- Nivel: Intermedio
- Temas: Software
- URL: https://tidbit.legios.com.ar/es/feature-flag/
- En inglés: [Feature flag](https://tidbit.legios.com.ar/feature-flag/)

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.

## Una analogía

Las llaves de luz de una casa nueva. El electricista cablea todos los ambientes el primer día, pero vos decidís qué luces prender y cuándo, sin volver a llamarlo.

## 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)](https://martinfowler.com/articles/feature-toggles.html)
- [Feature toggle en Wikipedia (en inglés)](https://en.wikipedia.org/wiki/Feature_toggle)

## Términos relacionados

- [Base de datos](https://tidbit.legios.com.ar/es/database/): Un depósito ordenado de datos que los programas consultan y actualizan sin riesgo.
- [Deploy](https://tidbit.legios.com.ar/es/deployment/): Llevar una versión nueva del software desde el equipo hasta los usuarios reales.
- [Servidor](https://tidbit.legios.com.ar/es/server/): Una computadora cuyo trabajo es responder pedidos de otras computadoras, todo el día.
- [Test A/B](https://tidbit.legios.com.ar/es/ab-testing/): Mostrar dos versiones a dos grupos al azar y medir cuál funciona mejor.
- [Deuda técnica](https://tidbit.legios.com.ar/es/technical-debt/): El costo futuro de los atajos que se toman hoy en el software.
