Os alicerces de uma (boa) Experiência Mobile

Na construção de uma Experiência Mobile, um dos principais passos é a escolha tecnológica. Para que seja feita a escolha certa, é preciso compreender cada tipo de aplicação e o seu propósito.

João Fernandes
Innovagency
11 min readJun 3, 2020

--

“Innovation distinguishes between a leader and a follower.” — Steve Jobs

Os tempos de confinamento trouxeram consigo um maior volume de consumo digital. Desde notícias, redes sociais, imagens, vídeos, jogos e compras, todos estes recursos são consumidos através de diversos canais. Um dos canais que mais se tem destacado na adaptação aos comportamentos deste novo tempo é o Mobile. Os utilizadores cada vez mais utilizam os seus smartphones para fazer tudo o que anteriormente faziam nos seus computadores. Mais que isso, nestes tempos difíceis acabam também por servir para substituir acções que antigamente fariam fisicamente ou presencialmente.

Source

Estudos indicam que a principal forma de consumo de conteúdo em mobile é feito através de aplicações. No meio de um mercado cada vez mais saturado, é importante que as aplicações se consigam distinguir da concorrência — e a melhor forma de o fazer é através de uma excelente experiência para o utilizador.

Antes do desenvolvimento de uma nova aplicação, é necessário ter em consideração diversos factores que podem traçar o seu sucesso ou insucesso — um dos principais factores é a escolha tecnológica. Nem todos os tipos de tecnologias permitem ter o mesmo tipo de funcionalidades nem chegar aos mesmos resultados.

No momento da decisão sobre que tecnologia usar para o desenvolvimento de uma aplicação, são várias as dúvidas. Muitas vezes, a escolha é enviesada por erradas percepções ou pelo que chamamos da “tecnologia da moda”. Mas nem sempre uma “tecnologia da moda” é um sinónimo de inovação ou a melhor opção para a app que queremos desenvolver.

No que respeita ao desenvolvimento de aplicações mobile, existem inúmeras soluções tecnológicas que podem ser usadas. É por isso que quando o que se pretende é criar uma experiência mobile de excelência, se torna ainda mais importante conhecer as características e fragilidades de cada uma, de forma a que a escolha seja a mais adequada ao desafio que temos em mãos.

Híbridas vs Cross-Platform vs Nativas

São vários os termos, por vezes erradamente usados, que definem as diversas tipologias de tecnologias que podem ser usadas para construir uma aplicação mobile.

Aplicações Híbridas

As aplicações híbridas têm como base tecnologias web. Dentro delas, encontram-se as mais populares: Cordova, Ionic, NativeScript e OutSystems.

Por vezes, são erradamente categorizadas como tecnologias “Cross-Platform” pelo simples facto de que pertencem ao grupo de tecnologias em que o desenvolvimento é feito sobre uma única codebase, sendo no final geradas aplicações iOS e Android. Na verdade, as aplicações híbridas são pouco mais do que uma shell, dentro da qual está uma página Web a correr localmente.

De uma forma geral, este tipo de frameworks permitem o desenvolvimento de cerca de 80% da funcionalidade de uma aplicação. Os restantes 20% requerem (muito frequentemente) tanto ou mais esforço que a restante “fatia do bolo” e acabam por ter que ser implementadas através de módulos nativos, desenvolvidos para cada uma das plataformas suportadas.

Quais são os principais problemas com estas frameworks?

  • Lentidão no carregamento e na experiência de utilização da aplicação — é rápida para uma página web mas lenta para uma aplicação. Loadings são frequentes, até para as acções mais simples.
  • Falta de ferramentas para construir uma experiência rica em interacções, animações e transições. Aquelas que são possíveis de implementar são sempre muito simples e/ou pouco fluidas.
  • Não é fácil trazer funcionalidades inovadoras — o desenvolvimento de qualquer funcionalidade “fora do comum” implica desenvolvimento nativo. Nesse caso, a aplicação estar assente sobre uma única codebase funciona em seu detrimento.

E as Progressive Web Apps (PWA)? As PWA não são na sua essência aplicações mobile. São Websites que podem ter algumas capacidades offline e cujo comportamento pretende simular o de uma aplicação. É por isso que as PWA, ao contrário das aplicações mobile, não podem ser submetidas nas stores da Apple e da Google.

Aplicações Cross-Platform

As aplicações Cross-Platform têm como base tecnologias que pretendem abstrair o desenvolvimento em código nativo. Encontram-se entre as mais populares: React-Native, Flutter e Xamarin.

Tal como as frameworks híbridas, assentam num modelo de uma única codebase para todos os sistemas. Ao contrário das tecnologias híbridas, estas tecnologias têm como output uma aplicação de código nativo à plataforma.

No entanto, devido às múltiplas camadas de abstracção colocadas por cima do código nativo, a aplicação nunca chega a ter uma experiência verdadeiramente nativa.

