A Importância da Performance Para Apps Mobile
Android e iOS possuem cerca de 4.5 bilhões de dispositivos ativos com performances distintas. Conheça um pouco mais sobre nosso trabalho em relação a este tema fascinante!
Olá ;)
Você também pode ler este artigo em inglês aqui!
“Eu me mantenho servo de seis homens honestos (eles me ensinaram tudo que sei); seus nomes são Que, Porque, Quando, Como, Onde e Quem.”
Rudyard Kipling
Você já se perguntou o que te motiva a continuar dando o seu melhor todos os dias? Enquanto criança, lançamos aos adultos inúmeras perguntas na tentativa de compreender o mundo em que vivemos. Em algum momento das nossas vidas nos abstemos de fazê-las e por vezes, até mesmo em nossas carreiras, deixamos passar despercebido detalhes importantes do nosso dia-a-dia. Por exemplo, a constância de uma alta performance profissional demanda aprimoramento nos detalhes; mesmo tipo de aprimoramento e cuidado que aplicamos no Mercado Livre à nossa stack tecnológica.
Um dos nossos princípios culturais é o Beta Contínuo. Aqui, assim como sugere uma das muitas interpretações do poema de Kipling, se faz necessário compreender o cerne dessas seis indagações para que nossas aplicações performem de forma otimizada, alcancem a expectativa dos usuários e cumpram o seu papel de larga escalabilidade. No universo mobile do Mercado Livre, quem fornece combustível na busca por excelência são os milhares de usuários ativos em nossos apps. Hoje venho aqui contar para vocês o que significa performance em nossas plataformas Android & iOS, porquê possuímos um time dedicado a essa área e como aplicamos na prática algumas melhorias regularmente.
“Performance pode ter significados distintos para diferentes pessoas. Quando falamos sobre apps mobile, performance pode descrever como um app funciona, quão eficientemente ele funciona ou se foi agradável de utilizá-lo.”
Doug Sillars
Atualmente, entre Android e iOS, existem cerca de 4.5 bilhões de dispositivos ativos. Analisando abaixo o quão rápido uma tela é apresentada, podemos constatar que dispositivos de distintos fabricantes, ou até mesmo um grupo de mesmo modelo, podem variar seu tempo de resposta. A exemplo, o Galaxy A10 pode levar até 5 segundos para inicializar a tela em questão, mas em média leva 1.67 segundos. É importante ressaltar aqui que muitos outros fatores não relacionados a Hardware podem impactar este dado.
Eu pergunto: Se performance possui distintos significados para cada dispositivo, estes mesmos significados também podem variar de acordo com a perspectiva de cada desenvolvedor?
Bom, acredito ser unânime entre a comunidade de desenvolvedores que não somos muito exigentes quando falamos sobre performance. Já seria bom suficiente que nossa aplicação não fechasse repentinamente diante do usuário, certo?
Em teoria é um pensamento simplista, embora profundamente verdadeiro. Na prática, enquanto desenvolvedores desejamos muito mais.
“A maior parte das pessoas está preocupada com o tempo de execução, embora a arquitetura de um programa e a utilização de memória possam ser críticos para pequenos sistemas embarcados.”
WG21
Dispositivos móveis possuem algumas restrições de processamento e memória tal qual sistemas embarcados, portanto, tendemos a seguir as mesmas motivações descritas pelo WG21. Para não falar apenas sobre limitações de Hardware, em minha humilde opinião como desenvolvedor, por vezes deixamos problemas de performance serem rotulados como débito técnico.
Por exemplo, eu me recordo quando no começo de 2020 havia planejado solucionar vários débitos técnicos do Mercury, um app que desempenha papel fundamental no sistema de gerenciamento de armazéns e compõe parte das nossas soluções em logística. O Mercury é altamente flexível e escalável, embora seja geralmente controlado pelo backend. Apesar dos débitos planejados, o Covid-19 acelerou a entrega de Bens de Consumo Embalados, induzindo uma adaptação da estratégia de logística em nossa empresa. Naquela época, a demanda dos consumidores por este tipo de produto estava tão alta que nosso backlog mobile foi colocado em espera até que fosse liberada a movimentação de Bens de Consumo Embalados em nossos armazéns, assim todos os desenvolvedores poderiam focar no desenvolvimento do backend desta funcionalidade.
Logo no começo de julho, iniciamos a redução de falhas e alertas no Mercury, o que significou uma queda de aproximadamente 75% do número de eventos registrados até final daquele ano. Esse número é ainda mais impressionante se considerarmos o aumento de tráfego no app durante este mesmo período, seja pela expansão da nossa malha logística, seja pelo aumento do consumo em nosso marketplace.
Não se deixe enganar: performance é um tema preocupante e necessitamos priorizá-la sempre que possível.
Um breve levantamento sobre os reviews negativos dos nossos principais aplicativos demonstram que, de forma simplificada, é possível categorizar as reclamações dos nossos clientes entre: Experiência do Usuário, Performance e Regras de Negócio. Especificamente, a ausência de performance pode implicar perda de confiabilidade no aplicativo, desprazer em utilizá-lo, além de não engajar os usuários em uma divulgação boca-a-boca. Na maioria dos casos, como veremos a seguir, leva até mesmo à desinstalação dos apps. Dentre todas possíveis ações do usuário, esta última seguramente é a de pior impacto para qualquer negócio que prioriza suas plataformas mobile.
Portanto, é importante não somente escutar nossos clientes, mas prestar uma atenção especial a suas interações. Através de uma pesquisa realizada em 2015 pela Dimensional Research, sob patrocínio da Hewlett-Packard, a insatisfação de clientes mobile no âmbito da performance pôde ser traduzida em números. Dentre 3011 entrevistados na Europa, Estados Unidos e Canadá, a análise deles concluiu que:
Usuários de aplicativo mobile são impacientes
- 61% esperam que aplicativos inicializem em 4 segundos ou menos.
- 49% esperam que aplicativos inicializem em 2 segundos ou menos.
- 96% consideram a performance dos apps igualmente, muito ou criticamente importante.
Usuários são intolerantes a problemas e abandonam apps mobile rapidamente
- 80% indicaram que tentariam utilizar um aplicativo problemático por apenas 3 vezes ou menos.
- 53% desinstalaram ou removeram um aplicativo mobile por problemas severos como falhas, travamentos ou erros.
- 36% parariam de utilizar um app devido ao alto consumo de bateria.
Na tentativa de evitar essa estatística, à parte da conscientização de todos os desenvolvedores para um esforço coletivo, temos uma equipe dedicada à melhoria da performance em nosso universo mobile. Diariamente, todos nós buscamos aplicar boas práticas, como as descritas abaixo:
- Automatizamos alertas e monitoramos inúmeras ferramentas a fim de evitar eventos prejudiciais ao usuário.
2. Valorizamos estatísticas de builds como forma de reduzir custos, especialmente por motivos de ociosidade.
3. Otimizamos nossos builds, evitando redundância de dependências.
4. Utilizamos flavors a fim de granularizar recursos e configurações.
5. Unificamos a experiência de desenvolvimento para facilitar o trabalho de outros desenvolvedores.
6. Removemos código legado sempre que identificados.
7. Evitamos empacotamento de recursos pesados, como imagens, optando preferencialmente pelo download destes sob demanda.
8. Revisamos regras do Proguard induzindo uma redução de peso.
9. Ordenamos nossos configuradores por prioridade visando reduzir o tempo de inicialização do app.
Semanticamente falando, como é possível observar em sua grande maioria, os exemplos utilizados foram extraídos da plataforma Android. No entanto, em sua essência, estes mesmos exemplos podem ser portados a outras plataformas tendo em vista igual finalidade.
Resumindo em poucas palavras, é possível concluir que performance tem sim distintos significados e a busca por sua perfeição demanda trabalho constante sob diferentes perspectivas.
E você? Qual a sua história pessoal ou profissional sobre performance? Conte-nos mais sobre suas perspectivas nos comentários e fique ligado para aprender mais sobre o que estamos trabalhando para continuar aprimorando a performance dos nossos apps mobile!
Referências
- I Keep Six Honest Serving Men — A Poem by Rudyard Kipling
- β Contínuo: Empreender é estar em constante mudança
- Keynote I/O 21
- 9 to 5 Mac: Apple hits 1.5 billion active devices
- Technical Report on C++ Performance (WG21, 2006)
- High Performance Android Apps (SILLARS, 2015)
- Failing to meet mobile app user expectations (Dimensional Research, 2015)