I’ve been thinking a lot recently about the clash between idealism and pragmatism. I’ve been working on the Web for many years, and for much of that time I’ve tried to do things the ‘right’ way; standards-compliant, validated, mobile-first, responsive, accessible, clean, extensible, etc. I’m definitely not claiming that I’ve always succeeded, but the intention and effort was there.
In the past few years the explosive growth of the Web, and the devices used to access it, has meant a parallel increase in the power and complexity of the tools needed to build it. And of course we want to make sites that are fast and light and perform competitively with native apps. But I think in this sharp focus on the technical side of building, we risk losing sight of why we are building, and who for.
Late last year I attended Front End London, where James Higgs, the Technical Director of Made By Many, gave a great talk on trade-offs; when it’s okay not to be perfect, when PHP is better than Python, when the ‘right’ approach has to make way for the ‘good enough’. His talk really had me nodding along in agreement, and it contains a quote I just love:
Your personal productivity, or pride in the cleanliness of your work, are not legitimate goals in themselves.
Last week, David Bushnell wrote When can a website be over 1mb?, in which he challenged the prevailing ‘no heavy sites’ orthodoxy, refuting criticism of an experiential site for the Nintendo game, Majora’s Mask:
It’s impossible to deliver the kind of visual fidelity Majora’s Mask offers without fat content. How do you spark the imagination — rekindle childhood memories — with some boring “flat design” bollocks? The load is worth it.
Which brings us to Flipboard. This week they announced their Web version, and in an introductory blog post they explained that they found the DOM too slow to achieve 60fps scrolling on mobile, so reimplemented it using react.js and
canvas. Essentially it turned their main page into a single image, in the process losing the abilities to select text, search in the page, or – much worse – be readable by assistive technology. On Hacker News, Nick Williams very neatly articulated my opinion of the result:
[This shows] the flexibility and power of React’s component and render model. It’ll probably have a big impact on game UI for the web. [But] doing this on a content-driven site is absolute madness. It breaks so many things, and throws away so many fundamental tenets of the web. By the time they’ve reimplemented everything they’ll have probably lost all performance wins. The fancy animations are a minuscule gain for such a great loss of functionality.
I’m not going to go to deep into why I think this is such a bad idea — Faruk Ateş does that much better in his post How Flipboard Chose Form Over Function For Their Web Version — but I will say that it’s symptomatic of the way that, for some (many?) developers today, technical idealism is valued over pragmatism. The obsession with 60fps has lead Flipboard to completely reimplement the DOM, but without any of the things that the DOM is good for, reintroducing many of the problems that we fought against for many years in the form of Flash.
This is like making your cargo boat go faster by not carrying any cargo.
I should add — as if it needed to be said — I’m not arguing for doing a shoddy job of coding, or for not caring about file size and load times, or against the pursuit of the best possible scrolling performance. But the quest for technical perfection can’t come at the expense of a solution that’s best for everyone. An ideal is a worthy end goal, something to strive for; but to reach it, it’s vital to take pragmatic steps.
Update: Nice balanced piece by Christian Heilmann: Flipboard and the “mobile web” dream… I should have made it clearer in my article above that I do appreciate the technical effort that went into react-canvas; it’s impressive work, it’s just inappropriately applied.