19 de Setembro de 2025
Feature flag no backend sem espalhar if pelo sistema inteiro
Feature flag pode ajudar rollout e segurança operacional, mas vira lixo rápido quando cada camada do backend decide a flag de um jeito diferente.
Andrews Ribeiro
Founder & Engineer
3 min Intermediario Sistemas
O problema
Feature flag parece inocente no começo.
Você quer:
- liberar aos poucos
- testar comportamento novo
- reduzir risco de rollout
Então adiciona:
- um
ifno handler
Depois:
- um
ifno use case - outro no worker
- outro no consumer
- outro no cron
Quando percebe, a flag já não controla só rollout.
Ela virou uma segunda arquitetura paralela.
Modelo mental
Flag boa decide:
- qual caminho entra
- para quem entra
- até quando existe
Ela não deveria espalhar incerteza pelo sistema inteiro.
Em backend, geralmente a pergunta melhor é:
onde está o ponto de decisão mais alto que já separa bem o fluxo?
Esse costuma ser o melhor lugar para a flag.
Onde a flag costuma ficar melhor
Muitas vezes faz sentido que a escolha fique:
- no ponto de entrada do caso de uso
- numa política central de roteamento
- numa composição que escolhe estratégia A ou B
O que normalmente piora a base:
- mesma flag consultada em cinco camadas
- caminho antigo e novo misturados dentro do mesmo método
- regra de persistência conhecendo flag de rollout
Isso torna o sistema difícil de ler e mais difícil ainda de limpar depois.
Exemplo simples
Imagine uma nova forma de calcular frete.
Uma forma ruim:
- handler checa a flag
- use case checa de novo
- service de preço checa mais uma vez
Uma forma melhor:
- um ponto central escolhe
LegacyFreightCalculatorouNewFreightCalculator - o resto do fluxo continua trabalhando contra uma interface interna estável
O rollout continua existindo.
Mas a contaminação cai muito.
O erro comum
O erro comum é tratar flag como atalho permanente.
O time pensa:
- “depois limpamos”
E nunca limpa.
Aí a base acumula:
- branch morta
- condição impossível de rastrear
- comportamento que ninguém mais sabe qual é o default
Flag madura precisa nascer com:
- dono
- janela de vida
- critério de remoção
Quando flag realmente ajuda
No backend, flag ajuda bastante quando você precisa:
- fazer rollout gradual
- conviver temporariamente com caminho antigo e novo
- reduzir blast radius
- desligar comportamento novo sem rollback completo
Mas flag não substitui:
- desenho de módulo
- estratégia de migração
- limpeza depois da transição
Como um senior pensa
Quem decide melhor costuma perguntar:
- a flag controla um ponto de escolha claro ou está vazando para todo lado?
- isso é rollout temporário ou duas lógicas permanentes disfarçadas?
- onde o sistema deveria decidir o caminho de forma mais estável?
- quem vai remover essa flag e quando?
Essa última pergunta salva muita base de virar museu de rollout antigo.
Ângulo de entrevista
Esse tema aparece em rollout, backend architecture e mitigação de risco.
O entrevistador quer ver se você:
- usa flag com critério
- sabe evitar
ifespalhado - pensa em remoção e manutenção
Resposta forte costuma soar assim:
“Eu usaria a flag para escolher o fluxo em um ponto alto e manter o resto do sistema estável. Evitaria checar a mesma flag em várias camadas e já definiria critério de remoção, para não transformar rollout temporário em complexidade permanente.”
Takeaway direto
Feature flag boa controla o risco.
Feature flag ruim espalha indecisão pelo código inteiro.
Resumo rápido
O que vale manter na cabeça
- Flag no backend deve controlar ponto de decisão claro, não contaminar todas as camadas.
- A melhor flag costuma viver perto da escolha de fluxo, não pulverizada pelo sistema.
- Toda flag precisa nascer com estratégia de remoção; do contrário ela vira arquitetura permanente por acidente.
- Feature flag serve para controlar risco e rollout, não para justificar duplicação eterna de caminhos.
Checklist de pratica
Use isto ao responder
- Consigo apontar um único ponto principal onde a flag decide o fluxo?
- A mesma flag está vazando para múltiplas camadas sem necessidade?
- Existe plano claro de remoção depois que o rollout terminar?
- Se a flag falhar ou ficar inconsistente, o comportamento default está explícito?
Você concluiu este artigo
Compartilhar esta página
Copie o link manualmente no campo abaixo.