I also don't relate to programmers who write about their mental castles that evaporate with a tap on the shoulder.
Frankly it sounds to me like people are doing it wrong. When I have a castle to build, I:
* sketch out broad strokes on a whiteboard
* write stubs and placeholder in code and see how it all connects
* brutally refactor and iterate
The last part is key. I may refactor and reorganize my architecture a dozen times before I'm done, including going back to earlier discarded ideas that seemed subpar at the time (either because of new developments/additions, or because alternatives turned out to be much worse).
If I get distracted, there is few artifacts or mental state that is lost.
That's a good practice, but it's more orthogonal to the concept of flow than you think. I do basically the same thing when I design new components or systems, but I'm very much in a flow state while doing so.
Frankly it sounds to me like people are doing it wrong. When I have a castle to build, I:
* sketch out broad strokes on a whiteboard * write stubs and placeholder in code and see how it all connects * brutally refactor and iterate
The last part is key. I may refactor and reorganize my architecture a dozen times before I'm done, including going back to earlier discarded ideas that seemed subpar at the time (either because of new developments/additions, or because alternatives turned out to be much worse).
If I get distracted, there is few artifacts or mental state that is lost.