Entendendo o Server Driven UI
Mesmo com boas alternativas híbridas para o desenvolvimento de aplicativos, como o Flutter e o React Native, muitas empresas preferem trabalhar com a forma nativa de desenvolvimento para Android e iOS. A garantia de que as ferramentas serão mantidas a longo prazo, a maior facilidade de encontrar desenvolvedores(as) e o acesso a features novas de cada sistema já no lançamento são bons argumentos para se manter nessas tecnologias.
Ainda assim alguns obstáculos são encontrados pelas empresas que querem seus apps evoluindo rápido, dois dos principais são a dependência que a empresa tem do usuário final para atualizar o aplicativo e o processo de lançamento e atualização da App Store e da Play Store.
Muitas pessoas não mantém seus aplicativos e sistemas atualizados, isso pode acontecer, por exemplo, porque estão com pouco armazenamento disponível, ou simplesmente porque não entendem a importância de atualizações de segurança. Isso se deve ao fato de que grande parte das atualizações corrigem as coisas por trás dos panos e mudam poucos itens visuais. O que podemos concluir disso? 1: devemos tirar a responsabilidade do usuário de manter os aplicativos atualizados e 2: devemos diminuir o espaço que eles ocupam.
A Apple e a Google têm motivos válidos para seus processos longos de lançamento nas lojas de aplicativos, é responsabilidade deles tentar manter aplicativos maliciosos longe dos usuários. Mesmo com o recente crescimento nas features de seguranças dos dois sistemas, muitas técnicas de engenharia social são utilizadas para burlar as camadas de segurança. Outros motivos mais controversos reforçam as práticas de domínio das gigantes sobre suas lojas. A Google tenta manter ao máximo a relação entre Play Store e Android, já que sua principal forma de monetização de seu sistema open source é o licenciamento da loja para fabricantes de dispositivos, já a Apple sempre teve uma postura de controle total de seu ecossistema, com um ideal de "tudo bem com uma ditadura, desde que eu seja o ditador".
Com essas dificuldades, como é possível corrigir bugs rapidamente, testar diferentes hipóteses com um grande número de usuários e fazer mudanças sazonais nos aplicativos? Uma resposta é: utilizando uma abordagem Server Driven UI. Funciona assim, o servidor envia todas as informações necessárias para o front saber onde colocar as views, o conteúdo para preenchê-las e o comportamento das interações, o aplicativo utiliza arquivos de configuração compilados para interpretar esses dados e apresentar a experiência ao usuário.
Dessa forma, temos um maior controle sobre as atualizações dos nossos aplicativos, podemos corrigir bugs e fazer mudanças visuais seguindo eventos orientados pelo lado de negócios, além de poder oferecer versões diferentes do app para grupos de usuários diferentes, tudo sob a nossa gestão.
O Beagle é uma solução open source para desenvolver aplicativos que utilizam Server Driven UI, basta escrever o código uma vez para que as telas funcionem no Android, no iOS e na web.
Quando o front chama o Beagle, a ferramenta atua como um BFF, retornando um JSON da tela correspondente, contendo todas as informações necessárias para que o front renderize a tela para o usuário. Assim, uma vez que a configuração inicial foi feita, são raras as atualizações que precisam passar pelas lojas de aplicativos, já que quase tudo é controlado pelo servidor. Além de ajudar com os problemas citados acima, ter a aplicação controlada pelo servidor significa que podemos utilizar técnicas que antes só eram possíveis na web, por exemplo utilizando o Charles C.D.
Com o Charles C.D., é possível fazer deploys de forma rápida e simples, validando alterações simultaneamente com diferentes grupos de usuários e evoluindo de forma rápida com os feedbacks recebidos, por meio de analytics e outros métodos.
Combinando as duas ferramentas, ganhamos velocidade no desenvolvimento, escrevendo uma só vez para Android, iOS, React ou Angular, diminuímos o tempo de iteração pulando os processos das lojas, garantimos que os usuários estão usando a versão correta dos apps e podemos validar hipóteses nos produtos rapidamente com versões em produção segmentadas.
