Há pouco mais de um ano, Alexandre Freire escreveu um artigo sobre como nós decidimos padronizar o desenvolvimento do nosso aplicativo móvel com o Flutter, nossas primeiras experiências com a plataforma e por que decidimos usá-la como nossa tecnologia principal para aplicativos multiplataforma.

Em uma entrevista recente com Nóra Bézi da Bitrise, Alexandre — junto com Noe Branagan, gerente de engenharia da equipe central do Flutter no Nubank, e outros engenheiros do Nubank — deu uma visão geral de como o Flutter nos ajudou a expandir o desenvolvimento do nosso aplicativo para suportar nosso hipercrescimento..

Por que o Flutter?

Conforme o Nubank cresceu e se tornou o maior banco digital independente fora da Ásia, desenvolver novos produtos além do cartão de crédito virou uma prioridade, e as novas equipes precisavam descobrir uma maneira de criar rapidamente aplicativos de alta qualidade.

Para se ater a apenas uma tecnologia, a equipe avaliou as opções em relação a uma série de prioridades definidas com base nesses cinco fatores: 

  • 1. Experiência do desenvolvedor: Ela possibilitará que os desenvolvedores agreguem valor e sejam mais produtivos?
  • 2. Viabilidade em longo prazo: A plataforma terá suporte de seus criadores futuramente?
  • 3. Sem especialização de plataforma: O código tem o mesmo visual e comportamento no Android e no iOS, com uma baixa ocorrência de problemas específicos de SO? 
  • 4. Custo de abstração incremental: Quão difícil será ampliar a plataforma e adicionar novos componentes?
  • 5. Risco de abstração não linear: Eles precisariam fazer alterações não triviais no código-base inteiro para adicionar novos componentes? 

Após coletar evidências, a equipe decidiu adotar o Flutter, graças às suas excelentes capacidades de testes, como infraestrutura de teste integrada para testes de Unidade, Integração e de ponta a ponta sem a necessidade de renderizar na tela. Em geral — em comparação com as outras opções —, eles também acharam que a experiência de desenvolvimento no Flutter era superior, com melhores capacidades de recarga automática, documentação oficial robusta e uma API mais estável.

On the left, two Nubank purple plastic cards. On the right, a mobile phone showing the home screen of the Nubank app.
Cartões e aplicativo do Nubank

Conheça nossas oportunidades

Após um ano, qual a qualidade de expansão do Flutter?

Nóra: Vocês ainda estão felizes com o Flutter?

Alexandre Freire, Diretor de Engenharia: Amamos o Flutter no Nubank. Ele se tornou 100% parte da nossa cultura quando falamos sobre desenvolvimento para celulares. Também estamos testando o Flutter Web, pois demonstrou muitas vantagens para melhorar a experiência do desenvolvedor. Tomamos muitas decisões estratégicas na nossa equipe de produtos que afetaram a nossa velocidade e a eficiência e deram a oportunidade para mais engenheiros colaborarem no nosso código-base compartilhando uma linguagem. Ficamos surpresos com quão fácil foi para nossas equipes adotarem a tecnologia e todos os novos recursos usando o Flutter. Estamos ficando mais experientes em Dart — pois virou parte do nosso arsenal para criar novas ferramentas para desenvolvimento para celulares, como o CLI que usamos para desenvolvedores móveis trabalharem no nosso monorepo.

Nóra: Desde que começaram a usar o Flutter, algo mudou no seu processo de desenvolvimento para celulares?

Noe Branagan, Gerente de Engenharia: Desde que adotamos o Flutter​, adotamos uma ferramenta de desenvolvimento interno experimental usando Flutter Desktop para acelerar nosso desenvolvimento ainda mais. Ele reduz o uso de bateria do notebook ignorando emuladores e ajuda com testes rápidos em diferentes dimensões de dispositivos. Nossa infraestrutura móvel e eficiência de desenvolvimento ficaram cada vez melhores com Flutter, Dart e com os diversos novos recursos para desenvolvedores que foram introduzidos no ano passado.

Nóra: Há algo que você queria ter sabido na época?

Bruno Tavares, Gerente de Engenharia: Acho que fomos um pouco ingênuos em relação à capacidade de migrar um aplicativo tão grande e complexo que oferece suporte completo para quatro produtos diferentes. Ainda estamos na metade: nosso aplicativo ainda não é 100% Flutter. Recentemente finalizamos um mapa completo dos módulos de propriedade para as equipes e começamos os planos de acompanhamento para finalizar a migração. Estamos alinhando a empresa ao redor do objetivo técnico de finalizar a migração. Também estamos enfrentando decisões difíceis de priorização, especialmente em fluxos e telas que funcionam muito bem em seu estado atual (Objective-C nativo, Swift, Java, Kotlin ou React Native), para os quais não há planos de atualização em breve.

