Flags e tipos
Uma flag é uma decisão com nome que o seu app pede ao FortressFlag para tomar: este dispositivo deve ver o novo checkout? Qual texto vai no botão de comprar? Quantas tentativas antes de desistir? Esta página dá o vocabulário sobre o qual o resto da documentação se apoia.
Flags vivem em um projeto e têm um valor por ambiente
Seção intitulada “Flags vivem em um projeto e têm um valor por ambiente”Toda flag pertence a um projeto e é identificada pela sua chave — um nome curto em
minúsculas como new-checkout. A chave é o que o seu código pede, e ela é imutável depois
da criação: seus apps já publicados têm a chave embutida no código, então renomeá-la os
quebraria. Você pode mudar o nome de exibição de uma flag a qualquer momento; a chave é para
sempre.
Uma flag não tem um valor — ela tem um valor por ambiente. new-checkout pode estar
ligada em dev, em rollout em staging e desligada em production, tudo ao mesmo tempo.
Você liga e segmenta cada ambiente de forma independente.
Os três tipos
Seção intitulada “Os três tipos”Toda flag tem um tipo, escolhido na criação e imutável depois dela:
| Tipo | Valores | Bom para |
|---|---|---|
| Booleana | true / false |
Kill switches, gates de recursos, rollouts |
| String | Variantes de texto com nome | Experimentos de texto, seleção de algoritmo, temas |
| Número | Variantes numéricas com nome | Limites, timeouts, thresholds |
O tipo é imutável pelo mesmo motivo que a chave: o seu código lê a flag por uma chamada
tipada (isEnabled, stringValue, numberValue), e uma flag que mudasse de tipo debaixo de
um app publicado deixaria de fazer sentido para ele.
Variantes
Seção intitulada “Variantes”Flags de string e de número servem variantes — valores com nome, como control →
"buy-now" e treatment → "start-free". Os nomes são para você e para o seu painel; os
dispositivos dos seus usuários só recebem o valor. Nomes de variantes nunca saem do plano
de gerenciamento.
Padrões, e o padrão por trás do padrão
Seção intitulada “Padrões, e o padrão por trás do padrão”Duas coisas diferentes são chamadas de padrão, e vale a pena mantê-las separadas:
- O padrão da flag é o que um ambiente serve quando nenhuma regra de segmentação corresponde. Para uma flag booleana é o estado ligado/desligado; para uma flag multivariada é a variante que você escolhe como padrão.
- O padrão do seu código é o valor que você passa no ponto de chamada —
isEnabled("new-checkout", default: false). Esse é o fundo da cadeia de fallback: é o que o seu app usa quando nunca alcançou o FortressFlag, ou quando a flag não existe (ou não tem um valor para servir) naquele ambiente.
Uma flag multivariada recém-criada sem variante padrão escolhida não serve nada — o padrão do seu código responde até você decidir. Isso é proposital: uma flag que você não terminou de configurar deve se comportar como uma flag que não existe.
O ciclo de vida: arquivar, restaurar, expurgar
Seção intitulada “O ciclo de vida: arquivar, restaurar, expurgar”Excluir uma flag é reversível — até certo ponto. Arquivar a remove dos seus apps: em todo dispositivo online a flag para de resolver em cerca de um minuto, e os padrões do seu código assumem. Uma flag arquivada pode ser restaurada intacta dentro da janela de retenção, ou expurgada permanentemente depois dela. A lista de arquivadas fica dentro de cada projeto, ao lado das flags que ele contém.
Se uma flag ficou 90 dias sem ser tocada, o painel a marca como obsoleta — um empurrão para arquivá-la, nunca um arquivamento automático. Flags que você esqueceu são complexidade que a sua base de código ainda está pagando.
Para onde ir agora
Seção intitulada “Para onde ir agora”- Segmentação — regras, segmentos e rollouts percentuais
- Ambientes e projetos — onde as flags vivem
- Como as flags chegam ao seu app — o que um dispositivo realmente recebe