Integração Discreta @ QconSP 2014

Integração Discreta @ QconSP 2014

7c12adb8b5521c060ab4630360a4fa27?s=128

Plataformatec

April 11, 2014
Tweet

Transcript

  1. Integração Discreta melhorando a Integração Contínua e ganhando em colaboração

    @georgeguimaraes
  2. George Guimarães co-fundador da Plataformatec entrega de projetos @georgeguimaraes

  3. None
  4. Posicionamento único em RoR Atualmente somos a única empresa a

    ter 3 membros integrando o Rails Core Team ao redor do globo !4 Carlos Antonio Rafael França José Valim 
 Co-fundador da Plataformatec Rails Core Team website: http://rubyonrails.org/core
  5. None
  6. None
  7. None
  8. None
  9. ! ! !

  10. x ! ! !

  11. Integração Contínua parte do extreme programming (XP) veio para resolver

    o “integration hell”
  12. None
  13. None
  14. None
  15. Commit #1, Feature A

  16. Commit #1, Feature A Commit #2, Feature A

  17. Commit #1, Feature A Commit #1, Feature B Commit #2,

    Feature A
  18. Commit #1, Feature A Commit #3, Feature A (done!) Commit

    #1, Feature B Commit #2, Feature A
  19. Commit #1, Feature A Commit #3, Feature A (done!) Commit

    #1, Feature B Commit #2, Feature A Commit #2, Feature B
  20. Commit #1, Feature A Commit #3, Feature A (done!) Commit

    #1, Feature B Commit #2, Feature A Commit #2, Feature B
  21. None
  22. Força a pensar em testes automatizados Ajudou muitas equipes nas

    entregas de projetos Atualmente vista como pré-requisito de equipes
  23. Existe algo que estamos deixando de lado? Podemos melhorar?

  24. novas práticas nesses ∼15 anos metodologias ágeis distributed version control

    git e seu ecossistema
  25. Evolução, não disrupção O que podemos manter do CI?

  26. Tem certeza que o software funciona? 1. Testes automatizados

  27. Build early, build often 2. Build a cada commit

  28. Chato e barulhento 3. Servidor de CI

  29. E então o que melhorar?

  30. Não jogue código direto no master ou mainline, ou trunk...

  31. “crença” de que branches são ruins

  32. Evita conflitos no merge Branches separadas ficam desatualizadas Porque integrar

    imediatamente?
  33. “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.”
  34. “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.”
  35. 1. não são uma ferramenta de comunicação entre desenvolvedores Commits

    no master
  36. Existe algo melhor como desenvolvedores de um mesmo time podem

    colaborar eficientemente?
  37. Pull Requests não é uma idéia nova git send-email (Linux

    mailing list) git request-pull código + contexto + discussão
  38. código + contexto + discussão comunicação entre desenvolvedores

  39. None
  40. None
  41. None
  42. None
  43. None
  44. Feature A

  45. Feature A Feature B

  46. Feature A Feature B

  47. Feature A Feature B

  48. Feature A Feature B

  49. ? Feature A Feature B

  50. ? Feature A Feature B

  51. ? Feature A Feature B

  52. ? Feature A Feature B

  53. ? Feature A Feature B

  54. ? Feature A Feature B

  55. ? Feature A Feature B

  56. ? ? Feature A Feature B

  57. ? ? Feature A Feature B

  58. O que é discutido num Pull Request? Sintaxe

  59. O que é discutido num Pull Request? Arquitetura do software

  60. O que é discutido num Pull Request? Problemas de escalabilidade

  61. O que é discutido num Pull Request? Disseminação de conhecimento

    do projeto
  62. O que é discutido num Pull Request? Code review

  63. Collective ownership Peer review

  64. “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.”
  65. Mas a gente está integrando... quando está pronto!

  66. Integração Discreta Integre quando está pronto

  67. Integração Discreta Abuse de Pull Requests para comunicação

  68. Integração Discreta Commite coisas pequenas no master (typos, syntax fix)

  69. Integração Discreta Features devem ser pequenas

  70. Integração Discreta Conheça suas ferramentas

  71. Integração Discreta Não trave os desenvolvedores. Explorem métodos de trabalho.

  72. None
  73. None
  74. 2. “Shippando” features inacabadas Commits no master

  75. E se eu usar feature toggles? É uma maneira de

    desacoplar features de deploys/releases
  76. Toggles trazem problemas Qual é mesmo o toggle que eu

    tenho que ligar?
  77. Toggles trazem problemas O que seu software faz? Vai depender

    dos toggles ligados
  78. Toggles trazem problemas 2^n combinações possíveis

  79. Toggles trazem problemas Precisa ser removido (débito técnico)

  80. Como usar toggles com CSS? Como usar toggles com JavaScript?

    Migração de bancos com toggle? Tarefas assíncronas com toggle?
  81. ...fizer rollout incremental de features Use toggles se...

  82. ...PO tiver acesso ao toggle Use toggles se...

  83. ou seja, use feature toggles se ele possuir valor!

  84. Código WIP é bagunça mesmo, não se envergonhe E não

    para esconder o WIP
  85. na Integração Discreta, branches isolam o WIP

  86. 3. Força o time a tomar decisões de arquitetura precocemente

    Commits no master
  87. WTF?!

  88. “tem muita gente no mesmo repo"

  89. “precisamos escalar nosso time"

  90. “precisamos de uma arquitetura distribuída"

  91. não está cedo pra isso? Precisa mesmo? Agora?

  92. Main app Serviço A Serviço B Serviço C

  93. no free lunch arquitetura distribuída

  94. na Integração Discreta, é possível escalar times no mesmo app/repo

  95. Concluindo...

  96. 1. Testes automatizados

  97. 2. Build a cada commit/branch

  98. 3. Pull Requests

  99. 4. Comunique-se

  100. 5. Individuals and interactions over processes and tools

  101. a Plataformatec orgulha-se em dizer

  102. Não usamos CI

  103. usamos Integração Discreta

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

  105. george@plataformatec.com.br @georgeguimaraes Obrigado! Dúvidas?