SlideShare uma empresa Scribd logo
1 de 56
Builds incrivelmente
rápidos com BUCK
Leandro Borges Ferreira - Software Engineer @ Nubank
Thales Machado - Software Engineer @ Nubank
no Nubank
Platéia - Vamos participar?
Alguém aqui…
- Acha que o app Android “builda" rápido?
- Acha que dá pra rodar os testes de UI na própria máquina?
- Já passou alguns dias gastando mais tempo debugando
gradle/test flaky/tentando fazer CI passar…
- Nunca teve que dar “./gradlew clean” pra consertar um
problema de build?
Nosso app cresceu…
+/- 1k de UI
Milhares de testes unitários
+/- 10 devs de cada plataform
+/- 20 devs de RN
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
App no início de 2017
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
Como?
• Funcionalidades comuns numa
biblioteca própria
• Começar um novo projeto por uma
template
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
Common Libraries
Nubank Android Core
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
Schemata
Managers
CoreAnalyticsblocks ui
http
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .. . .
Schemata
Managers
CoreAnalyticsblocks ui
http
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .. . .
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)
Common Libraries
Nubank Android Core
Schemata
Managers
CoreAnalyticsblocks ui
http
Help BonafontNuConta Feed
. . .. . .
android-app
foundation
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .. . .
android-app
foundation
Common Libraries
Nubank Android Core
Help BonafontNuConta Feed
. . .
foundation
blankets react-native-common-bridge
All JS
dependencies
Anticipation
react-native-central
. . .
android-app
O que fizemos??
Monorepo
Juntar todos os projetos de novo em
um único só
Arquitetura do projeto
Mas e o tempo de build, teste e tudo mais????
Monorepo
Nós vivemos no futuro
- Múltiplos Cores
- SSDs
- Muito muito RAM
- Storage é barato
- Trafego da dados é rapido
- Distributed Version Controls Systems
Mas nossas ferramentas vivem no passado!
- Baseado em “Tasks"
- Muito mágico
- Difícil de paralelizar
O que seria o ideal?
- Conseguir buildar partes pequenas do projeto separadamente
- Grafo de dependencias explicito -> Paralelização
- Rebuildar somente o necessário
Arquivo de configuração por package/diretório
- Fácil de compartilhar, buscar e reutilizar código
- Menos boilerplate
Build Rules
- Módulo tem conhecimento do que e como buildar
- Dependencias declaradas explicitamente
Directed Aciclic Graph
- Dagger de novo?
- Grafo -> Paralelismo
A B C
D
F
Cache!
- O rebuild não deveria ser mais rápido?
- Tanto local como distribuído 👀 👀 👀
Buck
- Open source
- Apache 2
- https://github.com/facebook/buck
Buck
Pensado para mono repositórios
Projetos devem ser modulares
Cache bastante agressivo
Grande ganho de performance
Tipo isso aqui
Buck - Alguns aprendizados
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
Você vai querer usar o okBuck
Dados Buck
Build Dep3
clean build sample staging
gradle -> `BUILD SUCCESSFUL in 3m 13s`
buck -> `Building: finished in 01:55.7 min`
Mudanças em Dep3
gradle `BUILD SUCCESSFUL in 22s`
buck -> `Building: finished in 16.4 sec`
Mudanças em Dep2
gradle -> `BUILD SUCCESSFUL in 30s`
buck -> `Building: finished in 16.3 sec`
(it only needed to recompile dep2 itself and the
sample dexing and packaging stuff)
Mudanças em Dep1
gradle -> `BUILD SUCCESSFUL in 45s`
buck -> `Building: finished in 15.2 sec` (it only
needed to recompile dep1 itself and the sample
dexing and packaging stuff)
Dep1
Dep2
Dep3
Tá, mas na prática...
Ao todo são 1k de testes…
Só que separados em várias pipelines
Não dá para “só mudar” o
processo atual
Problemas a resolver
Pipelines longas, flakness é um problema
Mais caro rodar nossos testes
É necessário um momento de transição
Buck nem tinha suporte a Kotlin
Device farm in house
Build Testes - Todos Testes - Falhas Deploy
S3
Mono repo
dependencies.gradle
build.gradle
dependencies.gradle
build.gradle
dependencies.gradle
build.gradle
dependencies.gradle
build.gradle
dependencies.gradle
build.gradle
Git meta
Comandos em loop
Mesma estrutura do git
ex: meta git branch
Difícil de mudar o processo atual
PRs em dois repositórios
Processo não pode ser gradual
Tabela da verdade está no gradle
Meta git é meio chato de usar
Mudança final
Mudança difícil para criar mono repo mantendo históricos
PRs devem ser congelados
Não tem volta 😱
Ficou bem mais fácil fazer breaking changes
O build realmente é bem mais rápido
Android-app gradle: 4 minutos
Todas as dependências Buck: 2,5 minutos
Testes unitários paralelizados “de graça”
Aprendemos muito
Obrigado

