Thinking is the vital part of software development process. It raises questions. It is the fail fast principle taken to the extreme. I’d extend the popular “code the right thing” to “define what the right thing is, determine if code is the best solution in the first place, and then, if the answer is yes, build a solid mental model, and finally start coding the right thing”. Building a mental model may, (and often does), involve coding, and usually it’s an iterative process. Especially, when we explore an unknown domain and the model rapidly evolves. However, code is treated here as a thinking tool rather than the final product. It could be compared to sketching before putting any paint on the canvas. It’s easy and cheap to modify a sketch where is much more difficult to alter a ready painting.