On Progressive Enhancement

Yesterday I decided to daintily dip my toes into the pond of opinion writing with a piece subtly titled “Fuck You.”

The intentionally over-the-top piece was a departure from the thoughtful, well-reasoned pool of recent posts about progressive enhancement. That was the point, and I’m glad it raised some eyebrows.

On Empathy

The irony of being called an ideologue about progressive enhancement is that progressive enhancement is ultimately about empathy, flexibility, inclusiveness, and open-mindedness. It’s about understanding that we don’t have total control and that we aren’t able to predict the future.

I default to progressive enhancement because I can’t pretend I have all the answers.

On Compromise

The Web, like anything else in life, is full of compromises. Are there times when progressive enhancement simply doesn’t make sense? Absolutely.

A few years ago I helped work on a mobile web project bringing the NikeID shoe customization tool to mobile devices. Our plan was to support to as many as environments as possible. More environments. More users. More shoe sales. More money. Simple as that.

The customizer tool required HTML5 canvas to render the interactive environment where the user would change the color of the shoe by directly tapping on it.

NikeID Mobile Web

As it turns out HTML5 canvas support was spotty at best: nonexistent on a lot of platforms and absolute crap on the Androids of the day (2.3 just came out at the time). These Android devices would pass a Moderizr test (“Sure, of course I support canvas!), but in reality it would draw a hideous white-noise-gross-pixel-line around the parts of the shoe and the performance made the experience entirely unusable.

The fallback could have been to let the user tap a color swatch, render a new image of the shoe on the server, then send it back. However, the shoe image generation took ages, and constantly sending new PNGs down to users who could be on a data plan seemed like a very bad idea.

What did we do? The company decided to white-list iOS devices because at the time it was the only platform that could handle the experience.

Sometimes a product legitimately depends on a piece of technology in order for it to work properly. Sometimes WebGL is required in order to play an immersive game where you fly around some crazy fantasy world. Sometimes you don’t have a product unless WebRTC is supported.

So is progressive enhancement a cure-all? Jeremy Keith succinctly and correctly answers: “It depends.”

On Intention

There’s a difference between intentionally depriving someone an experience, and unintentionally depriving them an experience.

I can guarantee I’ve deprived plenty of people a usable experience. But it’s not my intention to do so. I know I need to get better with web accessibility, and I’m guilty as charged pushing off good accessibility practices when I’m mad dashing to the finish line.

Don’t assume that an imperfect, janky, awkward experience isn’t worth interacting with.

You’d be surprised what lengths people will go to complete a task. I’m reminded of this every painful time I have limp my way through an airline checkout process. People write entire novels on their phones. I read all of Lord of The Rings exclusively on my phone. Ebay sells 3 or 4 Ferraris a month from their mobile apps. Etc. Etc.

By defaulting to inclusiveness rather than making assumptions about what users will or won’t do, we’re able to support more environments, even ones that haven’t been realized yet. It’s also great from a business standpoint.

When I was inherited some Nike mobile site projects, I was looking through analytics and noticed a significant amount of traffic coming from Sony PSPs.

Sony PSP

It makes sense, right? Kids play sports games on their devices and feel inspired to be the next great athlete. They go to Nike.com to browse shoes, then plea with mom and dad to buy them the latest sports gear.

If Nike’s site was inaccessible on this device, or if they relied solely on JS-based analytics (PSP’s browser is a crappy Netfront browser), they likely wouldn’t have thought of this potentially useful demographic.

Now I’m not sure if Nike ever did anything about those stats, but by casting a broader net by supporting more environments you have a better chance of reaching new markets and discovering new user insights.

In 2011, 20 people tried to sign up to a New Zealand bank from their PS3. Who knew, right?

On Time and Money

We’re all under the constraints of time and money. We’re under the gun to constantly ship, and your project manager is freaking out about some Gantt chart. You have 40 bugs to finish before this sprint is up. What are you to do?

There is a difference between “support” and “optimization”.

That sentence is now in all my contracts. It just might save your life (or maybe just a week or two of IE testing).

It is literally impossible to optimize for every browser, device, user configuration and situation, even if you had infinite time and infinite budget. That’s why it’s essential to understand that crucial difference between “support” and “optimization.”

Our jobs require us to get something out the door, so we have to pick and choose our battles. We have to make educated decisions on what environments to optimize for based on audience, stats, project goals, time, budget and more.

But that doesn’t give us a green light to wall out every other browser, device and situation. While we’re certainly responsible for our bottom lines, I believe it’s our responsibility as web designers to preserve the universality of the Web. If that means leaving a browser quirks be, then so be it. Build to standards and lay down your burdens.

People are interacting with your websites and apps from devices that didn’t exist at the time you made them. The Web landscape is a constantly shifting beast, and we’ll continue seeing more capable devices, as well as the coming zombie apocalypse of low-end good-enough Web-enabled devices.

When it comes to the Web, the more backward-compatible you are, the more forward-compatible you’re likely to be.
-Josh Clark

We can still support the Web while simultaneously optimizing for our current situation.

On Working Together

