spinny:~/writing $ less openfeature-feature-flags-progressive-delivery.md
12La implementación es cuando el código llega a producción. La liberación es cuando alguien realmente puede usarlo. Confundirlos es una de las formas más rápidas de hacer que cada despliegue sea un momento un poco tenso.34Los feature flag sirven para poner espacio entre estos dos momentos. Puede implementarlo hoy, iniciarlo mañana para el equipo interno, luego para un cliente piloto y luego para el 10% de los usuarios. Si algo sale mal, apaga la bandera. No necesariamente es necesario revertir toda la versión.56## La bandera no es sólo un si78Técnicamente suele ser un `if`. Culturalmente es mucho más.910```typescript11if (await flags.isEnabled('checkout.v2.enabled', context)) {12 return newCheckout(input);13}1415return oldCheckout(input);16```1718Ese pequeño `if` puede representar un despliegue gradual, un experimento, una migración, un permiso empresarial o un kill switch operativo. El problema es que si no se gestiona bien también puede convertirse en deuda técnica que se queda en el código durante dos años.1920## ¿Dónde entra OpenFeature?2122OpenFeature es una especificación abierta para evaluar feature flag con un API común. La idea es simple: el código de su aplicación no debe depender directamente del proveedor o del sistema interno que utiliza para las banderas.2324La aplicación pregunta:2526```typescript27const enabled = await client.getBooleanValue('checkout.v2.enabled', false, {28 targetingKey: user.id,29 plan: user.plan,30 country: user.country,31});32```3334El proveedor decide de dónde provienen las reglas: SaaS, archivo, servicio interno, flagd, configuración de GitOps. Si un día cambia el backend de marcado de funciones, no es necesario reescribir la aplicación en todas partes.3536Esta separación parece un detalle arquitectónico, pero se siente a medida que crece el proyecto.3738## El contexto es la mitad de la batalla3940Una bandera de encendido o apagado para todos es útil, pero limitada. La entrega progresiva vive en contexto:4142- usuario interno o externo;43- plan gratuito o empresarial;44- aldea;45- organización;46- versión de la aplicación;47- porcentaje estable de tráfico.4849La clave importante es `targetingKey`: debe ser estable. Si cambia con cada solicitud, un usuario puede terminar una vez en la variante A y otra en la variante B. Para un experimento es terrible, para una compra puede ser desastroso.5051## Un lanzamiento sensato5253Un flujo que me gusta es este:54551. desplegar con la bandera apagada;562. encendido para desarrolladores y control de calidad;573. encendido para un cliente o inquilino piloto;584. 5% de implementación;595. lanzamiento al 25%;606. 100% de implementación;617. eliminación del código y la bandera antiguos.6263El punto que a menudo se olvida es el último. Una bandera temporal debe tener una fecha de muerte. Si permanece para siempre, cada refactor futuro tendrá que preguntarse: "¿pero esta rama sigue siendo útil?".6465## Kill switch: prepáralos primero6667El kill switch es la bandera que te salva cuando una dependencia externa comienza a molestarte, un trabajo consume demasiados recursos o una nueva lógica produce errores extraños.6869Un buen kill switch debe ser:7071- fácil de encontrar;72- documentado en el runbook;73- probado ocasionalmente;74- observable cuando se activa;75- independiente, en la medida de lo posible, de la pieza que podría romperse.7677Lo peor es descubrir durante el accidente que la bandera existe, pero nadie sabe si todavía funciona.7879## Observabilidad o entrega no progresiva8081Activar una función al 10% sin mirar las métricas es solo optimismo con múltiples pasos.8283Cada implementación debe responder preguntas simples:8485- ¿Han aumentado los errores?86- ¿Ha cambiado la latencia?87- ¿Los usuarios completan el flujo?88- ¿Hay más tickets o reintentos?89- ¿Una variante afecta sólo a un segmento?9091OpenFeature admite ganchos alrededor de la evaluación de banderas. Son útiles para registrar errores, agregar métricas o vincular la calificación a un trace.9293## Denominación y propiedad9495Los nombres importan. `new_ui` no dice nada. `checkout.v2.enabled` dice mucho más.9697Para cada bandera marcaría al menos:9899- nombre;100- descripción;101- dueño;102- valor predeterminado seguro;103- razón por la que existe;104- fecha o condición de expulsión.105106Una bandera sin dueño es casi siempre una bandera que nadie borrará.107108## Dónde evaluarlos109110¿Frontend, backend o borde? Depende.111112Si la bandera es para diseño, copia o incorporación, la interfaz está bien. Si se trata de permisos, facturación, límites o datos confidenciales, debe estar en el backend. Si se trata de experimentos de enrutamiento o de mucho tráfico, la ventaja puede tener sentido.113114La regla simple: el frontend puede mejorar la experiencia, pero no debería ser la única barrera de seguridad.115116## Conclusión117118Los feature flag bien hechos cambian la relación con la producción. No eliminan el riesgo, pero lo hacen más pequeño y manejable. Puedes soltar en rodajas, observar, detenerte, retroceder, aprender.119120OpenFeature agrega una base limpia: un API común, proveedores intercambiables y una forma más ordenada de hacer crecer el sistema. Pero la disciplina sigue siendo tuya: valores predeterminados seguros, nombres claros, métricas, propietarios y limpieza.121122La mejor bandera es la que te ayuda a soltar con calma y luego desaparece cuando ya no es necesaria.123124## Fuentes125126- [OpenFeature: Introduction](https://openfeature.dev/docs/reference/intro/)127- [OpenFeature: Node.js SDK](https://openfeature.dev/docs/reference/sdks/server/javascript/)128- [OpenFeature Specification: Flag Evaluation API](https://openfeature.dev/specification/sections/flag-evaluation)129- [OpenFeature: Hooks](https://openfeature.dev/docs/reference/concepts/hooks/)130- [CNCF: OpenFeature](https://www.cncf.io/projects/openfeature/)131
:Feature flag: suelta sin contener la respiraciónlines 1-131 (END) — press q to close