Mais conteúdo relacionado

Mais procurados

Jenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaJenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaFernando Boaglio
 
O que é preciso para ser um desenvolvedor Android
O que é preciso para ser um desenvolvedor AndroidO que é preciso para ser um desenvolvedor Android
O que é preciso para ser um desenvolvedor AndroidNelson Glauber Leal
 
Jenkins por dentro e por fora
Jenkins por dentro e por fora Jenkins por dentro e por fora
Jenkins por dentro e por fora Fernando Boaglio
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsGilmar Pupo
 
Infraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemInfraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemFernando Ike
 
Testes com xUnit + Coding Dojo
Testes com xUnit + Coding DojoTestes com xUnit + Coding Dojo
Testes com xUnit + Coding DojoLetticia Nicoli
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?Letticia Nicoli
 
UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsStefan Teixeira
 
GitHub Boas Práticas
GitHub Boas PráticasGitHub Boas Práticas
GitHub Boas PráticasCDS
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com JenkinsHigor Nucci
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018Graziella Bonizi
 
Automação dos processos para desenvolvedores. Você precisa disso!
Automação dos processos para desenvolvedores. Você precisa disso!Automação dos processos para desenvolvedores. Você precisa disso!
Automação dos processos para desenvolvedores. Você precisa disso!Marcela Carvalho
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsFelipe Santos
 
Evoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayEvoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayVitor Albuquerque
 
Refatorando Códigos PHP - PHP Conference 2013
Refatorando Códigos PHP - PHP Conference 2013Refatorando Códigos PHP - PHP Conference 2013
Refatorando Códigos PHP - PHP Conference 2013Levi Ferreira
 
Botando o Jenkins para rodar seus testes
Botando o Jenkins para rodar seus testesBotando o Jenkins para rodar seus testes
Botando o Jenkins para rodar seus testeskinow
 
Docker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaDocker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaHumberto Streb
 
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdWalmyr Lima e Silva Filho
 

Mais procurados (20)

Jenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do JavaJenkins - livre-se da parte chata do Java
Jenkins - livre-se da parte chata do Java
 
O que é preciso para ser um desenvolvedor Android
O que é preciso para ser um desenvolvedor AndroidO que é preciso para ser um desenvolvedor Android
O que é preciso para ser um desenvolvedor Android
 
Jenkins por dentro e por fora
Jenkins por dentro e por fora Jenkins por dentro e por fora
Jenkins por dentro e por fora
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 
Infraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvemInfraestrutura imutável - A base das aplicações na nuvem
Infraestrutura imutável - A base das aplicações na nuvem
 
Testes com xUnit + Coding Dojo
Testes com xUnit + Coding DojoTestes com xUnit + Coding Dojo
Testes com xUnit + Coding Dojo
 
.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?.NET 6: O que há de novo e o que está por vir?
.NET 6: O que há de novo e o que está por vir?
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
Jenkins
JenkinsJenkins
Jenkins
 
UAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao JenkinsUAI Test - Introdução Prática ao Jenkins
UAI Test - Introdução Prática ao Jenkins
 
GitHub Boas Práticas
GitHub Boas PráticasGitHub Boas Práticas
GitHub Boas Práticas
 
Integração contínua com Jenkins
Integração contínua com JenkinsIntegração contínua com Jenkins
Integração contínua com Jenkins
 
12 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 201812 Factor App TDC São Paulo 2018
12 Factor App TDC São Paulo 2018
 
Automação dos processos para desenvolvedores. Você precisa disso!
Automação dos processos para desenvolvedores. Você precisa disso!Automação dos processos para desenvolvedores. Você precisa disso!
Automação dos processos para desenvolvedores. Você precisa disso!
 
Automatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com JenkinsAutomatização de Infraestrutura com Jenkins
Automatização de Infraestrutura com Jenkins
 
Evoluindo bancos de dados com Flyway
Evoluindo bancos de dados com FlywayEvoluindo bancos de dados com Flyway
Evoluindo bancos de dados com Flyway
 
Refatorando Códigos PHP - PHP Conference 2013
Refatorando Códigos PHP - PHP Conference 2013Refatorando Códigos PHP - PHP Conference 2013
Refatorando Códigos PHP - PHP Conference 2013
 
