The History of every major Galactic Civilization tends to pass through three distinct and recognizable phases, those of Survival, Inquiry and Sophistication, otherwise known as the How, Why, and Where phases. For instance, the first phase is characterized by the question 'How can we eat?' the second by the question 'Why do we eat?' and the third by the question 'Where shall we have lunch'?
― Douglas Adams, The Hitchhiker's Guide to the Galaxy
The Hitchhiker's Guide to the Galaxy is a marvelous book. Douglas Adams had the fabulous talent to cover his philosophical thoughts under ridiculously hilarious stories. The human race has indeed gone through the how-why-where phases. Or, more accurately, our world is (sadly) a mixture of populations in these three phases simultaneously.
This insight applies to many other things on a micro level, like how web development evolved.
Initially, there were so many not-yet-well-resolved fundamental problems:
- How to serve dynamic content?
- How do I build complex UI in a modular way?
- How to manage CSS and avoid conflict?
- How do I scale my backend to millions of users?
- How to build a site that loads consistently fast across the globe?
- How to resolve the performance hotspot in my database?
With the rapid creation of languages, libraries, and tools, everything soon has a solution, and survival is no longer a problem. People then started to ask more inquiry questions:
- Why do I have to spend time organizing CSS files?
- Why should I have decoupled the frontend and backend if I'm only building a monolithic app?
- Why do I even need APIs if I'm their only consumer?
- Why do data stores need to be relational?
- Why can't the frontend directly manipulate the data store?
Although these questions are not as profound as searching for the meaning of life, they keep challenging the existing best practices and conventional wisdom, breeding a new generation of tools and patterns, and the new inventions are then rechallenged until we find that there don't seem to be a conclusive best answer to any concrete question.
In the sophistication phase, developers accept the fact that there is no single best answer to most questions. Each tool at our disposal is more or less an actualization of some combination of assumptions, preferences, and compromises. They're all pretty good and all pretty bad at the same time. Instead of having endless debates about who's the winner, people can finally peacefully and pragmatically evaluate their problem at hand and their personal preferences and make a sensible decision about which tool to use.
Our nerves are no longer easily aroused by biased accusations and oversimplified statements like:
- React was a mistake.
- Vue is good for non-English-speaking teams.
- TailwindCSS adds complexity, does nothing.
- Relational databases don't scale.
- X should be rewritten in Rust.
P.S., We're building ZenStack, a toolkit that supercharges Prisma ORM with a powerful access control layer and unleashes its full potential for full-stack development.