I saw Martin Fowler speak in Austin a couple years ago and one part of his talk was on continuous integration, and specifically the downsides of feature branching. Feature branching is essentially where a main “trunk” of source for a project is branched several times, once per feature under active development. The management purpose behind this is typically to try and allow for release into production should one or more features not get done on time.
I’ve been on a project where this was done to a silly degree, such that there were weeks spent by several developers just doing merges and re-testing the merged changes. Martin posted a tweet this morning with a link to video where they describe the issue in detail. I won’t repeat everything they say here but encourage you to watch it, they do a fantastic job.
Learning to use feature hiding instead of feature branching can have profound impacts on the ability to release quickly. When a primary activity of the team is to regularly need to merge branches they didn’t personally work on just to release, it slows down the business’s ability to meet customer needs. This really slows down their ability to be agile and respond to change in the market.