2014.04.09 - integração discreta @ qconsp§ão... · integração discreta melhorando a...
TRANSCRIPT
Integração Discretamelhorando a Integração Contínua e ganhando em colaboração
@georgeguimaraes
George Guimarãesco-fundador da Plataformatec entrega de projetos
@georgeguimaraes
Posicionamento único em RoR
Atualmente somos a única empresa a ter 3 membros integrando o Rails Core Team ao redor do globo
!4
Carlos AntonioRafael FrançaJosé Valim Co-fundador da Plataformatec
Rails Core Team website: http://rubyonrails.org/core
!
!
!
x!
!
!
Integração Contínuaparte do extreme programming (XP) veio para resolver o “integration hell”
Commit #1, Feature A
Commit #1, Feature A
Commit #2, Feature A
Commit #1, Feature A
Commit #1, Feature B
Commit #2, Feature A
Commit #1, Feature A
Commit #3, Feature A (done!)
Commit #1, Feature B
Commit #2, Feature A
Commit #1, Feature A
Commit #3, Feature A (done!)
Commit #1, Feature B
Commit #2, Feature A
Commit #2, Feature B
Commit #1, Feature A
Commit #3, Feature A (done!)
Commit #1, Feature B
Commit #2, Feature A
Commit #2, Feature B
Força a pensar em testes automatizados
Ajudou muitas equipes nas entregas de projetos
Atualmente vista como pré-requisito de equipes
Existe algo que estamos deixando de lado?
Podemos melhorar?
novas práticas nesses ∼15 anos
metodologias ágeis
distributed version control
git e seu ecossistema
Evolução, não disrupção
O que podemos manter do CI?
Tem certeza que o software funciona?
1. Testes automatizados
Build early, build often
2. Build a cada commit
Chato e barulhento
3. Servidor de CI
E então o que melhorar?
Não jogue código direto no master
ou mainline, ou trunk...
“crença” de que branches são ruins
Evita conflitos no merge Branches separadas ficam desatualizadas
Porque integrar imediatamente?
“This fear of big merges also acts as a deterrent to refactoring” !
“The result we see is that teams using feature branches shy away from refactoring which leads to uglier code bases.”
“CI is effective at removing the problem of big merges, but it's also a vital communication mechanism” !
“Communication is one of the key factors in software development and one of CI's most important features is that it facilitates human communication.”
1. não são uma ferramenta de comunicação entre desenvolvedores
Commits no master
Existe algo melhorcomo desenvolvedores de um mesmo time podem colaborar eficientemente?
Pull Requestsnão é uma idéia nova
git send-email (Linux mailing list) git request-pull
código + contexto + discussão
código + contexto + discussãocomunicação entre desenvolvedores
Feature A
Feature A Feature B
Feature A Feature B
Feature A Feature B
Feature A Feature B
?
Feature A Feature B
?
Feature A Feature B
?
Feature A Feature B
?
Feature A Feature B
?
Feature A Feature B
?
Feature A Feature B
?
Feature A Feature B
?
?
Feature A Feature B
?
?
Feature A Feature B
O que é discutido num Pull Request?Sintaxe
O que é discutido num Pull Request?Arquitetura do software
O que é discutido num Pull Request?Problemas de escalabilidade
O que é discutido num Pull Request?Disseminação de conhecimento do projeto
O que é discutido num Pull Request?Code review
Collective ownership Peer review
“So unless feature branches only last less than a day, running a feature branch is a different animal to CI. I've heard people say they are doing CI because they are running builds, perhaps using a CI server, on every branch with every commit. That's continuous building, and a Good Thing, but there's no integration, so it's not CI.”
Mas a gente está integrando...
quando está pronto!
Integração DiscretaIntegre quando está pronto
Integração DiscretaAbuse de Pull Requests para comunicação
Integração DiscretaCommite coisas pequenas no master (typos, syntax fix)
Integração DiscretaFeatures devem ser pequenas
Integração DiscretaConheça suas ferramentas
Integração DiscretaNão trave os desenvolvedores. Explorem métodos de trabalho.
2. “Shippando” features inacabadas
Commits no master
E se eu usar feature toggles?É uma maneira de desacoplar features de deploys/releases
Toggles trazem problemasQual é mesmo o toggle que eu tenho que ligar?
Toggles trazem problemasO que seu software faz? Vai depender dos toggles ligados
Toggles trazem problemas2^n combinações possíveis
Toggles trazem problemasPrecisa ser removido (débito técnico)
Como usar toggles com CSS?
Como usar toggles com JavaScript?
Migração de bancos com toggle?
Tarefas assíncronas com toggle?
...fizer rollout incremental de features
Use toggles se...
...PO tiver acesso ao toggle
Use toggles se...
ou seja, use feature toggles
se ele possuir valor!
Código WIP é bagunça mesmo, não se envergonhe
E não para esconder o WIP
na Integração Discreta,
branches isolam o WIP
3. Força o time a tomar decisões de arquitetura precocemente
Commits no master
WTF?!
“tem muita gente no mesmo repo"
“precisamos escalar nosso time"
“precisamos de uma arquitetura distribuída"
não está cedo pra isso?
Precisa mesmo? Agora?
Main app Serviço A Serviço B Serviço C
no free lunch
arquitetura distribuída
na Integração Discreta,
é possível escalar times no mesmo app/repo
Concluindo...
1. Testes automatizados
2. Build a cada commit/branch
3. Pull Requests
4. Comunique-se
5. Individuals and interactions over processes and tools
a Plataformatec orgulha-se em dizer
Não usamos CI
usamos Integração Discreta
http://www.flickr.com/photos/47863131@N08/7940580038
http://martinfowler.com/bliki/FeatureBranch.html
!
http://dymitruk.com/blog/2012/02/05/branch-per-feature/
http://arialdomartini.wordpress.com/2011/11/02/help-me-because-i-think-martin-fowler-has-a-merge-paranoia/