Feature Flags

O termo feature flags (toggle) refere-se a um recurso utilizado para poder habilitar/desabilitar funcionalidades em um sistema sem precisar...

Data de publicação: 06/09/2019
Feature-Flags

O termo feature flags (toggle) refere-se a um recurso utilizado para poder habilitar/desabilitar funcionalidades em um sistema sem precisar alterar o código.

Nesse artigo falarei um pouco sobre seu funcionamento, uso, e cuidados ao utilizá-la.

Onde usar

Os cenários mais comuns para o uso de feature flags  são:

  • Liberar uma nova funcionalidade (rollout)
  • Realizar teste A/B
  • Restringir funcionalidade por perfil de usuário
  • Desativar uma funcionalidade que apresentou problema
  • Trocar uma funcionalidade legada por uma nova
  • Validar uma funcionalidade que não está completa (beta)

Podemos aplicar o rollout quando precisamos liberar uma nova funcionalidade aos poucos para uma base de usuários. Assim conseguimos acompanhar o comportamento dessa feature com o aumento de usuários.

Podemos realizar teste A/B, utilizando feature flags para redirecionar grupos de usuários para a avaliação de uma funcionalidade com layout A e outro com layout B. Com isso podemos verificar em qual layout tem melhor desempenho.

Também podemos restringir funcionalidades com base em informações relacionadas ao usuário. Por exemplo: Um usuário que está cadastrado em uma lista de “usuários beta testers”, pode visualizar funcionalidades que não estão disponíveis para um usuário comum.

Quando uma funcionalidade para de funcionar, podemos desativá-la, evitando que o usuário seja surpreendido por um erro não tratado.

O uso da feature flag também nos ajuda a dar manutenção em funcionalidades legadas. Com ela, podemos migrar para uma nova funcionalidade aos poucos.

Também podemos usar CI (continuous integration), para isso basta restringirmos a nova funcionalidade apenas para os desenvolvedores. Deste modo os usuários finais não terão acesso a nova funcionalidade. Ao finalizar a funcionalidade podemos aplicar rollout.

Como funciona

Uma aplicação client (mobile, web, desktop) consome um endpoint, enviando parâmetros necessários para a criação de uma configuração de feature flags.

Um endpoint no backend, receber os parâmetros e com base em critérios/estratégias monta uma configuração de feature flag e retorna para a aplicação client.

Após a aplicação client receber uma configuração de feature flag, ela pode aplicar regras para ligar ou desligar uma determinada funcionalidade.

Com isso é possível personalizar o comportamento de uma aplicação com base em um perfil de usuário.

if  featureFlag.isEnable(FLAG_NAME

    // code

else

    // code

Cuidados

Este é um tópico muito importante para a saúde de seu projeto. Após alguns anos trabalhando com projetos que usam feature flags, pude perceber alguns erros muito comuns e cuidados necessários. Entre eles temos:

Criação de um manual

Durante o desenvolvimento de um projeto, novas pessoas podem entrar no time. Ao criar um manual de como utilizar e os padrões a serem seguidos ganhamos tempo e evitamos problemas.

Tempo de vida de uma feature flag

Dependendo do projeto, muitas feature flags podem ser criadas e muitas podem ser removidas em um futuro próximo. 

É importante mantermos um gerenciamento de tempo de vida dessas flags. Isso evita termos 300 (ou mais) feature flags espalhadas pelo código. 

O uso em excesso de flags podem tornar complexa o fluxo de navegação do seu aplicativo ou sistema.

Padronização de nomes

Cuidado com os nomes dados às feature flags, defina um padrão para elas e coloque isso em um manual. Por exemplo “TelaHome.MenuLateral.ItemX”. Deste modo, fica mais simples entender onde essa flag é usada.

Feature flags dentro de outras feature flags.

Devemos ter cuidado com feature flag dentro de outra feature flags. Quando temos um nível muito grande de feature flags “filhas”, a manutenção dessas funcionalidades torna-se mais complexas.

Cache e redundância

Dependendo da sua base de usuários, você precisará fazer cache do seu serviço de feature flags. O processo de criação da configuração da feature flag pode ser custoso e necessitar de muito CPU ou banco de dados. O uso de cache reduz o custo de processamento e  o tempo de resposta do serviço.

Outro ponto importante é ter uma redundância do serviço de feature flag. Uma vez que esse serviço fique indisponível, sua aplicação poderá ficar indisponível para usuários que não estão com cache local.

Backup das configurações das feature flags

Outra dica valiosa é fazer backup do seu banco de dados, uma vezes que todas as configurações de feature flags estão guardadas em um único lugar.

 Se seu banco de dados for perdido, será necessário reconfigurar todas as feature flags manualmente. Isso será extremamente custoso se você não tiver um histórico de feature flags. Você precisará lembrar de coisas como versão, plataforma, lista de usuários e rollout  para cada feature flag.

Nesse artigo pude falar um pouco sobre feature flags e o que aprendi ao utilizá-la em projetos. Se você se interessou pelo assunto e pretende utilizá-la em seu projeto, eu recomendo uma leitura mais técnica do assunto no artigo escrito por Martin Fowler link

Referências:

https://martinfowler.com/articles/feature-toggles.html

https://en.wikipedia.org/wiki/Feature_toggle

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

4 × três =

Posts relacionados

  1. Sobre a Dextra

    Somos especialistas em desenvolvimento de software sob medida para negócios digitais. Pioneiros na adoção de metodologias de gestão ágil, combinamos processos de design, UX, novas tecnologias e visão de negócio, desenvolvendo soluções que criam oportunidades para nossos clientes.

  2. Categorias

Scroll to top