One of the most challenging things I find in life is explaining to a non-programmer how I visualise code. Because I don't really know how I do it; it is simultaneously grammatical and architectural, and a lot of the processes that guide me are really emotional or almost visceral. Code sometimes does not feel right.