O Duolingo refatora no Android com as bibliotecas MVVM e Jetpack

O Duolingo é o app de ensino de idiomas mais conhecido do mundo, porque ele consegue fazer com que algo que as pessoas consideravam assustadores antes fique fácil e divertido. Essa experiência de linguagem simples requer um fluxo constante de novos recursos e experimentos, além de um app com execução suave que pode oferecer todos eles. Para o Duolingo, ter um app que não responde em um dispositivo em qualquer lugar do mundo pode significar um aluno potencialmente desestimulado. Isso compromete a excelência do aplicativo, especialmente nos dispositivos Android usados por 60% dos alunos, incluindo o CEO, que monitora o aplicativo em um celular básico. Assim, quando a equipe de desenvolvimento para Android do Duolingo notou um aumento nos erros do tipo "O app não está respondendo", queda de frames e até mesmo reclamações por escrito, a empresa tomou providências imediatamente.

Logo eles descobriram a origem dos problemas de desempenho do aplicativo: a arquitetura de software existente não estava se expandindo bem com o crescimento da equipe. Atualizações necessárias estavam causando regressões de desempenho do app. Os desenvolvedores dedicavam mais tempo à correção de bugs e menos ao lançamento de novos recursos que geravam receita. Sua arquitetura de software desatualizada estava começando a se tornar um obstáculo inaceitável: para eles, para a velocidade da equipe e, acima de tudo, para a experiência dos usuários. Foi preciso reconstruir a base de código do zero.

Como eles conseguiram

No início, a equipe estava dividida. Essa seria a única prioridade agora? Um grupo sentiu que era mais importante continuar lançando novos recursos e gerando receita, enquanto o outro acreditava que concentrar toda a atenção em uma reinicialização do Android era o caminho a seguir. Eventualmente, eles chegaram ao consenso de que o aumento do esforço de lutar contra as regressões arriscava a prejudicar completamente o roteiro. Eles tinham que ir com tudo.

A equipe escolheu uma solução cada vez mais popular. A empresa decidiu reescrever o app usando o Model-View-ViewModel, um padrão de software suportado pelo Google que permite que os desenvolvedores otimizem a arquitetura de um app criando uma separação clara de conceitos. Com o MVVM, eles podem separar o desenvolvimento da interface gráfica do usuário (a visualização) do desenvolvimento da lógica de negócios (o modelo). Eles poderiam estabelecer padrões claros e acordados, facilitando o alinhamento da abordagem a novos recursos e a integração dos novos desenvolvedores.

Dividir cada recurso na própria parte modular permitiu que a equipe recuperasse rapidamente a produtividade, pois poderia atribuir pequenos grupos para trabalhar em cada recurso em paralelo, aumentando a velocidade e reduzindo os erros.

Eles implementaram essa nova arquitetura com bibliotecas do Jetpack Android, incluindo Dagger e Hilt, para ajudar a escrever código que funcione de maneira consistente em diferentes dispositivos e versões do Android. Essas duas adições permitiram criar recursos encapsulados melhores e usar os módulos integrados do Android com mais eficiência.

Resultados

Esse desempenho melhora significativamente a experiência dos alunos no Android e, principalmente, em dispositivos básicos. Eles também resultaram em um app mais responsivo, com animações mais suaves em dispositivos de sucesso. A taxa diária de "O app não está respondendo" ou de ANR caiu 41%. A porcentagem de tempo em que o app ficou abaixo do frame rate desejado diminuiu em 28%. Mais importante ainda, os usuários observaram um aumento de 40% na velocidade ao navegar pelas telas principais.

Mãos segurando anotações lendo 41% menos ANRs, 28% de frame rate melhor e 40% de experiência mais rápida.


A reinicialização levou oito semanas e tornou o app consideravelmente mais envolvente e divertido para todos os estudantes do Duolingo. Nos seis meses desde então, a equipe não registrou novas regressões de desempenho significativas, permitindo que se concentre novamente no envio de recursos que geram receita. A decisão de concentrar os esforços da equipe na qualidade valeu a pena.

A dedicação do Duolingo à missão fez com que ele se tornasse o melhor app do mundo no aprendizado de idiomas. O compromisso deles com a excelência do app, criando experiências educacionais de ponta sem comprometer a acessibilidade, é o que os manteve lá.

Primeiros passos

Se quiser conhecer os detalhes de como o Duolingo integrou as bibliotecas do Jetpack e como o Model-View-ViewModel melhorou o app, leia nosso estudo de caso técnico para desenvolvedores.