How is software development like cooking? When cooking, it can be helpful to review the recipe steps before cooking to get a clear mental model of what you're about to do. When coding, it can be helpful to write pseudo code or tests before coding to get a clear mental model of what you're about to do.
How is it not like cooking? When cooking, I likely need to use different pots to cook different ingredients even if I'm using a similar cooking technique such as sauteing. For example, boiling potatoes or sauteing carrots. However when coding, I can write a single function that can do two different things based on the inputs. But depending on the programming language, a function still may only be called in parallel with one call happening before the other. I guess this is similar to reusing a pot, first boiling potatoes and then sauteing carrots.
These are examples of thinking in analogies. And when pursuing a new creative project or overcoming a problem, thinking in analogies can be a beneficial strategy. Analogies enable parallel thinking, enabling the transfer of experience and expertise from one domain into another. Humans excel at finding relationships between seemingly unrelated ideas. And comparing one analogy to another can be a great practical exercise to spark this type of thinking to create new options and ideas.
I was recently reminded of the power of this practice when reading Range. In an example of testing the problem-solving skills of students:
"The students prompted with one analogy came up with more strategies than those given no analogies, and students given multiple analogies came up with more strategies than those reminded only of one. And the more distant the analogy, the better it was for idea generation." (David Epstein, Range)
So next time you're stuck on a problem, consider how it's like a chicken, a rock, or a galaxy.