Testar grátis
9 min leitura Guide 797 of 877

Feature Flags e Rollout Progressivo

Feature flags separam implantação de lançamento. GitScrum ajuda equipes a rastrear funcionalidades sinalizadas e coordenar rollouts progressivos.

Conceitos Básicos de Feature Flags

Por Que Feature Flags

BENEFÍCIOS DOS FEATURE FLAGS:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ SEM FLAGS:                                                  │
│ ──────────                                                  │
│ Implantar = Lançar                                        │
│ Todos usuários recebem funcionalidade imediatamente       │
│ Rollback requer nova implantação                          │
│ Risco de big bang                                          │
│                                                             │
│ COM FLAGS:                                                  │
│ ──────────                                                  │
│ Implantar ≠ Lançar                                         │
│ Ativar quando pronto                                       │
│ Desativar instantaneamente se houver problemas            │
│ Rollout gradual possível                                   │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ CASOS DE USO DE FLAGS:                                      │
│                                                             │
│ INTERRUPTORES DE LANÇAMENTO:                                │
│ Implantar funcionalidade incompleta, ativar quando pronta │
│ "Ship dark" - código em prod mas desativado               │
│                                                             │
│ INTERRUPTORES DE EXPERIMENTO:                               │
│ Testes A/B de funcionalidades                              │
│ Comparar métricas entre variantes                         │
│                                                             │
│ INTERRUPTORES DE OPS:                                       │
│ Kill switch para funcionalidades problemáticas            │
│ Degradação graciosa                                        │
│                                                             │
│ INTERRUPTORES DE PERMISSÃO:                                 │
│ Funcionalidades premium para usuários pagantes            │
│ Funcionalidades beta para early adopters                  │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ EXEMPLO DE CÓDIGO:                                          │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ if (featureFlags.isEnabled('new-search')) {            ││
│ │   return <NewSearchComponent />;                       ││
│ │ }                                                       ││
│ │ return <OldSearchComponent />;                         ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘

Rollout Progressivo

Estratégia de Rollout

ESTÁGIOS DE ROLLOUT PROGRESSIVO:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ ESTÁGIO 1: INTERNO (0.1%)                                  │
│ ──────────────────────────                                  │
│ • Apenas equipe de desenvolvimento                         │
│ • Capturar problemas óbvios                                │
│ • Duração: 1-2 dias                                        │
│                                                             │
│ ESTÁGIO 2: FUNCIONÁRIOS (1%)                               │
│ ───────────────────────────                                 │
│ • Todos funcionários da empresa                           │
│ • Teste no mundo real                                      │
│ • Duração: 1-3 dias                                        │
│                                                             │
│ ESTÁGIO 3: USUÁRIOS BETA (5%)                              │
│ ───────────────────────────                                 │
│ • Early adopters que optaram                              │
│ • Coletar feedback                                         │
│ • Duração: 3-5 dias                                        │
│                                                             │
│ ESTÁGIO 4: CANARY (10%)                                    │
│ ───────────────────────                                     │
│ • Amostra aleatória de usuários                            │
│ • Monitorar métricas                                       │
│ • Duração: 2-3 dias                                        │
│                                                             │
│ ESTÁGIO 5: PARCIAL (25%, 50%)                              │
│ ────────────────────────────                                │
│ • População maior                                          │
│ • Confirmar em escala                                      │
│ • Duração: 1-2 dias cada                                   │
│                                                             │
│ ESTÁGIO 6: ROLLOUT COMPLETO (100%)                         │
│ ────────────────────────────────                            │
│ • Todos usuários                                           │
│ • Continuar monitorando                                    │
│ • Remover flag após estabilizar                            │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ EM CADA ESTÁGIO:                                           │
│ • Monitorar taxas de erro                                 │
│ • Observar métricas de performance                        │
│ • Coletar feedback de usuários                            │
│ • Pronto para pausar ou fazer rollback                    │
└─────────────────────────────────────────────────────────────┘

Rastreamento de Rollout

