Thursday, November 3, 2011

stop branching! agile is soccer, not american football

One trend I've noticed with git users is a habit to create a lot of branch and merge activity. The oft-repeated mantra is "branching is (easy/cheap/safe) in git so I do it a lot". When working on an agile project though, this behavior can cause serious problems. To illustrate the point, compare american football to soccer: American football has highly specialized players and positions as well as a variety of tightly choreographed set pieces. In contrast, soccer has a much lesser degree of specialization, and while there are some set pieces that are choreographed, the majority of the game is spent reacting to the situation as it evolves. Traditional development methodologies are like american football: They divide the work up among highly specialized players and then try to replay an intricate set of movements to make the play "work". Agile methodologies are more like soccer (or to a lesser degree rugby) in that the advantage doesn't come from following the choreography (or even rehearsing it), but from reacting to the current situation on the field and having visibility and vision as to the current state of the field. When teams start creating a lot of branches and working in isolation for large periods of time (relative to release frequency), that means they are often making assumptions about how the plan is supposed to work. Unless this has been worked out well in advance, it often leads to a "massive catastrophic merge" when everybody tries to come back together. To maintain an agile development process, it's important to react to interdependent changes as early as possible and reenforce the notion of a team of generalists who must react and move based on the current situation, NOT by following a plan that was written months before. So, if you're on an agile team of 5 and each of you are working on multiple independent branches and not sharing them on a daily basis, you're probably trying to play american football. Instead of developing vision and dealing with the ebb and flow of the game as it unfolds, you're trying to rehearse what you think your role in the project is supposed to be so that you can execute your portion perfectly at the appropriate time.

4 comments:

rgonzale said...

I understand and agree with your point, but the metaphor is a bit forced... You could equally argue that agile is NFL, with short sprints (each play) and revising plans to react to new knowledge with each play. Whereas soccer is long iterations with very little overall progress. Of course I'm a football-lover!

Miguel said...

Hi Mike, do you know soccer? In soccer you also need to be specialized... Each player has a specific position/task in the team. From my understand in agile the expected is the complete opposite. I can imagine an Agile soccer team, like a team where everybody is chasing the ball trying to score.
Since in an agile team everybody has to be able to be good in every positions.

Mike Mainguy said...

Soccer players are MUCH less specialized than American football players. There are no positions on a soccer field that a 300lb player would fit into, but an American football offensive tackle weighs an average of 318lbs (right now). Moreover, each player trots on an off the field and typically ONLY players offense or defense. While soccer certainly has a degree of specialization, many players will switch between midfield, forward, striker, wing, and even fullback in the course of their career. Moreover, soccer fullbacks and goalkeepers lead the offence after a turnover (especially if you're using a counter attacking style) It is much rarer for an American Defensive Lineman to lead the attack... as a matter of fact, it's almost always a single player calling all the shots in American football where that responsibility is much more situational in soccer.

swon said...

Hi Miguel,

I know and I love soccer.
Do you know that sometimes (many times!) defense or even the goalkeeper scores?

I totally agree with this amazing post.

Soccer is not "like a team where everybody is chasing the ball trying to score."

Soccer is eleven guys (or girls) playing for 90 minutes (45 + 45) to achieve a goal.
This goal can be to score as much as possible or not lose (depending on the competition or situation).

The goal of a soccer match can be changed while the match is not finished.
Depending, for instance, a player that was injured or other match results running at the same time.

That's the beauty of soccer!

And that's why it totally fits with agile and vice versa.

Inspect and Adapt!