The hardest part of nonstop self-directed work is probably the extended periods of feeling like you're not “accomplishing” anything. When you're only doing small but necessary tasks, it's a slog with no conclusion and no end in sight.
I think this is why I sometimes switch to small, fun projects in my free time. When it's small and self-contained, you can “win” easily. And that feeling of accomplishment — any kind of accomplishment — bleeds back into the real work.
I realized this over the weekend, as I took some extended time to play video games. Like with small projects, in games you can first find some struggle, and then finality. Winning or losing is binary; it doesn't drag out for years as you wonder whether something is going to work out or you're doing the right thing with your life (for example).
Programming is the same, I suppose — that tight feedback loop of good or bad as the computer tells you whether you typed the instructions correctly. But once you've mastered programming, you move away from this binary world with satisfying feedback to the nebulous world of Am I building the right thing? or Does this solve a business need — and what is that need, anyway?
Sometimes, an occupation that requires living with endless uncertainty needs a tiny bit of certainty interjected, just to remember what it feels like — as fleeting as it may be.