Quais são os principais problemas com estas frameworks?

  • Estas tecnologias apontam para o mínimo denominador comum entre Android e iOS. Como tal, estas tecnologias comprometem ferramentas e funcionalidades para suportar o mínimo de dois mundos.
  • À semelhança das frameworks híbridas, (por norma) cerca de 20% do bolo de funcionalidades de uma aplicação Cross-Platform também tem que ser desenvolvida nativamente, com um esforço por vezes igual ou superior ao da restante funcionalidade.
  • Embora melhor que uma aplicação híbrida, a velocidade e performance da aplicação continuam a ser bastante fracas. Os loadings e falhas na fluidez continuam a ser frequentes.
  • Os elementos de interface são emulados de forma a replicar os nativos mas por vezes não se comportam da forma expectável.

Aplicações Nativas

Uma aplicação nativa é feita à medida para cada plataforma. As frameworks e ferramentas de desenvolvimento são também construídas pela Google e Apple em específico para cada plataforma. Com estas ferramentas, os programadores têm ao seu dispor a melhor base para desenvolver aplicações em cada sistema. Aplicações estas que podem tirar partido do range completo de funcionalidades de cada um dos sistemas operativos.

A segurança dos dados também é uma das principais vantagens de desenvolver uma aplicação nativa. Com um range mais alargado de ferramentas e um controlo muito mais fino sobre cada sistema operativo, é possível gerir a transferência e persistência da informação de uma forma bastante mais segura.

As tecnologias nativas são regularmente actualizadas com novas ferramentas de desenvolvimento e novas funcionalidades para as aplicações, funcionalidades que por vezes são específicas de cada sistema operativo. Adicionalmente, como não existem camadas de abstracção por cima do desenvolvimento nativo, é possível trazer estas novas funcionalidades às aplicações muito mais rápido e de uma forma muito mais segura.

Se existir um erro, será certamente mais fácil identificá-lo e corrigi-lo, dado que estará no código da própria aplicação, algo que por vezes não acontece em aplicações híbridas e cross-platform, onde surgem muitos erros na camada de abstracção sobre a qual os programadores não têm qualquer controlo.

Quais são os principais problemas com estas frameworks?

  • Como as aplicações são feitas em específico para cada sistema, implica que o esforço e custo destas aplicações seja, normalmente, um pouco superior ao de uma aplicação não nativa. Estes pontos dependem no entanto de vários factores e cada caso é um caso. Muitas vezes, o tempo e custo que se ganha em aplicações não nativas, perde-se na manutenção e evolução das mesmas.

Quais são os alicerces de uma (boa) Experiência Mobile?

Uma (boa) Experiência Mobile assenta em vários eixos, desde a expectativa dos utilizadores por parte da performance à fluidez da aplicação, caminhando até à futura evolução da mesma. Num mercado já bastante concorrido, é preciso estar um passo à frente para concorrer pelo tempo e atenção dos utilizadores.

Source

User (and Customer) Experience

A User Experience é um dos factores mais importantes para os utilizadores. E uma boa User Experience é muito mais do que uma boa ideia ou um bom conceito gráfico e funcional — há que a conseguir concretizar da melhor maneira, com a melhor qualidade, performance e dedicação aos pormenores.

Source

É na concretização de uma ideia que está o desafio. A opção por uma tecnologia não nativa implica abdicar de vários pontos essenciais:

  • Performance — Uma aplicação não nativa nunca terá uma performance equiparável a uma aplicação nativa. A abstracção do nativo faz com que se perca fluidez, fiabilidade e se introduzam loadings desnecessários. Este factor nota-se especialmente em ecrãs complexos, com scroll e com muitos componentes.
  • Detalhes — Os detalhes são importantes numa boa experiência de utilização. Quando o utilizador realiza uma acção, é importante que tenha feedback sobre a mesma. Seja por forma de uma animação, um highlight, uma vibração ou um som. Este tipo de detalhes são muito mais complexos de implementar numa aplicação não nativa — alguns até impossíveis.
  • Integração com Hardware — A integração com componentes específicos de hardware é também um desafio para as tecnologias não nativas. Embora seja possível integrar com componentes como o GPS, a câmara e o microfone, as aplicações não nativas não conseguem tirar partido do range completo de funcionalidades disponíveis nestes componentes. Adicionalmente, não é possível desenvolver para gadgets externos (Ex: Apple Watch, Android Wear) de uma forma não nativa.
  • Robustez — A introdução de uma camada (e em alguns casos, mais do que uma) de abstracção sobre o nativo, faz com que existam mais pontos de falha nas aplicações não nativas. São mais frequentes os crashes e os erros, por vezes no código da própria tecnologia — o que torna a sua resolução mais complicada.
Source

Manutenção e Evolução

Não é suficiente ter uma boa experiência se não for fácil mantê-la e evoluí-la. O mundo mobile está em constante evolução e todos os anos saem novos dispositivos e novas versões dos sistemas operativos. É preciso que as aplicações acompanhem essa evolução para se manterem relevantes e competitivas no mercado.

