TL;DR: PWAs are nice, but won’t become a unique development technology to converge to, due to performance and UX issues that are very hard to solve completely at OS level.
I read more and more on the Web nowadays about PWAs. That is, progressive Web apps. Actually, in my opinion, just Web sites that identify themselves as “apps”, which can therefore be downloaded and then run locally on client side, even offline, and optionally accessing local OS features and data, being linkable into the user’s home screen as well.
Google and Microsoft seem to be pushing the “new” development concept aggressively. Even Apple follows the trend, and although they are late, and don’t want to implement all “cache-ability” that the other two actors embraced, at least they appear to be willing to invest some resources in this area too. Then what’s this all about?
Technically, this way developers could write their core code just once, and then package it into multiple types of apps, such as supporting Windows (UWP) and macOS on desktop (or HoloLens), Android and iOS on mobile devices, or even node.js for cloud services like those required to develop Alexa voice skills, and classic Web sites targeting all browsers too, as needed. Of course, there will still be some technology adapting and packaging code to be written, but the core of the app will already be using a unique code base!
What PWAs seem to add to what we already have are just these two important things:
- app manifest: ability to identify a Web site as an “app” so that browsers allow the end user to “install” the app and link it to their home screen, and optionally app stores may even automatically find them through crawlers and list them for better discoverability (instead of being URL-based like classic Web sites);
- service workers: a new layer between the Web server and the client app code that provides “cache-ability” and offline support.
While these concepts allow end users to finally mix Web apps and native apps seamlessly, and developers to deploy to more targets with less platform adapting code, the big problems remain, however (besides not all OS vendors adopting the concepts above in the same way, i.e. standards are often so… interpretable, or even missing):
- The UI will still be run inside a WebView like framework within the host OS, simply because vendors can’t probably adapt their infrastructures to directly map DOM elements with ease and instead there will still be a browser-based adapter in between, triggering the same poor UX and further inefficency.
So in my opinion, PWAs are not going to ever be a true success unless the major OS vendors twist their cores to match the Web technologies and this means also the Web technologies must be twisted to provide support for better performance while remaining within standards boundaries.
Which essentially means a time when apps on all platforms could be written using the same, common, yet powerful programming language (such as an ECMAScript infinity, combining TypeScript, C#, Swift, and Kotlin, if you allow me to be a little sarcastic) and app infrastructure layers from all vendors to become so similar that OS cores themselves would accept full standardization – the same way as browsers do today (after a long war, though) – and this feels to me as very hard to get, given the fact that major players have different business strategies and probably none of them allows collaboration on low level software abstractions as it would be needed…
I therefore can’t help worrying that the PWA dream may actually be a nightmare instead; and I won’t follow this trend until I’d see concrete moves in the two directions indicated above. I’ll just keep an eye open and we’ll see what happens; who knows, maybe I misunderstood everything and the dream will eventually come true?… (Nah!)
We can instead learn more than one development framework and become technology agnostic. We’d think outside any single tool’s boundaries, accept diversity, and embrace controlled code duplication; sometimes we just can’t live without it, and it’s fine!