Feature flag, também conhecida como Feature Toggle, é uma técnica que permite que mudanças de comportamento aconteçam na sua aplicação em tempo real sem a realização de nenhum deployment.
Dentre essas possíveis manipulações de comportamento está a disponibilização de features para grupos específicos de usuários, o que dá um grande poder de análise para quem gerencia a aplicação.
Como utilizar Feature Flag
Por mais que a Feature Flag seja utilizada há bastante tempo e se mostre bem versátil, é necessário entender não só como utilizá-la, mas também como o seu código pode virar uma bola de neve por se tornar muito dependente dela.
Basicamente, você liga/desliga features na sua aplicação e para isso a condicional if é essencial.
No exemplo acima, a utilização é bem direta: tenho uma variável que determina se uma feature deve ser mostrada ou não e uma condicional para acionar os métodos corretos.
Entretanto, se olharmos para nosso objetivo que é desacoplar a release de features do processo de deployment, essa abordagem não é uma boa ideia, pois teríamos que alterar sempre essa variável.
Outra alternativa é a utilização de configuration files de forma dinâmica, onde inúmeros key-value determinam o comportamento das minhas flags. Assim, é possível alterar esses valores em qualquer momento e a aplicação mudará de comportamento instantaneamente.
Esse é o cenário, baseado nos valores do meu configuration file:
A implementação da minha condição poderia ser:
Tipos de flag que você pode usar:
Confira dois tipos:
Cached
Uma vez que o usuário faz o login na aplicação ou abre um aplicativo, as flags são consultadas e os seus respectivos valores são armazenados para serem utilizados.
Um lado negativo dessa abordagem é que pode acontecer do usuário ficar com valores desatualizados em algum momento.
Async
Nessa abordagem, toda alteração no arquivo de configuração de flags implica na mudança de comportamento em tempo real para o usuário. É algo útil, pois a desatualização não seria um problema, entretanto, a experiência do usuário pode se comprometer, uma vez que a aplicação pode mudar seu comportamento a qualquer momento.
Como segmentar as features por características?
Vamos imaginar aqui um cenário onde um aplicativo de idiomas tenha a opção de assistir vídeos com aulas prontas, mas também seja possível agendar aulas online com professores. Certo?
Os alunos adoram as aulas que acontecem online, entretanto, acabam se esquecendo do horário marcado. Uma ideia para resolver isso seria mostrar uma contagem regressiva na tela inicial para os alunos com horários agendados:
O primeiro ponto essencial para isto é ter acesso a informações dos usuários para que tal segmentação seja feita.
Nesse caso, podemos utilizar o dado hasClassScheduled. Apenas pessoas que possuem essa informação como verdadeira estarão no nosso filtro.
Uma vez definido esse parâmetro, um gerenciador de feature poderia ser implementado para avaliar a característica do usuário e decidir se devemos mostrar ou não a contagem regressiva.
Por exemplo, no caso do usuário Bruno, como ele possui uma aula agendada poderia ter acesso a feature. Porém, a Maria não teria a mesma visibilidade.
Baseado nisso, o fluxo ficaria da seguinte forma:
Caso a feature flag esteja ativa, o gerenciador de features irá analisar se o usuário possui as características necessárias para visualizar a contagem regressiva. Se não, uma aplicação padrão será mostrada.
A partir disso, uma estratégia de análise de dados unida ao growth hacking poderia ser feita para entender se a feature está entregando o valor: diminuir a taxa de esquecimento dos usuários. Além disso, nada impede que novas hipóteses surjam e sejam liberadas para outro grupo de usuários.
Este exemplo é apenas para ilustrar como que o Feature Toggle poderia ser utilizado para segmentar seus usuários e validar abordagens para resolver os problemas do seu negócio.
As principais vantagens de usar Feature Flag!
Além de ter uma implementação básica simples, o uso deste recurso pode trazer muitos benefícios, como:
- Ajudar empresas a fazer entregas com mais frequência;
- Minimizar riscos;
- Aumentar a produtividade;
- Direcionar usuários para testes A/B.
Cuidado, nem tudo são flores, meu caro!
Feature Toggles podem funcionar muito bem para as empresas, mas, de forma geral, é uma boa prática mantê-los de curta duração e com uma quantidade pequena. Flags de longa duração adicionam complexidade e são sim uma dívida técnica. A limpeza desses recursos é de suma importante para manter uma base de código sã.
Um outro ponto de atenção é criar uma camada de abstração para o gerenciamento das flags para que seu código tenha o mínimo possível o acoplamento com esse recurso.
Final thoughts
Por fim, abordamos os seguintes pontos sobre Feature Flag:
- Como as estruturas condicionais são essenciais na utilização.
- Estratégias manter as flags atualizadas: cached e async.
- Utilização de características dos usuários para segmentar a liberação de features.
- Vantagens do uso.
- Considerações a serem tomadas antes e durante a utilização desse recurso.
Compartilho minhas sugestões de conteúdos ainda no tema:
- https://martinfowler.com/bliki/FeatureToggle.html
- https://martinfowler.com/articles/feature-toggles.html
- https://medium.com/@dehora/feature-flags-smaller-better-faster-software-development-f2eab58df0f9
- https://www.youtube.com/watch?v=m7e9VrIKYnI
E você, já utilizou por aí? Ainda tem dúvidas ou sugestões sobre o tema? Conta pra gente nos comentários!