My analogy for some kinds of programming is mental juggling. Good programmers, juggle lots of balls at one time: the problem components, constraints, other problem elements, production issues, reliability issues, all the possible solutions.
A programmer starts with a couple of these, gets them in the air, then adds more and more concepts. When I am good I can juggle lots of them and see how they interoperate.
Once all the balls in the air, whirling around like some sort of planetary system orbiting a sun, they can coalesce into -- an idea, a solution, or something.
If this gets disturbed, all those balls come tumbling down. This is not a 30 second thing, this can be an hours thing. Or more.
Non programmers do not understand this process. I believe.