O Impacto de serviços externos em aplicações Mobile

No desenvolvimento de uma aplicação mobile é comum o uso de serviços externos para enriquecer a aplicação. Serviços que auxiliam a parte técnica como a coleta e análise de dados, como o Google Analytics e o Flurry, a serviços que visam aumentar a facilidade de uso como, por exemplo, o login social do Facebook que permite aos usuários se cadastrarem e realizarem o login pela rede social.

aplicacao-servicos-externos

Em média uma aplicação mobile se conecta a 5 serviços externos. Crittercism – Mobile Experience Benchmark.

Estes serviços são muito úteis e esta prática é largamente adotada pelo mercado como mostra uma pesquisa realizada pela Critterscism, apontando que uma aplicação utiliza em média 5 serviços externos distintos. Apesar dos serviços trazerem muitos benefícios para a aplicação quando eles são mal planejados, ou mal implementados, causam um grande impacto nos usuários. Este impacto é sentido pelos usuários principalmente em dois momentos:

  • No carregamento de ações chave (tempo de resposta);
  • O aplicativo parar de funcionar (crash).

Carregamento – Tempo de Resposta

conexoes-lentas-performance

O carregamento ou o tempo de resposta é o tempo decorrido para que a aplicação responda uma ação do usuário. São os milissegundos em que o usuário espera para realizar um login, carregar uma foto ou receber a confirmação de sua compra. Nestes momentos o usuário tem a percepção da “lentidão” ou a “rapidez” da aplicação ainda mais aguçada.

Vivemos um contexto onde os usuários estão cada vez mais exigentes com a performance e intolerantes com um baixo tempo de resposta, ou seja, intolerantes a aplicativos lentos. Segundo uma pesquisa da AppDynamics com o IMS da Universidade de Londres a lentidão é a principal causa da frustração no uso de aplicativosrepresentando 46% das reclamações. Muitas pesquisas apontam para esta mesma direção, caso queira se aprofundar no tema escrevemos um artigo explorando esta relação, acesse:  60% dos usuários definem a performance como crítica.

Mesmo com estes dados, a maioria das aplicações ignora a correlação entre performance e sucesso e não se preocupa devidamente com a questão.

As expectativas dos consumidores em relação aos aplicativos são extremamente altas, quando as pessoas não têm uma experiência satisfatória, elas vão para outro lugar e buscarão alternativas. Por isso é muito importante que os desenvolvedores e prestadores de serviço testem e otimizem seus aplicativos“.

Jonathan Freeman, professor de psicologia da universidade de Londres e diretor da I2 media research/Goldsmiths

Serviços externos e a performance

Entendendo que a performance é crítica e que milissegundos contam para o sucesso, é preciso ter a consciência que serviços externos podem impactar a performance de um app. Sim, é possível ter aplicações de alta performance com serviços integrados, mas isto depende de um bom planejamento e de uma boa dose de engenharia de software.

Um exemplo bacana de boas práticas em engenharia é o Instagram, o time de desenvolvimento é aficionado em melhorar a performance do aplicativo. Utilizando técnicas de carregamento assíncrono, prefetching, flat design e outras técnicas para evitar a sensação de lentidão. Neste artigo não vou me aprofundar em técnicas para engenharia e desenvolvimento, mas sim apresentar uma introdução ao tema e mostrar a realidade da maioria dos apps que implementam e utilizam os serviços em suas funções básicas.

Depois de rodar centenas de testes de performance em aplicativos percebemos que no mercado existem dois grandes mitos sobre serviços externos:

  • Serviços externos não impactam a performance;
  • Eles são estáveis e estão sob controle;

Estes dois mitos são a fonte de muitos problemas.

Serviços impactam e muitas vezes inviabilizam a performance de uma aplicação

Muitas pesquisas tentam entender qual é o tempo mínimo de carregamento para evitar a sensação de lentidão. Uma pesquisa da Compuware mostrou que a expectativa do usuário para o carregamento e o uso de um aplicativo é de 2 segundos, já um estudo da Chimera Labs demonstra que após 1 segundo de lentidão o engajamento do usuário é rompido. 

Crittercism – Mobile Experience Benchmark.

Crittercism – Mobile Experience Benchmark.


Medindo a performance dos serviços, a pesquisa da Crittercism observou que 9% dos serviços demoravam mais de 1 segundo para seu carregamento, e que 18% dos serviços requisitados apresentavam taxas de erro acima de 5%. Lembrando que quando um erro ocorre, a lentidão se agrava ou o aplicativo para de funcionar. Apenas estes serviços com mal performance já causariam sozinhos um grande estrago na performance de uma aplicação.