RASTREAMENTO DE ROLLOUTS:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ TAREFA DE FEATURE FLAG:                                     │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ FLAG-012: Rollout de Nova Experiência de Busca         ││
│ │                                                         ││
│ │ NOME DO FLAG: new-search-experience                     ││
│ │ CRIADO: 10 Jan 2025                                     ││
│ │ RESPONSÁVEL: @product-lead                              ││
│ │                                                         ││
│ │ PLANO DE ROLLOUT:                                        ││
│ │ ☑ 12 Jan: Interno (0.1%)                               ││
│ │ ☑ 14 Jan: Funcionários (1%)                            ││
│ │ ☑ 17 Jan: Usuários beta (5%)                           ││
│ │ ☑ 20 Jan: Canary (10%)                                 ││
│ │ ☐ 22 Jan: 25% (aguardando aprovação)                   ││
│ │ ☐ 24 Jan: 50%                                           ││
│ │ ☐ 27 Jan: 100%                                          ││
│ │ ☐ 10 Feb: Remover flag                                 ││
│ │                                                         ││
│ │ MÉTRICAS PARA OBSERVAR:                                  ││
│ │ • Latência de busca (p95 < 200ms)                      ││
│ │ • Taxa de cliques (≥ baseline)                         ││
│ │ • Taxa de erro (< 0.1%)                                ││
│ │                                                         ││
│ │ STATUS ATUAL: Rollout 10%                              ││
│ │ Métricas: Todas verdes ✅                               ││
│ │                                                         ││
│ │ GATILHO DE ROLLBACK:                                     ││
│ │ • Taxa de erro > 1%                                    ││
│ │ • Latência p95 > 500ms                                 ││
│ │ • CTR cai > 20%                                         ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ VERIFICAÇÃO DIÁRIA:                                         │
│ • Métricas estão dentro dos limites?                      │
│ • Há reclamações de usuários?                             │
│ • Pronto para próximo estágio?                            │
└─────────────────────────────────────────────────────────────┘

Gerenciamento de Flags

Ciclo de Vida de Flags

CICLO DE VIDA DE FEATURE FLAGS:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ ESTÁGIOS DO CICLO DE VIDA:                                  │
│                                                             │
│ ┌─────────┐   ┌─────────┐   ┌─────────┐   ┌─────────┐     │
│ │ CRIAR   │──→│ ROLLOUT │──→│ ESTÁVEL │──→│ REMOVER │     │
│ │         │   │         │   │         │   │         │     │
│ │ Flag    │   │ 0%→100% │   │ 100%    │   │ Código  │     │
│ │ definido│   │ monitor │   │ confirmar│   │         │     │
│ └─────────┘   └─────────┘   └─────────┘   └─────────┘     │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ DOCUMENTAÇÃO DE FLAGS:                                      │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ REGISTRO DE FLAGS                                       ││
│ │                                                         ││
│ │ FLAG                 PROPÓSITO         STATUS   DONO   ││
│ │ ────                 ─────────         ──────   ─────   ││
│ │ new-search          Toggle lançamento Rollout  @alex  ││
│ │ dark-mode           Toggle lançamento 100%     @jordan││
│ │ premium-export      Permissão         Ativo    @sam   ││
│ │ experimental-ai     Experimento       5%       @pat   ││
│ │ kill-notifications  Toggle ops        Pronto   @ops   ││
│ │                                                         ││
│ │ LIMPEZA NECESSÁRIA:                                      ││
│ │ • old-checkout: 100% por 30 dias → remover ⚠️         ││
│ │ • beta-dashboard: 100% por 60 dias → remover 🔴       ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ REGRAS DE LIMPEZA:                                          │
│ ─────────────────                                           │
│ • Flag em 100% por 2+ semanas → Agendar remoção          │
│ • Flag em 0% por 4+ semanas → Considerar exclusão         │
│ • Criar tarefa de limpeza quando flag atingir 100%        │
│ • Revisar inventário de flags mensalmente                  │
└─────────────────────────────────────────────────────────────┘

