bate-papo trunk based development

48
Trunk Based Development Trunk Based Development Bate-papo com o Especialista Trunk Based Development Trunk Based Development Carlos Lopes ThoughtWorks Guilherme Lacerda FACENSA/UniRitter TargetTrust/Surya Software Innovation

Upload: uniritterufrgstjrswildtech

Post on 05-Dec-2014

869 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Bate-papo Trunk Based Development

Trunk Based DevelopmentTrunk Based Development

Bate-papo com o Especialista

Trunk Based DevelopmentTrunk Based Development

Carlos Lopes

ThoughtWorks

Guilherme Lacerda

FACENSA/UniRitter

TargetTrust/Surya Software Innovation

Page 2: Bate-papo Trunk Based Development

agenda

the problem

impacts

solutions!

when to branch?

Page 3: Bate-papo Trunk Based Development

the problemthe problem

Page 4: Bate-papo Trunk Based Development

different streams,

same codebase

Page 5: Bate-papo Trunk Based Development
Page 6: Bate-papo Trunk Based Development

branches!branches!

Page 7: Bate-papo Trunk Based Development

Ronald Widha

Page 8: Bate-papo Trunk Based Development
Page 9: Bate-papo Trunk Based Development
Page 10: Bate-papo Trunk Based Development

merge hell

Page 11: Bate-papo Trunk Based Development

syntactic conflict

class BlaBlaBla {

<<<<<<< HEAD<<<<<<< HEADpublic 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: Bate-papo Trunk Based Development

semantic conflict

class BlaBlaBla {

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

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

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

//other stuff}

}

Page 13: Bate-papo Trunk Based Development

integration conflicts

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

master: agivenbranch:master:

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

agivenbranch:

bla.jspf -> ble.jspf

main.jsp:<%@include file="ble.jspf" %>

Page 14: Bate-papo Trunk Based Development

the merge man/monkey

Page 15: Bate-papo Trunk Based Development

promiscuous integration

Martin Fowler

Page 16: Bate-papo Trunk Based Development

$$$$$$$$

Page 17: Bate-papo Trunk Based Development

Jon Wolter

Page 18: Bate-papo Trunk Based Development

regressionsregressions

Page 19: Bate-papo Trunk Based Development

Jon Wolter

Page 20: Bate-papo Trunk Based Development

Jon Wolter

Page 21: Bate-papo Trunk Based Development

“the bigger the apparent

reason to branch, the more reason to branch, the more

you shouldn’t branch.”

Jez Humble / David Farley

Page 22: Bate-papo Trunk Based Development

“don't separate differing

concerns by using a VCS, use concerns by using a VCS, use

an abstraction instead.”

Stacy Curl

Page 23: Bate-papo Trunk Based Development

“feature branching is a poor man's modular

architecture, instead of building systems

with the ability to easy swap in and out 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

Page 24: Bate-papo Trunk Based Development

all right, but how to all right, but how to

solve this?solve this?

Page 25: Bate-papo Trunk Based Development

branch by

source control?source control?

Page 26: Bate-papo Trunk Based Development
Page 27: Bate-papo Trunk Based Development

there’s hope!

Page 28: Bate-papo Trunk Based Development

approaches

Page 29: Bate-papo Trunk Based Development

hide new functionality

Page 30: Bate-papo Trunk Based Development

abstractionabstraction

Page 31: Bate-papo Trunk Based Development

big bang

Paul Hammant

Page 32: Bate-papo Trunk Based Development

iterative

Paul Hammant

Page 33: Bate-papo Trunk Based Development

small releasable changes

Page 34: Bate-papo Trunk Based Development

componentization

Page 35: Bate-papo Trunk Based Development

enable flow

across teamsacross teams

Page 36: Bate-papo Trunk Based Development

KEEP IT ALWAYS RELEASABLE

Page 37: Bate-papo Trunk Based Development

KEEP IT ALWAYS RELEASABLE

Page 38: Bate-papo Trunk Based Development

CONTINUOUS INTEGRATION

Page 39: Bate-papo Trunk Based Development

CONTINUOUS INTEGRATION

Page 40: Bate-papo Trunk Based Development

program level program level

product owner/champion product owner/champion

knows each project champion and knows each project champion and

how to reach peoplehow to reach people

Page 41: Bate-papo Trunk Based Development

Uncle Bob

Page 42: Bate-papo Trunk Based Development

but when to branch?

Page 43: Bate-papo Trunk Based Development

large change

- headaches!

spikesspikes

- if you throw them away

new release

- hmm

Page 44: Bate-papo Trunk Based Development

Paul Hammant

Page 45: Bate-papo Trunk Based Development

branching vs. freezingbranching vs. freezingbranching vs. freezingbranching vs. freezing

Page 46: Bate-papo Trunk Based Development

www.codingbyexample.org

more info

www.codingbyexample.org

Page 47: Bate-papo Trunk Based Development

thanks!

Page 48: Bate-papo Trunk Based Development