Essential Content
Home / Resources

5 UX mistakes that are pushing your users’ buttons

Some products just work, while others make you want to throw your phone across the room.

There are apps like Netflix and Spotify that remember the exact moment you paused an episode or a song.

Then there’s the video call app that logs you out two minutes before the most important meeting of the week.

Or the free trial that never makes it clear whether cancelling now will make you lose access immediately or not. And the moment you decide to go, the cancel button gets buried under a pile of offers trying to guilt you into staying.

That’s user experience (UX): how smoothly a product lets you get things done, and how well it handles the moments when things go wrong. A lot of it comes down to words: the buttons, error messages, form hints and empty screens that tell you what’s happening and what to do next. Designing those words is what a UX writer does.

In my 15+ years as one, I’ve seen one mistake behind most of these moments: designing for an imaginary user. Someone calm, patient, in a good mood, and already familiar with the product. Real people aren’t like that. They’re tired, late for work, rushing to pick up a kid with a fever, or opening the app for the very first time.

This article covers five moments where designing for that imaginary user backfires (and sends real ones to the competition), and how to design for the real ones instead.

Cracking a joke in a high-stakes moment

Every product breaks sometimes. The connection drops, a page won’t load, or the app just stops working. When it does, you have to tell the user, and that message is an error page. It’s also where a lot of teams like to show a little personality.

A friendly “Oops” or “Aw, Snap!” is cute the first time. But after 10 minutes typing in everyone’s passport details to book your family’s flights, it’s infuriating.

Chrome's “Aw, Snap!” message won't land well when you've lost 10 minutes of your work.
Chrome’s “Aw, Snap!” message won’t land well when you’ve lost 10 minutes of your work.

So is a funny error page always a bad idea? Not at all. Taco Bell’s has a taco that trips and spills the beans, and it works, because there’s not much on the line. The worst that can happen is you head back to the homepage to find the menu or your nearest restaurant.

Taco Bell's clumsy taco works well because the stakes are low.
Taco Bell’s clumsy taco works well because the stakes are low.

For most products, the stakes are higher. The same error can hit someone mid-payment, or halfway through opening a bank account. No one finds a wink and a mascot funny at that moment.

How to write a useful error page

Before you write an error, picture where it could land at its most stressful. When the stakes are high:

  • Drop the joke.
  • Own the situation and say plainly what happened.
  • Reassure the user. If their data is safe, this is the perfect moment to say so.
  • Give a way forward: a retry button, a way to contact support, or where to go next.
GOV.UK owns the problem, confirms your answers are saved for 30 days, and points you to help.
GOV.UK owns the problem, confirms your answers are saved for 30 days, and points you to help.

Keeping users guessing

Fill in a form, get something wrong, and the field turns red with a short message. This is validation copy: the line that tells you the data you entered is in the wrong format. The job seems simple, but plenty of products get it wrong.

Telling people what’s wrong seems like the obvious move, and sometimes it is. If you mistype your email, “Enter a correct email address” is enough, because everyone knows what an email address looks like.

This approach falls apart when the format isn’t obvious. Take a postcode, a website address, or a phone number: there’s more than one way to write each. Does the postcode need a hyphen? Does the website need www. or http://? Why is your number wrong when you’ve checked it three times? The only way forward is to keep guessing or give up.

Saying what's wrong without showing how to fix it isn't helpful.
Saying what’s wrong without showing how to fix it isn’t helpful.

Show the solution, not just the problem

Good validation shows users the format you expect.

  • Show the correct format using dummy data: “Enter a postcode like SW1A 1AA”, or “Use this format: www.example.com”.
  • If there is a limit, show it. “Enter up to 20 characters” is more useful than “Password too long”.
A good validation message makes the right format clear.
A good validation message makes the right format clear.

Leaving users in the dark

It gets worse. Some validation messages don’t tell you what went wrong at all.

