Build Escalators, Not Elevators
Progressive enhancement is still important. This simple analogy from Jake Archibald perfectly captures why we should design for graceful degradation.
Christian Heilmann re-purposes a Mitch Hedberg observation to relate to progressive enhancement. Basically, when an elevator fails, it's useless. When an escalator fails, it becomes stairs.
We should be building escalators, not elevators.
This metaphor cuts to the heart of what makes systems resilient. Elevators are marvels of engineering ... they're faster, more efficient, and can handle more people. But when they break, they become completely unusable. You're stuck.
Escalators, on the other hand, degrade gracefully. When the motor fails, the steps are still there. The handrails still work. It's not as convenient as it was, but it's still functional. You can still get where you're going.
In web development, this translates to building experiences that work even when JavaScript fails, when the network is slow, when the user has an older browser. The fancy interactive features are the "escalator motor", nice to have, but not essential for basic functionality.
I've seen too many "elevator" websites that completely break when one small piece fails. A JavaScript error renders the entire page unusable. A CDN outage makes nothing work. A slow network connection turns the site into a blank screen.
The escalator approach means starting with a basic, working version, semantic HTML that loads fast and works everywhere. Then you layer on enhancements: CSS for styling, JavaScript for interactivity, modern features for capable browsers. Each layer makes the experience better, but none of them are required for the core functionality.
This isn't about being conservative or avoiding new technology. It's about understanding the difference between essential and optional. It's about respecting your users' time and circumstances.
The escalator mindset applies beyond web development. Good systems in general are designed to fail gracefully. They don't collapse completely when one component has problems. They degrade in predictable ways that still allow people to accomplish their goals.
When things go wrong ... and they always do ... you want your users to be able to walk up the stairs, not stand trapped in a broken elevator.