One of the first things you learn in Human-Computer Interaction is that software is used by people to help them accomplish some task. That’s why we call them users, because they’re using software. That is the primary goal of any piece of software, to help complete a task. A word processor helps a user write a document. An mp3 player helps a user listen to their music. A web browser lets a user access the Internet. And so on.

When I say “friction”, I mean anything about a piece of software that prevents a user from completing their task. This could be anything from confusing menus to popups to extra, unnecessary steps to do something.

The problem with friction is that it’s subjective. You can’t remove those complicated menus because your application does complicated things and you need them. Even if you make a better, simpler interface, existing users don’t want to change. You’d be creating friction for only some of your users, like the new Microsoft Office “ribbon.”

What I want to talk about is friction that’s self-serving - friction that software chooses to introduce. I had a conversation about Appirater yesterday with a coworker. It’s drop-in code that asks a user to rate your application. It let’s you be clever about it so that you only get long-term, repeat users being prompted, so your ratings increase. The problem is, no matter when you ask a user to rate your app, you’re still interrupting them. And that creates friction.

There are other types of this friction, too. Things like prompts to update software, prompts to update your security settings, or prompts to “take a tour of our new features!” (I really hate prompts.) I think that these sorts of frictions are mostly avoidable. Why not just download the new software and install it for me the next time I quit the app (a la Chrome)? Why not have sane security settings by default? Why not make new features easy to discover and learn on their own?

The answer, most often, is laziness.

As software creators, every time we add friction to the user experience, we’re failing to do our job.

Please submit typo corrections on GitHub