Quase todo app corporativo chega a um ponto em que a equipe quer mudar comportamento sem esperar novo build. Pode ser para ligar uma tela nova para parte da base, esconder um fluxo com problema, mudar limite operacional, bloquear uma integracao instavel ou acelerar rollout sem travar todo mundo de uma vez. A tentacao e transformar isso em gambiarra distribuida: um if perdido no app, um endpoint improvisado, uma tabela sem dono ou uma flag que ninguem mais entende.
O problema e que feature flag e configuracao remota sao ferramentas poderosas demais para nascer sem arquitetura. Quando bem desenhadas, elas separam deploy de liberacao, reduzem blast radius e aceleram resposta a incidente. Quando nascem sem criterio, viram matriz confusa de comportamento, debito tecnico e suporte perdido entre versoes, perfis e plataformas.
Este guia organiza um caminho pratico para apps React Native corporativos: quando usar feature flag, quando usar configuracao remota, como isso conversa com rollout, update gate e kill switch e como manter o controle sem prometer magica.
1. Separe deploy de liberacao de comportamento
A documentacao do Firebase Remote Config resume bem o apelo do tema: mudar comportamento e aparencia do app sem publicar uma nova versao. Isso e valioso porque nem toda decisao operacional precisa esperar loja, revisao ou novo binario. Ao mesmo tempo, a documentacao da Expo sobre rollouts lembra que atualizacao ainda e distribuicao de codigo e pode ser liberada por percentual de usuarios. Em outras palavras, existem duas alavancas diferentes:
- deploy/update: entregar codigo novo ao aparelho;
- release de comportamento: decidir quando e para quem uma funcionalidade fica ativa.
Quando o time mistura essas duas camadas, qualquer ajuste pequeno vira novo build, ou qualquer comportamento passa a depender de remote config ate quando nao deveria.
2. Feature flag nao e o mesmo que configuracao remota
As duas coisas andam juntas, mas nao sao identicas. Em termos praticos:
- feature flag: chave que liga ou desliga um comportamento, normalmente binario ou com poucas variantes;
- configuracao remota: conjunto de parametros que o app pode buscar para ajustar comportamento, texto, limite, percentual ou visibilidade sem novo build.
Uma feature flag pode viver dentro de um sistema de configuracao remota, mas o desenho nao precisa ser tratado como se tudo fosse a mesma categoria. Essa separacao ajuda a manter clareza sobre o que e experimento, o que e politica operacional e o que e protecao de incidente.
3. Nao use configuracao remota para segredo ou regra critica sem servidor
Remote config nao e cofre de segredo. Tambem nao deve virar unica defesa para regra critica de seguranca, precificacao ou autorizacao. O app do cliente continua sendo ambiente sob controle parcial do usuario e sujeito a cache, atraso, versao antiga e analise local.
Use configuracao remota para:
- ligar ou desligar recurso visivel;
- mudar limite operacional nao sensivel;
- controlar rollout por versao, plataforma ou perfil;
- exibir CTA, banner ou bloco contextual;
- desativar parte do fluxo enquanto a correcao definitiva chega.
Evite depender dela como unica fonte para:
- segredos;
- permissao de negocio critica;
- politica de seguranca que o backend tambem precisa impor;
- calculo que nao pode divergir do servidor.
Se a decisao realmente importa para integridade do negocio, o backend ainda precisa ser a ultima palavra.
4. Kill switch, update gate e feature flag resolvem dores diferentes
No cluster mobile da RM Porto Tech, esses termos ja aparecem em outros artigos, mas vale fixar a diferenca operacional:
- feature flag: libera ou esconde comportamento novo;
- kill switch: desliga rapidamente um fluxo que ficou perigoso ou instavel;
- update gate: decide se a versao instalada ainda pode operar ou deve atualizar.
Um problema em upload pode pedir kill switch. Um formulario novo pode entrar por feature flag. Uma falha grave de compatibilidade pode exigir update gate. Quando o time chama tudo de flag, perde capacidade de resposta proporcional.
5. Comece com defaults locais seguros
Todo app precisa saber o que fazer antes de baixar configuracao remota, quando a rede falha ou quando o cache local esta velho. Esse e o ponto que separa sistema previsivel de app nervoso.
Regra pratica:
- toda flag ou parametro deve ter default local explicito;
- o default deve privilegiar seguranca e previsibilidade;
- o app precisa funcionar de forma coerente mesmo sem buscar a configuracao nova;
- o time deve saber qual comportamento embarcado vai valer em primeira abertura ou em falha de fetch.
Sem isso, a configuracao remota deixa de ser acelerador e vira dependencia fragil. Em ambiente real, rede ruim e primeira execucao existem.
6. Nome, dono e prazo importam tanto quanto o valor da flag
Feature flag sem dono vira entulho. Remote config sem prazo vira sistema paralelo de comportamento. O minimo saudavel para cada item costuma incluir:
- nome claro e estavel;
- descricao curta do que controla;
- dono tecnico ou produto responsavel;
- data esperada para remocao ou revisao;
- valor default;
- plataformas ou versoes afetadas.
Esse pequeno cadastro reduz o risco de flags antigas continuarem influenciando release meses depois, quando ninguem mais lembra por que elas nasceram.
7. Segmente por contexto que o app e o backend realmente conhecem
A documentacao do Firebase Remote Config trata parametros e condicoes como base para variar comportamento por contexto. Em app corporativo, isso costuma fazer sentido quando a segmentacao e concreta e auditavel. Exemplos saudaveis:
- plataforma Android ou iOS;
- app version ou build minima;
- perfil de cliente interno, piloto ou base geral;
- ambiente preview, homologacao ou producao;
- grupo pequeno de rollout controlado.
Evite segmentar com criterios que o suporte nao consegue entender depois. Se a equipe nao consegue responder por que determinado usuario recebeu um comportamento diferente, a operacao ja perdeu controle.
8. Rollout progressivo e uma conversa entre codigo e comportamento
A documentacao da Expo sobre rollouts mostra que updates podem ser liberados para um percentual da base e depois ampliados gradualmente. Isso e uma camada importante para distribuir codigo com menor risco. Quando o app tambem usa feature flags ou configuracao remota, o time ganha outra camada: controlar quando o comportamento fica visivel dentro de um codigo ja entregue.
Uma combinacao madura pode ser:
- entregar o codigo para parte pequena da base;
- observar crash, erro de API e estabilidade;
- ligar a funcionalidade so para um subconjunto controlado;
- ampliar rollout de codigo e de comportamento em etapas separadas.
Essa separacao e valiosa porque nem todo problema aparece na instalacao do codigo. Alguns so surgem quando o recurso realmente fica ativo.
9. Feature flag nao corrige compatibilidade nativa que exige novo build
Uma tentacao frequente e usar flag para tentar driblar limite de runtime, permissao nova ou dependencia nativa ausente. Isso nao fecha. Se o codigo depende de algo que o binario nao possui, a flag nao cria esse suporte do nada.
Por isso, o artigo compatibilidade entre app, API e runtimeVersion continua vizinho natural deste tema. Feature flag e excelente para controlar visibilidade e comportamento. Ela nao substitui a fronteira entre o que exige novo build e o que ainda pode ser decidido no codigo ja embarcado.
10. Use kill switch para conter incidente, nao para esconder bagunca permanente
Kill switch bem desenhado salva operacao. Mas ele foi feito para resposta rapida a problema relevante, nao para conviver eternamente como muleta de fluxo mal resolvido.
Exemplos onde ele ajuda:
- desligar temporariamente upload instavel;
- pausar uma sincronizacao que esta duplicando efeitos;
- esconder um CTA novo que esta levando a rota quebrada;
- tirar do ar um experimento que piorou a experiencia.
Se o mesmo kill switch segue ligado por meses, o problema ja deixou de ser mitigacao e virou arquitetura abandonada. Nesse ponto, a equipe precisa corrigir o fluxo de vez.
11. Background task e remote config tambem precisam conversar
Depois do artigo sobre background task e sincronizacao diferida, o proximo passo natural e ligar os dois temas com cuidado. Configuracao remota pode ajudar a decidir, por exemplo, tamanho de lote, pausa de sincronizacao ou desligamento temporario de uma rotina. Mas isso so funciona bem quando:
- existem defaults locais seguros;
- o app nao depende de fetch fresco para sobreviver;
- a task em background aceita que a configuracao pode estar stale;
- o backend continua impondo limites importantes.
Sem essa disciplina, a equipe acha que esta controlando o app a distancia quando, na verdade, depende de janelas de execucao e cache que nao obedecem o relogio do time.
12. Observabilidade precisa dizer que combinacao de flags estava ativa
Quando a equipe comeca a liberar comportamento por flag, o suporte precisa saber em que estado o app estava no momento do erro. Isso pede observabilidade minima:
- versao do app e build;
- plataforma;
- flags criticas ou grupo de rollout ativo;
- parametros operacionais relevantes;
- momento da ultima atualizacao de config.
O artigo observabilidade do app em producao fecha muito bem essa costura. Sem esse contexto, dois usuarios com o mesmo binario parecem estar no mesmo estado quando, na pratica, receberam comportamentos diferentes.
13. Teste configuracao velha, nova e ausente
Um erro recorrente e validar apenas o cenario ideal: app novo, configuracao nova, rede boa. Em producao, a equipe precisa pensar pelo menos em tres estados:
- configuracao nova recebida com sucesso;
- configuracao antiga ainda em cache;
- nenhuma configuracao remota disponivel, valendo apenas default local.
Tambem vale testar combinacoes como:
- flag ligada em Android e desligada em iOS;
- kill switch acionado em build antiga;
- rollout parcial com backend ainda convivendo com comportamento anterior;
- usuario que ficou dias sem abrir o app e volta com config stale.
Esse tipo de teste evita que a equipe descubra em producao que o app so era previsivel em um unico caminho feliz.
14. Remocao de flag faz parte da entrega
Feature flag boa e temporaria na maioria dos casos. Se o recurso estabilizou, a flag precisa sair. Se o experimento morreu, a flag tambem precisa sair. Se a configuracao virou politica permanente, vale promovela para estrutura mais simples e explicita.
Checklist de limpeza:
- confirmar que o rollout terminou;
- fixar o comportamento final no codigo;
- remover leituras e condicoes mortas;
- limpar parametro remoto sem uso;
- atualizar documentacao e playbook.
Flag debt cresce rapido e cobra caro em manutencao, debug e onboarding.
15. Checklist rapido para operar sem caos
- Separar deploy de liberacao de comportamento.
- Usar defaults locais seguros para toda flag ou parametro remoto.
- Definir nome, dono e prazo de revisao de cada item.
- Segmentar por contexto compreensivel para suporte e engenharia.
- Nao usar remote config para segredo ou regra critica sem backend.
- Distinguir feature flag, kill switch e update gate.
- Conectar rollout de codigo com rollout de comportamento quando fizer sentido.
- Registrar no log e nos eventos que conjunto de flags estava ativo.
- Testar config nova, antiga e ausente.
- Remover flag depois que a transicao terminar.
16. Erros comuns
- usar feature flag como desculpa para nunca terminar uma entrega;
- tratar remote config como cofre de segredo;
- segmentar por criterio que ninguem consegue explicar depois;
- ligar comportamento que o binario ainda nao suporta;
- depender de fetch fresco para primeira abertura funcionar;
- manter kill switch eterno para esconder fluxo quebrado;
- nao registrar no diagnostico qual flag estava ativa;
- deixar lixo de flags antigas crescendo release apos release.
17. Quando vale ajuda tecnica
Se o app ja convive com rollout parcial, versoes antigas, update gate, kill switch, regras remotas e comportamento diferente por perfil, a equipe pode estar a um passo de perder a visao do todo. Nesse ponto, um diagnostico tecnico ajuda a redesenhar a malha entre app, configuracao, API e operacao antes que feature flags virem mais uma camada de caos.
Feature flags maduras nao sao as que controlam tudo. Sao as que controlam o suficiente, com contexto, validade, fallback e criterio para sair de cena quando o trabalho termina.
Referencias editoriais: Firebase Remote Config, Firebase Remote Config parameters and conditions e Expo Rollouts.
Termos tecnicos desta leitura
Alguns conceitos aparecem com frequencia neste tema. Abrir o glossario ajuda a comparar definicoes, exemplos e leituras relacionadas sem sair do contexto do artigo.