Progressive Enhancement: Zed’s Dead, Baby
I’ve got bad news: Progressive enhancement is dead, baby. It’s dead. At least for the majority of web developers.
The religious devotion to progressive enhancement was useful in a time when web development was new and browsers were still more like bumbling toddlers than the confident, lively young adults they’ve grown to become.
Something happened a few years ago in web browser land. Did you notice it? I didn’t. At least not right away.
At some point recently, the browser transformed from being an awesome interactive document viewer into being the world’s most advanced, widely-distributed application runtime.
Developer communities have a habit of crafting mantras that they can repeat over and over again. These distill down the many nuances of decision-making into a single rule, repeated over and over again, that the majority of people can follow and do approximately the right thing. This is good.
However, the downside of a mantra is that the original context around why it was created gets lost. They tend to take on a sort of religious feel. I’ve seen in-depth technical discussions get derailed because people would invoke the mantra as an axiom rather than as having being derived from first principles. (“Just use bcrypt” is another one.)
Mantras are useful for aligning a developer community around a set of norms, but they don’t take into account that the underlying assumptions behind them change. They tend to live on a little bit beyond their welcome.
Many proponents of progressive enhancement like to frame the issue in a way that feels, to me, a little condescending. Here’s Daniel Mall again in his follow-up post:
Lots of people don’t know how to build sites that work for as many people as possible. That’s more than ok, but don’t pretend that it was your plan all along.
To fetch data, it opens a socket to a Java backend that streams in data transmitted as protobufs. It then analyzes and recombines that data in response to the user interacting with the UI, which is powered by Ember.js and D3.
Probably a short movie illustrates what I’m talking about:
What we’re doing wasn’t even possible in the browser a few years ago. It’s time to revisit our received wisdom.
<blink> tag at the same time—talk about joining the future.)
Don’t limit your UI by shackling yourself to outmoded mantras, because your competitors aren’t.
From Daniel’s post:
If those are important parts of your demographic, fine. Run the numbers. But I do take issue with Daniel’s last claim here, about Edge networks.
If you’re a proponent of progressive enhancement, I encourage you to really think about how much the browser environment has changed since the notion of progressive enhancement was created. If we had then what we have now, would we still have made the same choice? I doubt it.
Thanks to Yehuda Katz for reviewing this draft. Tell me how mad I just made you: @tomdale