Engana-se quem pensa que os serviços que tiveram um mal desempenho são de baixa qualidade ou de empresas desconhecidas, nesta mesma pesquisa foi apontado que o tempo médio de resposta do Facebook foi de 669 ms e de um dos mais famosos analytics para mobile o Flurry tem um tempo de resposta de 750 ms.

“Para uma aplicação passar a sensação da performance instantânea, é necessário entregar ao usuário uma resposta perceptível em milissegundos. Após um segundo ou mais, o fluxo do usuário e seu engajamento com a tarefa inicial se rompe (…)”

Primer on Web Performance – Chimera Labs

Serviços externos não estão sob controle e sofrem instabilidades

Além do óbvio atraso no tempo de resposta é importante lembrar que serviços externos não estão sob o controle dos desenvolvedores. Caso ocorram instabilidades ou até mesmo a queda do serviço, é muito provável que o aplicativo que requisitou o serviço, o seu aplicativo, também pare de funcionar.

E isto é muito mais comum do que se imagina, observe o gráfico abaixo. De acordo com a pesquisa da Crittercism analisando a performance de serviços, o Facebook tem um tempo de resposta médio de 669 ms e uma porcentagem de erro média para requisições de 2,5%. Para ilustrar o impacto deste dado, 2,5% em erros de requisição são muito próximos da média da conversão de um e-commerce brasileiro, ou seja um app tem as mesmas chances de “crashar” ou ter impactos em seu tempo de resposta quanto a chance de um consumidor comprar um produto em um e-commerce no Brasil. É um número alarmante.

Crittercism – Mobile Experience Benchmark.

Crittercism – Mobile Experience Benchmark.

Outros Cenários comuns

Além do aumento no tempo de resposta e as possíveis instabilidades, compartilho alguns cenários que são recorrentes e que observamos nos testes que realizamos:

  • O serviço é atualizado: Os serviços sofrem atualizações constantes. Neste fluxo, funcionalidades e métodos de requisição sofrem alterações. Se o app não acompanhar estas mudanças, vai parar de funcionar e gerar centenas de bugs;
  • O serviço limita o uso e não suporta picos de acesso: Muitas vezes o serviço limita o número de requisições permitidas, o uso do Google Maps como serviço para aplicações é um exemplo. Caso o desenvolvedor utilize o modo gratuito existe um número de requisições máximas permitidas, quando este limite é atingido a requisição simplesmente para de funcionar, deixando o aplicativo sem resposta;
  • Servidores não estão preparados para conexões lentas: Os servidores muitas vezes estão longe do usuário final e não são distribuídos para atender regiões específicas. Por exemplo, um usuário Brasileiro acessando via EDGE (2G) ao abrir o aplicativo pode carregar um serviço que está em um servidor na Europa  e outro que está na Índia, a lentidão será enorme e provavelmente o usuário vai desistir do app.

Boas práticas e soluções

Boas práticas para serviços externos

Todo e qualquer serviço externo terá impacto na performance de uma aplicação. O grande desafio é planejar e implementar os serviços afim de minimizar os riscos. Para te ajudar, sentei com meu time de testers e criamos um check list pra você poder integrar serviços e garantir que tenha uma aplicação de alta performance.

Planejamento

  • Alinhe a importância da performance com seu time;
  • Alinhe os riscos de usar serviços externos;
  • Sempre questione a equipe se realmente existe a necessidade de usar um serviço externo;
  • Ao usar serviços externos busque soluções que não impactem a performance e a sensação de lentidão pro usuário, como o uso de serviços assíncronos;
  • Ao tomar uma decisão de usar ou não um serviço: analise o impacto na performance e o risco de problemas versus o ganho incremental que o serviço vai trazer para o app;
  • Ao decidir usar um serviço, busque benchmarks de performance, bugs e problemas conhecidos para a integração.

Entenda e teste a sua aplicação

  • Entenda  seu cliente alvo e o contexto em que ele vai usar seu app;
  • Realize testes para checar a performance de sua aplicação, compare-a com os benchmarks do mercado;
  • Realize testes de carga para checar se sua aplicação tem respostas diferentes a picos de acesso;
  • Realize testes de usos adversos para checar como sua aplicação responde a conexões lentas, a devices low end e outras situações não previstas;
  • Após realizar os testes, anote os resultados e defina limites, como exemplo temos: minha aplicação não pode ter um tempo de resposta inferior a 1,5 segundos;
  • Monitore a performance da sua aplicação;

Por projetos e aplicações melhores =)

Bom, é isto! Espero que o artigo tenha ajudado a elucidar um pouquinho mais sobre a relação entre performance e os resultados de uma aplicação. Caso queira se aprofundar no tema, ou tirar dúvidas entre em contato pelo julio.viegas@onedaytesting.com.br . Tenho diversos materiais adicionais e cases bacanas das centenas de testes que já rodamos aqui na One Day Testing. Até a próxima!