Think before You Code
“Think before you code” is a frequently offered tip for novice programmers, but I believe it should be approached judiciously.
Overthinking can cause analysis paralysis. Instead, we should aim for a more iterative and incremental approach to development. Prototyping allows us to test ideas and determine what works. Workflows like TDD, REPL-driven development, and hot reloading can facilitate this process. Ultimately, prioritizing fast iteration and feedback loops is more crucial in software design than meticulously planning every detail upfront (which is impossible anyway).
Rather than getting caught up in overanalysis, we should prioritize making our code easy to modify and be unafraid to discard it when necessary. Some gamedev even go as far as adopting the practice of prototyping in a separate framework from the production to compel themselves to abandon prototype code. Design naturally emerges as we gain a deeper understanding of the problem domain. Often, the best way to comprehend the problem domain is by coding and encountering those challenges firsthand.