O mapa a seguir mostra todos os fluxos e telas do aplicativo, com o tamanho significando a complexidade do módulo. O roxo marca os que já foram migrados, e os verdes serão migrados este ano:

A mosaic of purple, yellow and green rectangles. Purple and yellow share about the same proportion, while the green ones are less common.
Este mapa mostra todos os fluxos e telas do aplicativo, com o tamanho significando a complexidade do módulo. O roxo marca os que já foram migrados, e os verdes serão migrados este ano.

Nóra: Na sua opinião, qual é a qualidade de expansão do Flutter?

Noe Branagan, Gerente de Engenharia: Nossa equipe de engenharia está expandindo como resultado do hipercrescimento do Nubank — ​estamos sempre contratando​. Isso também significa que precisamos aumentar a frequência de lançamento de novos recursos para os clientes, o que exige mais capacidade e recursos. Usar o Flutter como nossa principal tecnologia reduziu muito a barreira, permitindo que novos engenheiros possam contribuir com o nosso aplicativo em questão de dias após serem integrados. Em relação à eficiência, melhoramos muito nosso tempo de compilação; a taxa de sucesso na fusão é de 30% melhor em comparação com o nativo, com a fusão de PRs do Flutter levando 9,9 minutos para completar, em comparação com uma média geral de 70,45 minutos em todas as plataformas.

Reinaldo Moreira, Engenheiro Móvel: “O Flutter nos permitiu lançar o Seguro de Vida em apenas 3 meses. Antes de usar essa estrutura, desenvolver e lançar um novo produto levaria meses ou até mesmo um ano. Usar o Flutter nos ajudou a acelerar o desenvolvimento para as duas plataformas, e as ferramentas criadas a partir da nossa plataforma móvel também fizeram uma grande diferença. Não consigo imaginar esse recurso sendo feito sem usar o Flutter.”

Nóra: Quais são os principais recursos que tornam o Flutter tão adequado para o seu uso?

Lindsey Bleimes, VP da Engenharia: Ele oferece mais consistência na maneira como fazemos o desenvolvimento de produtos. Temos nosso próprio sistema de design, no qual as equipes de produtos podem ampliar e personalizar seus componentes de IU. Ele também oferece ferramentas orientadas por backend, como a função de ‘recarga automática’ e um suporte melhor para a localização. Criamos uma ferramenta para entregar dinamicamente novos conteúdos para o nosso aplicativo. Por exemplo: agora podemos gerenciar a localização sem precisar lançar uma nova versão do aplicativo ou sacrificar o desempenho. Usar o Flutter nos ajudou a criar uma infraestrutura melhor para observar, mandar alertas diretamente para a equipe responsável, medir o tamanho do aplicativo por recurso ou pacto e relacionar mais métricas com outros sistemas.

Marcelo Theodoro, Gerente de Engenharia: A maior vantagem é que até mesmo engenheiros não móveis ficavam produtivos em poucas semanas devido à rápida curva de aprendizagem do Flutter. Com a adoção de múltiplas equipes de produtos, todos percebemos ótimas novas práticas surgindo e começamos a padronizar nosso código-base.

Nóra: Há algo a mais a considerar ao migrar um aplicativo para o Flutter?

Alexandre Freire, Diretor de Engenharia: Vale a pena observar que, além do código do aplicativo em si, essa migração envolve muitas ferramentas e suporte. Criamos um serviço para cuidar de toda a cópia e localização do aplicativo, pois já operamos no Brasil e no México e anunciamos nossas operações na Colômbia. Também fizemos ferramentas de desenvolvimento como o CLI escrito em Dart e adaptamos nossos pipelines de compilação, testes e implantação contínua usando soluções internas, em grande parte. Precisamos nos adaptar a essa realidade de ter um aplicativo que existe em um estado misto (nativo, React Native e Flutter). Esperamos que, após a migração, seja possível simplificar o ecossistema.

Marcelo Theodoro, Gerente de Engenharia: Nem tudo é fácil. Como fomos os primeiros a adotar, não demorou muito até encontrarmos erros ao integrar com partes nativas antigas do aplicativo. O principal aprendizado é que ter uma equipe de plataforma focada em apoiar as equipes de produtos é essencial para resolver esses tipos de erros e alguns dos problemas complexos de desempenho. E para evitar que o aplicativo se torne um monstro do Frankenstein, consideramos importante fornecer um amplo treinamento para todas as equipes.”

Conheça nossas oportunidades