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.
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.
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.
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.”
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.
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?
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.
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.