Trunk Based Development Explored

Post on 02-Dec-2014

2.932 views 6 download

Tags:

description

Palestra realiz

Transcript of Trunk Based Development Explored

Trunk Based Development Trunk Based Development

ExploredExplored

Carlos Lopes

ThoughtWorks

Guilherme Lacerda

FACENSA/UniRitter

TargetTrust/Surya Software Innovation

agenda

the problem

impacts

solutions!

when to branch?

the problemthe problem

different streams,

same codebase

branches!branches!

Ronald Widha

merge hell

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}

}

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}

}

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" %>

the merge man/monkey

promiscuous integration

Martin Fowler

$$$$$$$$

Jon Wolter

regressionsregressions

Jon Wolter

Jon Wolter

“the bigger the apparent

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

you shouldn’t branch.”

Jez Humble / David Farley

“don't separate differing

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

an abstraction instead.”

Stacy Curl

“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

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

solve this?solve this?

branch by

source control?source control?

there’s hope!

approaches

hide new functionality

abstractionabstraction

big bang

Paul Hammant

iterative

Paul Hammant

small releasable changes

componentization

enable flow

across teamsacross teams

KEEP IT ALWAYS RELEASABLE

KEEP IT ALWAYS RELEASABLE

CONTINUOUS INTEGRATION

CONTINUOUS INTEGRATION

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

Uncle Bob

when to branch?

large change

spikes

new release

when to branch?

large change

spikes

new release

when to branch?

large change

spikes

new release

Paul Hammant

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

www.codingbyexample.org

more info

www.codingbyexample.org

thanks!