Progressive Enhancement

Back in September, the web got a bit riled up about progressive enhancement. Zed's Dead by Tom Dale sparked the debate. I'm all for javascript-driven web development, but I think there's a right way to go about it, and I think if we dig a little deeper, p.e. can lead us in that direction.

"Does it work without javascript?"

I hear this over and over. But the fact is that almost nobody turns off javascript today, and yet the common notion is that progressive enhancement is just another way of saying 'does it work without javascript'. No wonder p.e. has lost relevance with today's web-developers.

This is why we need to redefine what progressive enhancement really means, and why it's important today, even with javascript driven web-apps. I don't think it's about javascript at all actually, I think it's about a philosophy that underpins the very foundation of the internet.

Let's step into our time machine for a second

It's 1964 and you just received this Memorandum For Members and Affiliates of the Intergalactic Computer Network from one of your colleagues, a fellow named Paul Baran.

This memo describes how distributed networks are more reliable than centralized networks, meaning distributed networks are harder to destroy. Why is that the case? because in a distributed network, "complete reliance upon a single point is not always required". In other words, distributed networks seek to avoid a single point of failure.

The big idea

You can guess what this intergalactic computer network is called today. The whole point of the internet was to create a digital communications network that avoids a single point of failure. That is the foundation that the internet is built on.

A new approach

This is what I think progressive enhancement should mean in web-development today: Does your website try to avoid a single point of failure?

Granted, this is not a question you can answer by clicking a checkbox in your browser, and there are many factors to consider. Does it work if only some of the javascript fails? does it work without a network connection? does it work with a slow network connection? The idea is that if one thing breaks, it shouldn't break everything else.

This is where I think javascript-driven web development does a disservice to the philosophy of the internet. It let's something as benign as a missing comma kill your website. In traditional desktop software platforms, this is the norm, But the web gives us the opportunity to do better.