Chasing Flow while coding is just procrastination with good PR.

I spent years trying to make it work. I read Mihaly Csikszentmihalyi’s Flow. I tried to calibrate problem difficulty to my skill level. I waited for the game-like enjoyment to arrive.

When it didn’t, I felt like I was doing something wrong — so I’d wait. Wait for the right mood, the right energy, the right moment to begin. You’re not avoiding the work, you tell yourself. You’re preparing to do it properly.

And even when you do sit down, the Flow model sets you up to fail. Real projects don’t have a single difficulty level. Within any project, there’s architecture, implementation, debugging, documentation — and you have different skill levels for each. You can’t calibrate the challenge. The mismatch is structural. So you’re either waiting to start, or disappointed once you do.

A better mental model: think of coding like knitting a sweater.

Knitting code

A knitter doesn’t wait to feel inspired before picking up the needles. They don’t need each stitch to feel exciting — but they do need each stitch to be correct. That precision is the whole game: consistent, careful work that compounds into something finished. No heroics. No breakthroughs. Just one good stitch after another.

Translated to coding: your current “stitch” might be a function, a failing test, or an awkward refactor. Some stitches are tedious. Some are genuinely hard. You don’t need to feel a particular way about either. You just complete it well and move to the next one.

What this buys you:

  • Projects actually get finished — not stalled waiting for the right mood
  • No procrastination dressed up as preparation
  • No skill-mismatch anxiety — tedious work is just part of the pattern
  • Consistent output regardless of energy level

I’ve seen this shift help mentees who were stuck — not because they lacked skill or discipline, but because they had internalised the idea that coding should feel a certain way before they committed to it.