The P-word

Remember "progressive house"? As in, the music genre? It emerged sometime during the 90s and increasingly became synonymous with "repetitive songs that last 8 or more minutes with a 6 minutes build up to a 30 seconds chorus which repeats for the rest of the song".

Or, as quoted from Dave Seaman on the Progressive House Wikipedia entry: "it had gone the same way as progressive rock before it. Pompous, po-faced and full of its own self importance. But basically was really quite boring"

Also, to fully appreciate progressive house, you needed a decent sound system or the drumbeat got lost, muddled with the rest of subtones, and the echoes and reverbs were conflated with the main lead in what resulted an awful amalgamation of things fighting for protagonism. A very confusing cacophony.

While I liked the spectacular pads and the synths, I was more into happy melodic pop songs. They would maybe build up in 15 seconds, and go all in with a 💥BANG💥 of harmonies and fun. Almost instadelivering feel-good moods and all sorts of positive vibes. You could listen to pop songs literally almost anywhere, from crappy earphones to headphones to fancy Bang and Olufsen set ups (although if you have a B&O system are you allowed to have fun with it or just use it for austere minimalist making-a-statement decoration?). It always sounded good, and in various degrees of better or worse, depending on your particular setup.

This might be the most awkward introduction ever to the subject I wanted to cover, but the three things start with a P, and I kind of like the letter P because it's how my one of my last names starts with too. But I'm digressing. Sole, what is the third thing?

The third thing is...

(DRAMATIC... PAUSE... FOR... SUSPENSE)

Progressive Web Apps. Or PWAs as they're sometimes affectionately called.

Don't tell me you didn't see it coming. It would pamper too much to my non-existent thriller writing skills that I tricked you into reading this far and you didn't already guess who was behind the curtain holding a deadly weapon, so to speak. And I'd get into writing thrillers and that would be really awkward.

ANYWAY... articles about PWAs them are multiplying lately. It's like late Spring finally happened and the seeds are finally sprouting. Cool. 🌱 I like plants a lot (see, another thing that starts with P). There's a new article, or more, every week: Ada's, Alex's, Andrew's.

Now, my name doesn't start with an A, but I wanted to write something about this whole new "world" because all I have to say won't fit in a couple of snarky tweets, and fitting my sophisticated thoughts in a "tweetstorm" won't make it easy to reference let alone read, but too easy to take things out of context. And I have a few things to say.

So - this is my personal opinion. It has nothing to do with my employer:

The Web is meant to adapt to where it's run, i.e. it can render or behave differently depending on the user agent capabilities, on the network capabilities, what have you.

Meaning that if I am accessing it from a rural location with a slow network and an even slower phone, I can get to the point without any bells and whistles. But if I'm sitting on a fancy Aeron chair and using a mega fancy fiber connection with my three monitor setup and an immersive sound system, I can get bells, whistles and even COWBELL if possible (everything always needs more cowbell).

If you build a website correctly, you will detect when some user agent's features are available, and use them to provide me with a richer experience. For example, a website could be made to work offline if the user agent has support for Service Workers. If it doesn't, then it's still a website we can keep accessing.

Let me repeat this: it's still a website and it still works. It also has been progressively enhanced with additional features.

Another example: you can build a website which assumes a small screen by default, and so the initial, bare minimum CSS and content are very lightweight and load very quickly on all small, underpowered devices. People accessing it can get their info and do their tasks very easily and are so happy that they will want to share it with their friends. And if my friend sends me a link to this site using their mobile browser and I access it in a 40" monitor, I don't get an insulting message saying I can only see this on a mobile device. What happens is that I get a different layout because additional CSS for bigger screens has been loaded, and it's so fast I didn't even notice. Perhaps a custom typeface was loaded on the background, and the next time I access the site it all looks so fancy and gorgeous. The experience has been refined, again progressively.

Can you imagine being recommended a funny movie, then you get yourself to the cinema and when you are going to sit on the chair a little elf suddenly pops up and declares you are not allowed to watch the movie because once you didn't laugh at some silly joke and your sense of humour is not good enough? And it goes on to put a blindfold on you and earmuffs. You're then prevented from enjoying the movie while all your friends who comply with some arbitrary requirements can enjoy it.

Isn't that silly? Well, this is the same that is happening when people artificially instigate limitations on how they build things for the web, in the name of some arbitrary trend.