Botando o Jenkins para rodar seus testes
Botando o Jenkins para rodar seus testesBotando o Jenkins para rodar seus testes
Botando o Jenkins para rodar seus testes
 
Docker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaDocker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entrega
 
Estratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocdEstratégias para o uso de integração e entrega contínua com gocd
Estratégias para o uso de integração e entrega contínua com gocd
 

Semelhante a TDC 2018

Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Marcelo Marques Gonçalves
 
O mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria terO mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria terÁtilla Silva Barros
 
Developer Experience no Nubank
Developer Experience no NubankDeveloper Experience no Nubank
Developer Experience no NubankLetticia Nicoli
 
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.Primeiros passos para tomar uma decisão de arquitetura com AngularJS.
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.Cauê Alves
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração ContínuaScrumHalf Tool
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Denis Santos
 
Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realHenrique Schmidt
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo realWilly Salazar
 
Da Integração à Entrega Contínua
Da Integração à Entrega ContínuaDa Integração à Entrega Contínua
Da Integração à Entrega ContínuaMarlon Bernardes
 
C school Extended - Liberte sua arquitetura com Cloud Native
C school Extended - Liberte sua arquitetura com Cloud NativeC school Extended - Liberte sua arquitetura com Cloud Native
C school Extended - Liberte sua arquitetura com Cloud NativeAndré Paulovich
 
Microserviços na vida real
Microserviços na vida realMicroserviços na vida real
Microserviços na vida realCriciúma Dev
 
Liberte sua arquitetura com Cloud Native - DEVSUMMIT IGTI
Liberte sua arquitetura com Cloud Native - DEVSUMMIT IGTILiberte sua arquitetura com Cloud Native - DEVSUMMIT IGTI
Liberte sua arquitetura com Cloud Native - DEVSUMMIT IGTIAndré Paulovich
 
CRI-O - TDC Floripa 2018
CRI-O - TDC Floripa 2018CRI-O - TDC Floripa 2018
CRI-O - TDC Floripa 2018Jonh Wendell
 
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABOO novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABOPaulo Batuta
 
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containersTDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containerstdc-globalcode
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsJosé Alexandre Macedo
 
TDC 2019 Cloud - Liberte sua arquitetura com cloud native
TDC 2019 Cloud - Liberte sua arquitetura com cloud nativeTDC 2019 Cloud - Liberte sua arquitetura com cloud native
TDC 2019 Cloud - Liberte sua arquitetura com cloud nativeAndré Paulovich
 

Semelhante a TDC 2018 (20)

Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
 
O mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria terO mínimo de Integração Contínua que todo projeto deveria ter
O mínimo de Integração Contínua que todo projeto deveria ter
 
Developer Experience no Nubank
Developer Experience no NubankDeveloper Experience no Nubank
Developer Experience no Nubank
 
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.Primeiros passos para tomar uma decisão de arquitetura com AngularJS.
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017Carrefour E-commerce - Multicloud Brasil Day 2017
Carrefour E-commerce - Multicloud Brasil Day 2017
 
Desenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo realDesenvolvimento de software: Mundo ideal x Mundo real
Desenvolvimento de software: Mundo ideal x Mundo real
 
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software  mundo ideal x mundo realDesenvolvimento de software  mundo ideal x mundo real
Desenvolvimento de software mundo ideal x mundo real
 
Da Integração à Entrega Contínua
Da Integração à Entrega ContínuaDa Integração à Entrega Contínua
Da Integração à Entrega Contínua
 
Go git - Presentation @Navita
Go git - Presentation @NavitaGo git - Presentation @Navita
Go git - Presentation @Navita
 
Hubot deployments
Hubot deploymentsHubot deployments
Hubot deployments
 
C school Extended - Liberte sua arquitetura com Cloud Native
C school Extended - Liberte sua arquitetura com Cloud NativeC school Extended - Liberte sua arquitetura com Cloud Native
C school Extended - Liberte sua arquitetura com Cloud Native
 
Microserviços na vida real
Microserviços na vida realMicroserviços na vida real
Microserviços na vida real
 
Liberte sua arquitetura com Cloud Native - DEVSUMMIT IGTI
Liberte sua arquitetura com Cloud Native - DEVSUMMIT IGTILiberte sua arquitetura com Cloud Native - DEVSUMMIT IGTI
Liberte sua arquitetura com Cloud Native - DEVSUMMIT IGTI
 
