I’ve always wondered about whether creating source control branches for every feature is a good idea at all. Isn’t one just postponing the problem of the big merge come release time? I’ve always felt that working off the mainline, checking in frequently, and creating very small features is the best way to go, since at all times one is only slightly away from releasable code. I felt exonerated for thinking differently from the general software population (of my acquaintance, that is) when I read these articles on feature branching and branching by abstraction. The intent here is to use software design to enable or disable features, so that work on an incomplete feature can proceed as if on a branch, without affecting other features, but always being just a few configuration settings or code statements away from being enabled and released. Source control branches unless used by disciplined developers who merge frequently, can move so far away from the mainline, that they cannot be easily integrated into releasable code. I’ve always shuddered at the thought of managing feature branches. I’m not alone in thinking that way.