For most people in the first world though, you're probably right.
For most people in the first world though, you're probably right.
Most of my users have old phones and bad connections. I've tried this JS-heavy bundle-first approach. It doesn't work.
The solution is way simpler than local-first. Just shrink every page and interaction. Fewer requests, little JavaScript (if any at all), low latency. Use static pages when possible. Even the oldest phones on the most remote connections can usually deal with a sub-50kb page all-in. It feels like people forget how simple web interactions can be.
I'm sure local-first can be great for highly interactive tools like Figma. But the grandparent is right. Most sites don't need anything close to that level of complexity.
Small pages and interactions are good, sure, but I don't really see a tension between this and local first. My homepage is static HTML (minus google analytics) and it works offline.
The multi-mb JS bundle is also a red herring. The only multi-mb JS bundle I ever worked with did not work offline at all. Feel this is orthogonal.
Also connectivity for people is usually something that changes with time. You have it in the farmhouse, but not out in the field. You have it at the office, but not on the road. So downloading stuff when you have connectivity and still being able to read/write what you don't is the real aim of the game here.
And you're right about how connectivity changes over time. But how many people are on their bikes when applying for unemployment insurance? I just don't think most business apps benefit from this level of offline support. There are of course use cases for this! But it's not the common case.
And you're right, if it's OK to not be able to read or write during a network partition - then you don't need this. But I would encourage everyone out there to figure it out first as bolting it on after the fact is a real challenge.
My point is that if you're in danger of losing your internet connection, you're not going to be able to reliably get that initial JS bundle anyway.