Don Park on Test-Driven Development.
I like the comparison with being deeply involved with a video game and pushing aside deep thoughts on design.
Hard thinking, heavy lifting and thinking deep thoughts is way overrated in software development. Most of the time, deep thoughts aren’t necessary to accomplish the task at hand. Concentrating on following a set of simple practices will result in a better and more maintainable product than thinking deep thoughts.
Actually, deep thinking is still there but done at the back of your mind and resurfacing whenever you pause. Since solutions to some of the toughest problems I have encountered just ‘came’ to me when I woke, I think this style of deep thinking is still effective.
Interesting enough, following the simple practices I mentioned ensures that your code is in great shape when the solutions surface from the back of your brain, thus making them easier to implement.
Plus, following TDD and other practices like coding-by-intention tends to make hard problems easier to solve (and to think about) by removing one thin layer from the problem after the other, like peeling an onion.