Saltar al contenido

Lógica de feature flags: combinar flags sin sorpresas

Los feature flags combinan una audiencia, un interruptor maestro y un interruptor de emergencia, y las sorpresas vienen de cómo se combinan. (beta_user OR internal) AND flag_on AND NOT kill_switch es el patrón: cuatro condiciones, dieciséis filas, y un interruptor de emergencia que debe ganar siempre.

La audiencia es un OR de grupos (beta_user OR internal), el interruptor maestro es un AND (flag_on), y el interruptor de emergencia es un AND NOT. Las comprobaciones de la página muestran la regla contingente con el testigo internal = VERDADERO, flag_on = VERDADERO, el resto FALSO, como una fila en la que la función está activada. El interruptor de emergencia es correcto porque está en el nivel superior: ninguna combinación de las otras tres puede activar la función mientras está puesto, cosa que la tabla de verdad muestra como ocho filas FALSAS en las que kill_switch es VERDADERO.

Las sorpresas son estructurales. Un interruptor de emergencia colocado dentro del paréntesis de la audiencia, (beta_user OR (internal AND NOT kill_switch)) AND flag_on, apaga la función solo para los usuarios internos. Dos flags combinados con OR cuando se quería AND convierten «los dos flags deben estar activos» en «basta con cualquiera». Un flag que vale VERDADERO por defecto cuando no está fijado, en un sistema en el que un valor sin fijar no es FALSO, activa la función para todo el mundo durante un despliegue. Cada uno de estos casos está a una fila de la regla prevista, y el comprobador de equivalencia encuentra esa fila.

La lógica de flags también cambia a menudo, lo que la convierte en el hogar natural del método de regresión: compara la regla nueva con la antigua, revisa las filas que difieren contra la petición de cambio, y conserva los contraejemplos. Los pares de independencia dan las cuatro pruebas que muestran que cada flag importa, y la lista de revisión de reglas tiene una línea para la posición del interruptor de emergencia.

Ejemplo

enabled := (beta_user OR internal) AND flag_on AND NOT kill_switch · salida

Comprobaciones exactas

¿Siempre verdadera (tautología)? No Contraejemplo: beta_user = F, internal = F, flag_on = F, kill_switch = F · Exhaustively checked and solver cross-checked · 1 filas
¿Siempre falsa (contradicción)? No Contraejemplo: beta_user = F, internal = V, flag_on = V, kill_switch = F · Exhaustively checked and solver cross-checked · 7 filas
¿Puede ser verdadera? Sí Asignación de ejemplo: beta_user = F, internal = V, flag_on = V, kill_switch = F · Exhaustively checked and solver cross-checked · 7 filas

Tabla de verdad (16 filas)

Lógica de feature flags: combinar flags sin sorpresas
#beta_userinternalflag_onkill_switchenabled
0FALSOFALSOFALSOFALSOFALSO
1FALSOFALSOFALSOVERDADEROFALSO
2FALSOFALSOVERDADEROFALSOFALSO
3FALSOFALSOVERDADEROVERDADEROFALSO
4FALSOVERDADEROFALSOFALSOFALSO
5FALSOVERDADEROFALSOVERDADEROFALSO
6FALSOVERDADEROVERDADEROFALSOVERDADERO
7FALSOVERDADEROVERDADEROVERDADEROFALSO
8VERDADEROFALSOFALSOFALSOFALSO
9VERDADEROFALSOFALSOVERDADEROFALSO
10VERDADEROFALSOVERDADEROFALSOVERDADERO
11VERDADEROFALSOVERDADEROVERDADEROFALSO
12VERDADEROVERDADEROFALSOFALSOFALSO
13VERDADEROVERDADEROFALSOVERDADEROFALSO
14VERDADEROVERDADEROVERDADEROFALSOVERDADERO
15VERDADEROVERDADEROVERDADEROVERDADEROFALSO

Lectura en lenguaje claro

Principianteenabled es verdadero exactamente cuando se cumplen todas las condiciones siguientes:
1. al menos uno entre beta_user e internal es verdadero (pueden serlo ambos)
2. flag_on es verdadero
3. kill_switch es falso
En todos los demás casos, enabled es falso.
Sobre los operadores:
- AND (Y) solo es verdadero cuando todas sus partes son verdaderas.
- OR (O) es inclusivo: es verdadero en cuanto al menos una parte es verdadera, también cuando lo son varias.
- NOT (NO) invierte un valor: lo verdadero pasa a ser falso y lo falso, verdadero.
Intermedioenabled es verdadero exactamente cuando se cumplen todas las condiciones siguientes:
1. al menos uno entre beta_user e internal es verdadero (pueden serlo ambos)
2. flag_on es verdadero
3. kill_switch es falso
En todos los demás casos, enabled es falso.
Avanzadoenabled es verdadero exactamente cuando se cumplen todas las condiciones siguientes [conjunción ∧]:
1. al menos uno entre beta_user e internal es verdadero (pueden serlo ambos) [disyunción inclusiva ∨]
2. flag_on es verdadero
3. kill_switch es falso [negación ¬]
En todos los demás casos, enabled es falso.
Notación formal: (beta_user ∨ internal) ∧ flag_on ∧ ¬kill_switch

Diagrama lógico

Feature flag logic: combining flags without surprises Feature flag logic: combining flags without surprises beta_user internal flag_on kill_switch enabled AND OR NOT
Feature flag logic: combining flags without surprises Feature flag logic: combining flags without surprises beta_user internal flag_on kill_switch enabled AND OR NOT

El error habitual

Poner el interruptor de emergencia dentro de un paréntesis. (beta_user OR (internal AND NOT kill_switch)) AND flag_on sigue entregando la función a los usuarios beta después de accionar el interruptor. Un interruptor de emergencia es AND NOT kill_switch alrededor de toda la regla, y la tabla de dieciséis filas muestra las ocho filas que debe poner a cero.

Preguntas

¿Cómo combino dos funciones que necesitan estar las dos activas?

Con AND: feature_a AND feature_b. OR significa que basta con cualquiera. El comprobador de equivalencia muestra las filas en las que las dos combinaciones difieren, que son aquellas en las que exactamente un flag está activo.

¿Y los despliegues por porcentaje?

Un cubo de porcentaje es una condición booleana una vez decidida (in_rollout_bucket), y la regla la combina como cualquier otra. La decisión de qué usuarios caen en el cubo vive fuera de la regla, en la descripción del glosario.

Relacionado

Véase también

Pruebas y reglas

Generado a partir del motor de Tangibool, semántica tangibool-semantics/1, motor 1.0.0, compilación . Cada tabla, mapa, simplificación y veredicto de estas páginas lo calculó el motor de Tangibool al compilar el sitio, y cada afirmación la volvió a comprobar el mismo verificador exacto que usa la app. Los límites se indican donde aplican. © 2026 Foreranger LTD.