GitScrum / Docs
Todas as Boas Práticas

Gerenciamento de Feature Flags | Rollout e Ciclo de Vida

Use feature flags para releases seguros: tipos (release, ops, permissão), ciclo de vida, higiene. GitScrum rastreia status e limpeza de flags.

7 min de leitura

Feature flags desacoplam deployment de release. Implante código quando estiver pronto, libere funcionalidades quando tiver confiança. Isso permite lançamentos mais seguros, rollbacks mais fáceis e melhor teste. Este guia cobre abordagens práticas para gerenciamento de feature flags.

Tipos de Flags

TipoPropósitoVida útil
ReleaseRollout gradualCurta
ExperimentoTeste A/BMédia
OpsKill switchLonga
PermissãoFuncionalidades de clientePermanente

Implementação Básica

Feature Flags Simples

BÁSICOS DE FEATURE FLAG
══════════════════════

IMPLEMENTAÇÃO SIMPLES:
─────────────────────────────────────
Verificação básica de flag:

// Configuração
const FLAGS = {
  newCheckout: true,
  darkMode: false,
  betaFeatures: true,
};

// Uso
if (FLAGS.newCheckout) {
  return <NewCheckoutFlow />;
} else {
  return <OldCheckoutFlow />;
}

CONFIGURAÇÃO EXTERNA:
─────────────────────────────────────
Flags do servidor:

// Buscar flags na inicialização
const flags = await fetchFlags(userId);

// Uso
if (flags.isEnabled('newCheckout')) {
  return <NewCheckoutFlow />;
}

// Benefícios:
// - Alterar sem deploy
// - Flags específicos de usuário
// - Rollouts por porcentagem
// - Analytics integrado

PROVEDORES DE SERVIÇO DE FLAGS:
─────────────────────────────────────
Serviços populares:
├── LaunchDarkly
├── Split.io
├── ConfigCat
├── Unleash (open source)
├── Flagsmith (open source)
└── Escolha baseado nas necessidades

Estratégias de Rollout

Lançamento Gradual

ESTRATÉGIAS DE ROLLOUT
══════════════════════

ROLLOUT POR PORCENTAGEM:
─────────────────────────────────────
Aumento gradual:

Dia 1: 1% dos usuários
├── Monitorar erros
├── Verificar performance
├── Observar métricas
└── Raio de explosão pequeno

Dia 2: 10% dos usuários
├── Mais tráfego
├── Mais confiança
├── Ainda controlado
└── Rollback fácil

Dia 3: 50% dos usuários
├── Metade do tráfego
├── Validação significativa
├── Quase lá
└── Pronto para completo?

Dia 4: 100% dos usuários
├── Rollout completo
├── Funcionalidade ativa
├── Flag pode ser removida
└── Pronto!

ROLLOUT DIRECIONADO:
─────────────────────────────────────
Usuários específicos primeiro:
├── Funcionários internos primeiro
├── Depois usuários beta
├── Depois porcentagem de todos
├── Depois release completo
└── Construção gradual de confiança

// Regras de direcionamento
flag.targets = [
  { type: 'email', contains: '@company.com' }, // Staff
  { type: 'segment', equals: 'beta_users' },   // Beta
  { type: 'percentage', value: 10 },           // 10%
];

RELEASE CANARY:
─────────────────────────────────────
├── Combinar com deployment canary
├── Flag habilita em instâncias canary
├── Rede de segurança dupla
├── Muito controlado
└── Segurança máxima

Ciclo de Vida da Flag

Criação até Remoção

CICLO DE VIDA DE FEATURE FLAG
════════════════════════════

CRIAÇÃO:
─────────────────────────────────────
Ao criar flag:
├── Nome: descritivo, consistente
├── Proprietário: quem é responsável
├── Propósito: por que esta flag existe
├── Expiração: quando deve ser removida
├── Rastreamento: link para tarefa/issue
└── Documentar a flag

Exemplo:
{
  name: "new_checkout_v2",
  owner: "sarah@company.com",
  purpose: "Rollout gradual do redesign do checkout",
  created: "2024-01-15",
  expectedRemoval: "2024-02-15",
  jiraTicket: "PROJ-456"
}

USO ATIVO:
─────────────────────────────────────
Enquanto flag está ativa:
├── Monitorar uso
├── Rastrear no gerenciamento de projeto
├── Atualizar status conforme progresso do rollout
├── Documentar decisões
└── Gerenciamento ativo

REMOÇÃO:
─────────────────────────────────────
Quando funcionalidade estiver estável:
1. Flag em 100% por 2+ semanas
2. Nenhum problema observado
3. Remover código da flag
4. Implantar limpeza de código
5. Deletar flag do serviço
6. Fechar tarefa de rastreamento