Neste tópico, as tecnologias não nativas trazem também várias desvantagens. A introdução de camadas por cima do nativo significa que cada actualização às ferramentas nativas implica também uma actualização à camada não nativa.

Cada actualização às tecnologias nativas trazem regularmente mudanças na forma como alguns componentes são implementados. Essas actualizações obrigam a alterações nas apps para estas voltem a funcionar como antes da actualização. Nas tecnologias não nativas, somam-se a estas actualizações da camada nativa, as actualizações na própria tecnologia não nativa, intensificando o trabalho de manutenção das apps.

Algumas actualizações em tecnologias não nativas acabam também por trazer breaking changes, o que obriga à actualização das bibliotecas externas usadas na solução. Este processo funciona como uma espécie de efeito dominó — quando uma peça precisa de ser actualizada, obriga a que todas as que estão por cima também necessitem de o ser. Frequentemente isto obriga a que sejam feitos grandes reworks e/ou refactorings de grandes porções de código e/ou funcionalidades. Com isto, o esforço envolvido neste processo acaba às vezes por ser duplicado, ou triplicado.

A estas actualizações somam-se os problemas que naturalmente surgem com novas versões das plataformas. Também neste aspecto as tecnologias não nativas trazem desvantagens — cada camada de abstracção é também uma fonte de potenciais problemas ou falhas. Adicionalmente, nestas tecnologias o nível de suporte e o tamanho da comunidade é muito menor, o que faz com que seja mais complicado encontrar ajuda para a resolução dos problemas.

Frameworks de Desenvolvimento e Inovação

As ferramentas de desenvolvimento são a base sobre a qual as aplicações mobile são construídas. Para que o processo de desenvolvimento seja fluido e focado na aplicação em si, as ferramentas necessitam de ser estáveis e robustas.

Qualquer aplicação mobile, seja qual for a tecnologia usada, vai ficando desactualizada com o tempo. A linha do progresso vai aumentando todos os anos com novos dispositivos que melhoram e introduzem novas capacidades de hardware. Em paralelo, os sistemas operativos também estão em constante evolução, trazendo consigo novas funcionalidades para tirar partido das novas e antigas capacidades dos dispositivos.

Para acompanhar esta evolução, é necessário que as ferramentas de desenvolvimento também sejam evoluídas. Mais importante que isso, é preciso garantir que essa evolução é feita com estabilidade e segurança.

Dado que as tecnologias nativas são geridas pelas próprias Google e Apple, significa que novas funcionalidades são possíveis de implementar a partir do primeiro dia em que ficam disponíveis. Adicionalmente, as ferramentas passam por várias fases de teste o que dá alguma segurança na sua actualização e garante um bom nível de estabilidade.

Infelizmente, tecnologias híbridas e cross-platform não são actualizadas para tirar partido destas funcionalidades com tanta frequência nem com tanta rapidez. As evoluções podem demorar meses a chegar e, quando chegam, trazem com elas problemas de estabilidade e erros mais ou menos frequentes. Alguns tipos de funcionalidades, pela sua complexidade e/ou especificidade, podem nem chegar às tecnologias não nativas.

De uma forma geral, este atraso e instabilidade faz com que as aplicações não nativas não consigam acompanhar o ritmo de inovação e evolução que as aplicações nativas têm.

Qual a escolha certa?

Em suma, os vários tipos de tecnologias têm características bastantes diferentes e isso faz com que devam ser usadas também em diferentes tipologias de aplicações.

As tecnologias não nativas têm vantagens que lhes permitem chegar mais rapidamente a um resultado, embora esse resultado nem sempre seja o esperado e tenha também um nível de qualidade inferior. Para aplicações simples, de baixa ambição, sem objectivos de evolução e de curta manutenção, as tecnologias não nativas poderão ser a escolha certa.

No entanto, para um público alvo cada vez mais exigente, torna-se cada vez mais importante oferecer-lhes uma excelente experiência. Esse nível de excelência só é possível se as aplicações tirarem o máximo partido de cada sistema operativo. É também importante que a aplicação continue a ser relevante e a acompanhar a linha de inovação que segue esta área. Só é possível obter esse tipo de resultados através de desenvolvimentos nativos. Embora possam ter um custo inicialmente mais elevado, as aplicações nativas tendem a compensar a longo prazo, tendo em consideração os tempos e custos de manutenção e evolução.

A Airbnb é o exemplo de uma empresa que experimentou ambos os mundos. Em 2016, a Airbnb foi uma das primeiras empresas a apostar forte no React-Native para o desenvolvimento das suas aplicações mobile. Dois anos depois, em 2018, a Airbnb deu um passo atrás e voltou ao desenvolvimento nativo. A acompanhar esta decisão, a Airbnb publicou uma série de 5 artigos sobre a sua experiência e sobre a decisão:

João Fernandes

Mobile Solutions Architect
jfernandes@innovagency.com

INNOVAGENCY
Living the digital world
www.innovagency.com

--

--