O blog da AWS

Configure, valide e implante sinalizadores de recursos (feature flags) e configurações de aplicativos usando serviços da AWS.

Por Daniel Abib, Enterprise Solution Architect na AWS
 

A funcionalidade de feature flags, também conhecida como feature toggle ou ainda em português como Sinalizadores de Recursos, é uma técnica de desenvolvimento de software que permite ativar e desativar recursos de uma aplicação de forma dinâmica e controlada, sem a necessidade de fazer deploy de uma nova versão da aplicação.

Essa funcionalidade ou serviço ajuda criar e manter aplicações modernas de várias maneiras:

  1. Implantação (deployment) gradual de recursos: Com o controle de recursos, é possível implantar novos recursos gradualmente para um subconjunto de usuários, permitindo testes e validações antes de disponibilizar para todos os usuários.
  2. Melhoria no gerenciamento de riscos: O controle de recursos permite que as equipes de desenvolvimento gerenciem riscos relacionados a novos recursos (bugs, inconsistências, erros não previstos, etc.), permitindo que eles os desativem rapidamente caso haja algum problema ou impacto negativo.
  3. Personalização: Com o controle de recursos, é possível personalizar a experiência do usuário de forma granular, ativando ou desativando recursos com base em diferentes segmentos de usuários. Por exemplo, para um determinado grupo de usuários, a funcionalidade pode estar disponível apenas para testes e será apenas disponibilizada para o público geral quando for comprovada a sua eficiência.
  4. Manutenção e correção de bugs: O controle de recursos permite que as equipes de desenvolvimento corrijam bugs em tempo real, desativando recursos afetados enquanto trabalham na correção. Ou seja, fazer o rollback pode ser mais rápido e simples, como apenas desativar a feature que foi entregue de forma incorreta.

É importante encontrar os momentos e os casos de negócio onde as aplicações precisam utilizar destes mecanismos de controle de entrega de funcionalidades, pois ajuda as empresas a continuarem um processo de entrega contínua de novos produtos ou funcionalidades de negócio sem serem impactadas por dependências de outras equipes.

A experiência em empresas que possuem um processo de entrega contínua bem estruturado e com diversos times que desenvolvem funcionalidades diversas durante o decorrer dos trabalhos, mostram que desenvolver aplicações modernas sem o uso de feature flags pode ser mais complexo em diversos aspectos. Sem a capacidade de habilitar ou desabilitar funcionalidades de forma seletiva, é necessário lidar com o código mais complexo, o que pode levar a uma maior dificuldade de testar e manter a aplicação.

Além disso, sem a possibilidade de ativar ou desativar recursos específicos em tempo real, é mais desafiador para os desenvolvedores lidar com mudanças e interações contínuas durante o processo de desenvolvimento. Embora, no entanto, seja possível desenvolver aplicações modernas sem feature flags, é importante lembrar que essa técnica pode trazer muitos benefícios, como:

  • Lançamento ou disponibilização de novas funcionalidades: Ao lançar novas funcionalidades em uma aplicação, é possível usar recursos para ativar ou desativar recursos para diferentes grupos de usuários ou em diferentes ambientes.
  • Testes A/B: As funcionalidades desta abordagem são úteis para executar testes A/B, permitindo comparar diferentes variantes da aplicação em um subconjunto de usuários, permitindo que você determine a opção que oferece a melhor experiência do usuário.
  • Personalização: É possível usar recursos para personalizar a experiência do usuário, ativando ou desativando recursos para usuários específicos com base em sua localização, preferências ou histórico de uso.
  • Correção de bugs: Também permitem que você corrija bugs / defeitos em tempo real, permitindo que você desative recursos afetados enquanto trabalha na correção.
  • Testes de carga: Os recursos podem ser usados para lidar com situações de tráfego elevado, permitindo que você desative recursos que estejam impactando o desempenho do sistema.

Em novembro de 2021 a AWS anunciou o serviço AWS AppConfig Feature Flags, que permite que você se mova com mais rapidez e segurança enquanto lança novos recursos para os seus clientes. Sinalizadores de recursos (feature flags) permitem que você libere recursos para suas aplicações, independentemente das implantações de código. As equipes de desenvolvimento geralmente coordenam os lançamentos de recursos de aplicações junto com um evento de marketing de grande escala e são obrigadas a liberar os recursos gradualmente aos usuários.

Da mesma forma, as equipes de operações e desenvolvimento costumam responder a eventos operacionais habilitando a funcionalidade existente em suas aplicações.

