2014.04.09 - integração discreta @ qconsp ão... · pdf file...

Click here to load reader

Post on 21-Jan-2020

4 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • 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

    @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

    http://rubyonrails.org/core

  • !

    !

    !

  • x !

    !

    !

  • Integração Contínua parte 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 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 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 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.

  • 2. “Shippando” features inacabadas

    Commits no master

  • 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?

  • ...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/

    http://www.flickr.com/photos/47863131@N08/7940580038 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?

    mailto:george@plataformatec.com.br