Deploy e release são eventos separados. O código entra em produção escondido atrás de uma feature flag, e o release acontece depois, para o público escolhido, com um toggle. O time faz merge de código escuro no trunk todos os dias; produção recebe tudo e o cliente não vê nada. Rollback vira mudança de configuração de segundos, sem revert de commit nem janela de manutenção.

Cada tipo de flag tem seu ciclo de vida

Flags misturadas numa pilha só viram dígitos mortos no config. Dê lifecycle próprio a cada categoria: release flags vivem dias e morrem após 100% do rollout; kill switches (ops flags) ficam meses vigiando dependências instáveis; permissioning flags persistem como entitlements de plano; experiment flags seguem o calendário estatístico do teste A/B. Cada flag nasce com owner registrado e data prevista de remoção.

Como funciona um rollout progressivo?

Rampa clássica: 1% interno, 5%, 25%, 50%, 100%. Entre cada degrau, o time observa dashboard de error rate e latência por 24 horas antes de liberar o próximo. LaunchDarkly, Unleash e Flagsmith entregam rampa percentual pronta; serviço de config caseiro resolve com hash consistente do ID do usuário, garantindo que a mesma pessoa caia sempre no mesmo grupo. Avaliação server-side quando viável evita payload inflado que entrega o roadmap para concorrente curioso inspecionando o bundle JS.

Kill switches em dependências externas

Toda dependência externa arriscada ganha flag. Provedor de pagamento cai? Toggle para o processador fallback em segundos, sem deploy emergencial de sexta à noite. Busca, recomendações e qualquer chamada com caminho alternativo aceitável merecem o mesmo tratamento. Teste cada kill switch a cada trimestre; flag que nunca passou por desligamento pode falhar justamente no dia do incidente.

Controlando a dívida técnica de flags

  • O CI marca branch de código de flag com idade acima do acordado (30, 60 dias) e falha o build
  • Registro obrigatório de owner e expiry date na criação de cada flag
  • Limpeza de flags obsoletas entra no ritual da sprint com item fixo no board

Matriz de testes explode com combinações: N flags simultâneas geram 2^N caminhos. Cubra o caminho default-off e o default-on de cada flag e amostre combinações críticas; cobertura total é inviável acima de cinco flags ao mesmo tempo. Bootstrap das flags no load da página garante consistência em SSR, sem flash entre render server e hidratação.