This morning I went to write an article outlining a few tips about implementing a progressive web app (PWA). But when I went to introduce the topic, I again encountered what was the hardest part about the whole topic in the first place: I have a really hard time describing what a progressive web app actually is.
I'm not posing this question from a perspective of ignorance. We implemented a PWA for dev.to, if you go to this site on Android Chrome, you should see the a prompt to install our app.
So what is a PWA? Here's what Google's official introduction says:
Progressive Web Apps are user experiences that have the reach of the web, and are:
- Reliable - Load instantly and never show the downasaur, even in uncertain network conditions.
- Fast - Respond quickly to user interactions with silky smooth animations and no janky scrolling.
- Engaging - Feel like a natural app on the device, with an immersive user experience.
This new level of quality allows Progressive Web Apps to earn a place on the user's home screen.
Those all seem like qualities we already had before embarking on any of this, so what's a progressive web app? Google's continued use of the term "quality" in describing things leaves me with a ton of confusion. It really seems like they want PWA to be a general term that doesn't imply any particular implementation, and have it be focused around the user experience, but all I see over the web is confusion as to what they mean by these things. My website is already "engaging" and "immersive", does that mean it's a PWA? They mention these "App Install Banners", which seem like the point, but if that's what makes it so, why do they bury that info? Is PWA an abstract pattern, or is it about the installing part, is it both?
Perhaps PWA is meant to be inclusive of a lot of technical approaches, so they need to be vague. This might be okay if it were just the source docs that were this way, but I feel like alternative introductions and how-to's scattered across the web have latched on to this vague language and the confusion has proliferated.
It's socially hard to say "hold on, I don't understand any of that", because you don't know if everybody else just gets it and you're the stupid one. In the PWA space, I really do feel like there's a lot of people nodding along assuming everyone else understands what a PWA is and they must be missing something. You know, imposter syndrome.
Communication is difficult, naming things is the hardest thing, and the Chrome team is working hard. And I really like these folks, so I just want to express that I personally feel like some of their tech releases are really hard to grok. I don't think this is limited to PWA. AMP (Accelerated mobile pages) followed a similar trend of "wait, what are these for? what are you doing with these?"
Google plays a central role in this confusion because they are the organization most strongly attempting to blur the lines between the open web and their platform. Google blurs the line between this is a tool to interact with Google products and this is a direction or philosophy for web development. It can be hard to follow.
Again, I say this from the perspective of having already built a PWA, I think. I think we're doing it for all the right reasons. I think it's working because about a third of visitors who see the notice to install it do so. This is a high number.
But I'm still not sure about any of this. I will surely write that article I meant to write in the first place as soon as I wrap my head around all these things.
Many times as a mobile developer I have to work on apps without the API ready that was crucial for the feature I was implementing. Either the backend was developed by another team that was not entirely in sync with us or our backend team had no chance to implement those endpoints earlier. For this reason, I was not able to satisfy the Definition of Done but it does not mean that I have implemented the UI only.