CRI-O - TDC Floripa 2018
CRI-O - TDC Floripa 2018CRI-O - TDC Floripa 2018
CRI-O - TDC Floripa 2018
 
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABOO novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
O novo IBM COBOL ENTERPRISE V5/V6 para zOS e o IBM ABO
 
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containersTDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
TDC2018SP | Trilha Containers - CRI-O: Nem so de Docker vivem os containers
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
TDC 2019 Cloud - Liberte sua arquitetura com cloud native
TDC 2019 Cloud - Liberte sua arquitetura com cloud nativeTDC 2019 Cloud - Liberte sua arquitetura com cloud native
TDC 2019 Cloud - Liberte sua arquitetura com cloud native
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 

Último

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 

Último (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

TDC 2018

Notas do Editor

  1. Topics: 2015: Nubank without squads - prioritization within mobile team -> one PM More people to attend more demand (from 1 to 3 developers) Nothing shined on project structure / architecture Android annotation - Cut Dagger Rx Three flavors -> stag, beta, prod 2016: Company divided into squads (few at the beginning) - Prioritization within each squad More two developers in the start of the year Mobile team splitted - Didn't work out Code started to smell (needed a convention / architecture) Kotlin Study on MVP / MVVM Came Lego and Managers Better coding style / project started to feel the same and was easy to maintain CI took too long, all runs (unit, 19, 22, 25) on the same pipeline Refactor on CI / split pipelines (explain Gocd) Build not consistent -> apk that was under test was not the same to go to store - unexpected crashes -> build everything before tests (all three flavors) More 2 developers Giant project, slow build time, hard to be incredibly productive Created more flavors minAPI16, minAPI21 (explain beneficts of minAPI21 at development time) CI also slower (6 builds, each taking +- 4/5 minutes + test apk) 2017: Microservices for frontend -> Project split - Attend other squad demands - improve build time for new features - More decoupled code - Create low hanging fruits for open source - Squads could have everything need for their features -> new technologies (RN) -> Another try on mobile split up In house mini device farm -> STF A lot of libs (schemata, core, lego, managers, analytics, ui, etc…) RN libs, integrations -> common bridge -> react-native-central Bump hell -> version management -> need know how to bump Foundation Autobump TestLab
  2. So why not split the app into those business logic, as well as the company?
  3. So why not split the app into those business logic, as well as the company?
  4. Next: Acquisition
  5. Ganhos: Build de começo de projeto Desenvolvimento rapido Boa documentação - Fácil de saber onde procurar coisas
  6. Primeiro erro: Cores dependiam uma das outras
  7. Esperar pelo CI Possíveis testes falhando Wait time (integration feedback muito demorado) Atualizar em todas as outras
  8. Nem todo mundo estaria mexendo com as novas libs Desenvolvimento no app ficou difícil de ter integration-feedback
  9. Nem todo mundo estaria mexendo com as novas libs Desenvolvimento no app ficou difícil de ter integration-feedback
  10. Nem todo mundo estaria mexendo com as novas libs Desenvolvimento no app ficou difícil de ter integration-feedback
  11. NuConta é em ReactNative
  12. Next: Acquisition
  13. Da pra paralelizar tudo SSD -> Acesso randômico mto mais eficiente do que spinning RAM -> Carregar bastante coisa de uma vez (arquivo) e uso rápido dele Storage e networking para persistir os dados
  14. Task Based - Precisa perguntar pra todas as tasks se tem algo que precisa fazer - Precisa montar cada task toda vez Paralelizar - Mais complicado com make e ant, gradle tem ficado cada vez melhor M time - VCS pode complicar bem sua vida (git pull e o build com o timestamp mais novo vai falar que não precisa rebuildar)
  15. E se você conseguisse configurar como bulidar apenas um pedaço do código, sem necessariamente ter que ter `src/main/java`, `src/main/test`, bla bla bla
  16. E se você conseguisse configurar como bulidar apenas um pedaço do código, sem necessariamente ter que ter `src/main/java`, `src/main/test`, bla bla bla Seu build sabe o que ta buildando, build rules, expressar dependence entre elas O que nos resulta num DAG
  17. E se você conseguisse configurar como bulidar apenas um pedaço do código, sem necessariamente ter que ter `src/main/java`, `src/main/test`, bla bla bla Seu build sabe o que ta buildando, build rules, expressar dependence entre elas O que nos resulta num DAG
  18. Cache local e distribuido super facil (3%) -> Estudo realizado no facebook
  19. Cache local e distribuido super facil (3%) -> Estudo realizado no facebook
  20. Cache local e distribuido super facil (3%) -> Estudo realizado no facebook
  21. Cache local e distribuido super facil (3%) -> Estudo realizado no facebook
  22. Cache local e distribuido super facil (3%) -> Estudo realizado no facebook