Reconstrução do App Nubank: Lições de Arquitetura Mobile

Como o Nubank reconstruiu seu app para 40 milhões de usuários sem crashes. Decisões de arquitetura, feature flags e resultados mensuráveis.

Reconstrução do App Nubank: Lições de Arquitetura Mobile

Quando o Nubank decidiu reescrever completamente seu aplicativo em 2019, a equipe enfrentou um desafio monumental: como migrar 40 milhões de usuários de uma base de código legada para uma arquitetura moderna sem interromper o serviço? Este estudo de caso revela as decisões técnicas que transformaram um dos apps financeiros mais usados do Brasil.

O Problema: Uma Base de Código Insustentável

O aplicativo original do Nubank foi construído com uma arquitetura monolítica que funcionou perfeitamente nos primeiros anos. Porém, com o crescimento exponencial da base de usuários e a expansão de funcionalidades — de cartão de crédito para conta digital, investimentos e seguros —, surgiram problemas críticos:

  • Tempo de build ultrapassava 45 minutos, paralisando a produtividade
  • Crashes recorrentes afetavam 2-3% das sessões durante picos de uso
  • Dificuldade de onboarding: novos desenvolvedores levavam semanas para entender o código
  • Duplicação de código entre iOS e Android gerava inconsistências na experiência

A decisão de reescrever não foi tomada levianamente. A equipe passou seis meses analisando alternativas, desde refatoração gradual até abordagens híbridas, antes de optar pela reconstrução completa.

A Solução: Arquitetura Modular com Feature Flags

A estratégia adotada combinou três pilares fundamentais que permitiram uma transição segura e incremental.

1. Modularização por Domínio de Negócio

Em vez de camadas técnicas tradicionais (UI, lógica, dados), o time organizou o código em módulos independentes por funcionalidade: Cartões, Conta, Investimentos, Perfil. Cada módulo tinha:

  • Interface pública bem definida
  • Dependências explícitas
  • Capacidade de build e teste isolados
  • Times dedicados com autonomia técnica

Essa abordagem reduziu o tempo de build de 45 para 8 minutos, já que desenvolvedores compilavam apenas os módulos afetados por suas mudanças.

2. Feature Flags em Múltiplas Camadas

O Nubank implementou um sistema sofisticado de feature flags que permitia controlar três aspectos simultaneamente:

  • Percentual de usuários: liberação gradual de 0,1% a 100%
  • Segmentação: por região, versão do app, tipo de dispositivo
  • Kill switch: desativação imediata em caso de problemas

Isso possibilitou rodar código antigo e novo em paralelo. Durante a migração da tela de extrato, por exemplo, apenas 5% dos usuários inicialmente viam a nova versão. Métricas de performance e comportamento eram comparadas em tempo real antes de expandir o rollout.

3. Backend-Driven UI

Uma decisão ousada foi tornar partes da interface controladas pelo backend. Em vez de hardcodear toda a estrutura visual, o app recebia JSONs que descreviam componentes, ordem e configurações.

Isso permitiu ajustar fluxos críticos sem aguardar revisão das lojas. Quando surgiram problemas no fluxo de pagamento de boletos, a equipe reorganizou campos e adicionou validações enviando novos parâmetros — sem atualização do app.

Resultados Mensuráveis

Após 18 meses de migração gradual, os números comprovaram o sucesso da estratégia:

  • Crash rate caiu de 2,3% para 0,4% das sessões
  • Tempo de carregamento da tela inicial reduziu 60% (de 3,2s para 1,3s)
  • Produtividade: releases semanais aumentaram de 2-3 features para 8-12
  • Satisfação do usuário (NPS) subiu 12 pontos após a migração completa

Mais importante: nenhum incidente crítico ocorreu durante toda a transição. A capacidade de reverter mudanças instantaneamente via feature flags foi acionada 23 vezes, evitando impactos em larga escala.

Lições Aplicáveis a Qualquer Projeto Mobile

Mesmo que seu app não tenha 40 milhões de usuários, os princípios aplicados pelo Nubank são valiosos:

Invista em Observabilidade Desde o Início

O Nubank instrumentou cada tela com métricas detalhadas: tempo de renderização, taxa de erro por componente, jornadas de navegação. Essa visibilidade foi crucial para comparar versões antiga e nova objetivamente.

Migração Gradual Sempre Vence

A tentação de fazer um "big bang" é grande, mas arriscada. Dividir a migração em etapas pequenas e monitoráveis reduz riscos exponencialmente. Cada funcionalidade migrada funcionava como prova de conceito para a próxima.

Automatize Testes de Regressão Visual

Com código antigo e novo convivendo, bugs de integração eram inevitáveis. O time implementou snapshot tests que capturavam telas em diferentes estados e alertavam sobre mudanças não intencionais antes de chegarem à produção.

Comunique-se com Usuários

O Nubank manteve um canal aberto no app para feedback sobre "novas versões de telas". Usuários podiam reportar problemas ou preferências, e a equipe respondia diretamente. Essa transparência construiu confiança durante a transição.

Conclusão: Arquitetura é Produto

A reconstrução do app Nubank demonstra que decisões arquiteturais não são apenas técnicas — elas impactam diretamente a experiência do usuário, velocidade de inovação e competitividade do negócio.

Para desenvolvedores mobile, o caso oferece um blueprint comprovado: modularização por domínio, feature flags robustos e interfaces adaptáveis são investimentos que se pagam rapidamente em qualquer escala. A questão não é se você precisará dessa arquitetura, mas quando — e quanto custará adiar essa decisão.


Foto de capa: Ice Family via Unsplash