O Que é uma Feature Toggle Architecture? Desacoplando Deploy de Release
Uma feature toggle architecture envolve novas funcionalidades em switches de runtime para que você possa fazer o deploy do código sem liberá-lo, e ligar ou desligar features sem um deploy.
Fazer o deploy do código e liberar uma feature não precisam ser o mesmo evento. Uma feature toggle architecture os separa: você shipa código novo no escuro, atrás de um flag, e o liga depois via configuração. Isso destrava trunk-based development, rollout gradual e kill switches instantâneos, mas adiciona gestão de flags e um fardo combinatório de testes.
Deploy e release, desacoplados
O código chega em produção atrás de um switch desligado. O deploy é um não-evento para os usuários; a release acontece quando você vira o flag. Você também pode desligar uma feature instantaneamente sem fazer rollback de nenhum código.
O que ela viabiliza
- Trunk-based development: fazer merge de trabalho inacabado atrás de um flag.
- Rollout gradual: habilitar para 1%, depois 10%, depois todos.
- Kill switch instantâneo: desabilitar uma feature ruim sem um deploy.
- A/B testing e habilitação direcionada por segmento de usuário.
Flags como arquitetura
Toggles não são apenas if-statements; em escala eles precisam de um serviço de flags, avaliação consistente e um inventário. Sem gestão, flags obsoletos se acumulam e viram uma fonte de código morto e comportamento confuso.
O desafio dos testes
Cada flag dobra os caminhos de código possíveis, então combinações de flags se multiplicam rapidamente. O CI não consegue testar toda combinação, então os times testam os estados on e off dos flags importantes e as combinações que de fato shipam juntas, e depois limpam os flags prontamente para limitar a explosão.
Como isso muda as pipelines
Como features incompletas fazem merge atrás de flags, a pipeline sempre builda a partir de um trunk liberável. Isso mantém a integração contínua e evita branches de vida longa, ao custo de disciplina em torno da higiene dos flags.
Feedback rápido do trunk
Fluxos trunk-based significam merges frequentes e execuções frequentes da pipeline. Runners quentes e rápidos (como o Latchkey) evitam que essa alta cadência de merge fique gargalada no tempo de fila de build.
Principais conclusões
- Uma feature toggle architecture separa o deploy do código da release de uma feature.
- Viabiliza trunk-based development, rollout gradual e kill switches instantâneos.
- Flags multiplicam caminhos de código, então teste os que shipam juntos e aposente flags obsoletos.