I’ve said it before and I’ll say it again: This aint religion. This is web design.

At the end of the day, we’re all here because of this wonderful thing called the Internet. We could be doing about 3,000,000 jobs that are ridiculously worse than this.

There’s so much to learn and it’s essential to constantly challenge our assumptions, our techniques, and ideals. It’s absurd to believe there’s One True Way of doing things in a medium that’s only 20 years old.

There’s plenty to learn from each other, even from people who you might not agree with. But at the end of the day, we’re all on the same team shaping the future of the medium that allows all these wonderful conversations to happen.


  1. Agree with everything here. If your site is really reaching people, it’s going to be reaching them on devices and under circumstances that wouldn’t normally be anticipated. I guess that’s on e of the costs of having a successful site.

    You’ve hit on a great point. This industry is only twenty years old. Some people have been here from the very beginning. But web design is only just now entering it’s Golden Age. This is the launching point, not the end of road, as far as browser support.

    As good-enough browsers roll out to more and more devices that would not have been used for browsing a generation ago, those websites that offer a baseline experience that doesn’t suck will rise to the top.

    Our industry is about supporting communication, business, and every other industry as the Web of Screens becomes the Web of Devices and the Web of Things. Building a baseline experience and building on top of that for devices that support it shouldn’t be viewed as a burden on our time, but we should see it as our professional obligation towards our craft and the millions of people who depend on it.

  2. You’re kind of a roller coaster, you know that? Before yesterday, I had the utmost respect for you and your work. Your post made me question that, but only for 24 hours.

    Evidently you’re the awesome, well-thought web developer I thought you were. Thank you for this post and restoring my faith in you.

    Oh, and you’re 100% right about all of this.

  3. Until now I’d been looking at it the wrong way. I’d been thinking of it as something that sticks to a specification or feature or something related to usability or backwards compatibility (like responsive design), but this article had certainly helped get a broader view on the topic of Progressive Enhancement from different perspectives.

    And I really had to thank you for telling that “There is a difference between support and optimisation”.

    Time for some redesign.

  4. Benjamin Milde

    I just read yout posts a hour ago and now stumbled across exactly the stuff your talking about. I’m surfing on newest firefox with js on. But I can’t search on kickstarter, because, some stuff they use is hidden in some analytics, advertising or widget js, which is blocked by ghostery. That’s insanity to rely on such things to load, to get one of the key features of the site working.
    I had the same issue on the apple site a few weeks ago, where you can’t buy stuff, if you blocked their analytics.

  5. Jake Gibbons

    I think I balked at the epic list of things/browsers you declared to be support-necessary. I could not reconcile that list with the budgets I have to work with. These sentences opened me up though—emphasis on the second,

    ‘There is a difference between “support” and “optimization”. That sentence is now in all my contracts.’

    A big theme for me lately has been informing/evolving client thinking, but I wasn’t applying it to our conversation. That was my mistake. We’re entering the zombie apocalypse, and clients need to—but don’t want to—understand that pixel perfect for everyone doesn’t exist anymore.

    We still have the standard statements surrounding supported browsers and devices in our SOW’s these days, but I’ve been pushing to make that a conversation point, not a small print legal clause. I want to change the concept from supported browsers, to targeted vs supported. After pondering this and your last point I also want to directly challenge them with the decision to decide what warrants support, and ask them to commit to a list and cost of support. I think what you’re proposing is idealistic, and a good ideal, but I need that to be the client’s commitment before it is mine. My work is constrained by more than just my skill-set, it’s also constrained by my allocated time.

    I’ve opened my mind to making the word support mean more to my clients, but also to broadening the application of it in my work. Thanks for the follow-up, you’re still the man, and I’m sorry for any undue friction Friday morning.

  6. Yes, it’s “impossible to optimize for every browser, device, user configuration and situation”. Which is exactly the reason why web development should start with semantic markup and progressive enhancement. Then one doesn’t have to worry nearly as much about “optimization” and “backwards compatibility” when you do it the right way.

  7. Candice Hartung

    About your 9.6.13 post…

    I am so impressed. I’ve heard many of the same comments and it’s very difficult to move someone from the logic that “there’s not that much to be gained by including those people.” Your bluntness reflects an attitude that will help us move into a better, more inclusive future and away from an arrogant sorting of who counts and who doesn’t. And anyone who reads the news should know, it’s not just about the web.

    Progressive enhancement requires a mind-flip. Many see it as a nice idea without understanding the importance of the core concept. Polite conversation convinces those who already agree. Sometimes a slap in the face is the only thing that can turn a head and change perspective.

    On 9.6.13, a man of integrity wrote about equality, and our role as web designers to promote it or pretend it doesn’t matter. It does matter and we should be indignant when it is treated as merely a “practical” issue.

    Thank you Brad.

  8. Great article Brad!

    In my case “it depends”. Most of the the time I have one or two weeks to get something done which will be online for a few days.

    Let’s be honest, we know in the end of te day business want ship as quickly as possible and unless you’re building one product where you can iterate things get tough.

Comments are closed for this post. If you've got something to add, feel free to reach out on Twitter.