I remember the early days of Rails when people often criticized the Java world, or the J2EE world to be more specific, for being too complex and over-engineered, even for simple projects.
Slowly, the whole industry is now shifting more towards bootstrapping, being lean, and scrappy.
Any time people try to set up a solid foundation, they are accused of wasting time; any time people try to create things with scalability in mind, they’re labeled as over-engineering.
The truth is, a solid foundation is not over-engineering; its constraints help you focus on the problem, which can actually increase your creativity. A good foundation is about eliminating unnecessary options; it’s about focusing on doing things in a limited number of ways—sometimes, the only way.
Returning to the Rails example, yes, it’s opinionated, but there is a well-established pattern for doing certain things. Controllers, actions, models, and templates are all the tools we have. Try to only use these tools and start creating.
Another example is React. Compared to other frameworks, its success largely stems from its limitations—the very few ways of putting pixels onto the screen.
A good, solid setup at the beginning is not a waste of time; it saves time both in the short term and long term. In the short term, it boosts your confidence and unleashes your creativity; in the long term, it ensures that your idea can still work.
When starting a new project, try to set aside time for minimal foundational setup. Do not gloss over this important step.
It can take you further.