I'm guessing you're not a front-end developer so forgive me if I'm wrong, but what you're saying is absurd. It is hard.

I suspect that we'll have to agree to disagree on that. I'd say building a real-time control system for an aircraft is hard. Writing safety-critical firmware for a medical device that must have literally no serious bugs because if you miss one then people could actually die is hard. Accurately modelling global weather patterns is hard. Building a database that can support Google or Facebook or global financial systems is hard. Writing networking algorithms that can manipulate hundreds of gigabits per second of network traffic on today's commodity hardware is hard. Performing voice recognition and natural language processing to allow a computer to respond to verbal commands in everyday language is hard.

In contrast, writing a relatively small, primarily text/form-based UI as a front-end to simple database is not hard, whether as a desktop app, or a mobile app, or a web app. It just isn't. There are no out-of-the-ordinary performance requirements. No-one is going to die or lose a million dollars per hour if it has a bug. There's no fundamental problem to solve that requires the development of new algorithms. It's like 2/10 on the scale of hard software problems.

It's interesting that you started your post by talking about assumptions underlying frameworks changing and you kept coming back to the 5 year time scale. As I see it, the fundamentals of HTML, CSS and JS haven't really changed very much in two decades. Likewise, the patterns we see in modern web and mobile UIs -- things like data binding, and MV*, and bundling updates together so you only do one expensive re-render -- have been widely used in desktop software for decades as well. So I'm wondering what fundamental assumptions could have changed so much in just a few years that a JS framework would no longer be useful so quickly, and I'm thinking maybe they were bad assumptions in the first place.

Of course a few of the details have evolved over time. And of course it's nice that there are now JS libraries to support some of those patterns as a ready-made tool so we don't have to set them up ourselves. Still, we've been using the same ideas, even in front-end web development, since long before Angular or React was on the scene. Implementing those patterns in JS using general programming principles isn't difficult, nor is it particularly time-consuming, given that you probably build these kinds of tools once per project and we're talking about projects large and important enough to have a multi-year lifespan. Much of the JS community for the past few years has just been kind of flailing around learning the same old lessons all over again, with varying degrees of success.

So I'm puzzled by this recurring idea in discussions about JS frameworks that all we could do before we had the likes of Angular and React was store data in the DOM and use arbitrarily large amounts of trivial jQuery. That is not a world I recognise. No doubt quite a few sites/apps did work like that; there are plenty of low-skilled people who write software, after all. But plenty of other sites/apps were built by real software developers who used real software design skills, just like any other programming project. Right now, I'm working professionally on multiple web front-ends that predate most or all of these JS frameworks, yet have been doing their job and adapting to changing requirements successfully for longer than anything written in those frameworks has been around. They each have their own considered software design, and they still use techniques like publish-subscribe, bundled rendering updates, separate models, and so on.

So as I said at the beginning, I'm afraid we'll just have to agree to disagree. I can't accept the premise that building a typical UI that is mostly text/forms and talks to a database is difficult to do without a framework. Countless programmers have been doing it on numerous different platforms for decades. It's just that a significant part of the JS community only just noticed and started borrowing the same ideas.