do monolítico à arquitetura distribuída
TRANSCRIPT
Do MONOLÍTICO à arquitetura distribuída
1ª edição 28/02/15
Leandro Alvares da CostaCo-founder & Head of Product
ALGUÉM gostaria de ter DINHEIRO?
ALGUÉM gostaria de ter DINHEIRO?
emprestado… :)
PRECISO DE DINHEIRO
;(
Banco A Banco B Banco C
;(
Banco A Banco B Banco C
;(
Banco A Banco B Banco C
;(
Banco A Banco B Banco C
;(
Banco A Banco B Banco C
;(
Banco A Banco B Banco C
;(
Ter que ir de banco em banco
Banco A Banco B Banco C
;(
Ter que ir de banco em banco
Informar seus dados em cada banco
Banco A Banco B Banco C
;(
Ter que ir de banco em banco
Informar seus dados em cada banco
Serviço sujeito à tarifa
Banco A Banco B Banco C
;(
Ter que ir de banco em banco
Informar seus dados em cada banco
Serviço sujeito à tarifa
Atendimento ou gerente (convencional)
AJUDAMOS você
COMO?
;(
;(
Bancos parceiros
Banco A Banco B Banco C Banco D Banco E Banco F
;(
Bancos parceiros
Banco A Banco B Banco C Banco D Banco E Banco F
;(
BankFacil
Bancos parceiros
Banco A Banco B Banco C Banco D Banco E Banco F
;(
BankFacil
Consultoria financeira
Bancos parceiros
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
;(
BankFacil
Consultoria financeira
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
;(
BankFacil
Consultoria financeira
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
;(
BankFacil
Consultoria financeira
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
Dados cadastrais
;(
BankFacil
Consultoria financeira
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
Dados cadastrais
Documentação
;(
BankFacil
Consultoria financeira
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
Dados cadastrais
Documentação
Aprovação do crédito
;(
BankFacil
Consultoria financeira
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
Dados cadastrais
Documentação
Aprovação do crédito
;(
BankFacil
Consultoria financeira
Banco E Banco F
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
Dados cadastrais
Documentação
Aprovação do crédito
;(
BankFacil
Consultoria financeira
Banco E Banco F
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
Dados cadastrais
Documentação
Aprovação do crédito
;(
BankFacil
Consultoria financeira
Banco E Banco F
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
Empréstimo pessoal
Dados cadastrais
Documentação
Aprovação do crédito
;(
BankFacil
Consultoria financeira
Formalização Contratual
Banco E Banco F
Bancos parceiros
Empréstimo com garantia
Banco A Banco B Banco C Banco D Banco E Banco F
$ \o/
Empréstimo pessoal
Dados cadastrais
Documentação
Aprovação do crédito
;(
BankFacil
Consultoria financeira
Formalização Contratual
Banco E Banco F
Bancos parceiros
1.Quero R$ 30.000,00 pra reformar meu ap.
1.Quero R$ 30.000,00 pra reformar meu ap.2.Recebo consultoria financeira e escolho o banco.
1.Quero R$ 30.000,00 pra reformar meu ap.2.Recebo consultoria financeira e escolho o banco.3.Solicito online e recebo o dinheiro emprestado.
1.Quero R$ 30.000,00 pra reformar meu ap.2.Recebo consultoria financeira e escolho o banco.3.Solicito online e recebo o dinheiro emprestado.
você não PAGA NADA por usar o BankFacil
Uhul \o/
Todos os bancos em um só lugar!
Evolução da plataforma
Evolução da plataforma
Educação e Comparação
2012
Todos produtos e serviços financeiros
Evolução da plataforma
Educação e Comparação
2012
Todos produtos e serviços financeiros
Indicação de cliente aos bancos
2013
Cartões
Evolução da plataforma
Educação e Comparação
2012
Todos produtos e serviços financeiros
Solicitação online Consultoria financeira
2014
Empréstimo e financiamento
Indicação de cliente aos bancos
2013
Cartões
Evolução da plataforma
Educação e Comparação
2012
Todos produtos e serviços financeiros
Solicitação online Consultoria financeira
2014
Empréstimo e financiamento
Indicação de cliente aos bancos
2013
Cartões
Evolução da plataforma
Educação e Comparação
2012
Todos produtos e serviços financeiros
Solicitação online Consultoria financeira
2014
Empréstimo e financiamento
Indicação de cliente aos bancos
2013
Cartões
Peça
P
Evolução da plataforma
Educação e Comparação
2012
Todos produtos e serviços financeiros
Solicitação online Consultoria financeira
2014
Empréstimo e financiamento
Indicação de cliente aos bancos
2013
Cartões
Peça
P
Peça
Peça
Peça
Evolução da plataforma
Educação e Comparação
2012
Todos produtos e serviços financeiros
Solicitação online Consultoria financeira
2014
Empréstimo e financiamento
Indicação de cliente aos bancos
2013
Cartões
Peça
P
Peça
Peça
Peça
Peça Peça
Peça Peça
Peça Peça
Porque separamos as peças?
Está CERTO ou ERRADO?
Está CERTO ou ERRADO?
Existe CERTO ou ERRADO?
relembrando o
PASSADO…
Produto 2012
1.Validar as hipóteses de negócio
Produto 2012
1.Validar as hipóteses de negócio2.Domínio de negócio mudava
Produto 2012
1.Validar as hipóteses de negócio2.Domínio de negócio mudava3.Sobrevivência era o lema
Produto 2012
1.Validar as hipóteses de negócio2.Domínio de negócio mudava3.Sobrevivência era o lema4.Agregar valor ao negócio era o lema
Produto 2012
1.Validar as hipóteses de negócio2.Domínio de negócio mudava3.Sobrevivência era o lema4.Agregar valor ao negócio era o lema5.Com feedback rápido…
Produto 2012
Tecnologia 2012
Tecnologia 2012
1.Aplicação Rails única
Tecnologia 2012
1.Aplicação Rails única2.Ganhamos velocidade nas entregas
Tecnologia 2012
1.Aplicação Rails única2.Ganhamos velocidade nas entregas3.Cycle time reduzido
Tecnologia 2012
1.Aplicação Rails única2.Ganhamos velocidade nas entregas3.Cycle time reduzido4.Iterações curtas e feedback rápido
Desenvolvimento "GO LHAMA"
Desenvolvimento "GO LHAMA"
Tentando IMPOR qualidade
Features
Mudanças menos frequentes
Mudanças mais frequentesMonolítico Rails
Produto evoluindo…
Produto evoluindo…
1.Novo portal BankFacil
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada8.Dados cadastrais e documentação dos produtos
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada8.Dados cadastrais e documentação dos produtos9.Integração com bancos parceiros
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada8.Dados cadastrais e documentação dos produtos9.Integração com bancos parceiros10.API BankFacil
Produto evoluindo…
1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada8.Dados cadastrais e documentação dos produtos9.Integração com bancos parceiros10.API BankFacil11.Relatórios internos, etc
DOMÍNIO de negócio
CRESCENDO rápido
Features Legadas
Features Novas
Mudanças menos frequentes
Mudanças mais frequentesMonolítico Rails
como VOLTAMOS
a ter AGILIDADE?
5 features, mesmo DEPLOYZÃO? Sim!
5 features, mesmo DEPLOYZÃO? Sim!
CHEGOU A HORA de
separar ESSE TROÇO?
POR QUE?
POR QUE?
1.Melhorar a velocidade de mudança
POR QUE?
1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura
POR QUE?
1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura3.Melhorar o entendimento do código pelos developers
POR QUE?
1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura3.Melhorar o entendimento do código pelos developers4.Escalar equipes no domínio de negócio
POR QUE?
1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura3.Melhorar o entendimento do código pelos developers4.Escalar equipes no domínio de negócio5.Autonomia e responsabilidade das equipes
POR QUE?
1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura3.Melhorar o entendimento do código pelos developers4.Escalar equipes no domínio de negócio5.Autonomia e responsabilidade das equipes6.Diversificação técnica
COMPLEXIDADES
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
• Processo de deploy contínuo
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
• Processo de deploy contínuo• Autonomia entre as equipes
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
• Processo de deploy contínuo• Autonomia entre as equipes• Comunicação entre os serviços
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
• Processo de deploy contínuo• Autonomia entre as equipes• Comunicação entre os serviços• Manter as API’s REST rodando sem quebrar
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
• Processo de deploy contínuo• Autonomia entre as equipes• Comunicação entre os serviços• Manter as API’s REST rodando sem quebrar• Escalabilidade e performance
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
• Processo de deploy contínuo• Autonomia entre as equipes• Comunicação entre os serviços• Manter as API’s REST rodando sem quebrar• Escalabilidade e performance• Banco descentralizado
Peça
Peça
Peça
+ MICRO + MACRO
COMPLEXIDADES
• Processo de deploy contínuo• Autonomia entre as equipes• Comunicação entre os serviços• Manter as API’s REST rodando sem quebrar• Escalabilidade e performance• Banco descentralizado• Segurança e escolha da tecnologia certa
Peça
Peça
Peça
+ MICRO + MACRO
O que FACILITOU separar?
O que FACILITOU separar?
1.Entidades diferentes do domínio
O que FACILITOU separar?
1.Entidades diferentes do domínio2.Partes que mudam bastante vs. menos
O que FACILITOU separar?
1.Entidades diferentes do domínio2.Partes que mudam bastante vs. menos3.O que mais dói na engenharia
Pontos que na evolução
CONSIDERAMOS
Boas práticas de CÓDIGO na ARQUITETURA
Boas práticas de CÓDIGO na ARQUITETURA
1.Única responsabilidade
Boas práticas de CÓDIGO na ARQUITETURA
1.Única responsabilidade2.Baixo acoplamento
Boas práticas de CÓDIGO na ARQUITETURA
1.Única responsabilidade2.Baixo acoplamento3.Alta coesão
Divisão da EQUIPE
Divisão da EQUIPE
1.Por unidade/capacidade/domínio de negócio
Divisão da EQUIPE
1.Por unidade/capacidade/domínio de negócio2.Equipe contínua em um domínio
Divisão da EQUIPE
1.Por unidade/capacidade/domínio de negócio2.Equipe contínua em um domínio3.Colaboração da equipe em outras peças
Mobile App Empréstimo pessoal
Empréstimo garantia
Financiamento auto
Silos
Consultoria financeira CRM
Aprendizado PEÇAS separadas
Aprendizado PEÇAS separadas
1.Performance - Alguns serviços viraram Async
Aprendizado PEÇAS separadas
1.Performance - Alguns serviços viraram Async2.API - Gem Client de quem provê API
Aprendizado PEÇAS separadas
1.Performance - Alguns serviços viraram Async2.API - Gem Client de quem provê API3.Test - Teste de integração das peças
Aprendizado PEÇAS separadas
1.Performance - Alguns serviços viraram Async2.API - Gem Client de quem provê API3.Test - Teste de integração das peças4.Infra - Provisionamento e Deployment
Aprendizado PEÇAS separadas
1.Performance - Alguns serviços viraram Async2.API - Gem Client de quem provê API3.Test - Teste de integração das peças4.Infra - Provisionamento e Deployment5.Arquitetura - Começar monolítico e ir extraindo
Equipe:
Equipe:• ~10-30 pessoas em ~3-7 times
Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub
Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub
Produção:
Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub
Produção:• 11 projetos (peças)
Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub
Produção:• 11 projetos (peças)• 5 APIs
Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub
Produção:• 11 projetos (peças)• 5 APIs• 7 MySQL
Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub
Produção:• 11 projetos (peças)• 5 APIs• 7 MySQL
Monitoramento:
Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub
Produção:• 11 projetos (peças)• 5 APIs• 7 MySQL
Monitoramento:• Newrelic
Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub
Produção:• 11 projetos (peças)• 5 APIs• 7 MySQL
Monitoramento:• Newrelic• Amazon CloudWatch
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Framework Pub / Sub
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Framework Pub / Sub
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Framework Pub / Sub
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Framework Pub / Sub
BI
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Framework Pub / Sub
BI
Mailer
Produto Integrações
Tracker
Admin Relatórios
Followup Banco
Utilitários
CRM Interno
Catalogo Cartões
JoomlaPortalGranaAqui
Arquitetura distribuída
Framework Pub / Sub
https://github.com/promiscuous-io/promiscuous
BI
Códigoo… :)
Promiscuous
https://github.com/promiscuous-io/promiscuous
Antes de fatiar o app…
Antes de fatiar o app…
1.Conheça seu problema e domínio muito bem
Antes de fatiar o app…
1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado
Antes de fatiar o app…
1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado3.Mudança cultural da equipe pra operar com autonomia
Antes de fatiar o app…
1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado3.Mudança cultural da equipe pra operar com autonomia4.Evolua do macro ao micro devagar
Antes de fatiar o app…
1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado3.Mudança cultural da equipe pra operar com autonomia4.Evolua do macro ao micro devagar5.Busque a maturidade para conseguir deploy contínuo
Antes de fatiar o app…
1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado3.Mudança cultural da equipe pra operar com autonomia4.Evolua do macro ao micro devagar5.Busque a maturidade para conseguir deploy contínuo6.Esteja certo que está maduro o suficiente
By ThoughtWorks
Mensagens finais…
Esse ano de 2015 vai rolar :)
Esse ano de 2015 vai rolar :)
Esse ano de 2015 vai rolar :)@brunoadacosta
micro lib em JSOPEN SOURCE
http://bankfacil.github.io/vanilla-masker/
CONTRATANDO - bankfacil.com.br/devs
Leandro Alvares da Costa http://leandroadacosta.com
@leandroadacosta
Obrigado!