Use e abuse de feature flags
Você sabe o que é uma feature flag (que pode ser chamada também de feature toggle)? Na parte técnica basicamente ela se resume em um if, que valida se uma string/objeto está presente em um determinado contexto dentro do seu aplicativo. O que comem, aonde vivem, como dormem as feature flags? Sexta, no glo….
Imagina que você está construindo aquela funcionalidade bacana para o seu app, ela representa um fluxo complexo com várias telas, regras e derivações. Os testes da funcionalidade saem exatamente como esperado, tudo funciona maravilhosamente bem e chega o momento de lançar para os usuários. Só que os testes foram realizados entre a sua equipe (e os QAs), umas 6 pessoas, e o publico de usuários do seu app é mais ou menos 500 mil usuários mensais. A chance de aparecer algum erro/bug não capturado em momento de testes é alta, somente olhando para os números de usuários em si. Aí que entra um dos usos da feature flag. Nesse cenário ela permitirá que você entregue a funcionalidade aos poucos para sua base de usuários e vá sentindo como que está no ambiente produtivo antes de soltar para todos. E como que fica a parte técnica? Quero implementar isto em meu app amanhã…
De alguma maneira você deve ter um backend que te devolva (e aí existem ferramentas como o remote Config do firebase que te ajudam com isso) uma lista de strings condicionada. O seu backend que devolve as featureFlags vai ter uma ou mais condições lá, que para usuários específicos (e sua equipe pode específicá-los de acordo com as capacidades desse backend) devolve certas strings e vai aumentando gradualmente o número de pessoas que a recebem as features. Uma dessas strings pode ser: "habilita_funcionalidade_bacana_x". Aqui preferencialmente o nome tem que ter o verbo no gerúndio e deixar bem claro do que se trata.No código do seu aplicativo você vai olhar: a string “habilitar_funcionalidade_bacana_x” existe? se sim, mostre o botão que entra na funcionalidade bacana, senão não mostra. Desse jeito você amarra o lançamento da feature aos poucos no ambiente produtivo. E com isso, é possível até subir para produção código ainda incompleto (os QAs que não me leiam), dado que a featureFlag vai estar testada e ninguém vai ter acesso a feature, evitando estoque de código desnecessário.
Outro uso bacana de feature Flag é para desligar uma funcionalidade com problema. Imagine que a funcionalidade bacana citada acima começa a dar problema de repente em produção. O que fazer? Pânico? O backend específico da funcionalidade começa a devolver um monte de erros porque algo está errado e ninguém sabe ao certo a correção. Salve a feature flag: Vai lá no backend responsável pela feature flag e cria uma regra nova (ou altera a existente) para que ela não seja mais devolvida ao usuário sob hipótese nenhuma. Pronto, os usuários não terão acesso mais a feature e com uma certa calma (afinal o pessoal de produtos não vai querer o usuário sem a feature né?) você poderá analisar o backend da feature para descobrir e sanar o erro. Quando o erro estiver sanado, você liga novamente a feature flag e os usuários voltam a acessar a mesma. Basicamente, o if vai sempre ser false neste cenário, até que você resolva os problemas e decida colocar ele para true novamente.
O mundo de possibilidades das feature flags é enorme. Desde os usos citados acima até a personalização do app, não só das funcionalidades, mas do layout também. As amarrações que você fizer com elas definem o quão abrangente você pode ser na criação e utilização das mesmas. Por exemplo você pode ter feature flags específicas por plataforma, versão do app entre outros. Então, uma determinada feature flag pode descer do backend somente para usuários de iOS na versão 3.14 ou acima do app. Ainda, você pode criar um grupo de usuários com documento terminado em 9 e 0 por exemplo, e aí colocar a funcionalidade somente para eles. Um outro uso que pode ser derivado da utilização de feature flags é o teste A/B, mas esse ficará para um outro artigo, pois é um tema um pouco mais complexo, que envolvem outros setores, como a galera de coleta de Dados.