Developing on HEAD scales to Google
bentilly.blogspot.com
bentilly.blogspot.com
Except that when I work on a feature branch on git, I constantly rebase on top of master to stay up to date and so I don't have to face a huge merge "later" but a few easy merges once in a while.
The problem comes when two people are developing stuff in two branches that conflicts. When the first merges in, the second now faces the huge painful merge.
No matter which way you slice it, one of the two developers (maybe both) needs to sit down and figure out what the others' changes do and how they interact with his/her own. That's a wetware problem, not something you can fix with a tool.
The more difficult problems come when each worked on it for 2 weeks, then they discover a month or two later that there is a conflict - after both have forgotten what they were doing and why they were doing it.
Furthermore many organizations set up and organize branching in such a way that you have no option to freely define your branch like that. For example in the Microsoft story I linked to there is a multi-level merge process. If you just merge from a random other branch, then multiple merges later when code from your branch is officially merged with the other branch you'll have caused a nightmare because you've got an old and buggy copy of all of the changes in that other branch. The people whose job it is to sort it out will want to kill you. Particularly if you've merged in code that was explicitly discarded from the other branch.
Branching just isn't a natural workflow for me.
Which is how I prefer to code.
Edit: "Work in Small Batches" is another great post on the subject by Eric Ries http://www.startuplessonslearned.com/2009/02/work-in-small-b...
The author writes, "Guido's talk describes many elements of what makes it scale...The second piece is an enforced policy of having every single patch go through a code review process before you check anything in...And beyond that you have people paying attention to best practices such as consistent style, good unit testing, so on and so forth. (All of which are reinforced in the code review process.)"
I think he makes it clear that the reason developing from HEAD has worked at Google is because they have lots of processes to ensure success.
As an illustration of the dragons that wait, what happens if someone adopts all of the tools and practices, but the product manager is still able to put real schedule pressure on developers. I guarantee that in the rush to finish features that anyone who holds up implementation with, "This code is crap and there is no way I'm approving it" will come under pressure to accept the crap code. And as soon as you cross that line, the entire strategy falls apart because, even though in theory you're following a good process, in practice you just lost a critical underpinning.