Some years ago it was the "single web page app" trend which apparently gave free license to turn perfectly valid static microsites into a heavy weight bag of JavaScript framework with JavaScript-based HTML-kinda templates to render blocks of text with transitions between them (ah, if only CSS had transitions and easings. If only HTML had permalinks and anchors. If only we could access the navigation API... if only...). So if you were accessing this with a slow network, it would often time out and you got literally nothing. Whereas if it was static content and you accessed it with a slow network, additional requests would time out, but you still got the basic content because the browser is quite clever. Voila, you still can perform the task you meant to perform by accessing this website. It just wasn't progressively enhanced.

These days it's the "progressive web app" trend, which apparently gives free license to turn a perfectly valid website into a heavy weight bag of JavaScript that only works under certain arbitrary circumstances, locking everyone else out of accessing the content in a disgusting exercise of pretentious snobbery. Or what is even more repulsive, some people are penalising certain websites and browsers according to whether they "comply" or not with an arbitrary list of "progressive requirements":

  • If a website doesn't come with an icon to add it to a home screen, then it's not a "web app". But what if I run this on a device without home screen? What if I like empty home screens? Why are browsers so smart know-it-alls but then cannot choose a default icon?
  • If a website has just a static content page which is dutifully cached offline by a service worker and complies all the rest of arbitrary requirements, then it's a "web app". A web app that does nothing.
You can't even picture the absolute brain shock I experience when I hear people say that so and so web browser doesn't support PWAs based on so and so browser not implementing feature X, for example, "add to home screen". Setting aside the fact that these are just user agent behaviours, and have nothing to do with the ability of the browser as a runtime for said app to run, I wonder what kind of pill did they take to be able to say the "Web" part of "Progressive Web Apps" while also pretending like the "Web" word never escaped their mouths (or fingers, where applicable), and expecting everyone else who hasn't taken the pill to also pretend like "Web" never happened. They just want us to hear "Progressive Apps", while they keep on banging the PWA drum. P! W! A! P! W! A! (but please hear P! A! P! A!) Turns out that "webs" are meant to run on "browsers", whatever the type of browser we're talking about. Ooops. Progressive Web Apps work, for better or worse, on any browser. But we're repeatedly told otherwise. This is ridiculous and isn't helping anyone. People building websites feel they have to "build PWAs" or, if they have lived previous trends, they have to spend copious amounts of time explaining why this is a bad idea. People using these websites don't understand what is going on anymore and are leaving them when faced with a full page doorhanger that bounces them off because their device is not good enough to access this luxurious new thing. So let's stop for a moment and take a deep breath and try to be a bit sensible here for a second:
  • The Web, by design, is progressive
  • If your website is not progressive by default, you're doing it 'wrong'
  • There are various levels of 'wrong'. Most of them can be fixed by working with the browser, not against the browser.
  • PWA are used to justify "apps" that just work under a certain number of constraints. This is entirely against the concept of any progression at all. This is not fixable. The only way to fix it is to stop doing it.
  • Also: you also probably don't need an app, but a website

Unfortunately, building websites, or apps, or any type of software the right way takes time and experience. Sorry about that if you were told otherwise.

You can make things easier for yourself and for the users of your products by expecting the unknown when building the website/app/what have you, and adding "layers of sophistication" where possible.

Building stuff any other way, demanding that users satisfy a certain level of sophistication before they can even be allowed to access your shiny creation is not progressive, it's Pretentious.

Pretentious Web Apps.

And I don't like them one bit. So let's stop with this collective delusion and at least call them by their name.

Let's build websites. Or pop songs. Make people happy and able to get on with their lives. Let them access the websites with their phones, their computers, their TVs. Let them listen to pop songs with their phones, their computers, their TVs, anything—like the web. Let them use whatever they want to or can use.

https://twitter.com/timberners_lee/status/228960085672599552

I am happy that we're giving additional features to browsers and empowering web developers to deliver experiences that weren't possible before unless you built native apps (e.g. offline stuff). But I am terribly unhappy that we need to rebrand websites into something else and confuse people in the meantime. And I'm even unhappier that we're taking the worst of the native paradigms and bringing it to the web, which is meant to be universal.

😒

We need more talk about individual APIs and about combined overall best practices, and less about limiting our websites and our reach by choosing to build for a small subset of users and branding it a "PWA".

Please build websites.

https://twitter.com/supersole/status/735372938107584513

PS Yes, there are exceptions. You might have a game that requires interaction X or Y, you might have a very specific use case for needing a big screen, etc. If you can think of exceptions, instead of explaining them to me, go have them in mind when you build your next big thing. Most use cases are not exceptional, and that's OK. Get on with it, and thanks.