SlideShare a Scribd company logo
Git Without Branches -
Simple, Smooth, Scalable
Defusing the Git Complexity Bomb
by
Pieter Hintjens, CEO, iMatix
Berlin Buzzwords 2013, 3 June, 2013
Git is easy...
... once you understand that a git
branch is just a folded five-
dimensional lepton space that has a
detached history with no intervening
cache.
Git makes me feel stupid
● (I love git... but)
● Inconsistent and arbitrary commands
● Too many concepts to learn
● Too many ways to make mistakes
● Too much space for opinion
● Every team has to invent a strategy
Git-flow is a popular strategy
● Has base branches (master, develop)
● Has feature branches
● Has release branches
● Has hotfix branches
● Has support branches
● Has its own git extensions
● Is this making life simpler?
Complexity
● Engineers just enjoy making stuff
● Complexity makes us feel stupid
● We make mistakes
● We lose confidence
● We fight over “unicorn policies”
● Outcome: projects that don't scale
The Git Complexity Bomb
● Branching is a poor solution for poor processes
● Complexity oriented design & trash oriented
design
● The process becomes harder to fix
● You can't fix just part of this picture
● Defusing the bomb needs a holistic intervention
Simplicity
Some quotes from my favorite author:
● “Simplicity beats functionality, every time”
● “If you can't understand it on a cold Monday
morning before coffee, it's too complex!”
● “Design by removing problems, not adding
features”
Simplicity Oriented Design
● Small patches to precise problems
● Fork + pull request for every single patch
● Contributor-maintainer ping-pong
● Accuracy over speed
● Community over code
● Bundled up as C4.1 protocol
In Practice
● Development repo has 1 branch = master
● Pull requests always applied to master
● Travis CI for builds & regression tests
● Stable releases are forked off
● Cherry pick fixes from master to stable
Branches vs. Forks
● How complex is the organization?
● What's the change latency?
● What is the learning curve for newcomers?
● How many ways can we screw up?
● How much upfront coordination do we need?
Branches vs. Forks
● Who owns what we make?
● Can our agreements survive arguments?
● How safe is my code from your errors?
● How visible is this project?
● How large can the project scale?
Does it work?
● We switched ØMQ in Dec 2011 after much talk
● Initial reactions: mixed and apprehensive
● After 18 months, ~70 contributors (from 2-3)
● Dev master is perfect most of the time
● Community is happy, and we use this widely
● Easy to learn, and smooth to drive
Conclusions
● Git branches are part of a “complexity bomb”
that may be damaging your projects
● By switching to a better development process
you eliminate the need for branches
● The result is a simpler, kinder Git that is much
easier to learn, and safer to use
● And that gives you larger, more successful
projects
If you want to try this
● Read C4.1
(rfc.zeromq.org/spec:
22)
● Look at a project that
uses it
● Read my “ZeroMQ”
book (O'Reilly),
Chapter 6
Thanks!
● See you here tomorrow at 12pm for an
explanation on how we're doing security for
ZeroMQ
● Email me: ph@imatix.com
● Twitter: @hintjens
● Blog: hintjens.com
Ad

More Related Content

Viewers also liked (10)

Fosdem 2009
Fosdem 2009Fosdem 2009
Fosdem 2009
pieterh
 
CurveZMQ, ZMTP and other Dubious Characters
CurveZMQ, ZMTP and other Dubious CharactersCurveZMQ, ZMTP and other Dubious Characters
CurveZMQ, ZMTP and other Dubious Characters
pieterh
 
ZeroMQ: Super Sockets - by J2 Labs
ZeroMQ: Super Sockets - by J2 LabsZeroMQ: Super Sockets - by J2 Labs
ZeroMQ: Super Sockets - by J2 Labs
James Dennis
 
Software Architecture over ZeroMQ
Software Architecture over ZeroMQSoftware Architecture over ZeroMQ
Software Architecture over ZeroMQ
pieterh
 
RestMS Introduction
RestMS IntroductionRestMS Introduction
RestMS Introduction
pieterh
 
Build reliable, traceable, distributed systems with ZeroMQ
Build reliable, traceable, distributed systems with ZeroMQBuild reliable, traceable, distributed systems with ZeroMQ
Build reliable, traceable, distributed systems with ZeroMQ
Robin Xiao
 
FOSDEM 2011 - 0MQ
FOSDEM 2011 - 0MQFOSDEM 2011 - 0MQ
FOSDEM 2011 - 0MQ
pieterh
 
Europycon2011: Implementing distributed application using ZeroMQ
Europycon2011: Implementing distributed application using ZeroMQEuropycon2011: Implementing distributed application using ZeroMQ
Europycon2011: Implementing distributed application using ZeroMQ
fcrippa
 
ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The Answer
Ian Barber
 
Overview of ZeroMQ
Overview of ZeroMQOverview of ZeroMQ
Overview of ZeroMQ
pieterh
 
Fosdem 2009
Fosdem 2009Fosdem 2009
Fosdem 2009
pieterh
 
CurveZMQ, ZMTP and other Dubious Characters
CurveZMQ, ZMTP and other Dubious CharactersCurveZMQ, ZMTP and other Dubious Characters
CurveZMQ, ZMTP and other Dubious Characters
pieterh
 
ZeroMQ: Super Sockets - by J2 Labs
ZeroMQ: Super Sockets - by J2 LabsZeroMQ: Super Sockets - by J2 Labs
ZeroMQ: Super Sockets - by J2 Labs
James Dennis
 
Software Architecture over ZeroMQ
Software Architecture over ZeroMQSoftware Architecture over ZeroMQ
Software Architecture over ZeroMQ
pieterh
 
RestMS Introduction
RestMS IntroductionRestMS Introduction
RestMS Introduction
pieterh
 
Build reliable, traceable, distributed systems with ZeroMQ
Build reliable, traceable, distributed systems with ZeroMQBuild reliable, traceable, distributed systems with ZeroMQ
Build reliable, traceable, distributed systems with ZeroMQ
Robin Xiao
 
FOSDEM 2011 - 0MQ
FOSDEM 2011 - 0MQFOSDEM 2011 - 0MQ
FOSDEM 2011 - 0MQ
pieterh
 
Europycon2011: Implementing distributed application using ZeroMQ
Europycon2011: Implementing distributed application using ZeroMQEuropycon2011: Implementing distributed application using ZeroMQ
Europycon2011: Implementing distributed application using ZeroMQ
fcrippa
 
ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The Answer
Ian Barber
 
Overview of ZeroMQ
Overview of ZeroMQOverview of ZeroMQ
Overview of ZeroMQ
pieterh
 

Similar to Git Without Branches - Simple, Smooth, Scalable (20)

Git intro fajar muslim
Git intro fajar muslimGit intro fajar muslim
Git intro fajar muslim
Jesslyn Nathania
 
Git & Code review
Git & Code reviewGit & Code review
Git & Code review
Cenk Gültekin
 
Getting Started With Git and GitHub & Unfolding Opportunities in Open Source
 Getting Started With Git and GitHub & Unfolding Opportunities in Open Source  Getting Started With Git and GitHub & Unfolding Opportunities in Open Source
Getting Started With Git and GitHub & Unfolding Opportunities in Open Source
Ashutosh Singh
 
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Perforce
 
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Git in the Enterprise: How to succeed at DevOps using Git and a monorepoGit in the Enterprise: How to succeed at DevOps using Git and a monorepo
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Gina Bustos
 
Pull requests do's and don'ts
Pull requests do's and don'tsPull requests do's and don'ts
Pull requests do's and don'ts
Arie Bregman
 
Software Engineering Tools and Practices Learn Git
Software Engineering Tools and Practices Learn GitSoftware Engineering Tools and Practices Learn Git
Software Engineering Tools and Practices Learn Git
BeHappy728244
 
Modern source and_version_control_with_git
Modern source and_version_control_with_gitModern source and_version_control_with_git
Modern source and_version_control_with_git
Christian Couder
 
GIT AND GITHUB (1).pptx
GIT AND GITHUB (1).pptxGIT AND GITHUB (1).pptx
GIT AND GITHUB (1).pptx
GDSCCVRGUPoweredbyGo
 
Software Engineering Primer
Software Engineering PrimerSoftware Engineering Primer
Software Engineering Primer
Georg Buske
 
Devops, Secops, Opsec, DevSec *ops *.* ?
Devops, Secops, Opsec, DevSec *ops *.* ?Devops, Secops, Opsec, DevSec *ops *.* ?
Devops, Secops, Opsec, DevSec *ops *.* ?
Kris Buytaert
 
Let's talk FOSS!
Let's talk FOSS!Let's talk FOSS!
Let's talk FOSS!
AditiSaxena72
 
Post-Agile Methodologies and all that Jazz
Post-Agile Methodologies and all that JazzPost-Agile Methodologies and all that Jazz
Post-Agile Methodologies and all that Jazz
Stojan Peshov
 
Agile team workflow
Agile team workflowAgile team workflow
Agile team workflow
Mahmoud Masih Tehrani
 
Git Branching – the battle of the ages
Git Branching – the battle of the agesGit Branching – the battle of the ages
Git Branching – the battle of the ages
Jasmin Fluri
 
Picking the right architecture and sticking to it
Picking the right architecture and sticking to itPicking the right architecture and sticking to it
Picking the right architecture and sticking to it
Petter Holmström
 
Nimble - iOS dependency management
Nimble - iOS dependency managementNimble - iOS dependency management
Nimble - iOS dependency management
Nimble
 
Devops Devops Devops, at Froscon
Devops Devops Devops, at FrosconDevops Devops Devops, at Froscon
Devops Devops Devops, at Froscon
Kris Buytaert
 
Git Things Done
Git Things DoneGit Things Done
Git Things Done
FITC
 
Introduction to git and stash
Introduction to git and stashIntroduction to git and stash
Introduction to git and stash
Xpand IT
 
Getting Started With Git and GitHub & Unfolding Opportunities in Open Source
 Getting Started With Git and GitHub & Unfolding Opportunities in Open Source  Getting Started With Git and GitHub & Unfolding Opportunities in Open Source
Getting Started With Git and GitHub & Unfolding Opportunities in Open Source
Ashutosh Singh
 
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Perforce
 
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Git in the Enterprise: How to succeed at DevOps using Git and a monorepoGit in the Enterprise: How to succeed at DevOps using Git and a monorepo
Git in the Enterprise: How to succeed at DevOps using Git and a monorepo
Gina Bustos
 
Pull requests do's and don'ts
Pull requests do's and don'tsPull requests do's and don'ts
Pull requests do's and don'ts
Arie Bregman
 
Software Engineering Tools and Practices Learn Git
Software Engineering Tools and Practices Learn GitSoftware Engineering Tools and Practices Learn Git
Software Engineering Tools and Practices Learn Git
BeHappy728244
 
Modern source and_version_control_with_git
Modern source and_version_control_with_gitModern source and_version_control_with_git
Modern source and_version_control_with_git
Christian Couder
 
Software Engineering Primer
Software Engineering PrimerSoftware Engineering Primer
Software Engineering Primer
Georg Buske
 
Devops, Secops, Opsec, DevSec *ops *.* ?
Devops, Secops, Opsec, DevSec *ops *.* ?Devops, Secops, Opsec, DevSec *ops *.* ?
Devops, Secops, Opsec, DevSec *ops *.* ?
Kris Buytaert
 
Post-Agile Methodologies and all that Jazz
Post-Agile Methodologies and all that JazzPost-Agile Methodologies and all that Jazz
Post-Agile Methodologies and all that Jazz
Stojan Peshov
 
Git Branching – the battle of the ages
Git Branching – the battle of the agesGit Branching – the battle of the ages
Git Branching – the battle of the ages
Jasmin Fluri
 
Picking the right architecture and sticking to it
Picking the right architecture and sticking to itPicking the right architecture and sticking to it
Picking the right architecture and sticking to it
Petter Holmström
 
Nimble - iOS dependency management
Nimble - iOS dependency managementNimble - iOS dependency management
Nimble - iOS dependency management
Nimble
 
Devops Devops Devops, at Froscon
Devops Devops Devops, at FrosconDevops Devops Devops, at Froscon
Devops Devops Devops, at Froscon
Kris Buytaert
 
Git Things Done
Git Things DoneGit Things Done
Git Things Done
FITC
 
Introduction to git and stash
Introduction to git and stashIntroduction to git and stash
Introduction to git and stash
Xpand IT
 
Ad

Git Without Branches - Simple, Smooth, Scalable

  • 1. Git Without Branches - Simple, Smooth, Scalable Defusing the Git Complexity Bomb by Pieter Hintjens, CEO, iMatix Berlin Buzzwords 2013, 3 June, 2013
  • 2. Git is easy... ... once you understand that a git branch is just a folded five- dimensional lepton space that has a detached history with no intervening cache.
  • 3. Git makes me feel stupid ● (I love git... but) ● Inconsistent and arbitrary commands ● Too many concepts to learn ● Too many ways to make mistakes ● Too much space for opinion ● Every team has to invent a strategy
  • 4. Git-flow is a popular strategy ● Has base branches (master, develop) ● Has feature branches ● Has release branches ● Has hotfix branches ● Has support branches ● Has its own git extensions ● Is this making life simpler?
  • 5. Complexity ● Engineers just enjoy making stuff ● Complexity makes us feel stupid ● We make mistakes ● We lose confidence ● We fight over “unicorn policies” ● Outcome: projects that don't scale
  • 6. The Git Complexity Bomb ● Branching is a poor solution for poor processes ● Complexity oriented design & trash oriented design ● The process becomes harder to fix ● You can't fix just part of this picture ● Defusing the bomb needs a holistic intervention
  • 7. Simplicity Some quotes from my favorite author: ● “Simplicity beats functionality, every time” ● “If you can't understand it on a cold Monday morning before coffee, it's too complex!” ● “Design by removing problems, not adding features”
  • 8. Simplicity Oriented Design ● Small patches to precise problems ● Fork + pull request for every single patch ● Contributor-maintainer ping-pong ● Accuracy over speed ● Community over code ● Bundled up as C4.1 protocol
  • 9. In Practice ● Development repo has 1 branch = master ● Pull requests always applied to master ● Travis CI for builds & regression tests ● Stable releases are forked off ● Cherry pick fixes from master to stable
  • 10. Branches vs. Forks ● How complex is the organization? ● What's the change latency? ● What is the learning curve for newcomers? ● How many ways can we screw up? ● How much upfront coordination do we need?
  • 11. Branches vs. Forks ● Who owns what we make? ● Can our agreements survive arguments? ● How safe is my code from your errors? ● How visible is this project? ● How large can the project scale?
  • 12. Does it work? ● We switched ØMQ in Dec 2011 after much talk ● Initial reactions: mixed and apprehensive ● After 18 months, ~70 contributors (from 2-3) ● Dev master is perfect most of the time ● Community is happy, and we use this widely ● Easy to learn, and smooth to drive
  • 13. Conclusions ● Git branches are part of a “complexity bomb” that may be damaging your projects ● By switching to a better development process you eliminate the need for branches ● The result is a simpler, kinder Git that is much easier to learn, and safer to use ● And that gives you larger, more successful projects
  • 14. If you want to try this ● Read C4.1 (rfc.zeromq.org/spec: 22) ● Look at a project that uses it ● Read my “ZeroMQ” book (O'Reilly), Chapter 6
  • 15. Thanks! ● See you here tomorrow at 12pm for an explanation on how we're doing security for ZeroMQ ● Email me: [email protected] ● Twitter: @hintjens ● Blog: hintjens.com