October 25, 2016
From nczonline.net, with love.

Is Progressive Enhancement Over?

Hi everyone,

Recently, Nolan Lawson wrote a post theorizing that perhaps the time for progressive enhancement was over. He focused mostly on whether or not the "no JavaScript" experience is still meaningful in today's world and argued that network connectivity is the biggest problem for most users (mobile and wifi users). If that is the case, he continued, then we should be pushing as much as we can to the browser and JavaScript so we can deliver a decent user experience where we aren't sure if we'll ever have a connection back to the server. A fair argument given recent history.

In response, longtime progressive enhancement proponent Aaron Gustafson wrote a response, in which he explained why he doesn't see progressive enhancement as diametrically opposed to approaches like offline-first. His primary point is that while service workers help with repeat visits, the first visit isn't well served, especially if the service worker script fails to load or execute. He echoes the old saying about progressive enhancement that it's not about the technology, it's about the user experience.

Those who have followed me for a while will know that I'm also a big proponent of progressive enhancement. It's been my go-to approach for over a decade and I've seen it work to improve existing web applications, build a solid foundation from scratch for new web applications, and help solve a bunch of problems when single-page, JavaScript-only apps started to include progressive enhancement concepts. Over the years, I've had to debate whether this is the correct approach or not several times. At the end of the debate, I'm usually left saying a couple of things.

First, that progressive enhancement isn't about having a JavaScript vs. JavaScript-disabled experience, it's about providing the best possible user experience throughout the entire lifecycle of the web application. Yes, native apps sometimes show up blank because they fail to load data from the server, but that doesn't mean it's a good user experience or that we should say it's acceptable for web applications. If we can do better, why wouldn't we?

Second, progressive enhancement isn't a strict prescription, it's a way of thinking about the software you're building. It doesn't say "no JavaScript" or "yes HTML," specifically. Instead, it encourages you to think more deeply about the problem you're trying to solve, and guides you towards solutions that work for the maximum number of users. 

These two points are why I believe progressive enhancement is as relevant today as it has ever been. The only difference now is that we have more options for improving the user experience than ever before.

Be well.


Missed Past Newsletters? Catch up!

I've received a lot of great feedback about the newsletter since it began, and a lot of you have mentioned really enjoying the essays, but it's hard to find them after a newsletter has been sent. To help with that, I've created an ebook called NCZOnline Newsletter Year One that contains all of the content from the first 12 months of the newsletter in an easy-to-read format. Each purchase helps pay for the costs of providing this newsletter, so your support is greatly appreciated.

Recommended Links

Taking PHP Seriously (article)
Depending on who you ask, PHP is the language web developers love to hate or can't live without. Beginning as a simple language for developing web applications, PHP grew to power some of the largest web applications in the world. But there are downsides to PHP and it is continuing to evolve. This article gives an overview of the problems with PHP and how new developments like HHVM and Hack move towards solving those problems. We switched to use HHVM at my last job and found a bunch of bugs and improved performance along the way.

Progressive Web Apps with React.js Part 2: Page Load Performance (article)
The second in a series of articles from Addy Osmani digging in to building progressive web apps with React. This article focuses on page load performance and talks, in great detail, about how to optimize page load performance. While the discussion centers around React, React Router, and Webpack, there are takeaways for building without these tools as well.

Why Does the Washington Post's Progressive Web App Increase Engagement on iOS (article)
iOS doesn't fully support progressive web apps yet, but then why does the Washington Post's PWA increase engagement on iOS? It turns out that is has less to do with the technologies being used and more about the approach to building the application. In the end, the PWA is much more performant than the old mobile site, proving the "progressive" part of PWAs is indeed accurate.

Moment of Zen

"Revisiting code you wrote months or years ago is like seeing an old friend. Sometimes you share a laugh, sometimes you wish you'd never met."
- Grady Booch (on Twitter)

Recommended Book

It doesn't matter what you're trying to do, establishing useful habits are a key part of achievement. The Power of Habit explores why habits are so powerful and how you can use them to accomplish your goals. Discussing the science behind habits and then relating them to real-life stories of success gives this book a more approachable feel than those that simply cover research on habit forming. You'll find enough information to make positive changes in your life through habits and be more aware of how your habits are already affecting you.
This newsletter is subscriber supported!
There are many ways to support it: Leave a tipbecome a patron, or buy a book.

Recently on NCZOnline

The ECMAScript 2016 change you probably don't know
Compared to ECMAScript 6 (also known as ECMAScript 2015), ECMAScript 2016 was a minor update to the language specification for JavaScript. This was due to the decision that ECMAScript editions would now move to a yearly release cycle, effectively just a snapshot of all the features that were ready. As such, most resources list only...

ES6 module loading: More complicated than you think
One of the most long-awaited features of ECMAScript 6 is the formal definition of modules as part of the language. For years, JavaScript developers have struggled with organizing their code and needing to decide between alternate ad-hoc module formats like RequireJS, AMD, and CommonJS. Formally defining modules as part of JavaScript will eliminate a lot...

Mimicking npm script in Node.js
I'm a big fan of npm scripts[1] and have been using them in all of my projects instead of a standalone build system. The feature I like the most from npm scripts is the ability to run command line executables that are installed in your project's node_modules/.bin directory. That allows you to, for example, install...

Books I've Written


Love this newsletter? Hate it? Have suggestions for how to make it better? When you subscribe to the newsletter, you can just reply to send in feedback.

Ready to subscribe?

Join over 2,000 others and subscribe to get the newsletter delivered to your inbox every other Tuesday. 
If you enjoy this newsletter and would like to support my work (including the newsletter, my blog, my books, and ESLint), please consider becoming a patron. I provide a lot of free content and your support allows me to spend more time doing so, and there are great rewards for patrons.
Copyright © 2016 Nicholas C. Zakas, All rights reserved.

unsubscribe from this list    update subscription preferences