Seidor
animación escritorio

18 de dezembro de 2024

Estratégia de implantação: Desenvolvimento com Feature Flags

A gestão de versões é fundamental para garantir que as versões de um aplicativo estejam prontas para serem lançadas no ambiente de produção e utilizadas de maneira eficiente. Não se trata apenas de garantir a qualidade do produto final, mas também de atender às expectativas tanto das equipes internas quanto dos usuários finais. Esse processo vai além da simples verificação antes do lançamento, pois abrange todo o ciclo de vida da versão, desde o desenvolvimento até os testes e sua implantação em produção.

Uma gestão de versões bem executada permite não apenas assegurar produtos de alta qualidade, mas também lançamentos mais frequentes sem aumentar os riscos. Ao incorporar uma abordagem flexível, baseada no uso de feature flags, é possível reduzir o tempo de comercialização e tornar seu produto mais competitivo no mercado.

Feature flags

As feature flags (também chamadas de feature toggle) são uma técnica utilizada no desenvolvimento de software que permite ativar ou desativar funcionalidades específicas dentro de uma aplicação sem necessidade de implantar novas versões do código. Essencialmente, atuam como interruptores que permitem habilitar ou desabilitar características em tempo real, de maneira controlada e segmentada.

Por que usá-las?

Concedem às equipes de desenvolvimento uma grande flexibilidade, minimizam o risco de interrupções e permitem uma abordagem mais dinâmica e adaptativa para gerenciar o ciclo de vida das funcionalidades de um aplicativo.

  • Implantação contínua sem riscos: Você pode implantar código novo em produção sem a necessidade de ativá-lo imediatamente para todos os usuários. Isso permite que as equipes de desenvolvimento liberem novas funcionalidades de maneira segura e ativem ou desativem recursos conforme necessário, reduzindo o risco de erros críticos em produção.
  • Facilita a experimentação: São uma ferramenta ideal para realizar experimentos, pois permitem testar diferentes versões de uma funcionalidade com subconjuntos de usuários. Isso ajuda a tomar decisões baseadas em dados reais sobre qual versão oferece melhores resultados antes de fazer um lançamento global.
  • Controle em migrações e mudanças de infraestrutura: Em projetos de migração ou refatoração, permitem ativar partes específicas de uma nova arquitetura (como um novo sistema ou serviço) sem interromper o funcionamento geral da aplicação. Isso facilita uma transição gradual e controlada, com a possibilidade de realizar rollbacks imediatos se algo der errado.

Tipos de feature flags

A seguir, são listados alguns tipos de feature flags:

  • Teste A/B: Podemos realizar testes A/B em tempo real, mostrando a diferentes usuários versões distintas de uma função para determinar qual tem melhor aceitação ou desempenho, podemos chamá-lo também de executor de experimentos. Por exemplo, poderíamos testar diferentes designs ou fluxos de UX para a seção determinada do app.
  • Implantações Canary: Antes de lançar uma nova funcionalidade para toda a base de usuários, podemos fazer um lançamento gradual para uma pequena porcentagem. Isso nos permite coletar feedback e detectar possíveis problemas antes de um lançamento em massa.
  • Funcionalidades específicas para segmentos de usuários: As feature flags nos permitem oferecer funções específicas para determinados segmentos de usuários. Por exemplo, poderíamos lançar funções avançadas apenas para usuários premium ou certas características do app para que estejam disponíveis apenas em determinadas regiões geográficas ou dependendo do dispositivo.
sistema

Boas práticas

