49
Trunk Based Development Explored Carlos Lopes ThoughtWorks Guilherme Lacerda FACENSA/UniRi@er TargetTrust/Surya SoBware InnovaEon

Trunk Based Development Explored

Embed Size (px)

DESCRIPTION

Trunk Based Development Explored, Agile Brazil 2011 - Fortaleza, CE

Citation preview

Page 1: Trunk Based Development Explored

Trunk  Based  Development  Explored  

   

Carlos  Lopes  ThoughtWorks  

   

Guilherme  Lacerda  FACENSA/UniRi@er  

TargetTrust/Surya  SoBware  InnovaEon  

Page 2: Trunk Based Development Explored

agenda  

the  problem  

impacts  

solu2ons!  

when  to  branch?  

Page 3: Trunk Based Development Explored

the  problem  

Page 4: Trunk Based Development Explored

different  streams,  same  codebase  

Page 5: Trunk Based Development Explored
Page 6: Trunk Based Development Explored

branches!  

Page 7: Trunk Based Development Explored

Ronald  Widha  

Page 8: Trunk Based Development Explored
Page 9: Trunk Based Development Explored
Page 10: Trunk Based Development Explored

merge  hell  

Page 11: Trunk Based Development Explored

syntac2c  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    }  

 }  

Page 12: Trunk Based Development Explored

seman2c  conflict  

class  BlaBlaBla  {    

 public  void  something(Bla  bla)  {  <<<<<<<  HEAD  

   bla  =  bla.plus(14);  =======  

   bla  =  bla.minus(7);  >>>>>>>  change  

   //other  stuff    }  

 }  

Page 13: Trunk Based Development Explored

integra2on  conflicts  main.jsp:  <%@include  file="bla.jspf"  %>        master:  

 new-­‐file.jsp:  <%@include  file="bla.jspf"  %>        

agivenbranch:    bla.jspf  -­‐>  ble.jspf    main.jsp:  <%@include  file="ble.jspf"  %>        

Page 14: Trunk Based Development Explored

the  merge  man/monkey  

Page 15: Trunk Based Development Explored

promiscuous  integra2on  

Mar6n  Fowler  

Page 16: Trunk Based Development Explored

$$$$  

Page 17: Trunk Based Development Explored

Jon  Wolter  

Page 18: Trunk Based Development Explored

regressions  

Page 19: Trunk Based Development Explored

Jon  Wolter  

Page 20: Trunk Based Development Explored

Jon  Wolter  

Page 21: Trunk Based Development Explored

“the  bigger  the  apparent  reason  to  branch,  the  more  you  shouldn’t  branch.”  

Jez  Humble  /  David  Farley  

Page 22: Trunk Based Development Explored

“don't  separate  differing  concerns  by  using  a  VCS,  use  an  abstrac6on  instead.”  

Stacy  Curl  

Page 23: Trunk Based Development Explored

“feature  branching  is  a  poor  man's  modular  architecture,  instead  of  building  systems  with  the  ability  to  easy  swap  in  and  out  

features  at  run6me/deploy6me  they  couple  themselves  to  the  source  control  providing  this  mechanism  through  manual  merging”  

 Dan  Bodart  

Page 24: Trunk Based Development Explored

all  right,  but  how  to  solve  this?  

Page 25: Trunk Based Development Explored

branch  by    source  control?  

Page 26: Trunk Based Development Explored
Page 27: Trunk Based Development Explored

there’s  hope!  

Page 28: Trunk Based Development Explored

approaches  

Page 29: Trunk Based Development Explored

hide  new  func2onality  

Page 30: Trunk Based Development Explored

abstrac2on  

Page 31: Trunk Based Development Explored

Paul  Hammant  

big  bang  

Page 32: Trunk Based Development Explored

Paul  Hammant  

itera2ve  

Page 33: Trunk Based Development Explored

small  releasable  changes  

Page 34: Trunk Based Development Explored

componen2za2on  

Page 35: Trunk Based Development Explored

enable  flow  across  teams  

Page 36: Trunk Based Development Explored

KEEP  IT  ALWAYS  RELEASABLE  

Page 37: Trunk Based Development Explored

KEEP  IT  ALWAYS  RELEASABLE  

Page 38: Trunk Based Development Explored

CONTINUOUS  INTEGRATION  

Page 39: Trunk Based Development Explored

CONTINUOUS  INTEGRATION  

Page 40: Trunk Based Development Explored

program  level    product  owner/champion    

 

knows  each  project  champion  and  how  to  reach  people  

Page 41: Trunk Based Development Explored

Uncle  Bob  

Page 42: Trunk Based Development Explored

when  to  branch?        large  change      spikes    new  release        

Page 43: Trunk Based Development Explored

when  to  branch?        large  change      spikes    new  release        

Page 44: Trunk Based Development Explored

when  to  branch?        large  change      spikes    new  release        

Page 45: Trunk Based Development Explored

Paul  Hammant  

Page 46: Trunk Based Development Explored

branching  vs.  freezing  

Page 47: Trunk Based Development Explored

www.codingbyexample.org  

more  info  

Page 48: Trunk Based Development Explored

thanks!  

Page 49: Trunk Based Development Explored