Usability heuristic

Clarity

Every word, label and visual on a screen should mean one thing and match what actually happens when the user acts.

Clarity Two versions of a plan picker. In the unclear one both plans look the same, a badge is cut off and the big button says Skip. In the clear one the yearly plan is visibly selected, the badge reads Best value and the big button continues with that plan. Mixed signals Yearly $48 Best va… Monthly $6 Skip Continue 1 2 3 One clear reading Yearly $48 Best value Monthly $6 Continue with Yearly Skip 1 2 3 1 Which plan is selected? 2 Can you read the label? 3 What does the big button do?
The same plan picker twice. On the left nothing shows which plan is selected, the badge is cut off and the big button is Skip. On the right each of the three has one reading.

Clarity is the plain test of whether a user can read a screen, understand it, and correctly predict what each control will do. On this site it covers four failures: text that can't be read (tiny, faded or truncated), labels that contradict the visuals (a tip says "plus" but the button is a pencil), mixed signals (two plans styled the same, a skip button styled as the primary action), and expectation mismatch, where the result differs from what the screen promised.

There is no single paper behind it. Jakob Nielsen's usability heuristics ask designs to "speak the users' language" and keep words and actions consistent so users never have to wonder what they mean. Nielsen also splits text usability into three layers: legibility (can you see the characters), readability (how complex the words and sentences are) and comprehension (do you draw the right conclusion). WCAG 2.2 sets a measurable floor for legibility: a 4.5:1 contrast ratio for normal text and 3:1 for large text.

Onboarding and paywall screens get seconds of attention. If the yearly plan doesn't look selected, if the price line is pale grey, or if a chip is cut off with an ellipsis, people either guess or leave. A clear screen costs nothing extra and removes the most common reason for a wrong tap.

How to use it

  • Read every instruction against the screenshot it describes: icon names, button labels and counts must match exactly.
  • Give the selected state of plans, chips and toggles a visible difference beyond color, such as a border, check mark or filled background.
  • Check secondary text (prices, plan descriptions, captions) against the WCAG 4.5:1 contrast ratio and never truncate an option the user has to choose between.

Watch out

  • Styling the option you want users to avoid as the strongest button, or making the one you want look like plain text, sends a mixed signal that users will follow.
  • Deliberate vagueness around price or renewal terms is not a clarity slip but a dark pattern.

Related

Clarity in real products 22 working · 30 not