Evitando Dívida Técnica

HIGIENE DE FLAGS:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ O PROBLEMA:                                                 │
│ ───────────                                                 │
│ Flags se acumulam se não limpos                           │
│ Código fica confuso com muitas ramificações               │
│ "Qual caminho de código está realmente executando?"       │
│                                                             │
│ PREVENÇÃO:                                                  │
│ ──────────                                                  │
│                                                             │
│ DATAS DE EXPIRAÇÃO:                                         │
│ Todo flag tem data planejada de remoção                   │
│ Definir ao criar flag                                      │
│ Tarefa criada para limpeza                                │
│                                                             │
│ LIMITES DE FLAGS:                                           │
│ Máximo 20 flags ativos por serviço                        │
│ Deve remover um para adicionar um (no limite)            │
│                                                             │
│ REVISÃO REGULAR:                                            │
│ Revisão mensal do inventário de flags                     │
│ "Quais flags podemos remover?"                            │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ TAREFA DE LIMPEZA:                                          │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ TECH-045: Remover flag new-search                      ││
│ │                                                         ││
│ │ FLAG: new-search-experience                            ││
│ │ STATUS: 100% por 3 semanas                             ││
│ │ ESTÁVEL: Sim, todas métricas normais                   ││
│ │                                                         ││
│ │ TAREFAS:                                                 ││
│ │ ☐ Remover verificações de feature flag do código      ││
│ │ ☐ Remover caminho de código antigo                     ││
│ │ ☐ Remover flag da configuração                        ││
│ │ ☐ Atualizar testes                                     ││
│ │ ☐ Implantar e verificar                                ││
│ │                                                         ││
│ │ ESTIMATIVA: 2 pontos                                   ││
│ │ PRIORIDADE: Média (dívida técnica)                     ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘

Procedimentos de Rollback

Lidando com Problemas

PROCESSO DE ROLLBACK:
┌─────────────────────────────────────────────────────────────┐
│                                                             │
│ QUANDO FAZER ROLLBACK:                                      │
│ ──────────────────────                                      │
│ • Taxa de erro excede limite                               │
│ • Degradação de performance                                │
│ • Reclamações críticas de usuários                         │
│ • Problema de segurança descoberto                        │
│                                                             │
│ COMO FAZER ROLLBACK:                                        │
│ ─────────────────────                                       │
│ 1. Definir flag para 0%                                   │
│ 2. Verificar comportamento antigo restaurado              │
│ 3. Notificar equipe                                        │
│ 4. Investigar problema                                     │
│                                                             │
│ ─────────────────────────────────────────────────────────── │
│                                                             │
│ TAREFA DE ROLLBACK:                                         │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ INCIDENTE: Nova busca causando erros de timeout       ││
│ │                                                         ││
│ │ DETECTADO: 20 Jan, 14:15                                ││
│ │ Taxa de erro: 5% (limite: 1%)                          ││
│ │                                                         ││
│ │ AÇÃO TOMADA:                                             ││
│ │ 14:17 - Flag definido para 0%                          ││
│ │ 14:18 - Taxa de erro retornando ao normal              ││
│ │ 14:20 - Confirmado todo tráfego no caminho antigo      ││
│ │                                                         ││
│ │ ACOMPANHAMENTO:                                           ││
│ │ ☐ Análise de causa raiz                                ││
│ │ ☐ Corrigir problema identificado                       ││
│ │ ☐ Adicionar teste para prevenir regressão             ││
│ │ ☐ Replanejar rollout                                   ││
│ │                                                         ││
│ │ CAUSA RAIZ:                                              ││
│ │ Query de banco não otimizada para carga de 10%        ││
│ │ Precisa de índice antes de retomar rollout             ││
│ └─────────────────────────────────────────────────────────┘│
│                                                             │
│ CHAVE: Rollback NÃO é falha                              │
│ É o sistema funcionando como projetado                    │
│ Melhor capturar problemas cedo                            │
└─────────────────────────────────────────────────────────────┘

Soluções Relacionadas