O que é feature flag?
Feature flag é uma abordagem de desenvolvimento de sistemas que permite ativar ou desativar remotamente uma funcionalidade sem a necessidade de implementar códigos. Com as feature flags, é possível introduzir novas funcionalidades em tempo de execução sem escrever códigos adicionais. Ao separar a implantação e o lançamento, as feature flags permitem controlar toda a vida útil de uma funcionalidade e optar por realizar testes seguros no modo de produção.
Uma feature flag pode regular o acesso, por exemplo, se novas funcionalidades forem disponibilizadas aos usuários internos para testes e feedbacks. A funcionalidade só fica visível para os colaboradores que estão conectados ao programa usando um endereço de e-mail corporativo.
As feature flags permitem classificar riscos e gerenciar componentes. Desta forma, é possível realizar testes A/B, implementar funcionalidades para determinados usuários, excluir grupos específicos da visualização de uma funcionalidade, entre outras atividades similares.
Existem tipos distintos de feature flags, que são categorizados de acordo com seu dinamismo e vida útil e usados por diferentes motivos. Alguns desses tipos são:
- De curta duração: feature flags destinadas a implementar temporariamente novas alterações e testes em produção.
- De longa duração: feature flags como kill switches, que permanecem em seu sistema por mais tempo.
- Dinâmica: as alterações de valor são ativadas em tempo de execução.
- Estática: somente modificações reais no código ou nos arquivos de configuração são permitidas.
Benefícios das feature flags
Fundamentalmente, as feature flags possibilitam a implantação e o acionamento de um código na produção enquanto ele está na forma inativa. Consequentemente, as equipes têm mais autoridade sobre como o resultado final é usado. As feature flags são essenciais para o lançamento rápido e seguro de novas funcionalidades. Conheça algumas maneiras pelas quais elas podem melhorar seus processos de desenvolvimento e entrega de software:
Entrega contínua
As feature flags permitem que as equipes usem o desenvolvimento baseado em troncos (“trunks”) sem se preocupar com a criação de ramificações (“branches”) persistentes ou com o infame pesadelo da mesclagem. Se inúmeros desenvolvedores trabalharem em áreas sobrepostas da base de código, a integração de novas funcionalidades complexas ou o trabalho delicado de refatoração na ramificação de produção primária de um repositório poderá se tornar um verdadeiro desafio. As feature flags podem ser úteis para reduzir as circunstâncias complexas de integração e implantação de código.
Gerenciamento de versões
O uso mais comum de feature flags ocorre no processo de compilação ou liberação de funcionalidades. No gerenciamento de versões, é possível atribuir a usuários específicos acesso antecipado a novas funcionalidades, versões canárias ou programas beta. Visar inicialmente pequenos grupos e aumentar a escala ao longo do tempo ajuda você a:
- Observar o desempenho dos sistemas e serviços sob cargas crescentes.
- Levar em conta os feedbacks dos usuários e fazer ajustes, se necessário.
- Certificar-se de que o raio de explosão seja limitado, se algo der errado.
Aumento da frequência de lançamento de produtos e verificação da funcionalidade dos recursos
O uso de feature flags para realizar “soft-rollouts” possibilita a realização de testes contínuos sem oferecer riscos à produção. Como resultado, as alternâncias para novas funcionalidades podem ser incluídas imediatamente como parte da versão prevista. Ao verificar regularmente todas as alterações junto a uma amostra de usuários, é possível implementar funcionalidades para os clientes com muito mais rapidez e lançar produtos de alta qualidade com menos falhas.
Eficiência operacional
As funcionalidades do sistema podem ser ativadas e desativadas com as feature flags para minimizar o impacto dos incidentes. Você pode usar as feature flags operacionais para:
- Ativar circuit breakers ou kill switches para evitar que funcionalidades impactem negativamente a experiência do usuário e acionem alertas.
- Garantir a confiabilidade da API limitando as solicitações de API.
- Mudar para uma versão mais leve, quando uma página estiver muito carregada.
- Garantir que novos microsserviços e tags de terceiros sejam compatíveis na produção.
- Ajudar na depuração e alterar os níveis de registro, conforme necessário.
Experimentação contínua no lado do servidor
Usando as feature flags, é possível testar rapidamente as alterações junto a um pequeno grupo de usuários e acompanhar o desempenho de acordo com os KPIs especificados. A experimentação por meio de testes A/B permite que você faça novas descobertas.
Você pode verificar ou rejeitar sua intuição ao testar diferentes configurações das funcionalidades com as feature flags. A experimentação oferece dados tangíveis e medidas práticas, para que você tenha certeza de que está introduzindo a versão ideal de uma funcionalidade que influencia positivamente os KPIs de negócios.
Redução de riscos
Com o conceito de “soft-rollouts” como base, as equipes vigilantes podem usar as feature flags em combinação com o monitoramento e a análise em tempo real como uma solução para quaisquer dificuldades intermitentes que apareçam.
Desafios das feature flags
Embora o uso de feature flags seja recomendado e melhore o fluxo de trabalho da sua equipe, há situações em que você pode se deparar com algumas dificuldades:
Complexidade
A utilização de feature flags pode ficar complexa com o decorrer do tempo e conforme os casos de uso se expandem, especialmente porque algumas empresas escolhem sistemas internos que podem não ser sofisticados o suficiente para atender às suas necessidades.
Script e colaboração irregulares
Com o tempo, o acúmulo de feature flags em um sistema pode resultar em códigos desorganizados. A funcionalidade do seu sistema pode ser interrompida pelas instruções condicionais dispersas em sua base de código, e a existência de diferentes caminhos de código dificulta a identificação da causa raiz de um problema durante o processo de depuração.
Responsabilidades técnicas
As features flags devem ser eliminadas depois de terem sido utilizadas e não estarem mais funcionais, pois mantê-las obsoletas e inativas fará com que o sistema acumule dívidas técnicas.
Melhores práticas para feature flags
Ao usar as feature flags, é preciso seguir diversos procedimentos. Veja a seguir algumas práticas recomendadas que devem ser consideradas e aplicadas para tornar sua experiência com o uso de feature flags a mais fluida possível:
Adote uma convenção de nomenclatura padronizada
Sem um padrão de nomenclatura, os membros da sua equipe podem se referir a diferentes flags pelo mesmo nome, gerando confusão. Como resultado, poderá haver distúrbios no sistema, se a equipe ativar a flag incorreta.
Gerencie quem tem acesso às flags
Crie um registro para acompanhar quem fez alterações significativas nas flags e quando. Isso é fundamental para reduzir a dependência entre as equipes de produto e engenharia e aumentar a eficiência, pois haverá mais transparência no que diz respeito à implementação de modificações.
Gerencie cada alternância de uma maneira específica
Como existem muitos tipos de feature flags, cada um deles requer uma maneira exclusiva para ser gerenciado. Por exemplo, seria errado tratar e implementar um release toggle e um kill switch da mesma forma.
Faça uma limpeza frequente das flags
Certifique-se de remover periodicamente do seu sistema todas as feature flags que não são mais usadas, como aquelas que são apenas temporárias e cumprem uma única função.
Conclusão
Feature flags são um recurso eficaz do conjunto de ferramentas de entrega contínua e podem ser usadas de várias maneiras. De forma geral, as feature flags permitem que as equipes tenham mais controle sobre a base de código, a implementação e a experiência do usuário final.