Won't someone please form a startup to tackle this problem? Branching sucks. It's one of those things that every smallish-to-large company has to deal with, and it's very non-trivial. Sure, there are a lot of complex issues, but won't someone please take a "Worse is Better" mentality and
not make their tool do everything under the sun? Here's a modest list of core concepts that seem useful:
Each individual has their own branch. This individual can run a build of Product X and check in features and bug fixes. But most importantly, they can check in incrementally, instead of only when the feature is fully complete. For large projects, this would be very useful. Each changelist would still represent a feature, but the overall project might not be ready to deploy at that point.
Each individual's branch can sync to the main branch by pressing one button, and the system tries to auto-merge the results. Syncing is not branch merging. It doesn't create a changelist, for example. It should be the same process you'd go through when you're working in the main branch, only on your own branch.
Each individual can take checked-out work from the main branch and move it into another branch as a new changelist, without requiring a check-in.
Each individual can "save" their changelist at any time. When a changelist is saved, those files are copied and stored and the changelist is reverted. You can then fix a bug and check that in, then "restore" your saved changelist.
Auto-merge is critical. Every step should try to auto-merge, and only show a conflict when the same part of a file has been edited by multiple people, not just when the same file has been edited by multiple people.
Here's a quote from the CEO where I work. This was during an email conversation about branching, specifically that when you sync to the main branch it's actually a merge that creates a changelist:
"One of the key issues is the information you get from the changelist. It's not that we don't want to see checkins, it's that the checkins that result from [merging branches] don't convey information. Or if they do, it's not obvious and right up front like it is now. I puruse the change list every day to see what's going on. It's critical to my global view of what's going on."
So there you go. Make him happy and he'll give you money. We use Perforce, and it would be really great to have a layer on top of it to manage problems associated with branching.