Por que optamos por usar Flutter em nosso novo produto no iFood

Samuel Matias
iFood Tech
Published in
7 min readFeb 7, 2020

Uma apresentação mostrando os principais pontos da nossa decisão em usar o Flutter no desenvolvimento do nosso novo produto.

Quando falamos de iFood, a grande maioria sempre liga isso ao nosso app do consumidor, que temos na versão Android, iOS e Web — o que é totalmente normal, afinal, ele é o nosso app car chefe. Mas além dele, temos outras aplicações para o usuário, como o iFood para Entregadores (Android) que é direcionado aos nossos entregadores, Gestor de Pedidos (Android e Desktop) direcionado para a frente de caixa do restaurante para gerenciar os pedidos dele recebidos pelo app do iFood e, por último, mas não menos importante, o iFood para Restaurantes, que é através dele que toda a história de desenvolvimento multiplataforma mobile começou por aqui.

Desenvolvimento multiplataforma mobile no iFood

Até pouco tempo atrás, o iFood ainda não trabalhava com desenvolvimento multiplataforma mobile, uma vez que o nosso app do consumidor e os demais são desenvolvidos de forma nativa, utilizando Kotlin para Android e Swift para iOS. Mas isso estava para mudar.

Em Abril de 2019, eu fui contratado pelo iFood para trabalhar no app do iFood para Restaurantes que seria em código nativo. Na época que entrei, estavam sendo feitas várias pesquisas com os nossos parceiros sobre o que eles estavam achando desse app.

Depois de finalizada a pesquisa, foi identificado que os nossos parceiros não estavam tão satisfeitos com o app, pois ele não estava entregando o valor necessário e esperado por eles. Com isso, nós do projeto sentamos e conversamos as possibilidades sobre o que poderíamos fazer para reverter essa situação com os nossos parceiros. Em meio a reuniões e discussões em cima da pesquisa levantada, percebemos que os pontos que entregariam o valor esperado seria, na verdade, praticamente refazer o app atual ou fazer um app novo, do zero.

Então, quando surgiu essa possibilidade de ser feito um novo app, mais a minha experiência com desenvolvimento multiplataforma mobile, pensamos “Por que não tentarmos fazer um app novo, do zero, usando uma tecnologia multiplataforma mobile?”. Como essa decisão envolve outras pessoas, tivemos que apresentar essa ideia para os demais responsáveis, indicando os principais pontos do porque fazer um novo app (mostrando os resultados da pesquisa feita com os parceiros) e porque fazer ele utilizando uma tecnologia multiplataforma mobile. E os principais pontos apresentados foram esses:

  1. Desenvolvimento rápido e multiplataforma: uma vez que o time já tinha experiência com uma tecnologia multiplataforma mobile e mesmo com um time pequeno, seria possível desenvolver para Android e iOS com o mesmo código.
  2. Inovação: como o iFood desenvolve seus apps de forma nativa, termos um case de um app desenvolvido com tecnologia multiplataforma mobile seria muito bom, sem contar que, a partir desse projeto, poderiam surgir outros usando a mesma tecnologia, trazendo maior velocidade e independência para alguns times.

Depois dessa apresentação, tivemos a notícia que nossa proposta foi aceita e iríamos fazer o novo app para os nossos parceiros usando uma tecnologia multiplataforma mobile que seria o React Native — pelo menos era o que achávamos.

React Native para pessoas vindas do nativo

Depois de tudo alinhado, demos início ao procedimento de desenvolvimento do novo app para os parceiros em React Native. Trabalhando na criação de duas features mais o Design System do App, levamos o total de 1 mês. Ao final desse mês, tivemos a notícia que o time iria receber outro membro, uma Pessoa Desenvolvedora Nativo (Android e iOS).

Com a entrada dessa nova pessoa, percebemos uma certa dificuldade de entender/aprender o React Native, uma vez que ele veio do mundo do Nativo e também não sabia nem React e nem JavaScript — isso é normal acontecer e pode ocorrer principalmente no mercado Mobile, onde as pessoas focam mais no Nativo (Swift/Kotlin) da coisa. Com isso, conversamos com a pessoa e tentamos entender qual seria os principais pontos de dificuldade, e o mais levantado foi a forma de codificar que era muito diferente do nativo. Esse ponto foi bastante importante, pois no iFood temos muitos Desenvolvedores Nativos e existia a possibilidade de algum deles vir para o nosso time. Como pensamos em escalar bem esse nosso produto, poderíamos precisar de mais pessoas e, se toda vez encontrássemos uma barreira desse tipo, poderia vir a atrapalhar o nosso crescimento em um futuro próximo.

Conversando sobre isso com o time, começamos a discutir sobre soluções para esse problema, até que uma pessoa comentou uma experiência na antiga empresa em que trabalhou, onde eles queriam usar uma tecnologia multiplataforma mobile, mas lá também as pessoas desenvolvedoras eram todas do nativo. Depois de pesquisas, eles optaram em usar o Flutter, pois segundo eles, que estavam vindo do nativo, o Flutter junto ao Dart, foi mais “amigável” de se entender do que o React Native junto ao JavaScript. Então, com esse Insight, decidimos pegar 2 dias para fazer pesquisas sobre o Flutter relacionadas ao seu modo de codificar, seus ganhos, seus problemas e algumas comparativas com relação a outras tecnologias, como o React Native.