You submit a form and get a message saying something is wrong, but you have no idea what. It’s like a kid singing “I know something you don’t know.” Funny for a five-year-old, but infuriating when you’re trying to log in to your bank to pay the bills.

This message is unhelpful and it puts the blame on the user.
This message is unhelpful and it puts the blame on the user.
This message lists three possible causes, so users may reset a password that was never wrong, even when the problem is on the system's side.
This message lists three possible causes, so users may reset a password that was never wrong, even when the problem is on the system’s side.

Put the error in context

Show users where they went wrong, so they can fix the right field fast.

  • Point to the exact field.
  • Make it clear whether it’s their input or the system at fault.
This message goes a step further and reminds you which login method you usually use.
This message goes a step further and reminds you which login method you usually use.

Manipulating users into opting in

Every so often you’re browsing a website and a pop-up appears, offering a discount in exchange for your email. If you were about to buy something, that’s a nice bonus. But if you’re just looking, and the only way to close it is a button that makes you look stupid for saying no, that’s a completely different story.

This is confirmshaming: turning a simple no into a guilt trip. To decline an offer you never wanted, you have to click a button that makes you say something you don’t mean. It is built to shame you into signing up, but it mostly just puts you off the brand.

Declining 15% off here means saying you don't like saving money.
Declining 15% off here means saying you don’t like saving money.
Nobody wants to pay full price, yet that's what you have to choose to decline the offer.
Nobody wants to pay full price, yet that’s what you have to choose to decline the offer.

Let people say no without the guilt

A good opt-out is plain and neutral, and it takes no for an answer.

  • Write the decline as a straight choice. “No thanks” is enough.
  • Never put words in the user’s mouth or make them admit something untrue.

Underestimating empty states

When you first sign up for an app, almost everything is empty. No messages, no tasks, no invoices. These are empty states: the screens you see when there’s nothing to show.

They’re often a new user’s first impression of the app, yet many products treat them as an afterthought. If those early moments are unhelpful, new users get stuck. If they’re done well, they guide the person into the app, make onboarding feel easy, and get them to keep using it.

"You have no files yet" doesn't tell the user what files are for or how to add one.
“You have no files yet” doesn’t tell the user what files are for or how to add one.

An empty state isn’t only about absence. Depending on the moment, the same blank screen can play very different roles:

  • Celebratory, when someone has finished all their tasks.
  • Introductory, when they’re opening a feature for the first time and need to know what it’s for.
  • Instructional, when they can add or create something to fill the space themselves.
  • Neutral, when there’s nothing to show and nothing they need to do right now.
  • Explanatory, when they’re waiting for something that still isn’t there and need to know why.
In an empty project, Linear gives users two ways forward: creating an issue or a document.
In an empty project, Linear gives users two ways forward: creating an issue or a document.
In an empty table, Notion takes a practical approach and offers templates, so users don't have to start from scratch.
In an empty table, Notion takes a practical approach and offers templates, so users don’t have to start from scratch.

Never leave users at a dead end

Empty states are more than blank screens. They’re an important part of the user’s journey, and a good one always gives people a way to move forward. Because empty states come in different types, there’s no single line that fits them all. So whenever you write one, think about:

  • where the user is in their journey
  • how much information they need
  • how they feel in the moment (unsure what to do, or happy they’ve finished their tasks)
  • what they can do next

These give you a basis for what to say and which action to point to, so the user can continue their journey in your app.


The imaginary user would chuckle at your error joke, guess the right postcode format on the second try, sign up rather than admit they hate saving money, and work out a blank screen on their own. Real users won’t. They get stuck, annoyed, and eventually go somewhere else.

Design for the person who’s tired, rushed, or brand new to your product, and most of these problems never happen. That’s what keeps people using your product, coming back, and choosing you over a competitor.

Learn more about Essential Content

Excited about the possibilities?

The first step is a quick discovery session with one of our senior consultants.