Um recurso de ativação/desativação (feature flag), também chamado de recurso de alternância (feature toggle), é uma condição no código do aplicativo que determina em tempo de execução se uma funcionalidade específica está ativa para um determinado usuário ou solicitação. Em vez de um recurso estar presente ou ausente dependendo da versão do código implantada, ele está presente no código, mas é ativado ou desativado por configuração. Isso desacopla a implantação da publicação: o código pode ser enviado para produção continuamente, enquanto os recursos que ele contém permanecem invisíveis até que alguém decida expô-los.
Para experimentação, os recursos de flags são o mecanismo subjacente aos testes do lado do servidor. Atribuir um usuário a uma variante de flag é funcionalmente o mesmo que atribuí-lo a um grupo experimental e, como a decisão ocorre no aplicativo e não no navegador, a variante pode afetar qualquer coisa que o aplicativo controle: lógica de precificação, classificação de pesquisa, algoritmos de recomendação, gatilhos de e-mail, regras de finalização de compra e comportamento de backend que nenhuma ferramenta de teste do lado do cliente consegue alcançar. Além disso, elimina a oscilação visual produzida pela manipulação do lado do cliente e é invisível para bloqueadores de anúncios e configurações de bloqueio de scripts do navegador.
As flags têm várias funções distintas que merecem ser separadas, pois possuem ciclos de vida muito diferentes. As flags de release ocultam trabalhos inacabados e são removidas assim que a funcionalidade é totalmente lançada. As flags de experimento controlam a atribuição de variantes e são removidas quando o teste termina. As flags operacionais, às vezes chamadas de kill switches, permitem que uma funcionalidade seja desativada instantaneamente caso cause problemas em produção e podem permanecer ativas indefinidamente. As flags de permissão restringem a funcionalidade por nível de cliente ou contrato e são efetivamente permanentes. Tratar todas as quatro como se fossem a mesma coisa é o que leva as organizações a acumularem centenas de condicionais obsoletas que ninguém se atreve a remover.
Esse acúmulo é o principal risco. Cada flag é uma ramificação, e o número de possíveis caminhos de código cresce exponencialmente à medida que as flags se acumulam. Testar todas as combinações torna-se impossível, interações inesperadas entre flags causam defeitos difíceis de reproduzir e o código torna-se progressivamente mais difícil de entender. Equipes disciplinadas tratam a remoção de flags como parte da definição de "concluído", mantêm um inventário com um responsável e uma data de expiração para cada flag e realizam auditorias periódicas para identificar flags que permanecem com um valor fixo por meses.
Os sinalizadores de recursos também permitem estratégias de lançamento que reduzem o risco independentemente da experimentação. A implementação progressiva expõe um recurso a 1% do tráfego, depois a 5%, depois a 20%, monitorando as taxas de erro e as métricas de negócios em cada etapa. A implantação baseada em anéis expõe primeiro os usuários internos, depois um grupo beta e, por fim, todos. Os lançamentos canary executam uma nova versão em paralelo com a antiga e comparam as métricas operacionais antes de prosseguir. Todas essas são variações da mesma capacidade: a habilidade de alterar quem vê o quê sem implantar código.
Os flags também fornecem o mecanismo para implementação regional e segmentada controlada, o que é importante para organizações que operam em diversos mercados. Uma alteração pode ser exposta primeiro em um único país, monitorada quanto a problemas específicos do mercado, como idioma, métodos de pagamento, exibição de impostos ou requisitos regulatórios, e então expandida após sua comprovação. Isso é consideravelmente mais seguro do que um lançamento global e fornece evidências sobre se uma melhoria se transfere entre mercados, algo que frequentemente é presumido e raramente testado. A questão das ferramentas surge da escalabilidade: pequenas equipes podem gerenciar flags com arquivos de configuração e uma interface administrativa simples, enquanto organizações que executam muitos flags simultâneos em vários serviços geralmente precisam de uma plataforma de gerenciamento dedicada que forneça regras de direcionamento, registros de auditoria e avaliação consistente entre o backend e o frontend, já que avaliações inconsistentes entre as camadas resultam em usuários que veem apenas metade de um recurso.
A introdução de flags é frequentemente um pré-requisito para que uma prática de experimentação séria possa existir, especialmente para funcionalidades que residem na camada de aplicação em vez da camada de apresentação. desenvolvimento de produtos No trabalho, a infraestrutura de sinalização é normalmente construída em conjunto com o pipeline de entrega, de modo que a experimentação, a implementação progressiva e a reversão de emergência utilizem o mesmo mecanismo. Uma vez existente, um Serviço CRO O programa não está mais limitado ao que pode ser alterado no navegador, o que normalmente abre caminho para as ideias de teste de maior valor na lista de pendências: aquelas que envolvem preços, lógica de personalização e a mecânica do próprio fluxo de compra.