React Native ou Flutter?

Passado esses 2 dias, fizemos outra reunião com o time para passar os pontos que conseguimos obter com a pesquisa sobre o Flutter. Conseguimos identificar bons pontos, como: sua documentação ser muito boa; Ui Toolkit; capacidade de testes sem precisar de dependências de terceiros; e sua performance ser muito boa com o Android, uma vez que quase 80% dos nossos parceiros usam Android, ter uma performance quase comparável a de um Android Nativo conta muito para gente, quando comparada ao React Native (com ou ser Hermes). Mas como nem tudo são flores, ele também tem seus pontos negativos e um dos principais era a comunidade que ainda não era tão forte comparada à de React Native, já que o Flutter é uma tecnologia mais recente.

A adesão de empresas ao Flutter

Um ponto que também investigamos foi a adesão do Flutter em grandes empresas. Na época, o case mais forte era do Alibaba no exterior, mas nenhum no Brasil. Até que um dia, o Nubank anunciou que iram usar o Flutter como tecnologia para o seu desenvolvimento mobile e lançou alguns artigos e documentos sobre o motivo da decisão, que nos ajudaram a ter insights. Depois de todos os pontos conversados, vimos que poderíamos sim pensar em usar Flutter para a criação do nosso novo produto. Agora, o que realmente faltava para termos essa confirmação, era botar a mão na massa e codificar, para conseguirmos identificar se ele realmente seria melhor para o nosso caso.

Colocando a mão na massa

Tivemos a seguinte missão, uma vez que o time não sabia nada sobre Flutter: uma semana para aprender o básico, para em seguida replicar as features feitas em React Native. Daí, conseguiríamos vários insights que, com certeza, nos ajudariam a tomar nossa decisão final. Os nossos estudos e aprendizados foram bastante baseados na documentação do próprio Flutter, uma vez que a documentação dele é boa e com vários exemplos. Depois de 3 dias focados nos estudo de Flutter, nós estávamos confortáveis em dar o primeiro passo no processo de desenvolvimento de replicar as features feitas em React Native para Flutter.

Resultados obtidos

Ao final desse último teste, conseguimos replicar as mesmas features em 2 semanas.

A partir desse teste, tivemos alguns insights:

  1. Facilidade no Aprendizado do Dart/Flutter: A sintaxe da linguagem realmente é mais fácil de aprender, principalmente para uma pessoa que já tem experiência com o nativo.
  2. Velocidade no Desenvolvimento: Já que no Flutter muitas coisas de UI já vem prontas, isso aumenta muito a velocidade de desenvolvimento, de modo que muitos componentes do design do app estejam prontos ou, caso não estejam, demandem poucas adaptações para estarem prontos.
  3. Performance: Como o React Native usa Bridges para acessar o componente Nativo em algumas conexões que ele precisa com o dispositivo (ex: notificações), isso deixa ele meio lento, principalmente com o Android. Como o Flutter não precisa de uma Bridget para interagir com nenhum componente Nativo, o Skia Engine e o próprio Dart ajudam bastante nesse ponto, fazendo com que o app ofereça uma boa performance.

Nossa decisão final

Depois de todos esses novos insights, chegamos na reta final, em que deveríamos decidir qual seria a tecnologia multiplataforma mobile que iriamos usar. Durante a reunião, o time teve um momento para pensar se fazia sentido realmente usar uma tecnologia que não tínhamos tanta experiência, que teríamos que aprender do zero e sair totalmente da nossa zona de conforto. Mas, como os resultados obtidos com o Flutter agradaram muito todo o time, concordamos que sim, valeria a pena sair da nossa zona de conforto para aprender algo novo, mesmo sendo difícil no começo, pois acreditávamos que essa decisão iria se pagar em um futuro próximo.

Agora, além de estarmos inovando no iFood usando uma tecnologia multiplataforma mobile na criação de um novo produto, também temos um case muito bom de uso de uma tecnologia que está crescendo muito no mercado de desenvolvimento multiplataforma mobile.

O Flutter no iFood

A partir do momento que tomamos essa decisão, começamos de fato a desenvolver o app em Flutter. Em meio ao desenvolvimento, vimos que algumas pessoas do iFood começaram a ficar interessadas e curiosas sobre o Flutter, então, nosso time pensou em um modo de conseguir disseminar a tecnologia dentro do iFood. Por isso, criamos a iniciativa iFlootter, em que nós fazemos eventos semanais para apresentar talks e algumas vezes fazer Dojos, de modo que consigamos atingir mais pessoas positivamente com o Flutter e que essas pessoas passem a usar ele de alguma forma.

iFood para Parceiros

Agora que o artigo está chegando ao fim, temos uma ótima notícia para os nossos parceiros! O app iFood para Parceiros feito em Flutter já está disponível nas lojas (Google Play e App Store) para todos os nossos parceiros.

App iFood para Parceiros em Flutter (Tela de Início)

Pera pera, ainda não acabou!

Antes de finalizar, queria deixar uma pergunta para você leitor: a empresa em que você trabalha já utiliza alguma tecnologia multiplataforma mobile? Se sim, qual? Se não, por quê?

Vlw galera, um forte abraço 😃!

Quer receber conteúdos exclusivos criados pelos nossos times de tecnologia? Inscreva-se.

--

--