A seguir, são listadas algumas boas práticas recomendadas ao utilizar Feature flag em um projeto:

  • Convenção de nomes sensata: É essencial adotar uma convenção de nomenclatura para evitar confusões e possíveis interrupções do sistema. Esta convenção deve ser descritiva, incorporando aspectos como o nome da equipe, a data de criação, a descrição do comportamento do flag e sua categoria (temporária ou permanente).
  • Controle de acesso: Cada flag deve ter um proprietário responsável por justificar sua existência e eliminá-la quando necessário. Sem um proprietário definido, o flag pode se tornar obsoleto e contribuir para a dívida técnica.
  • Vida Limitada: A menos que uma flag seja uma parte permanente do sistema (como as flags de atualizações ou versões), é vital lembrar de eliminar as flags que já não estão em uso ou cuja função mudou.
  • Precaução com flags dependentes e conflitantes: À medida que a equipe de desenvolvimento cresce, pode surgir o problema de flags que são dependentes entre si ou que entram em conflito. É crucial identificar e mapear essas dependências para evitar problemas durante o deployment. Por exemplo, se duas equipes desenvolvem funcionalidades por trás de diferentes flags, mas não testam sua interação, uma parte da aplicação pode quebrar ao ativar ambos os flags simultaneamente. O planejamento e mapeamento detalhado das dependências dos flags são essenciais para prevenir esses problemas.

Exemplos de uso

A seguir, são apresentados alguns casos que mostram a versatilidade dos feature flags.

Desenvolvimento contínuo

Devido à maneira como funcionam as feature flags, isso nos permite desenvolver as funcionalidades por partes sem nos preocuparmos em ter que criar um branch para essa funcionalidade e depois fazer o merge com tudo o que isso implica e os possíveis conflitos.

Imaginemos que temos uma classe que possui muita lógica legada e complexa, por exemplo, validar uma série de dados. Queremos adicionar mais validações, mas o código legado é difícil de modificar. Decide-se reescrever o validador para que seja mais claro e fácil de manter. Como isso pode levar algum tempo, o que se pode fazer é criar um feature flag para integrar o código do novo validador o mais rápido possível, reduzindo esforços extras na hora de fazer o merge. Além disso, podemos ativar esse novo validador quando precisarmos para testar em momentos de baixo tráfego ou em algum ambiente controlado.

Desativar funcionalidades

Também podemos utilizar feature flag para desativar funcionalidades em momentos de alta demanda. Imaginemos que temos uma seção de comentários e, por alguma razão, a demanda por essa funcionalidade aumenta demais, comprometendo o sistema. Pode-se optar por desativar os comentários temporariamente.

Teste A/B

Teste A/B orientado às diversas mudanças que podem ser aplicadas nas versões de aplicativos móveis das diferentes páginas web. Influenciam fatores como a substituição de grandes quantidades de texto por símbolos ou a mudança na forma dos botões. Por exemplo, as cadeias de roupas. Nos aplicativos, pode-se simplificar os textos colocando um carrinho de compras em vez do literal "Comprar" e estudar o comportamento dos usuários.

Outro exemplo, relacionado com um sistema de avaliações. Validar o comportamento permitindo que os usuários avaliem em uma escala de 1 a 10, em vez de um sistema de avaliação anterior de 5 estrelas.

Conclusão

O uso de feature flags no desenvolvimento de aplicações oferece uma vantagem estratégica ao permitir um maior controle sobre a ativação de funcionalidades sem a necessidade de depender do ciclo de implantação. Essa capacidade de ativar ou desativar características de maneira granular facilita o teste em ambientes reais, reduz o risco de introduzir erros em produção e permite que as equipes de desenvolvimento se movam com maior agilidade. No entanto, é fundamental gerenciar corretamente essa ferramenta, pois sua má implementação pode aumentar a complexidade técnica e dificultar a manutenção do código.

Ainda assim, quando utilizado de maneira adequada, os benefícios superam os desafios, proporcionando às equipes uma flexibilidade significativa para iterar mais rápido e se adaptar melhor às necessidades do negócio.

Talvez te interesse

Servihabitat | Snowflake

Servihabitat precisava de uma plataforma que lhes permitisse realizar um acompanhamento end-to-end de seus ativos para ganhar agilidade em sua comercialização em massa. Para isso, foi iniciado um projeto de modernização tecnológica global, com a implantação do Snowflake Cloud.

Application Modernization