Kaique Mitsuo Silva Yamamoto
StartupProduto

Feature Flag

O que sao feature flags (feature toggles), casos de uso como rollout gradual, A/B test e kill switch, ferramentas e boas praticas.

O que e?

Feature Flag (tambem chamada de feature toggle) e uma tecnica que permite ativar ou desativar funcionalidades em producao sem precisar fazer deploy. E como um interruptor de luz para cada feature do seu produto.

Com feature flags, voce separa o deploy (colocar codigo em producao) da release (disponibilizar a feature para usuarios). Isso reduz risco e aumenta a velocidade de entrega.


Como funciona

Conceito basico

// Sem feature flag:
function Dashboard() {
  return <NewDashboard />  // deploy = release (arriscado)
}

// Com feature flag:
function Dashboard() {
  if (featureFlags.isEnabled('new-dashboard')) {
    return <NewDashboard />  // ativado por flag
  }
  return <OldDashboard />   // fallback seguro
}

Casos de uso

Caso de usoDescricaoExemplo
Rollout gradualLibera para % crescente de usuarios1% → 5% → 25% → 100%
A/B testingVariantes para medir impactoBotao azul vs verde
Kill switchDesativa feature problematica instantaneamenteBug critico em producao
Beta testingLibera apenas para beta testersEarly adopters testam antes
Ops togglesDesativa features pesadas sob cargaBlack Friday: desativa relatorios
Permission togglesFeatures por plano/tierPlano Pro tem analytics avancado

Tipos de feature flags

Release Flags (curta duracao):
├── Objetivo: rollout seguro de nova feature
├── Duracao: dias a semanas
└── Remover apos rollout completo ✅

Experiment Flags (curta duracao):
├── Objetivo: A/B test
├── Duracao: semanas (duracao do teste)
└── Remover apos conclusao do teste ✅

Ops Flags (longa duracao):
├── Objetivo: controle operacional
├── Duracao: permanente
└── Exemplo: circuit breaker, modo manutencao

Permission Flags (longa duracao):
├── Objetivo: features por segmento/plano
├── Duracao: permanente
└── Exemplo: features premium, enterprise-only

Ferramentas

FerramentaTipoDestaque
LaunchDarklySaaSLider de mercado, targeting avancado
UnleashOpen-sourceSelf-hosted, SDK para multiplas linguagens
FlagsmithOpen-source + SaaSRemote config + feature flags
SplitSaaSFocado em experimentacao
HomebrewCustomVariavel de ambiente ou banco de dados

Boas praticas

✅ Fazer:
├── Nomear flags de forma descritiva: "enable-new-checkout-v2"
├── Documentar cada flag: quem criou, proposito, data de remocao
├── Definir "expiration date" para flags temporarias
├── Ter dashboard centralizado de flags ativas
└── Testar ambos os caminhos (flag ON e flag OFF)

❌ Evitar:
├── Flags aninhadas (if flag A && flag B && flag C)
├── Flags sem dono ou sem data de remocao
├── Codigo morto protegido por flags que nunca serao ativadas
├── Usar flags para esconder bugs (fix the bug!)
└── Centenas de flags ativas simultaneamente

Por que importa?

Feature flags sao importantes porque:

  • Reduzem risco de deploy — se algo der errado, desativa a flag em segundos (sem rollback)
  • Aceleram entrega — deploys menores e mais frequentes
  • Habilitam experimentacao — A/B tests sem complexidade no deploy
  • Desacoplam times — backend pode deployar antes do frontend estar pronto
  • Melhoram resiliencia — kill switches protegem contra falhas em cascata

Empresas como Facebook, Netflix e Google usam milhares de feature flags em producao simultaneamente.


Exemplo pratico

Rollout gradual de novo sistema de busca

Feature: "new-search-engine" (Elasticsearch → Algolia)

Dia 1: Deploy com flag OFF
├── Codigo em producao, mas nenhum usuario ve
├── Time testa internamente
└── Monitora logs de erro

Dia 3: Flag ON para equipe interna (1%)
├── 50 usuarios internos usando
├── Monitorar: latencia, relevancia, erros
└── Resultado: latencia 40% menor ✅

Dia 7: Rollout para 5% dos usuarios
├── ~2.500 usuarios
├── Monitorar: busca-sem-resultados, CTR
└── Resultado: CTR +12%, zero erros ✅

Dia 14: Rollout para 25%
├── ~12.500 usuarios
├── Bug encontrado: caracteres especiais
├── Fix deployado (sem mudar a flag)
└── Monitorar mais 3 dias

Dia 21: Rollout para 100%
├── Todos os usuarios usando Algolia
├── Monitorar 1 semana adicional
└── Resultado final: busca 3x mais rapida ✅

Dia 30: Remover flag + codigo antigo
├── Deletar OldSearchEngine
├── Deletar flag "new-search-engine"
└── Reduzir tech debt ✅

Termos relacionados

  • A/B Testing — feature flags sao o mecanismo tecnico por tras de testes A/B
  • Sprint — feature flags permitem deploys continuos dentro do sprint
  • Tech Debt — flags nao removidas geram divida tecnica