Measuring app: Three jobs in one line Measuring app (working) Three jobs in one line "Measure, calculate, and level" tells you what Pro covers. Julius: One question, one box Julius (working) One question, one box "What do you want to analyze today?" with an example placeholder makes the first action obvious. Buffer: Explains the empty table Buffer (working) Explains the empty table "We didn't find any hashtags in the posts sent during the chosen date period" says why, not just "No data". Hex: Linked feature names Hex (working) Linked feature names Terms like "Semantic models" and "Threads agent" link to explanations instead of staying jargon. Cube Cloud: Empty state that explains Cube Cloud (working) Empty state that explains Says what a deployment is and what you can do with it before asking you to create one. Bricks: How it works in one line Bricks (working) How it works in one line "Import your data, describe what you want, get a dashboard" sets up the three steps. Neon: Exact numbers Neon (working) Exact numbers "80% (153.6 hours) of the free plan's 191.9 compute hours" leaves nothing to guess. Supabase: Specific CTA Supabase (working) Specific CTA "Upgrade to Pro" names the plan, so there is no mystery destination. Supabase: Date and consequence Supabase (working) Date and consequence "ended on 22 Oct, 2024" and "requests will respond with a 402 status code" are concrete for developers. Peliqan: Optional field explained Peliqan (working) Optional field explained "Optional, only set if this connection will be used as a DW Target" tells you when you can skip it. Canva: Clear confirmation Canva (working) Clear confirmation The headline removes any doubt that the cancellation worked. Linear: One clear primary action Linear (working) One clear primary action A single filled Continue button ends the step. Linear: Open Linear Linear (working) Open Linear A single primary button closes the flow. Amplitude: One question Amplitude (working) One question The modal asks a single question, so the demo starts fast. Google Cloud: Subject says it all Google Cloud (working) Subject says it all "Important notice: Your trial is over" is plain and hard to ignore in the inbox. Semrush: Names the limit you hit Semrush (working) Names the limit you hit "You've reached your free 10 requests per day limit" says exactly what happened. Semrush: Says why you're blocked Semrush (working) Says why you're blocked "Too many devices logged into one account" is direct and not accusing. Rows: Says what and what to do Rows (working) Says what and what to do "We've just released a new and improved version... Click to reload." Tinybird: Says what it is Tinybird (working) Says what it is "A tool for visualizing your time series data". Tinybird: One-line model Tinybird (working) One-line model "Plans per Workspace. Only pay for what you use." Holistics: Definition first Holistics (working) Definition first "Dataset is a collection of data models" explains the term before asking. Holistics: Use case in the subhead Holistics (working) Use case in the subhead "Embed it using iframe. Share it dynamically across your customer base" says what you're buying. Dazzle AI: "Plus" that is a pencil Dazzle AI (not working) "Plus" that is a pencil The tip says "tapping the plus", but the button shows a compose pencil. Viktor: Truncated suggestions Viktor (not working) Truncated suggestions Every chip is cut off with "…", so you can't read the goal before choosing it. Slack: The focused button is the skip Slack (not working) The focused button is the skip "Don't Invite Anyone" is red, primary and keyboard-focused, so Enter skips. The action Slack wants (Back) is the weak option. Printer app: Faded tiles unreadable Printer app (not working) Faded tiles unreadable "Take Photo" and "Text" descriptions are tiny and washed out, so half the mockup is noise. Measuring app: No plan looks selected Measuring app (not working) No plan looks selected Weekly and Yearly look identical, and $49.99/year shows no savings against $9.99/week. Math Zen: Same line twice Math Zen (not working) Same line twice "Get a gentle daily reminder to practice math" appears as subtitle and again inside the toggle. Math Zen: Half the tiles are filler Math Zen (not working) Half the tiles are filler "24 exam prep paths" is concrete, but "Keep growing, every month" says nothing. Photo editor app: Toggle repeats the choice Photo editor app (not working) Toggle repeats the choice "Free trial enabled" duplicates the plan selector, so it's unclear what switching it off does. Cursor: Copy and options disagree Cursor (not working) Copy and options disagree The text says "Upgrade for more usage", but the main controls are spend-limit amounts. Preset: Label says nothing Preset (not working) Label says nothing "User agreement" is the visible label, while what you agree to is in grey text below. OpenAI API: Unlabeled marker OpenAI API (not working) Unlabeled marker A tick on the bar near 80% has no label, so you have to guess it's the alert. OpenAI API: Second $120 number OpenAI API (not working) Second $120 number "Usage limit" repeats $120 right below the budget, without saying how the two differ. Cube Cloud: Jargon headline Cube Cloud (not working) Jargon headline "An active, intelligent digital data team" is abstract next to a concrete demo. Cube Cloud: Get Started ends in a waitlist Cube Cloud (not working) Get Started ends in a waitlist After clicking "Get Started", the main action is "Join Waitlist". Snowflake: Vendor copy, no specifics Snowflake (not working) Vendor copy, no specifics "Cloud-native analytics platform empowering business users" says nothing about trial length or what connecting creates. Snowflake: "Ready", with homework Snowflake (not working) "Ready", with homework The headline says ready, but users still have to add IP addresses to a Snowflake allow list. Databricks: "You should have a new tab" Databricks (not working) "You should have a new tab" Hedged copy admits the redirect may have failed; "here" is a weak fallback link. Count: Half-disabled caching Count (not working) Half-disabled caching "Result caching is not enabled for this workspace" while "Cache results for 5 minutes" looks selected; it's unclear what is active. Peliqan: One field, two meanings Peliqan (not working) One field, two meanings "Password / private key pass phrase" with a long hint; an auth-method choice would be clearer. Upsolve AI: Price shown, but you can't buy Upsolve AI (not working) Price shown, but you can't buy Growth lists $1000/month yet the only button is "Let's Chat", which feels like a bait. Linear: Free plan or Business trial? Linear (not working) Free plan or Business trial? "You are on the Free plan" and "Current plan" on Free contradict the active Business trial next to it. Retool: Three one-person orgs Retool (not working) Three one-person orgs Each org has "1 member" and two are named after a personal email, so it's unclear which is the real team. Julius: Unexplained mode chips Julius (not working) Unexplained mode chips "Default", "Tools" and "Advanced Reasoning" sit under the box with no hint of what they change. Linear: No connect button Linear (not working) No connect button The only action is Continue, so it is unclear whether GitHub is connected or just explained. Podcastle: Basic vs Essentials Podcastle (not working) Basic vs Essentials The heading talks about Basic, the button about Essentials, so plan names need decoding. Tinybird: Placeholder looks like content Tinybird (not working) Placeholder looks like content "Insert your Data Source description here..." reads like text that needs editing. Tinybird: Same CTA on two plans Tinybird (not working) Same CTA on two plans Both Build and Professional say "Get started for free", so it's unclear what you sign up for. Holistics: Empty fields, no examples Holistics (not working) Empty fields, no examples Host and Database Name have no placeholder or format hint. Peaka: Copy-pasted descriptions Peaka (not working) Copy-pasted descriptions RDS, Redshift and BigQuery all say "Optimize your data management process." Peaka: Subtitle doesn't fit Peaka (not working) Subtitle doesn't fit "Pick the plan that works the best for you" sits under usage meters, not plans.