DÍVIDA DE LIMPEZA:
─────────────────────────────────────
Agendar auditorias regulares:
├── Quais flags estão ativas?
├── Alguma passou da remoção esperada?
├── Alguma flag órfã?
├── Remover flags obsoletas
├── Prevenir acúmulo
└── Auditoria mensal ou trimestral

Higiene de Flags

Evitando Dívida de Flags

HIGIENE DE FLAGS
════════════════

SINTOMAS DE DÍVIDA DE FLAGS:
─────────────────────────────────────
Sinais de alerta:
├── Muitas flags ativas
├── Ninguém sabe o que as flags fazem
├── Flags nunca removidas
├── Combinações complexas de flags
├── Flags de anos atrás
├── Ninguém é dono das flags
└── Dívida técnica

PREVENÇÃO:
─────────────────────────────────────
Boas práticas:
├── Datas de expiração na criação
├── Proprietário para cada flag
├── Tarefa para remover flag
├── Auditorias regulares
├── Limitar flags totais
├── Cultura de limpeza
└── Flags são temporárias

LIMITES DE FLAGS:
─────────────────────────────────────
Diretrizes:
├── Máx 10-20 flags de release ativas
├── Mais para flags ops/permissão
├── Se muitas, parar de adicionar
├── Limpar antes de criar novas
└── Qualidade sobre quantidade

PROCESSO DE AUDITORIA:
─────────────────────────────────────
Mensalmente:
├── Listar todas flags ativas
├── Verificar cada uma: ainda necessária?
├── Criar tarefas de remoção
├── Remover flags expiradas
├── Atualizar documentação
└── Manutenção regular

Teste

Estratégias de Teste com Flags

TESTE COM FLAGS
═══════════════

TESTAR AMBOS OS CAMINHOS:
─────────────────────────────────────
Quando flag existe:
├── Testar com flag LIGADA
├── Testar com flag DESLIGADA
├── Ambos os caminhos funcionam
├── Testes CI para ambos
└── Sem surpresas

describe('Checkout', () => {
  it('funciona com novo checkout (flag ligada)', () => {
    setFlag('newCheckout', true);
    // testar novo caminho
  });
  
  it('funciona com checkout antigo (flag desligada)', () => {
    setFlag('newCheckout', false);
    // testar caminho antigo
  });
});

FLAGS DE AMBIENTE:
─────────────────────────────────────
Diferentes por ambiente:
├── Dev: Todas flags ligadas (testar novo)
├── Staging: Espelho da produção
├── Produção: Rollout controlado
└── Config específica do ambiente

TESTE EM PRODUÇÃO:
─────────────────────────────────────
Flag permite teste seguro:
├── Habilitar para usuários internos
├── Testar em produção
├── Dados reais, condições reais
├── Flag protege usuários
├── Construir confiança
└── Depois fazer rollout

Integração com Projeto

Rastreando Flags no GitScrum

RASTREAMENTO DE FLAGS NO GITSCRUM
═════════════════════════════════

FLAG COMO TAREFA:
─────────────────────────────────────
Criar tarefa para flag:
├── "Remover flag new_checkout_v2"
├── Data limite: 2 semanas após rollout completo
├── Atribuído: Proprietário da flag
├── Label: "flag-cleanup"
├── Rastrear no backlog
└── Não vai esquecer

STATUS DA FLAG:
─────────────────────────────────────
Rastrear status do rollout:
├── Na tarefa: porcentagem atual
├── Na tarefa: algum problema
├── Atualizar conforme progresso do rollout
├── Visibilidade dos stakeholders
└── Progresso rastreado

DOCUMENTAÇÃO DA FLAG:
─────────────────────────────────────
No NoteVault:
├── Lista de flags ativas
├── Propósitos das flags
├── Status do rollout
├── Cronograma de limpeza
├── Referência única
└── Visibilidade do time

NOTAS DE RELEASE:
─────────────────────────────────────
Quando flag totalmente lançada:
├── Funcionalidade agora nas notas de release
├── Vinculada à tarefa original da funcionalidade
├── Tarefa de limpeza da flag criada
└── Rastreamento completo

Melhores Práticas

Para Feature Flags

  • Proprietário de cada flag — Alguém responsável
  • Datas de expiração — Flags são temporárias
  • Auditorias regulares — Remover flags obsoletas
  • Testar ambos os caminhos — Flag ligada e desligada
  • Rastrear na ferramenta de projeto — Visibilidade
  • Anti-Padrões

    ERROS DE GERENCIAMENTO DE FLAGS:
    ✗ Flags sem proprietários
    ✗ Flags nunca removidas
    ✗ Muitas flags ativas
    ✗ Sem datas de expiração
    ✗ Combinações complexas de flags
    ✗ Flags como funcionalidades permanentes
    ✗ Sem documentação
    ✗ Sem teste de ambos os caminhos
    

    Soluções Relacionadas