The trusty little button
What happens when you click a button a 100 times and it does the same thing every time you click it?
You start to develop a relationship with said button. You now trust the button to do the thing it did before when you click it the 101st time.
This trust is a fundamental pillar of great user experience. Stability, consistency and reliability are the properties that establish it. It’s relatively easy to achieve with an app or site that is built with these properties in mind. Unfortunately, it’s even easier to lose it again: If the button fails just once in the 100 times you clicked it, it will dramatically lower the trust (your confidence) you’ve put into it. If it fails twice or more, your trust is gone and back at zero.
The web, my favorite stray cat
I love the web, it’s unlimited potential, openness and quirkyness. So what’s the big deal?
But here’s the deal. Just because we’ve learned over our the course of our career how to deal with the abuse doesn’t mean our users should. Users expect a stable, reliable and safe environment and deserve it. Full stop. And this is why the web is failing as every-day app platform.
Stability: Oh, the irony
Every time I advertise the web, I highlight long term stability as one of the core benefits you get for free, thanks to W3C standardization efforts. And it’s true – browser vendors do their best to stay backwards compatible with existing features and APIs so old websites continue to run. But very often it’s not the long term support that’s failing – it’s the actual design of the APIs.
Just look at requestAutoComplete (there are countless others but this is my “favorite”), the web’s pathetic attempt at fixing the lack of payments APIs. It attempts to auto fill credit card details you’ve stored previously into credit card forms, and in my own limited trial works for two in three forms. Imagine your credit card would fail every third time you go out for dinner. Imagine the “Buy” button in the Play Store failed on every third attempt.
And the saddest part is that there is no way to fix it. You just cannot fill every random credit card form on every customized website and expect it to work every time. It’s the design that’s wrong, not the implementation.
Reliability: Our own damn fault
We take it for granted that our users will adapt and learn how to use a new UI when we just auto-updated their app after a browser reload. It’s so easy to not think about the fact that you’re performing a major update when it’s just a reload away. On native platforms every upgrade is (historically) painful to the developer and carefully established and accounted for, offering tooltips and rail guides to help with the UX transition.
We also don’t unit test. Ever. We fail to provide a graceful offline experience. We try to replicate system UIs and fail, just slightly, only to move into the uncanny valley and freak out our users even more. Feel guilty yet? You should.
All this is not the platform’s, but our own damn fault. But the hacked-together platform we rely on certainly didn’t offer a golden path for us.
The silver lining
As depressing as all of this sounds, there’s a silver lining. The web offers us all of the capabilities to get our shit together and get back on track. We can be better than this. We can build apps that are a joy to use and that our users trust in their daily lives. Even offline and on spotty connections with the help of Service Worker.
Let’s win the trust our users back.