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!

Victor Oliveira
Mercado Libre Tech
7 min readSep 30, 2021

--

Olá ;)

Você também pode ler este artigo em inglês aqui!

A importância da performance para apps mobile

“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.

Firebase Performance Monitoring — Quadro com detalhes de inicialização

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?

Crashes em produção: Um pesadelo!
Como se sente qualquer desenvolvedor sobre crashes em produção

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.

Amostragem de erros do Mercury

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.

Reviews sobre os aplicativos mobile do Mercado Livre

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.
Levantamento sobre responsividade dos apps survey apresentado pela Dimensional Research sob patrocínio da Hewlett-Packard
Dimensional Research patrocinada pela Hewlett-Packard — Responsividade dos apps
Levantamento sobre importância da performance apresentado pela Dimensional Research sob patrocínio da Hewlett-Packard
Dimensional Research patrocinada pela Hewlett-Packard — Importância da performance

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.
Reações comuns a falhas e lentidão apresentado pela Dimensional Research sob patrocínio da Hewlett-Packard
Dimensional Research patrocinada pela Hewlett-Packard — Reações comuns a falhas e lentidão

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:

  1. Automatizamos alertas e monitoramos inúmeras ferramentas a fim de evitar eventos prejudiciais ao usuário.
Eventos potencialmente prejudiciais sendo monitorados pelo Mercado Livre

2. Valorizamos estatísticas de builds como forma de reduzir custos, especialmente por motivos de ociosidade.

Tivemos muito trabalho para aprimorar o tempo de build do Mercado Libre no Android e ainda temos muitas oportunidades pela frente.
Tempo de build do nosso app Android — Mercado Libre em um período de sete dias, extraído da estatística de build do Gradle no CircleCI

3. Otimizamos nossos builds, evitando redundância de dependências.

Implementation em contraposição à utilização de api para aprimorar performance do tempo de builds

4. Utilizamos flavors a fim de granularizar recursos e configurações.

Flavors são recomendados para especificar detalhes de build

5. Unificamos a experiência de desenvolvimento para facilitar o trabalho de outros desenvolvedores.

É importante evitar duplicidade de código, identificando objetivos em comum dentre distintos times

6. Removemos código legado sempre que identificados.

Avistado arquivo criado em 2016 e deixado para trás após uma nova versão

7. Evitamos empacotamento de recursos pesados, como imagens, optando preferencialmente pelo download destes sob demanda.

Imagens removidas que deveriam ser baixadas durante a utilização do app

8. Revisamos regras do Proguard induzindo uma redução de peso.

Regras do Proguard sendo escaladas para otimizar o bytecode gerado

9. Ordenamos nossos configuradores por prioridade visando reduzir o tempo de inicialização do app.

Configurações preliminares devem ser priorizadas para reduzir o tempo de inicialização

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

  1. I Keep Six Honest Serving Men — A Poem by Rudyard Kipling
  2. β Contínuo: Empreender é estar em constante mudança
  3. Keynote I/O 21
  4. 9 to 5 Mac: Apple hits 1.5 billion active devices
  5. Technical Report on C++ Performance (WG21, 2006)
  6. High Performance Android Apps (SILLARS, 2015)
  7. Failing to meet mobile app user expectations (Dimensional Research, 2015)

--

--