As discussed in The Snowball Branch, branches and features can quickly get out of hand during development. This can lead to very odd effects, where work extends and extends, because it’s gaining problems from its surroundings, and gaining dependencies too.
Today, I faced an issue where a feature I wanted to build relied on https, rather than http. We were going to move to https anyway, so my branch could just add the https stuff… right?
A pre-requisite is a good opportunity to branch off, do the work, and then rebase against it. This pre-requisite, if it’s independent enough to be called such a thing, provides an easier to review baseline for everyone to share, and allows you to restart your main work with the prerequisite in place.
What if my pre-requisite can’t…
Nine times out of ten it can. If it really can’t, then don’t do this. But are you sure? Are you sure that there isn’t a way of sliding that pre-requisite in?
What does it mean in practice?
My next task, within the same story, is to implement the https piece. I’ll do that as a self-contained change, and then when I rebase my original change against it, which will be clean because it’s not a snowball, I’ll be further forward, but won’t have tangled anything up.