Your SlideShare is downloading. ×
0
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Multiple projects, different goals, one thing in common: the codebase!
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Multiple projects, different goals, one thing in common: the codebase!

1,650

Published on

Trunk-based development talk given at Agile India 2014 in Bangalore.

Trunk-based development talk given at Agile India 2014 in Bangalore.

Published in: Technology
1 Comment
2 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,650
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
48
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Multiple projects, different goals, one thing in common: the codebase! Carlos Lopes @carlosaml
  • 2. why?
  • 3. blog.crisp.se
  • 4. Jon Wolter
  • 5. ok
  • 6. a little story
  • 7. an online store (of whatever)
  • 8. 10
  • 9. 11
  • 10. 12
  • 11. 13
  • 12. 14
  • 13. 15
  • 14. 16
  • 15. 17
  • 16. 18
  • 17. 19
  • 18. 21
  • 19. 22
  • 20. 23
  • 21. 24
  • 22. what’s next?
  • 23. 26
  • 24. 27
  • 25. 28
  • 26. 29
  • 27. 30
  • 28. now what?
  • 29. 32
  • 30. 34
  • 31. HOWEVER
  • 32. 38
  • 33. 43
  • 34. merge hell
  • 35. a LOT going on for at least months... 45
  • 36. 46
  • 37. big scary merge before a big scary release 47
  • 38. syntactic conflict class BlaBlaBla { <<<<<<< HEAD ! public void bla(Bla oldBla, New newBla) { ! ! oldBla.bla(); ! ! newBla.newBla(); ======= ! public void bla(Bla oldBla, Other otherBla) { ! ! oldBla.bla(); ! ! otherBla.otherBla(); >>>>>>> other commit ! } }
  • 39. semantic conflict class BlaBlaBla { ! public void something(Bla bla) { <<<<<<< HEAD ! ! bla = bla.plus(14); ======= ! ! bla = bla.minus(7); >>>>>>> change ! ! //other stuff ! } }
  • 40. integration conflicts main.jsp: <%@include file="hello.jspf" %> trunk: agivenbranch: new-file.jsp: hello.jspf => hey.jspf <%@include main.jsp: file="hello.jspf" %> <%@include file="hey.jspf" %>
  • 41. and so forth
  • 42. regressions
  • 43. however...
  • 44. the loyalty program team learnt something...
  • 45. merge monkey
  • 46. 59
  • 47. 60
  • 48. continuous integration?
  • 49. 62
  • 50. how many pipelines for this? 63
  • 51. and how effective would they even be?
  • 52. 65
  • 53. still need to “integrate” 66
  • 54. big scary merge 67
  • 55. promiscuous integration martinfowler.com/bliki/FeatureBranch.html
  • 56. 69
  • 57. how about refactoring?
  • 58. undeployable code
  • 59. only trunk was releasable at any given time 72
  • 60. $$$$$
  • 61. ok, so what do we do?
  • 62. “Feature branching is a poor man's modular architecture, instead of building systems with the ability to easy swap in and out features at runtime/ deploytime they couple themselves to the source control providing this mechanism through manual merging.” Dan Bodart
  • 63. “The bigger the apparent reason to branch, the more you shouldn’t branch.” Jez Humble / David Farley
  • 64. “Don't separate differing concerns by using a VCS, use an abstraction instead.” Stacy Curl
  • 65. solutions?
  • 66. branch by source control abstraction paulhammant.com/blog/branch_by_abstraction.html
  • 67. trunk-based development
  • 68. trunk-based development shopping cart?
  • 69. trunk-based development shopping cart? loyalty program?
  • 70. if (myFeatureIsOn) { doSomething(); } martinfowler.com/bliki/FeatureToggle.html
  • 71. feature toggles/flags/bits
  • 72. martinfowler.com/bliki/BranchByAbstraction.html
  • 73. iterative Paul Hammant
  • 74. big bang Paul Hammant
  • 75. enables refactoring gowebbaby.com/magento-responsive-design/
  • 76. 91
  • 77. 93
  • 78. always releasable
  • 79. 95
  • 80. test coverage
  • 81. branching patterns
  • 82. 98
  • 83. 99
  • 84. 100
  • 85. 101
  • 86. 102
  • 87. paulhammant.com/2013/03/13/facebook-tbd-take-2/
  • 88. “Feature branching is a poor man's modular architecture, instead of building systems with the ability to easy swap in and out features at runtime/ deploytime they couple themselves to the source control providing this mechanism through manual merging.” Dan Bodart
  • 89. questions?

×