2014.04.09 - Integração Discreta @ QconSP§ão... · Integração Discreta melhorando a...

Preview:

Citation preview

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/

george@plataformatec.com.br @georgeguimaraes

Obrigado! Dúvidas?