Published: May 03, 2024
Every article about Progressive Web Apps reads the same. Faster load times. Offline access. Push notifications. Install to home screen. Boost engagement by 2–5x. Revenue goes up.
I've been shipping PWAs for clients for years — e-commerce stores, SaaS dashboards, internal tools, content platforms. After that many projects, the patterns are clear. Some of the promises delivered. Most of them didn't. And the features that actually moved the needle are not the ones you'll find in the headline of a typical PWA article.
Most PWA content online is written by people who've never built one. They're rewriting the same Google case studies from 2018. This post is what I'd actually tell a client who asks "should we build a PWA?" — based on what I've seen repeat across many projects, not one cherry-picked success story.
The short answer: yes, but probably not for the reasons you think.
Strip away the marketing and a PWA is a website that registers a service worker and ships a manifest.json. That's the entire technical bar.
The service worker is a script that runs in the background and intercepts network requests — this is what enables caching strategies, offline fallbacks, and faster repeat loads. The manifest is a JSON file that tells the browser how to handle "Add to Home Screen" — app name, icon, theme color, display mode.
Everything else — push notifications, background sync, app-like transitions — is optional. And the support for those optional features varies wildly by browser and platform.
If you're on Next.js (which is where most of my client work lives), adding PWA support is a configuration layer, not a rebuild. Tools like Serwist (the successor to the now-deprecated next-pwa) handle the service worker registration and caching setup. You're not adopting a new tech stack. You're adding a config file and a build plugin.
That distinction matters because it changes the cost/benefit calculation entirely.
This is the 80% of PWA value that nobody writes clickbait about.
Service worker caching strategies — stale-while-revalidate for API responses, cache-first for static assets, network-first for dynamic content — make returning visits near-instant. The browser serves cached resources while fetching fresh ones in the background. The user sees the page immediately.
Across client projects, the pattern is consistent. On one e-commerce site, implementing service worker caching dropped repeat-visit load time from roughly 2.5 seconds to under 400 milliseconds. That's not some exotic PWA capability — it's smart HTTP caching with a programmable layer. But the PWA framework gives you the structure and the API to do it properly, consistently, across every route.
The downstream effects are real: Lighthouse performance scores climb, which maps directly to Core Web Vitals, which maps to search ranking. On sites where I've added service worker caching, the Lighthouse performance score typically jumped 10–20 points on repeat visits. That's a measurable SEO input.
This is the one feature I'd recommend to every client, regardless of whether they care about anything else on the PWA checklist. The cost is low (a Serwist config and a manifest.json), the benefit is immediate, and it compounds over every returning user.
This is the feature people picture when they hear "PWA." The user taps an install prompt, the site appears on their home screen like a native app, and it launches in a standalone window without the browser chrome.
In practice, it works well for a narrow set of use cases: internal tools, dashboards, and niche e-commerce with loyal repeat customers — sites where users visit daily or weekly and benefit from fast, focused access.
It doesn't move the needle for content sites, blogs, marketing pages, or anything where users arrive via search and leave after one session. There's no install behavior to capture because there's no repeat-visit pattern.
The install prompt UX is also awkward. It varies by browser, it's not customizable without extra work, and most users don't intuitively understand what "installing a website" means. You can build a custom install UI to improve this, but it's additional development for a feature with low adoption.
Across the client sites I've built PWAs for, fewer than 2% of users installed to home screen. For the ones that did, session duration and return rates were significantly higher. But 2% of your traffic is a niche within a niche — meaningful for the right product, irrelevant for most.
The pitch sounds compelling: "Users can browse your site without internet!" The question I always come back to: when was the last time you opened a website while offline on purpose?
Across every client site I've tracked over the years, offline page views accounted for less than 0.5% of total traffic. The custom offline fallback page — you know, the one you spend time designing with a friendly "you're offline" message — is seen almost exclusively by developers testing it during QA.
The exception is real but narrow: field-work applications where connectivity is genuinely unreliable. Construction management tools, medical data entry in rural clinics, delivery driver apps. If your users are regularly in areas without signal, offline support matters. For a standard website, an e-commerce store, or a SaaS dashboard used on stable WiFi, it's a checkbox feature.
My recommendation: implement a basic offline fallback. It's roughly 20 lines of service worker code and it prevents users from seeing an ugly browser error page. But don't let anyone sell you a three-sprint project around offline capability for a site that's used on broadband.
Web push notifications have a permission-grant rate of roughly 5–10% according to PushEngage's industry benchmarks. That's the ceiling — the percentage of users who even agree to receive them. Of those, most tune them out or actively block them within weeks.
The problem isn't the technology. It's the reputation. Years of spammy "Allow notifications?" prompts on every site trained users to click "Block" reflexively. The permission prompt itself has become a signal to leave.
On one client site, we implemented push notifications for new product alerts. Open rates started at around 12% and decayed to under 3% within two months. We eventually turned the feature off. The brand damage from annoying people outweighed the marginal conversions it drove.
Compare this to email: higher open rates, better segmentation, user-controlled frequency, works across every device, and no browser permission dialog. For most businesses, email still wins as a re-engagement channel. Push notifications are a worse version of email with a worse user experience around consent.
This section deserves its own heading because it's the single biggest factor that most PWA articles conveniently skip.
Safari on iOS deliberately limits PWA capabilities. Push notifications weren't supported until 2023 — years behind Chrome and Firefox. Background sync still doesn't work. Service worker lifetime is aggressively limited. Web apps added to the home screen run in a sandboxed WebKit instance with restrictions that don't apply to native apps from the App Store.
In early 2024, Apple went further: they threatened to remove PWA home screen support entirely in the EU as a response to the Digital Markets Act, before reversing course after backlash from developers and the Open Web Advocacy group. The reversal was welcome, but the threat itself tells you exactly where PWAs sit in Apple's strategic priorities: they're tolerated, not supported.
If your audience is 50%+ iOS — and most B2C sites are — you're building a PWA where half your users will experience it as a slightly-faster-than-normal website with none of the app-like features. No home screen presence. No real push. No background updates.
This isn't a technical problem you can engineer around. It's a platform politics problem. Any honest PWA recommendation has to address it head-on.
After years of building these, here's the decision framework I actually use:
When a client project fits the "build it" criteria, here's the minimum viable PWA I add. Not the feature-complete dream from a Google I/O talk — the version that delivers the real value without the bloat.
The stack:
manifest.json with proper icons, theme color, and display: "standalone"What I skip:
That's it. The full implementation is usually a few hours of configuration, not a multi-week project. The caching alone justifies the time on every site that has returning users.
PWAs are a useful tool, not a revolution. The caching and performance layer is genuinely valuable — I add it to almost every Next.js project I ship. Everything else is situational, and most of the situational features underdeliver for the average website.
The honest answer to "should I build a PWA?" is almost always: add service worker caching to your existing site and skip the rest unless you have a specific, evidence-based reason to include it.
The worst PWA outcome I've seen isn't a failed implementation. It's a client spending months of budget on offline support and push notification infrastructure that nobody ends up using — because someone pitched the full feature set instead of the part that actually works.
I wrote a more optimistic take on PWAs a while back, before the pattern became this clear. Consider this the update.
Architecture decisions like this — what to build, what to skip, where the real ROI lives — are what we talk about in The Agentic Architect Lab. It's a community of senior devs shipping faster with AI, making real trade-offs on real projects, no hype. If that sounds like your kind of conversation, come join us.
