There's a recurring pattern when I look back at the history of web development.
1. Somebody figures out how to make dynamic websites using a collection of technologies
This is the birth of the LAMP stack.
This is certainty.
Before this there was uncertainty about how to build a dynamic website, now we know how.
2. Many people figures out how to improve individual pieces of the stack.
Examples include swapping out :
1. Apache for Nginx,
2. MySQL for Postgres,
3. PHP for <insert your favorite language>
and so on.
This is complexity.
Instead of a specific tech for each layer of the stack, we now have multiple options.
3. Somebody figures out how to aggregate disparate pieces into a single framework
This is the birth of the Rails web framework.
The complexity is now compressed and we have a nesting doll situation.
On the surface, we think of it as choosing one thing -- the framework. Apparently, the complexity is reduced.
But, if you take two steps back and look at the whole thing, some of the inherent complexity is unavoidable and is simply encapsulated in the core of the framework.
The database layer is still there. The code layer is still there. What happens when we choose a framework and its default options is that we have effectively outsourced the decision of choosing the specific tech for certain layers to the framework.
We have simplified some of the decision-making process by choosing this framework.
It's okay and even good that we outsource some of the hierarchically lower level decisions to the framework. This is progress.
Now we can save our energy to make decisions on the higher level stuff like what features to build for which kind of users so that they can receive what kinds of benefits.
4. Which then inspired other similar MVC frameworks in other languages
This means more options for your average developer. And more options mean more complexity.
5. As the field matures, we see different sized products built for different scales leading to more invention
Twitter started with Rails and then ditched it because their scale is now on another level.
This is where we see big companies like Google, Amazon, Facebook, and the like invent new layers and new specific tech. Now there's no longer 1 possible stack.
You now have serverless, containerization, and hybrids in between.
The complexity that used to be contained inside the stack has now crept out. There's no longer a one-size-fits-all stack.
6. To cope with the complexity, we accept there's no longer a one-size-fits-all stack
We now need a meta-framework of fitting the right stack to the right purposes or scales.
The pendulum will swing back to certainty again. Because our human minds need a way to handle the complexity without being overwhelmed.
This is not mainstream yet. But I expect this to happen.