O documento descreve a evolução do processo de build e release do aplicativo móvel do Nubank ao longo dos anos. Inicialmente o app tinha builds lentos e testes demorados devido ao tamanho do código. Posteriormente o código foi dividido em projetos separados para cada time, melhorando a velocidade mas dificultando a comunicação. Mais tarde o código foi reunido em um monorepósitório para facilitar a integração, utilizando o Buck para melhorar o desempenho, porém acabou migrando para o Gradle. Atualmente o processo
1. Build e Release no
Nubank
Leandro Borges Ferreira - Software Engineer @ Nubank
2. Nosso app cresceu…
+/- 1k de UI
Milhares de testes unitários
+/- 15 devs de cada plataform
+/- 30 devs de RN
3. App no início de 2017
- 40~50 min clean build no CI
- ~1h UI tests
- 5~6 min de unit + (rebuild) ~15min (único flavor)
- +- 2h cada run do CI
- Um único projeto
5. Divisão por lógica de negócios
•Cada squad é empoderado a ter
sua própria parte do app
•Priorização decentralizada
•Código desacoplado
•Spikes de novas tecnologias
•Sem dor de projeto grande
15. Schemata
Managers
CoreAnalyticsblocks ui
http
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .. . .
O que ganhamos?
•Build rápidos - Ao separar cada um em seu
repositório
•Test suits menores
•Felicidade 😁
•Documentação e arquitetura
concisa dentro de um projeto
18. Common Libraries
Nubank Android Core
Schemata
Managers
CoreAnalyticsblocks ui
http
Help BonafontNuConta Feed
. . .. . .
android-app
Downsides
•Mudanças em diversos projetos virou doloroso
•Comunicação cross-squad sobre as
mudanças
•Nem todo mundo trabalhando em
projeto novo (build do antigo lento)
19. Common Libraries
Nubank Android Core
Schemata
Managers
CoreAnalyticsblocks ui
http
Help BonafontNuConta Feed
. . .. . .
android-app
foundation
29. Buck - Como foi
Vale a pena para apps modulares
Kotlin (e Swift) não é ABI estable =|
Builds mais reproduzíveis (e menos mágicos)
Kotlin support ainda é bebe
OkBuck ajuda bastante
31. Mudamos para o Gradle (com cache)
Gradle é um pouco menos performático (mas é muito pouco)
Fazendo o tuning direito do Gradle ele fica muito bom
Plugin para usarmos JWT
O projeto escala melhor
Ninguém usou o Buck no processo de transição
33. Problemas a resolver (Que depois cresceram…)
Pipelines longas, flakness é um problema
Mais caro rodar nossos testes
É necessário um momento de transição