@georgeguimaraes Integração Discreta melhorando a Integração Contínua e ganhando em colaboração
@georgeguimaraes George Guimarães co-fundador da Plataformatec entrega de projetos
Posicionamento único em RoR Atualmente somos a única empresa a ter 3 membros integrando o Rails Core Team ao redor do globo José Valim Co-fundador da Plataformatec Rafael França Rails Core Team website: http://rubyonrails.org/core Carlos Antonio!4
!!!
! x!!
Integração Contínua parte do extreme programming (XP) veio para resolver o integration hell
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 #2, Feature B Commit #3, Feature A (done!) Commit #1, Feature B Commit #2, Feature A Commit #1, Feature A
Commit #2, Feature B Commit #3, Feature A (done!) Commit #1, Feature B Commit #2, Feature A Commit #1, Feature A
Força a pensar em testes automatizados Ajudou muitas equipes nas entregas de projetos Atualmente vista como pré-requisito de equipes
Podemos melhorar? Existe algo que estamos deixando de lado?
novas práticas nesses 15 anos metodologias ágeis distributed version control git e seu ecossistema
O que podemos manter do CI? Evolução, não disrupção
1. Testes automatizados Tem certeza que o software funciona?
2. Build a cada commit Build early, build often
3. Servidor de CI Chato e barulhento
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
Porque integrar imediatamente? Evita conflitos no merge Branches separadas ficam desatualizadas
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.
Commits no master 1. não são uma ferramenta de comunicação entre desenvolvedores
Existe algo melhor como desenvolvedores de um mesmo time podem colaborar eficientemente?
Pull Requests não é uma idéia nova git send-email (Linux mailing list) git request-pull código + contexto + discussão
código + contexto + discussão comunicação entre desenvolvedores
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 Feature A
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 Discreta Integre quando está pronto
Integração Discreta Abuse de Pull Requests para comunicação
Integração Discreta Commite coisas pequenas no master (typos, syntax fix)
Integração Discreta Features devem ser pequenas
Integração Discreta Conheça suas ferramentas
Integração Discreta Não trave os desenvolvedores. Explorem métodos de trabalho.
Commits no master 2. Shippando features inacabadas
E se eu usar feature toggles? É uma maneira de desacoplar features de deploys/releases
Toggles trazem problemas Qual é mesmo o toggle que eu tenho que ligar?
Toggles trazem problemas O que seu software faz? Vai depender dos toggles ligados
Toggles trazem problemas 2^n combinações possíveis
Toggles trazem problemas Precisa 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?
Use toggles se......fizer rollout incremental de features
Use toggles se......po tiver acesso ao toggle
ou seja, use feature toggles se ele possuir valor!
E não para esconder o WIP Código WIP é bagunça mesmo, não se envergonhe
na Integração Discreta, branches isolam o WIP
Commits no master 3. Força o time a tomar decisões de arquitetura precocemente
WTF?!
tem muita gente no mesmo repo"
precisamos escalar nosso time"
precisamos de uma arquitetura distribuída"
Precisa mesmo? Agora? não está cedo pra isso?
Main app Serviço A Serviço B Serviço C
arquitetura distribuída no free lunch
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-martinfowler-has-a-merge-paranoia/
Obrigado! Dúvidas? george@plataformatec.com.br @georgeguimaraes