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.
Comments
Since in an agile team everybody has to be able to be good in every positions.
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!
For me, this was the right article at the right time. While you pursued the metaphor into the branch/merge and the importance of communication, the analogy can be be used at a broader level to describe many pieces of agile. I feel that you did a great service in clearly comparing american football and soccer. For that I thank you.