hash shucking attacks.
Sometimes when I'm stuck on a problem, I can work on something else in the meantime and a solution to my original problem suddenly presents itself, as if my unconscious brain was thinking about it the whole time. Once a problem leaves your L1 cache because you haven't thought about it in a while, you're no longer making progress on it. In fact, it's the opposite of progress because you slowly start to lose context which will take effort to regain.
That's why it's best to mostly stay on the critical path than to hop around. It's OK to do some side quests here and there, but don't let them subvert the main questline.
To make real improvements in software, you usually have to break things first. The longer it takes to get your application compiling or running again, the more costly the improvement becomes. Once a change starts taking weeks, the full context becomes hard to keep in your L1 cache and the probability of refuctoring increases.
I'm a repeat offender when it comes to this. I've made many fundamental improvements very low in the stack that affects basically everything, but I've failed to propagate that change completely for a long time, usually due to some difficult edge case that I didn't think about initially.
As a corollary, don't get tempted to rewrite so easily. Rewriting is the ultimate form of breaking your software. My favorite discussion on why rewriting is bad is Spolsky's Things You Should Never Do. Part I.
Usually, both in software and in life, it's better to pay now rather than pay later. It's going to cost much more time and energy to change a function prototype after it has hundreds of call sites than when it has none or just a few. In other words, do it right or do it again.
It takes experience to predict what's going to be worth paying your time into in the future and what will be a waste when it becomes quickly irrelevant. Of course, it's still important to have a healthy amount of YAGNI (you ain't gonna need it) to stay working on the things that actually matter.
As an aside, you can combine "pay later" with the witty "later is never" quip to derive: "pay never", which sounds like a sweet deal until you realize that it turns your software into concrete over time - impossible to change without a jackhammer.
Although I could still fail, I now recognize there's nothing else to blame other than myself. The only thing worse than failing is failing and blaming something else for it.