Allowing oneself to write crappy code is so liberating! 😌 In general, I would juggle in my head with so many expectations: code that is effective, and clear, and generic, and understandable, and...
In TDD, I just have one job: pass the test as soon as possible. So narrow the focus, it drives me into action.
When the test goes green 🟢, there's a sense of achievement. Yes, it's crap, but it works. That's a great foundation for the next phase: refactor. Now I just need my code to do the same, but be better. Then you can open your gardener's toolbox and start pruning, extracting, abstracting.
I realized that...
The main source of struggle
is my own internal friction,
not the difficulty of the problem.