Esse lançamento da AWS permite que desenvolvedores e equipes de DevOps usem o AWS AppConfig para criar e validar dados de configuração de sinalizadores de recursos e implantar sinalizadores de recursos únicos ou múltiplos em suas aplicações de maneira monitorada e controlada.

O AWS AppConfig, um recurso do AWS Systems Manager, é usado como uma prática recomendada por milhares de equipes da Amazon para implantar sinalizadores de recursos e alterações de configuração de aplicações em tempo de execução.

Aspectos a se considerar

Um aspecto muito importante nesta gestão é a remoção de feature flags, pois retirar os controles de funcionalidades que já não estão mais em testes pode ajudar a reduzir a complexidade do código e aprimorar a estabilidade do sistema. No entanto, isso deve ser feito com cuidado, garantindo que todas as referências à flag sejam removidas e que a funcionalidade relacionada à flag não cause problemas na aplicação.

Também podemos pensar em processos periódicos de refatoração de código: se a funcionalidade relacionada à feature flags for complexa e estiver entrelaçada em vários pontos do código, pode ser necessário refatorar o código para remover a flag de forma limpa. Isso pode envolver a extração de código relacionado à funcionalidade em uma nova classe ou módulo e substituir as referências da flag por chamadas diretas à nova classe ou módulo.

Outra alternativa é a redução gradual, já que a remoção direta de uma feature flags pode ser arriscada, especialmente se ela estiver em uso por um grande número de usuários ou em um ambiente de produção. Nesse caso, pode ser útil remover a feature flag gradualmente, reduzindo a quantidade de usuários que a utilizam até que possa ser completamente removida.

Independente da estratégia utilizada, seja ela mais conversadora ou pensando em refatoramento, é importante monitorar o desempenho e a estabilidade da aplicação durante o processo de remoção da feature flag. Isso pode envolver a criação de testes automatizados, monitoramento de logs e acompanhamento de métricas de desempenho para garantir que a remoção da feature flag não esteja causando impactos negativos na aplicação.

Infelizmente nem tudo são flores…

Existem também pontos que devem ser colocados em consideração, pois a utilização destes recursos traz uma complexidade adicional no processo de desenvolvimento e na arquitetura da aplicação. Para usar as funcionalidades de feature flags, é necessário gerenciar a configuração de cada recurso habilitado. Isso pode incluir o gerenciamento de várias configurações em diferentes ambientes, o que pode aumentar a complexidade do processo de implantação e configuração.

Além disso, o uso de feature flags pode trazer um pouco mais complexidade aos testes de unidade e integração, já que o comportamento da aplicação pode mudar de acordo com a configuração da flag. Normalmente isso pode exigir mais testes para garantir que todos os cenários sejam testados adequadamente.

Como falado anteriormente, o uso de feature flags pode tornar a manutenção do código mais complexa, pois é necessário manter a lógica relacionada à feature flags atualizada e funcional. Isso implica em um aumento no número de linhas de código e tornar o mesmo mais difícil de entender e manter.

Em relação a segurança, as feature flags podem criar riscos se as funcionalidades habilitadas forem mal configuradas ou se a lógica for comprometida. Isso pode incluir a exposição de dados confidenciais ou a execução de código mal-intencionado.

Como último ponto de atenção, o uso de feature flags pode exigir integração com ferramentas de CI/CD para automatizar o processo de implantação e configuração de recursos habilitados, exigindo configurações adicionais e aumentar a complexidade geral do processo de desenvolvimento.

Comece agora a usar o AWS AppConfig em suas aplicações e não perca a oportunidade de aumentar a eficiência, flexibilidade e agilidade de suas operações na nuvem. Com o AWS AppConfig, você pode facilmente implementar recursos de feature flags em suas aplicações, permitindo que você teste novas funcionalidades em uma pequena escala, personalize a experiência do usuário e gerencie configurações e recursos sem precisar fazer alterações no código de sua aplicação.

Além disso, o AWS AppConfig oferece um alto nível de segurança, escalabilidade e disponibilidade, permitindo que você se concentre no que realmente importa: fornecer valor para seus clientes e crescer seu negócio. Então, não perca mais tempo, comece a usar o AWS AppConfig em suas aplicações hoje mesmo e aproveite todos os benefícios desta abordagem!

Para maiores detalhes de como você e sua empresa podem implementar, seguem uma série de blogs posts que ajudam a entender melhor aspectos da tecnologia explicada aqui.

 


Sobre o Autor

Daniel Abib é Enterprise Solution Architect na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e segurança. Ele trabalha apoiando clientes corporativos, ajudando-os em sua jornada para a nuvem.

https://www.linkedin.com/in/danielabib/