Strip the words out of almost any app and you are left with boxes and lines that mean nothing. The labels, buttons, errors and empty screens are where your product actually talks to people. This guide teaches you to write that talk on purpose: clear, short, kind, consistent, and ready for other languages, so a product you build alone can still sound like it was made with care.
Explain why words carry most of an interface's meaning, and why content should come before layout (understand)
Spot vague buttons, blaming errors, placeholder-only fields, concatenated strings and confirmshaming in any app (analyze)
Write a voice chart, a product glossary and a tone map for your own product (create)
Rewrite errors, empty states, confirmations, notifications and permission prompts so they say what happened and what to do next (apply)
Cut any paragraph by a third without losing meaning, and judge readability scores for what they are (evaluate)
Organize every string in your code so it can be audited, edited and translated (create)
Warm-up: what do you already notice?
Before any theory, test your eye. You have used hundreds of apps, so you already have opinions about their words, even if you have never named them. Answer the three questions below quickly. Wrong answers are useful: they show you which chapters to read slowly.
Warm-up 1
A note-taking app shows a dialog: "Are you sure?" with buttons "Yes" and "No". What is the biggest problem?
Labels like Yes/No force the reader to translate the question into an action. A title like "Delete this note?" with buttons "Delete note" and "Cancel" can be answered by reading the button alone. You will practice this in Buttons and actions.
Warm-up 2
Which error message is best for a failed card payment?
(a) says what happened, who did it, and two ways forward. (b) is a code for developers. (c) is vague and repeats a step that will fail again. (d) blames the person and may not even be true. The pattern is in Error messages.
Warm-up 3
You write the code "You have " + n + " new message" + (n>1?"s":""). What breaks first when you translate the app?
Building sentences from pieces is the most common localization bug. Arabic has six plural categories, Russian three for whole numbers, and German moves verbs to the end. See Numbers, dates and other languages.
How to study this guide
Read one Part per sitting. Do the labs while you read, not after. Keep a plain text file called words.md open next to your product: every exercise in this guide adds something to it (a voice chart, a glossary, rewritten errors). By the end, that file is your product's content style guide.
Part one
Why words, and how people read them
These four chapters set the foundation: words are design material, people scan rather than read, plain language serves experts and novices alike, and a consistent voice with a flexible tone makes a product feel like one person made it. Every later chapter applies these four ideas to a specific piece of interface.
1
Words are the interface
Taught by Torrey Podmajersky, with Sarah Richards and Kinneret Yifrah
Most of what a person needs to understand in your product is carried by words, so writing them is design work, and it should happen first, not last.
Try a thought experiment on the app you used most today. Replace every word with a gray bar of the same length. The layout survives. The colors survive. The icons survive. But you can no longer tell which button sends and which deletes, what the empty screen wants from you, or why the form refused your input. Now do the opposite: delete all the styling and keep only the words, in a plain list. Ugly, but still usable. That asymmetry is the whole argument of this guide. Words carry meaning; visuals carry hierarchy and mood.
The mechanism is simple. Icons and layout are good at saying where and how important. They are poor at saying what and why. A trash-can icon says "delete", but not delete what, and not whether it can be undone. Only words carry consequence, reason and instruction. Since most decisions in software are about consequence ("will this lose my work?"), most of the decision-making load sits on text.
Remove the words and the interface stops meaning anything. On the left you can see three toggles and two buttons, but not what they do. The red button could delete your account or sign you out. The words on the right do the real work; the layout only organizes them.
Content first, pixels second
The usual solo workflow is: build the screen, drop in "Lorem ipsum" or "Button", ship, and fill the words in later. This reverses cause and effect. The words decide the layout: a label that needs 40 characters needs a different control than one that needs 8; an error that must explain a fix needs room under the field; a title that cannot be shortened needs two lines. When you design with fake text, every one of those constraints shows up after you have committed to a layout, and you end up cramming real words into boxes built for fake ones. That is how you get truncated buttons, three-word errors that explain nothing, and headings that say "Overview".
Torrey Podmajersky's book Strategic Writing for UX (O'Reilly, 2019) suggests a useful starting move she calls conversation-first design: before drawing anything, write the interaction as a short dialogue between the person and the product, as if two people were talking. "I want to send this invoice." "Who to? I have their email from last time." "Yes, that one." "Sent. I'll tell you when they open it." The conversation reveals what the screen must ask, in what order, and what it must say back. Then you design the screen to hold that conversation.
Designing with fake text vs real text
Lorem ipsum dolor
Sit amet consectetur adipiscing elit sed do.
Button
Looks tidy. Every box is the right size, because the text was chosen to fit the box.
Your free trial of Invoicer Pro ends on 14 March 2026
Add a payment method to keep recurring invoices, reminders and your 12 client templates. If you do nothing, your account moves to the free plan and nothing is deleted.
Add payment methodCompare plans
The real title needs two lines, the body needs a reassurance sentence, and the action needs three words plus a second option. The layout has to change.
Lorem ipsum: the layout is designed around text that will never exist. Every real constraint is hidden.
Real words: the true length, the second button and the reassurance line all appear. You would design a different card if you had started here.
What "content design" means
Sarah Richards, who led the content team that built GOV.UK, uses the term content design for the whole job: working out what the audience needs, from evidence, and giving it to them at the moment they need it, in the format that suits them. That may be a sentence, a table, a calculator or no content at all. UX writing is the part of content design that lives inside the product: buttons, labels, errors, notifications. Kinneret Yifrah's Microcopy: The Complete Guide focuses on that layer: the tiny texts that decide whether someone completes a sign-up or gives up. You need both views. Content design asks "should this screen exist, and what must it say?". UX writing asks "what exact words, in what order, in how few characters?".
Key idea
Layout decides where meaning goes. Words are the meaning. Write them first.
For the solo creator
You have an unfair advantage: the person writing the copy is also the person writing the code, so you never wait for a copywriter. Use it. Before you open your editor for a new feature, write the feature's conversation and every string in a text file. It takes 20 minutes and it will change the screen you build. You will also notice when a feature cannot be explained in one sentence, which usually means it is not ready to build.
Do
Write the real words before or while you design the screen.
Write the conversation between person and product for every new flow.
Treat each string as a design decision with a reason behind it.
Test layouts with the longest realistic text, not the shortest.
Don't
Ship with "Lorem ipsum", "Title" or "Description" placeholders and plan to "fix copy later".
Rely on icons alone for actions with consequences.
Let the words be whatever the developer typed at 2 a.m. (that developer is you).
In the wild
GOV.UKGovernment Digital Service, 2012–
Replaced hundreds of department websites with one site built around plain, task-focused content. Pages start from what the user needs to do, not what the department wants to say. Content design can be the main design work, not decoration on top.
Things 3Cultured Code, 2017
The list names Inbox, Today, Upcoming, Anytime, Someday and Logbook explain the whole product model in six ordinary words. You understand how to use it before you open a single list. Good names are a manual you never have to write.
Google DocsGoogle, 2006–
A small status line near the title tells you "Saving…" and then that changes are saved. It is a few words, but it replaced the Save button and the anxiety that came with it. One status sentence can remove an entire control.
Mailchimp Content Style GuideMailchimp, public since the 2010s
An openly published guide covering voice, tone, grammar, and how to write each kind of message. It became the reference many teams copied. Writing your rules down is what keeps a voice consistent over years.
Common mistakes
"Copy pass at the end"
Why it happens: words feel easy to change, so they get postponed. But by the end, the layout has fixed the lengths and the flow has fixed the order.
Fix: make "all strings written" a requirement before a feature is called designed. Draft words in the ticket or spec.
Icons doing a sentence's job
Why it happens: icons look cleaner and save space. But most icons beyond a handful (search, close, share, trash) are ambiguous.
Fix: label any icon whose action has consequences, or whose meaning people would guess differently. Use a text label or at least a tooltip and an accessible name.
Writing for yourself
Why it happens: you know the system, so its internal words feel natural ("sync job", "workspace entity").
Fix: write as if explaining to a friend who has never seen the product. Chapter 5 gives you a glossary method.
Check yourself
You are building a "share invoice" feature. You have a nice card layout ready with a 2-word title slot and one button. What should you do before coding it?
The conversation will probably reveal a second question (payment link or not) and a success message. That changes the card. Writing first is cheaper than rebuilding.
Exercise 1.1 40 minutes · on your own product
The gray-bar test and a conversation
Take a screenshot of your product's busiest screen. In any image editor, cover every word with a gray bar. Look at it for one minute and write down what you can no longer tell.
List every string on that screen in words.md, in reading order.
Pick one flow (sign-up, create, share). Write it as a conversation of 6 to 12 lines between "Person" and "App".
Compare the conversation with the strings on screen. Mark anything the conversation says that the screen does not, and vice versa.
You're done when: you have a string inventory of one screen and one written conversation, with at least three gaps marked.
Beginner
Competent
Strong
Lists the strings but finds no gaps.
Finds gaps such as a missing reason, missing next step or unclear button.
Rewrites the screen's strings from the conversation and can explain each change.
2
Writing for people who scan
Taught by Jakob Nielsen and the Nielsen Norman Group, with GOV.UK
People do not read interfaces word by word; they hunt for the words that match their goal, so put those words first and make every line easy to skip.
In 1997 Jakob Nielsen and John Morkes tested how people read on the web. Most of them scanned instead of reading line by line. When the same content was rewritten to be concise, scannable and objective, measured usability went up by 124 percent. Later eye-tracking studies by Nielsen Norman Group found the familiar F-shaped pattern on text-heavy pages, and estimated that on an average page people read only about 20 to 28 percent of the words. GOV.UK's own writing guidance repeats that figure.
Inside an app the effect is stronger, not weaker, because people are in the middle of a task. They are not reading your settings page; they are looking for "the thing that stops the notifications". The eye moves down the left edge, reading the first one or two words of each line, and stops when it sees something that smells like the goal. Nielsen Norman Group called this the "first two words" effect: the start of each line carries most of the signal.
The F-pattern is a warning, not a goal. It describes what happens when text gives the eye nothing to hold. Nielsen Norman Group's advice is to design so people do not have to fall back on it: headings, short lines, and the important words placed first.
Front-load every line
Front-loading means putting the distinctive word at the start: "Notifications: off for this project" instead of "For this project, you have turned notifications off". It works for list items, setting labels, notification titles, email subjects, menu items and error messages. A quick test: read only the first two words of each line in a list. If you can still tell the lines apart and find what you want, the list is front-loaded.
Don't
Allow the app to send you notifications
Allow the app to use your location
Allow the app to sync over mobile data
Allow the app to back up photos
Every line starts the same. The scanning eye reads "Allow the app…" four times and learns nothing. The difference is hidden at the end.
Do
Notifications
Location
Mobile data sync
Photo backup
The distinctive word comes first. Toggles already mean "allow", so the label only needs the noun. Found in one glance.
The inverted pyramid, at interface scale
Journalists put the conclusion first, then the detail, then the background, so a reader can stop at any point and still have the most important part. Use the same order for any message longer than one line: outcome first, then the action, then the explanation. "Payment failed. Update your card to keep your plan. Your bank declined the charge on 3 May." Someone who reads three words knows the situation; someone who reads ten knows what to do.
Stop reading at any band and you still have what matters. Most people stop after the first band. Make sure it is the band they need.
Tools for skimmable text
Headings that say something. "Billing" is a label; "Change your plan or card" is a heading people can act on.
Short paragraphs. In an interface, one to three sentences. A wall of text in a dialog is a dialog nobody reads.
Lists for parallel items. Three or more options, steps or conditions read faster as a list. Keep list items grammatically parallel.
Bold sparingly. Bold one phrase per block at most. If everything is bold, the eye has nowhere to land.
Numbers as digits. "3 files" is spotted faster than "three files" when scanning. GOV.UK uses numerals for this reason.
Meaningful link text. "Read the refund policy" instead of "click here". Screen reader users often navigate by a list of links, where "click here" means nothing (see Accessible & Inclusive).
Do
Put the word people search for at the start of the line.
Lead with the outcome, then the action, then the reason.
Break text into short blocks with clear headings.
Use digits for numbers in interface text.
Don't
Start every item in a list with the same words.
Hide the key fact in the last clause of a long sentence.
Use "click here", "learn more" or "this" as link text on its own.
Center-align paragraphs; ragged left edges make scanning harder.
In the wild
iOS and macOS SettingsApple
Rows are labeled with short nouns ("Wi-Fi", "Bluetooth", "Notifications"), and longer explanations sit in smaller footer text below a group. The label is for scanning; the footer is for reading. Separate what people scan from what people read.
GOV.UK guidesGDS
Pages open with a summary of who the page is for, then use plain, specific headings and numbered steps. A heading should tell you whether to keep reading.
Stripe DashboardStripe
Payment rows show the amount and status first, with details such as the description and customer in secondary text. The thing people compare goes first and gets the strongest weight.
Common mistakes
Polite padding at the start
Why it happens: we were taught to be polite, so lines begin with "Please note that…", "In order to…", "You can now…".
Fix: delete the opener and start with the noun or verb that matters. Politeness lives in tone, not in a preamble.
Clever headings
Why it happens: a witty heading feels like brand personality.
Fix: headings are signposts. "Let's get you sorted" tells a scanner nothing. "Reset your password" does.
Check yourself
Your app sends an email with the subject "An update regarding your recent order with Shopkart". People complain they missed that their order was canceled. What is the best subject?
(c) front-loads the outcome and the reassurance. In an inbox, the first 30 to 40 characters are often all that shows, so "An update regarding…" spends them on nothing.
Exercise 2.1 30 minutes · on your own product
The two-word scan
Find the three longest lists in your product: settings, menus, list items, onboarding bullets.
Cover everything except the first two words of each line. Can you tell every line apart?
Rewrite each line that fails so its distinctive word comes first.
Take your longest message (an error or a dialog) and reorder it as outcome, action, detail.
You're done when: three lists and one long message are rewritten in words.md, with before and after versions.
Beginner
Competent
Strong
Shortens lines but keeps the same opening words.
Every line passes the two-word scan.
Also removes redundant words that the control already says (for example "Enable" before a toggle).
3
Plain language
Taught by GOV.UK, with Strunk & White and Sarah Richards
Use the shortest common word, the active voice and one idea per sentence, because plain text is faster for everyone, including experts, and it is the only text that survives stress, distraction and a second language.
Plain language is not simple language for simple people. It is text designed for the real conditions of use. Your reader is often on a phone, half paying attention, possibly reading English as a second or third language (true for most of your users if you sell in India or globally), and sometimes anxious because something just went wrong. Under those conditions working memory shrinks (see The Human Mind), and every unusual word or long clause costs a re-read.
GOV.UK's guidance is a good benchmark. It asks writers to aim for a reading age of 9, because by that age most people have built up their vocabulary of common words, and it notes that common words let readers handle sentences of around 25 words. It flags any sentence longer than 25 words for splitting. It also tackles the usual objection head-on: the idea that specialist audiences prefer complex language is wrong, and plain English is mandatory across the whole site. Experts read faster too. They just complain less when you make them work.
Draft 1: "In order to ensure the security of your account, we would like to inform you that it will be necessary for you to verify your email address prior to being able to access the full range of features available." Draft 3: "Verify your email to use all features. We'll send a link." Same meaning, a quarter of the reading.
The six habits
Common words over formal ones. "Use", not "utilize". "Start", not "commence". The long word rarely adds precision; it adds distance.
Verbs over nouns made from verbs. "Choose a plan", not "make a plan selection". Linguists call these nominalizations; they hide the action inside a noun and add filler verbs like "make", "perform", "conduct".
Active voice. "We couldn't upload your file" names who did what. "The file could not be uploaded" hides the actor and often the reason. Passive is fine when the actor genuinely does not matter, which in error messages is rare.
One idea per sentence. If a sentence has "and" plus a comma plus "which", split it.
Positive, direct instructions. "Keep this on to get reminders" beats "Don't turn this off unless you don't want reminders". Double negatives make people stop and decode.
Say "you" and "we". Talking to the reader directly is shorter and warmer than "the user" or "the account holder".
Active voice is a checklist in disguise. Writing the active version makes you name the actor, the specific object and, naturally, the reason.
A swap list to keep next to your editor
Instead of
Write
Why
utilize, leverage
use
Same meaning, shorter, universal.
in order to
to
"In order" adds nothing.
prior to, subsequent to
before, after
Common words read faster.
commence, initiate
start
Plain verb.
terminate
end, cancel, close
Pick the specific action; "terminate" also sounds threatening.
make a selection
choose
Turn the noun back into a verb.
is able to
can
Shorter.
a number of
some, or the number
"3 files" beats "a number of files".
authenticate
sign in
User's word, not the system's.
invalid input
what is wrong and how to fix it
"Invalid" names a failure, not a fix.
functionality
feature, or say what it does
Abstract noun.
at this time
now (or delete)
Usually filler.
Don't
Subscription termination
Upon termination of your subscription, access to premium functionality will be revoked at the conclusion of the current billing period, subsequent to which your data will be retained for a period of 90 days.
AbortProceed
Legal register in a product moment. 39 words in one sentence; "terminate", "revoked" and "Proceed" make a simple cancellation feel like a court order.
Do
Cancel your Pro plan?
You'll keep Pro until 30 June. After that you're on the free plan. We keep your projects for 90 days in case you come back.
Keep ProCancel plan
Plain and specific. Three short sentences, a real date, and buttons that name the outcome. Same facts, half the effort.
Myth
"Plain language is dumbing down." Plain language removes effort, not information. A tax specialist reading "You must pay by 31 January" loses nothing compared with "Payment is required to be remitted no later than the 31st day of January". The specialist content (the rule, the number, the exception) stays. Only the packaging gets lighter.
For the solo creator
If English is not your first language, plain language is a gift: you do not need a large vocabulary, you need short common words, which is exactly what your users want. Keep the swap list above in your words.md. When you review your strings, search the codebase for "utilize", "invalid", "successfully", "please note", "in order to" and "functionality". Each hit is a five-second improvement.
Do
Aim for sentences under 25 words; most interface sentences should be under 15.
Use "you" for the reader and "we" for the product or company.
Prefer verbs to nouns made from verbs.
Keep the precise term when it is the user's own term (a designer knows "kerning").
Don't
Use legal or bureaucratic register in everyday product moments.
Write double negatives or "unless not" logic.
Hide the actor with passive voice in errors.
Pad with "successfully", "please note", "simply".
In the wild
GOV.UK style guideGDS
Keeps a public A to Z of preferred words and a list of words to avoid (such as "deliver" for anything that is not a parcel, and "facilitate"). A banned-word list is the cheapest style tool there is.
Mailchimp Content Style GuideMailchimp
Asks writers to use active voice, avoid jargon, and write for people who may be reading in a second language. Plain language and a strong brand voice are not in conflict.
Hemingway EditorAdam and Ben Long, 2013
A writing tool that highlights long sentences, passive voice and complex words in color, with a grade level score. Seeing the problems helps, as long as you treat the score as a hint (Chapter 15).
Common mistakes
Sounding "professional"
Why it happens: formal words feel safer, especially around money and accounts.
Fix: trust comes from clarity and specifics (dates, amounts, what happens next), not from long words. Chapter 13 covers trust copy.
Translating your thoughts literally
Why it happens: you think the sentence in the order you designed the system ("Upon completion of the import process…").
Fix: rewrite from the reader's side, starting with what they get: "Your contacts are in. 1,204 imported, 3 skipped."
Removing the precise term
Why it happens: overcorrecting. Plain language is not "no technical words".
Fix: keep terms your users use themselves (a developer tool can say "API key"). Explain a term once, the first time it appears.
Check yourself
Your app is for accountants. A colleague says "they're experts, keep the formal language". Which response is strongest?
Plain language is about the packaging, not the domain. Keep "accrual", lose "utilize". GOV.UK's guidance makes the same point about specialist audiences.
Exercise 3.1 35 minutes · on your own product
The plain-language sweep
Search your code or string file for the words in the swap table. Count the hits.
Find your five longest sentences in the UI. Count their words.
Rewrite each to under 20 words, in active voice, keeping every fact.
Read the before and after aloud. Note which version you stumble on.
You're done when: five sentences are rewritten, every swap-list hit is fixed, and you have a "banned words" section in words.md.
Beginner
Competent
Strong
Shorter sentences but some facts lost.
All facts kept, all under 20 words, active voice.
Also adds a missing fact (a date, a number, a next step) that the long version hid.
4
Voice and tone
Taught by Mailchimp (Kate Kiefer Lee), with Torrey Podmajersky and Nielsen Norman Group
Voice is who your product is, and it stays the same everywhere; tone is how that same person speaks in a given moment, and it should change with the reader's feelings.
Think of a good doctor. They are the same person when they tell you your test results are clear and when they tell you they are not. Their voice (calm, direct, kind) does not change. Their tone does: lighter and brief for good news, slower, more careful and more specific for bad news. Mailchimp made this distinction popular through its Voice and Tone guide, written by Kate Kiefer Lee, which paired each kind of message with the reader's likely feelings and the tone to use. The insight was that tone is set by the reader's state, not by the brand's wish to be fun.
This matters because the same joke that delights someone who just published their first project is insulting to someone whose payment just failed. People forgive bland copy; they remember copy that was cheerful at the wrong moment.
Plot your own moments. Every product has a handful of celebratory moments and a handful of serious ones. Most messages live in the calm middle. Decide where each sits before you write it.
Four dials of tone
Nielsen Norman Group (Kate Moran, 2016) described tone along four dimensions: funny to serious, formal to casual, respectful to irreverent, and enthusiastic to matter-of-fact. Thinking in dials stops tone from collapsing into a single "friendly vs professional" switch. A calm reading app, for example, might sit at serious, casual, respectful and matter-of-fact: relaxed but never jokey or hyped.
Set the dials for your voice, then nudge them per moment. The default positions are your voice. Tone is how far you move a dial for a specific situation, never all the way across.
Lab: tone slider
Warm
Your first project is live.
Nice work. Share the link whenever you're ready.
Good fit for this moment.
CelebratorySerious
Move the slider for each situation and read the message as if it were happening to you. Notice that the same voice can be right at one end of the scale for one moment and wrong for another. The fit note tells you what an experienced writer would pick.
Write your voice chart
A voice chart turns vague adjectives into decisions. The classic form is three to four voice traits, each with "this, not that", plus examples. Torrey Podmajersky's version in Strategic Writing for UX goes further and ties each trait to your product principles and to concrete language choices, such as vocabulary, how wordy to be, and grammar and capitalization rules. You do not need a big document; you need a table you can check a string against.
Trait
We are
We are not
Sounds like
Never sounds like
Calm
Steady, unhurried
Urgent, hyped
"Your notes are saved."
"Woohoo! All saved!!"
Direct
Specific, short
Curt, cold
"Turn on sync to see notes on your phone."
"Sync must be enabled."
Kind
On the reader's side
Gushing, cute
"That didn't work. Your draft is safe."
"Oopsie! We goofed!"
Honest
Plain about limits and costs
Salesy, evasive
"₹299 a month. Cancel any time in Settings."
"Unlock unlimited magic!"
Don't
Whoops! Our servers are having a bad hair day! Try again maybe?
Shown when a sync fails and the user may have lost an hour of edits.
Playful at the worst moment. The joke centers the product's personality while the reader is worried about their work. It also gives no facts.
Do
Sync paused. Your edits are saved on this device and will upload when the connection returns.
Same voice (calm, direct), more serious tone.
Answers the worry first. "Your edits are saved" is what the reader needs to read. The voice is still the product's voice, just without the smile.
Do
Define 3 to 4 voice traits with "is / is not" and examples.
Choose tone from the reader's likely feeling in that moment.
Save humor for low-stakes, positive moments, and use it rarely.
Keep the same voice across app, emails, site and support replies.
Don't
Joke in errors, failures, billing or anything involving lost data.
Use exclamation marks as a substitute for warmth.
Pick adjectives like "friendly" without saying what friendly is not.
Let each screen sound like a different person wrote it.
In the wild
MailchimpVoice and Tone guide
Paired message types (success, error, legal, feedback) with the reader's likely feelings and the tone to use for each. The voice stays fun-but-not-silly; the tone in an error drops the fun. Tone is chosen from the reader's state.
Mailchimp campaign sentMailchimp
After you send a campaign, a cheerful illustration (a high five from the chimp mascot) marks the moment. It works because sending a campaign is a genuine achievement and nothing is at risk. Spend your celebration where the reader feels it too.
Apple system alertsiOS, macOS
Alerts are short, neutral and specific, regardless of how playful an app's marketing is. The more serious the moment, the closer every product's tone converges on plain and calm.
Common mistakes
Personality everywhere
Why it happens: you want the product to feel human, so every string gets a quip.
Fix: personality is in choices (what you notice, how you reassure), not in jokes per square inch. Limit humor to the green zone of your tone map.
Voice chart of adjectives
Why it happens: "friendly, smart, approachable" feels like a decision. It is not, because every brand claims it.
Fix: add "we are not" and a "sounds like / never sounds like" pair for each trait. If you cannot write the "never" example, the trait is too vague.
Copying a famous voice
Why it happens: Slack or Mailchimp sound great, so you borrow their style.
Fix: your voice should come from your product's purpose and users. A calm reading app and a team chat app should not sound alike.
Check yourself
Your playful habit-tracker app needs a message for "You broke your 100-day streak." What tone should it use?
The reader is disappointed. The voice stays warm, but the tone moves toward serious: acknowledge the loss, keep the achievement, offer a next step. (c) is a guilt trip, a pattern covered in Honest & Calm.
Exercise 4.1 60 minutes · on your own product
Voice chart and tone map
Write three or four voice traits in a table with "We are", "We are not", "Sounds like", "Never sounds like".
List 10 moments in your product, from the happiest to the most serious.
Place them on a tone map (a line on paper is enough).
Rewrite one green-zone and one red-zone message so both fit the same voice.
Ask: would someone recognize both as coming from the same product?
You're done when:words.md has a voice chart, a tone map of 10 moments and two rewritten messages.
Beginner
Competent
Strong
Adjectives only, no "is not".
Each trait has is/is not and an example pair.
Traits trace back to the product's purpose, and the red-zone message would hold up if read by an upset customer.
Recap and connect: Part one
Words carry meaning, people scan for their goal, plain text serves everyone, and voice stays while tone moves. Before moving on, connect these ideas to earlier guides.
Connect the ideas
In The Human Mind you met working memory limits. Which writing habit from this Part follows most directly from them?
Long, back-loaded sentences make the reader hold early clauses in working memory until the point arrives. Short, front-loaded sentences deliver the point before memory fills.
Connect the ideas
In Typography you learned about hierarchy and measure. A settings footer note is 90 words long in 12 px gray text. What is the real fix?
Typography can make text easier to see, but it cannot make 90 words quick to read. Cut first, then style.
Part two
The building blocks
Names, buttons, form text, errors and confirmations are the small texts people touch on every visit. They are where most products lose people: a vague button, a field whose label vanished, an error that blames. Each chapter gives you a pattern you can apply to your own product in an afternoon.
5
Naming things
Taught by Torrey Podmajersky, with Don Norman (mental models) and Sarah Richards
Name things with the user's words, use one word for one concept everywhere, use nouns for things and verbs for actions, and write the names down in a glossary so they stay fixed.
Names are the most reused words in your product. A feature name appears in navigation, buttons, emails, help pages, notifications and support replies. If the name is wrong, it is wrong a thousand times. Names also build the user's mental model (see The Human Mind): when your app calls something a "project" in one place and a "workspace" in another, people reasonably assume there are two different things, and start looking for the difference.
User's words, not system words
Your database has tables, entities, jobs, tenants and payloads. Your users have clients, invoices, trips and notes. System words leak into interfaces because the person writing the UI is the person who wrote the schema. Nielsen's heuristic "match between system and the real world" names the fix: speak the user's language. Listen to how people describe the task in emails, reviews, support messages and search queries, and use their nouns.
Keep the system word in the code; translate at the surface. Your variable can stay tenant_id. The screen should say what the person would say out loud.
One concept, one word
Synonyms are a virtue in essays and a bug in interfaces. In prose, repeating "project" five times feels clumsy. In an interface, switching between "project", "space" and "board" makes people believe you have three objects. The reverse is just as bad: one word for two things ("Share" meaning both "send a copy" and "invite to edit"). Decide each core term once, then use it everywhere, including in emails and support replies.
Every synonym invents an object. Pick the word, write it in the glossary, then search your code for its rivals.
Nouns for things, verbs for actions
Navigation and headings name places and objects, so they are nouns: "Invoices", "Clients", "Settings". Buttons and menu items perform actions, so they start with verbs: "Send invoice", "Add client". Mixing the two creates small doubts. Is "Reports" a place to go or a button that generates one? Is "Export" a tab or an action? When you keep the grammar consistent, the word class itself tells people what will happen when they tap.
Naming features and products
Features can have descriptive names ("Focus mode", "Scheduled send", "Reading list") or invented ones ("Spaces", "Magic Compose", "Lens"). Descriptive names explain themselves and translate easily; invented names can become brands but must be learned. For a solo product, the default should be descriptive: you do not have a marketing budget to teach people what "Flux" means. Reserve an invented name for the one feature that is your product's identity. Name the product itself in Identity & Launch.
Term
Means
Use for
Don't call it
Note
A single document the user writes
List items, buttons ("New note"), emails
file, doc, page, entry
Notebook
A named group of notes
Sidebar, move dialog
folder, collection, space
Archive (verb)
Hide from lists, keep forever
Swipe action, menu
delete, remove, hide
Delete (verb)
Move to Trash for 30 days, then remove
Menu, confirm dialog
remove, destroy, erase
Sign in
Enter email and password
Buttons, emails
log in, login, authenticate
A starter glossary for a notes app. Five rows are enough to start; add a row every time you catch yourself hesitating between two words.
Don't
Sidebar
Dashboard
Entities
Reports
Sync
System nouns and ambiguous words. "Entities" is a database word. "Reports" and "Sync" could be places or actions.
Do
Sidebar
Home
Clients
Invoices
Sales reports
New invoice
Nouns for places, verb for the action. The navigation names things the user owns; the button starts with a verb.
For the solo creator
Make your code use the same words as your UI where you can. If the screen says "notebook", call the model Notebook, not Folder. Then a mismatch between code and screen becomes visible every day, and you will not accidentally write "folder" in a new error message at midnight. Rename early; renaming after launch means support articles, emails and muscle memory all need updating.
Do
Collect the words users use (reviews, emails, searches) before naming.
Keep a glossary with "don't call it" synonyms.
Use nouns for navigation, verbs for buttons.
Prefer descriptive feature names.
Don't
Use two words for one thing, or one word for two things.
Expose database, API or internal team words.
Rename features casually after launch.
Invent clever names for ordinary features.
In the wild
Twitter "favorite" to "like"Twitter, November 2015
Twitter replaced the star "favorite" with a heart "like", saying people found the star confusing. The word and the icon changed together. A name that means different things to different people is a usability problem, not a branding detail.
Gmail "Archive"Google, 2004
Gmail made "Archive" a first-class action next to "Delete": hidden from the inbox, kept and searchable. Two verbs, two clear outcomes. When two actions differ in consequence, they need two distinct words.
NotionNotion Labs
Almost everything is a "page", and pages can contain pages. One noun covers a lot, and the model stays simple. A small, consistent vocabulary keeps a flexible product learnable.
Common mistakes
Synonym drift
Why it happens: you write strings over months, and each day a different word feels natural.
Fix: the glossary, plus a quick search of your string file for the "don't call it" words before every release.
Clever feature names
Why it happens: a name feels like a way to make a feature memorable.
Fix: ask whether a stranger could guess what it does from the name. If not, use a descriptive name, or pair the brand name with a description ("Lens: search with your camera").
Check yourself
Your app lets people "remove" an item from a playlist and "remove" a song from their library (which deletes downloads). Support says people lose downloads by accident. What do you change?
One word for two different consequences is the root cause. A confirmation on both would train people to tap through. Distinct verbs plus a stated consequence fix the model.
Exercise 5.1 45 minutes · on your own product
Build your glossary
List every noun that appears in your navigation, buttons and emails.
Group synonyms that refer to the same thing. Pick one winner per group.
Find 5 to 10 real user sentences (reviews, support emails). Do they use your winner? If not, consider their word.
Write the glossary table with Term, Means, Use for, Don't call it.
Search your codebase's strings for every "don't call it" word and fix them.
You're done when: a glossary of at least 8 terms is in words.md, and no "don't call it" words remain on screen.
Beginner
Competent
Strong
List of terms, no rivals.
Terms with definitions and rivals, UI fixed.
Terms validated against real user language, and code models renamed to match.
6
Buttons and actions
Taught by Kinneret Yifrah, with Apple's Human Interface Guidelines and Material Design
A button label should say exactly what will happen when you press it, usually as a verb plus an object, so that someone reading only the button can act correctly.
Buttons are the most read words in a product, because they are what people read right before they commit. Often they are the only words read. In a dialog, many people skip the body text and go straight to the buttons. If the buttons say "OK" and "Cancel", the reader has to go back, read the question, and map it onto two generic words. If the buttons say "Delete 3 photos" and "Keep photos", the decision is made in one glance.
Verb plus object
"Save draft", "Send invoice", "Delete 3 photos", "Add card". The verb says what happens; the object says to what. Drop the object only when it is completely obvious from context (a single "Save" at the bottom of a single form). Add a number or name when the scope matters: "Delete 3 photos" tells you the selection worked; "Delete photo" when you selected three would be a warning sign.
Read the button alone. If someone who skipped everything else would still press the right one, the label works.
Match the button to the title
In a dialog, the title asks the question and the primary button answers it with the same verb. "Delete this project?" → "Delete project". "Leave without saving?" → "Leave without saving" or "Discard changes". Matching wording lets people confirm their understanding: the verb in the title and the verb on the button are the same, so the eye links them. A mismatch ("Remove project?" → "Confirm") forces translation.
Don't
Are you sure?
This action cannot be undone.
NoYes
Nothing says what will happen. Sure about what? Which action? "Yes" and "No" answer a question nobody can see.
Do
Delete "Trip to Goa"?
This album and its 48 photos will be deleted from all your devices.
CancelDelete album
Title, body and button agree. The name, the count, the scope ("all your devices") and a verb on the button. Readable by button alone.
The "Cancel" trap and the second button
The secondary button needs as much care as the primary. In most dialogs "Cancel" is fine: it means "close this and change nothing". But in a dialog about canceling something (a subscription, an order, a meeting), "Cancel" becomes ambiguous: does it cancel the subscription or cancel the canceling? Write the outcome instead: "Keep subscription" and "Cancel subscription". Same for "Discard": pair it with "Keep editing", not "Cancel".
Lab: button label quiz
Round 1 of 6
Delete 3 photos?
They'll be removed from all your devices.
Cancel?
Which label belongs on the highlighted button?
Pick a label, read the reasoning, then move on. Six real situations. Score yourself honestly: the goal is to feel the difference between a label that names an outcome and one that only acknowledges a question.
Sentence case or title case?
Sentence case capitalizes only the first word and proper nouns: "Add payment method". Title case capitalizes most words: "Add Payment Method". Google's Material Design and Microsoft's style guide recommend sentence case for interface text; Apple's guidelines have long used title case for things like menu items and some button styles. Sentence case is easier to read in longer labels, looks calmer, and avoids the endless debate about which small words to capitalize. Pick one convention per platform, write it in your style guide, and apply it everywhere. Inconsistency is worse than either choice.
Title Case
Add Payment Method
Formal, every word shouts a little. Common in macOS menus.
Fine if used consistently.
Sentence case
Add payment method
Reads like speech. Calmer at length.
Good default for calm products.
Mixed
Add Payment method
Next screen: "Update billing Info".
Looks careless. Pick one.
More button rules that hold up
Keep labels to 1 to 4 words, and test the longest translation (Chapter 12). German can make "Save draft" into "Entwurf speichern", which is noticeably longer.
First person or second, not both. "Start my trial" and "Your account" in the same flow sounds like two speakers. Most products choose "you/your" for the product talking and avoid "my".
No "Click here". It describes the mechanism, not the result, and it is wrong on touch screens.
Say the price on a paid action. "Upgrade for ₹299/month" is clearer and more trustworthy than "Continue".
Disabled buttons need a reason nearby. If "Publish" is greyed out, say why: "Add a title to publish".
Do
Label with a verb and an object, plus scope when it matters.
Repeat the title's verb on the primary button.
Name both outcomes when the dialog is about canceling.
Choose sentence or title case once and stick to it.
Don't
Use OK, Yes, No, Submit or Confirm when a verb would fit.
Use "Cancel" in a cancellation dialog.
Shame people in the decline button ("No, I hate saving money").
Leave a disabled button unexplained.
In the wild
macOS save sheetApple
When you close an unsaved document, the choices are named outcomes such as "Don't Save", "Cancel" and "Save", rather than Yes, No and Cancel. Even a three-way decision becomes readable when each button names its result.
GitHub repository deletionGitHub
The final button repeats the action and the object ("delete this repository"), after the dialog explains what will be lost. The more serious the action, the more specific the button.
Material Design dialogsGoogle
Material's guidance shows dialog actions with specific verbs (for example "Discard" with "Cancel") and recommends sentence case. Both big platform systems agree: name the action.
Common mistakes
"Submit" everywhere
Why it happens: it is the HTML default and feels neutral.
Fix: replace it with the outcome: "Create account", "Send message", "Save changes", "Book table for 4".
Confirmshaming the decline
Why it happens: someone wants a higher conversion rate.
Fix: the decline option is a plain, respectful outcome: "No thanks" or "Not now". See Honest & Calm.
Labels that describe the UI
Why it happens: "Next", "Continue", "Proceed" are easy and fit every step.
Fix: on the last step before commitment, name the commitment: "Place order", "Pay ₹1,299". Generic "Next" is fine only mid-flow.
Check yourself
A checkout's last button says "Continue". After it, the card is charged. What is the best label?
The button commits money, so it should name the commitment and the amount. "Continue" suggests there is another step to review, which is misleading.
Exercise 6.1 40 minutes · on your own product
The button audit
Collect every button and menu action label into a list (search your code for button components).
Mark each: generic (OK, Submit, Continue, Yes), vague, or specific.
Rewrite every generic one as verb plus object, adding scope or price where it matters.
For every dialog, check the title's verb matches the primary button.
Check case consistency across all labels.
You're done when: no button in your product says OK, Yes, No or Submit unless the context is completely obvious, and you can justify each exception.
Beginner
Competent
Strong
Some labels rewritten.
All labels verb plus object, dialogs matched.
Also fixes disabled-button reasons and cancel-dialog ambiguity, and documents the rules in words.md.
7
Labels, placeholders, help text and tooltips
Taught by Kinneret Yifrah, with GOV.UK Design System and Nielsen Norman Group
Every field needs a visible label that never disappears, help text where a question is likely, and no essential information hidden in placeholders or tooltips.
Forms are where most products ask people for something, and where people decide whether to trust you with it. The words around a field do three jobs. The label says what goes in. The hint says how, or why you need it. The error says what went wrong and how to fix it. A placeholder (gray text inside the empty field) cannot do any of these jobs reliably, because it disappears the moment someone starts typing, which is exactly when they need it.
Four parts, four jobs. Labels sit above inputs (faster to scan and they survive zoom and translation). Hints sit between the label and input so they are read before typing. Errors sit right under the field they describe.
Why placeholders fail as labels
Placeholder-only fields look clean in a mockup. In use, they cause four problems that Nielsen Norman Group and others have documented. The label vanishes on typing, so people forget what the field was or what format it wanted. When reviewing a filled form, there are no labels to check against. Gray placeholder text can be mistaken for a pre-filled value and skipped. And light gray placeholder text usually fails contrast requirements. Try it below.
Type into the fields, then try to remember the rules
As it appears on your PAN card
At least 10 characters, with 1 number and 1 symbol
For example, 27/03/1994
Placeholder only: type in all four, then look away and recall the password rule and the date format. Also notice "SAVE50": is it an example, or already applied?
Labels and hints: type again. The rules stay in view while you type and while you check your answers, and "optional" is said in words.
Help text: answer the question at the moment it arises
Good help text predicts the hesitation. Why do you want my phone number? Will you post to my account? What format? Is this public? Yifrah's book is full of examples where a single sentence next to a field raised completion, because it removed a worry at the exact moment it appeared. Write help text by asking, for each field, "what would make a careful person pause here?" Then answer that, in one sentence, before they have to ask.
Format: "For example, 27/03/1994". Show an example, not a pattern like DD/MM/YYYY alone.
Purpose: "We only use this to send your receipt."
Consequence: "This name is shown to people you invite."
Constraint: "Up to 25 MB. PDF or JPG."
Optional: mark the few optional fields with "(optional)" rather than marking every required field with an asterisk, which is the GOV.UK Design System pattern.
Tooltips: for extra, never for essential
Tooltips hide text behind hover, which does not exist on touch screens, and they are easy to miss with a keyboard or screen reader if built carelessly. Use them for supplementary detail about an icon or a term. If people need the information to complete the task correctly, it belongs on the page.
Don't
Essential rule hidden. On a phone, nobody hovers. The one instruction that prevents a rejected invoice is behind a 12 px icon.
Do
Rule in plain sight. "Optional" in the label, the condition and an example in the hint. No hover needed.
For the solo creator
Build one field component that takes label, hint and error as properties, renders them in the right order, and connects them to the input with aria-describedby. Then the right thing is the easy thing every time you add a field. Make label required in the component's type so you cannot ship a placeholder-only field by accident.
Do
Show a visible label above every field.
Put format examples and purpose in hint text before the input.
Mark optional fields in words.
Keep tooltips for supplementary information only.
Don't
Use placeholder text as the only label.
Put example values in placeholders that look like real input.
Hide rules (password, format, limits) until after an error.
Ask for data without saying why when the reason is not obvious.
In the wild
GOV.UK Design SystemGDS
Text inputs always have visible labels, hints sit between label and field, and the date input splits day, month and year into three labeled boxes with an example. The most tested public forms anywhere avoid placeholder labels.
Stripe CheckoutStripe
Card fields format the number as you type and show the card brand, so the field itself confirms the input. Sometimes the best help text is the input reacting.
Material text fieldsGoogle
The "floating label" pattern moves the label above the text when you type, so it never disappears. If you love the compact look, keep the label alive rather than deleting it.
Common mistakes
Password rules revealed by failure
Why it happens: rules live in the validation code, not the UI.
Fix: show the rules as a hint before typing, and tick them off live as each is met.
Hint text that repeats the label
Why it happens: you feel every field needs a hint. "Email: Enter your email."
Fix: only write a hint that adds something (purpose, format, consequence). No hint is better than an echo.
Check yourself
A minimal sign-up screen has three fields with placeholders and no labels. Completion is fine, but support gets many "wrong date of birth" tickets. What is the most likely cause and fix?
The format was only visible before typing. A persistent hint with an example solves the root cause. Date pickers for birth dates are often slow (scrolling back decades), so text with a clear example is usually better.
Exercise 7.1 45 minutes · on your own product
The form words pass
Open your most important form (sign-up, checkout or settings).
For each field, write: label, likely hesitation, hint that answers it (or "none needed").
Move any rule hidden in a placeholder or tooltip into a visible hint.
Mark optional fields in words and delete asterisks.
You're done when: every field has a visible label, every likely hesitation has an answer on screen, and no placeholder carries essential information.
Beginner
Competent
Strong
Labels added.
Labels, hints and optional markers all in place.
Field component enforces labels, and you removed at least one field you did not truly need.
8
Error messages
Taught by Jakob Nielsen (heuristics), with Kinneret Yifrah and Torrey Podmajersky
A good error message says what happened, why if it helps, and exactly how to fix it, in plain words, without blame and without jokes, placed where the person is looking.
Errors are the moment your product is most likely to lose someone, and the moment they read most carefully. Nielsen's ninth usability heuristic asks that error messages be expressed in plain language, precisely indicate the problem, and constructively suggest a solution. That gives you a three-part anatomy. Most bad errors have only the first part, and many have none: "Something went wrong" tells you only that something went wrong, which you knew.
The best fix is a button. When you can detect the likely cause, offer the fix as an action. A reference code is fine for support, but only after the human sentence, never instead of it.
Five rules
Say what happened, specifically. Name the thing: which file, which field, which payment. "Couldn't save 'Q3 plan'" is better than "Save failed".
Say how to fix it. If the person can fix it, tell them how. If they cannot (your server is down), say what you are doing and what happens to their work: "Your changes are saved on this device. We'll retry automatically."
Don't blame. "You entered an invalid date" puts the person in the dock. "Enter a date in the past" or "February has 28 or 29 days" just helps. Use passive or "we" when the fault is the system's; name the person only when giving the fix ("Enter…").
No codes alone, no jargon. "Error 500", "null reference", "invalid token" mean nothing to most people. Translate them, then add the code in small text for support.
No jokes in failure. "Oopsie!" and cartoon sad faces read as flippant when someone's work is at risk. Calm and specific is the kind tone here (see the tone map in Chapter 4).
Where the message goes
Placement is half the message. Put field errors next to the field, under the input, so the eye finds them where the problem is. For a long form, also add a summary at the top with links to each field, so screen reader and keyboard users can find them. Use a page or app-level banner for problems that affect the whole screen (offline, account issue). Use a toast only for background events that do not need action, and never for errors the person must fix, because toasts disappear.
Match the placement to the scope. The closer the message to the cause, the less the person has to search. A disappearing toast for a field error is a classic mistake.
Before and after
Before
After
What changed
Invalid email.
Add the part after @, for example name@gmail.com.
Diagnoses the actual problem and shows an example.
Error 413.
photo.heic is 31 MB. Files can be up to 25 MB.
Names the file, the size and the limit.
Oops! Something went wrong
We couldn't load your notes. Check your connection, then pull down to refresh.
Specific object, plausible cause, a gesture to fix.
Password does not meet requirements.
Add a number. Your password needs at least 1 number.
Says which requirement is missing.
You entered the wrong code.
That code didn't work. Codes expire after 10 minutes. Send a new code.
No blame, gives the likely cause and a fix.
Session expired.
You were signed out after 30 minutes of inactivity. Sign in again; your draft is saved.
Explains, reassures, gives the action.
Transaction failed.
Your bank declined the payment. You haven't been charged. Try another card or UPI.
Who declined, money reassurance, alternatives.
Unable to process request.
Our server is having trouble. Your changes are safe. We'll retry in 30 seconds.
Owns the fault, protects the work, sets an expectation.
Field required.
Enter your city so we can show delivery times.
Names the field and gives the reason.
Username taken.
"rohit" is taken. Try rohit.writes or rohit2026.
Offers available alternatives.
Lab: error message rewriter
Scenario 1 of 5
Context.
Pick the message you would ship. You will then see each option rated against the four tests: says what happened, says why, says what to do, and is kind and plain (no blame, jargon or jokes). A partial mark (~) means the option tries but is vague.
Don't
Card number
4111 1111 1111
Invalid input
Names a failure, not a fix. What is invalid? Too short? Wrong card? The person has to guess.
Do
Card number
4111 1111 1111
Enter all 16 digits. You've entered 12.
Diagnosis and fix in one line. The code already knows the length; say it.
For the solo creator
Your error messages are written by your error handling. If your code throws a generic exception and a single catch-all shows "Something went wrong", no amount of copywriting helps. Map your top 10 failure causes (from logs or support) to specific error types, and give each its own message with a fix. A switch on error codes that returns human strings is 30 minutes of work and saves you hours of support email.
Do
Name the specific thing that failed.
Give the fix, ideally as a button.
Protect and mention the person's work ("your draft is saved").
Place errors where the problem is.
Don't
Write "invalid", "error", "failed" alone.
Blame ("you entered", "you failed to").
Show raw codes or stack traces without a human sentence.
Joke, use cartoon sadness or exclamation marks in errors.
Clear the form after an error.
In the wild
GOV.UK Design System error messagesGDS
Publishes exact wording patterns per input type, such as "Enter your date of birth" for a missing value and "Date of birth must be a real date" for an impossible one, plus an error summary at the top of the page linking to each field. Write error copy as reusable patterns, not one-offs.
Gmail attachment reminderGoogle
If your email mentions an attachment and you try to send without one, Gmail asks whether you meant to attach a file. The best error message prevents the error.
Stripe API errorsStripe
API error responses include a human-readable message alongside machine codes, and the docs explain each decline code and how to handle it. Even developer-facing errors benefit from a plain sentence.
Common mistakes
The single catch-all
Why it happens: one generic handler is fast to build.
Fix: list the top causes and give each a message. Keep the catch-all only for the truly unknown, and even then say what happens to the work.
Validating too early
Why it happens: inline validation on every keystroke shows "Invalid email" after one letter.
Fix: validate when the person leaves the field or submits, and remove the error as soon as it is fixed. Interaction details are in Structure & Interaction.
Security as an excuse for vagueness
Why it happens: you should not reveal whether an email has an account.
Fix: you can be safe and still helpful: "That email and password don't match. Try again or reset your password."
Check yourself
Your sync server is down for 20 minutes. What should a writing app show?
The person cannot fix it, so the message's job is reassurance and expectation. A modal interrupts writing for no benefit; silence risks them editing on another device and creating conflicts.
Exercise 8.1 60 minutes · on your own product
Error inventory and rewrite
Search your code for every user-facing error string. List them with where they appear.
Score each against the four tests (what, why, fix, kind and plain).
Rewrite the ten most frequent (use logs or support emails to guess frequency).
For at least three, turn the fix into a button or automatic recovery.
Trigger each error on a real device and check placement.
You're done when: your top ten errors pass all four tests on a real device, and the rewrites are in your string file.
Beginner
Competent
Strong
Messages reworded but still generic.
Each names the problem and the fix, without blame.
Code distinguishes causes, three fixes are one-tap, and at least one error is now prevented.
9
Confirmations, destructive actions and success
Taught by Don Norman and Jakob Nielsen, with Apple's Human Interface Guidelines
Ask for confirmation only when an action is serious and cannot be undone, and then state the exact consequence; after any action, confirm what happened in a few specific words.
Confirmation dialogs fail because they are overused. When every action asks "Are you sure?", people learn to press the confirm button without reading, and the one dialog that mattered gets the same reflex. Undo is usually better: let the action happen, then offer a few seconds to reverse it. Save confirmation for things that are both severe and irreversible: deleting an account, a whole shared workspace, or permanently emptying the trash.
Most actions belong on the left. Undo respects the person's intent and protects them from slips. A dialog is the last line of defense, not the first.
Writing a confirmation that people read
A good confirmation names the object, states the consequence in concrete terms, and offers buttons that repeat the action. Counts and names are what make people read: "Delete 'Client work'? 14 projects and 230 files will be deleted for all 6 members." The numbers interrupt the autopilot because they are new information each time. Generic text ("This cannot be undone") is identical in every dialog, so the eye skips it.
Don't
Confirm action
Are you sure you want to proceed? This action is irreversible.
CancelConfirm
Identical in every context. Nothing names what will be lost, so it trains the reflex click.
Do
Delete workspace "Client work"?
14 projects and 230 files will be deleted for all 6 members. You can't undo this. Export first if you need a copy.
ExportCancelDelete workspace
Specific numbers, who is affected, a way out. The export link turns a scary choice into a safe one.
Typing forces reading. For catastrophic actions (GitHub uses this for deleting repositories), asking people to type the name makes them see exactly which thing they are destroying. Use it rarely, or it becomes a chore.
Success messages: short, specific, with a next step
"Success!" is the success version of "Something went wrong". Say what happened, where the result is, and the natural next action: "Invoice sent to ravi@gmail.com. We'll tell you when it's opened." Keep success messages quiet and short; they confirm, they do not celebrate, unless the moment is genuinely big (first publish, first sale). For reversible actions, the success message is also where Undo lives.
Don't
Success!
Your request has been successfully completed.
OK
Says nothing. What succeeded? Where is it? A modal that must be dismissed for routine success is friction.
Do
3 notes moved to Archive Undo
Count, destination, Undo. Quiet, non-blocking, reversible. This one line replaces a confirmation dialog.
Do
Prefer Undo to confirmation for reversible actions.
In confirmations, name the object, count, scope and who is affected.
Style destructive buttons distinctly and label them with the verb.
Make success messages specific and quiet.
Don't
Ask "Are you sure?" for routine actions.
Use "Success!" or "Done!" as the whole message.
Make the destructive button the default on Enter.
Celebrate routine actions with animations and exclamation marks.
In the wild
Gmail "Undo send"Google
After sending, a small message offers Undo for a few seconds (the window is adjustable in settings). No "Are you sure you want to send?" dialog. A short delay plus Undo beats a confirmation for frequent actions.
GitHub "Danger Zone"GitHub
Repository settings group irreversible actions in a clearly marked section, and deletion requires typing the repository's name. Reserve friction for the few actions that deserve it, and group them.
iOS Photos "Recently Deleted"Apple
Deleted photos go to an album for about 30 days before being removed. The deletion confirmation can stay brief because recovery exists. A recovery path lets the copy be calm.
Common mistakes
Confirmation for everything
Why it happens: confirmation feels safe, and undo takes more engineering.
Fix: soft-delete (a "deleted_at" column) plus a toast with Undo is often less code than you fear, and it lets you delete most confirmation dialogs.
Vague success
Why it happens: the code path only knows "ok: true".
Fix: pass the object name and count to the message. "Saved" becomes "Saved 'Trip budget'".
Check yourself
People archive emails in your app dozens of times a day. Some archive the wrong one. What do you do?
A frequent, reversible action should never get a dialog; it would be confirmed automatically within a day. Undo catches the slip without slowing everyone.
Exercise 9.1 45 minutes · on your own product
Confirmation triage
List every confirmation dialog in your product.
Run each through the decision tree. Mark: replace with undo, remove, or keep.
Rewrite every kept dialog to include object name, count and consequence, with a verb button.
Rewrite your five most common success messages to be specific.
You're done when: every remaining dialog passes the tree, and no message in your product says only "Success" or "Are you sure?".
Beginner
Competent
Strong
Rewrites dialogs, keeps all of them.
Removes or replaces at least half with undo.
Implements soft delete with Undo and shows a specific success message with the object name.
Recap and connect: Part two
Names build the model, buttons name outcomes, fields keep their labels, errors say what and how, and confirmations are rare and specific. Now connect these to earlier chapters and guides.
Connect the ideas
Which chapter's rule would have prevented this button: "Proceed with entity termination"?
Most bad copy breaks several rules at once, which is good news: fixing one habit usually fixes the others.
Connect the ideas
In Structure & Interaction you met the principle "forgiveness over permission". Which writing pattern expresses it?
Undo is forgiveness made visible, and the success message is where it is offered.
Part three
Words across the journey
The building blocks appear inside larger moments: the first empty screen, the wait while something loads, the notification that pulls someone back, the permission prompt, the receipt email, the price, the cancellation. These are the moments where words decide whether people trust you. This Part also covers the mechanics that break products in other languages and regions: numbers, dates, plurals and sentences built from pieces.
10
Empty states, onboarding and loading
Taught by Kinneret Yifrah, with Jakob Nielsen (response times) and Samuel Hulick (onboarding teardowns)
An empty screen is a chance to teach the product's next step in one sentence and one button; onboarding copy should sell the outcome, not tour the interface; and loading copy should say what is happening whenever a wait passes a second.
Every list, folder and search in your product will be empty for someone at some point. There are three kinds of empty, and each needs different words. First use: nothing exists yet, so explain what will appear here and how to create the first one. User-cleared: the person finished everything (inbox zero, all tasks done), so acknowledge it calmly. No results: a search or filter matched nothing, so say what was searched and suggest how to widen it.
Three empties, three jobs. First use teaches and offers the first action. Cleared reassures. No results repeats the query (so typos are visible) and widens the search.
Don't
No data
There are no items to display.
Describes the database. "No data" and "items" are system words. There is no next step, so a new user is stuck on the first screen.
Do
Your reading list is empty
Save articles from any site with the Share button, and they'll wait here, even offline.
How to save from Safari
Explains the value and the first step. It teaches the core habit of the product in two sentences.
Onboarding copy: outcomes, not tours
The urge in onboarding is to explain the interface: "This is the sidebar. This is where your projects live." People skip tours because they arrived with a goal, not a curiosity about your sidebar. Write onboarding around the first meaningful outcome instead: "Write your first note. It saves as you type." Use the minimum words to get someone to the moment they feel the product working (activation is covered in Problems Worth Solving). Teach the rest in context, the first time each feature becomes relevant.
Welcome screen: one sentence of value, in the user's terms. "Turn articles into a calm reading queue." Not "Welcome to ReadLater 2.0!".
Questions: ask only what changes the experience, and say why: "What do you mostly read? We'll suggest fonts and layouts."
Coach marks: at most one at a time, tied to an action the person is about to take. Each one sentence.
Skip: always offer it, and name it plainly ("Skip setup"), never guilt ("I'll figure it out myself, I guess").
Loading copy: say what is happening, honestly
Jakob Nielsen's response-time limits (from his 1993 book Usability Engineering) still hold: about 0.1 seconds feels instant, about 1 second keeps the flow of thought, and about 10 seconds is the limit of attention. Under a second, show nothing or a subtle indicator; words would flash and distract. Between 1 and 10 seconds, a short status helps ("Loading your notes…"). Beyond 10 seconds, give progress and specifics ("Importing 1,204 contacts: 380 done"), and say whether people can leave ("You can close this window; we'll email you when it's done"). Motion and skeleton screens are in Motion & Feel.
The longer the wait, the more specific the words. Vague cleverness ("Reticulating splines…") is fine for a game's personality; in a productivity tool, numbers reassure more than jokes.
Do
Write all three empty states for every list.
Repeat the search query in no-results messages.
Onboard toward one outcome, teaching the rest in context.
Use counts and time estimates for long waits.
Don't
Show "No data", "No items" or a blank screen.
Tour the interface before the person has done anything.
Flash "Loading…" text for sub-second waits.
Promise times you cannot keep ("Almost there!" for two minutes).
In the wild
GitHub empty repositoryGitHub
A new, empty repository shows quick setup instructions with the exact commands to push existing code or create a new project. The empty state is the documentation, exactly when it is needed.
Duolingo first runDuolingo
Lets you choose a language and start a lesson before asking you to create a profile. Show the outcome first; ask for commitment after.
Google Search "Did you mean"Google
When a query looks misspelled, Search suggests the corrected query rather than just reporting nothing found. A no-results state can diagnose the likely cause.
Common mistakes
Designing only the full state
Why it happens: you test with your own data, so lists are always full.
Fix: create a fresh test account weekly. Write every empty state as part of the feature (Chapter 16's audit catches the rest).
Cute empty states everywhere
Why it happens: empty states are a favourite place for illustrations and jokes.
Fix: an illustration is fine on first use; the words still need to teach the next step. On a no-results screen, people are mid-task: be brief and useful.
Check yourself
An export of 3 years of data takes about 4 minutes. What should the screen say?
Long waits need an estimate and permission to leave. A spinner alone for 4 minutes looks like a frozen app.
Exercise 10.1 45 minutes · on your own product
Empty and waiting
Make a fresh account. Screenshot every empty screen you meet in the first five minutes.
For each list, write first-use, cleared and no-results copy (title, one sentence, one action).
Find your three slowest operations. Write copy for each according to the timeline above.
Rewrite your welcome screen as one sentence of outcome.
You're done when: every list has three empty states written, and every wait longer than a second has status copy.
Beginner
Competent
Strong
First-use states only.
All three states plus loading copy.
Empty states teach the core habit, and the welcome sentence is tested on two people who have not seen the product.
11
Notifications, emails and permission prompts
Taught by Apple's Human Interface Guidelines, with Android developer guidance and Kinneret Yifrah
Words that reach people outside your app must earn the interruption: front-load the useful fact, make it actionable, and when you ask for permission, explain the benefit in the person's terms before the system asks.
Inside your app, people chose to be there. A notification or email arrives uninvited, on a lock screen next to messages from friends and family. Every one spends a little trust. The words decide whether that trust is repaid (useful, specific, timely) or wasted ("We miss you!"). Spend the first few words on the fact itself, because lock screens and inbox lists truncate.
Don't
Invoicer
You have a new notificationTap to see what's new in your account.
Invoicer
We miss you!It's been a while. Come back and check out our latest features!
Content-free and needy. The first forces a tap to learn anything; the second is about the product's feelings, not the reader's needs.
Do
Invoicer
Ravi paid ₹18,500Invoice #204 for "Website redesign" is now settled.
Invoicer
Invoice #198 is 7 days overdueSend Meera a reminder?
The fact is the title. Who, what, how much. The second offers a clear action. Both are worth an interruption.
Notification copy rules
Title is the news. "Ravi paid ₹18,500", not "Payment update". The app name is already shown by the system, so don't repeat it.
Body adds the one detail that helps decide whether to act now.
One notification, one event. Group many events into a summary ("3 invoices paid today, ₹42,000").
Never guilt, never fake urgency. "Your streak is about to die!" works short-term and burns trust long-term (see Honest & Calm).
Let people control it, and say how in settings: "Payment received: on. Weekly summary: off."
Transactional emails
Receipts, password resets, invitations and alerts are often the most-read emails a product sends, and the least designed. The structure is the inverted pyramid again. Subject: the event and the key fact ("Receipt: ₹299 for Pro, May 2026"). First line: what happened. Then the details people may need later (amount, date, last four digits, invoice number). Then what happens next, and how to get help. Use a from-name people recognize. Keep one purpose per email, and make the main link a descriptive button ("Reset password"), with the link also in plain text for clients that strip buttons.
A receipt is a reference document. People search their inbox for it months later. Put searchable facts (amount, invoice number, product name) in the subject and first lines.
Permission prompts and priming
On iOS, the system permission alert for camera, location, contacts and similar shows a purpose string that you write (for example the value of NSCameraUsageDescription). And you generally get one chance: after someone taps "Don't Allow", the app cannot show the system prompt again, and the person has to go to Settings. Android similarly lets apps show a rationale, and repeated denials stop the prompt from appearing. So the words before and inside the prompt matter a lot.
The common pattern is pre-permission priming: before triggering the system prompt, show your own screen, at the moment the permission becomes useful, that explains the benefit in the person's terms and lets them say "Not now" without burning the system prompt. Ask in context (when they tap "Scan receipt", not on first launch), explain the benefit, and respect the no.
Don't
Wrong time, no reason. On first launch nobody knows why an invoicing app wants the camera. "To function properly" explains nothing, so many tap Don't Allow, permanently.
Do
Right moment, real benefit, honest privacy line. The system prompt only appears after "Allow camera", and its purpose string repeats the same benefit.
Watch out
Priming must be honest. Don't design your screen to look like the system alert, don't hide "Not now", and don't keep re-asking on every launch. The goal is an informed choice, not a higher grant rate at any cost.
Do
Make the notification title the actual news.
Put searchable facts in email subjects.
Ask for permissions in context, after explaining the benefit.
Write purpose strings that name the feature and the data use.
Don't
Send "We miss you" or "Check out what's new" pushes.
Ask for every permission on first launch.
Write "required to function properly" as a reason.
Use fake urgency or guilt in reminders.
In the wild
App Tracking TransparencyApple, iOS 14.5, 2021
Apps must ask before tracking across other companies' apps and sites, with a developer-written explanation shown in the system alert. Many people say no. When the prompt is mandatory, your one sentence of explanation carries the whole decision.
Duolingo remindersDuolingo
Known for a persistent, playful owl persona in its reminders, which became a running internet joke. It suits a game-like product, and also shows how close playful nagging sits to guilt. Notification tone is part of your brand, for better or worse.
Stripe receiptsStripe
Receipt emails lead with the amount and merchant and list the payment details below. A receipt's job is to be found and understood months later.
Common mistakes
Marketing in transactional emails
Why it happens: the email has high open rates, so it seems wasteful not to promote something.
Fix: keep the transactional purpose clear and on top. A short line at the end at most. People trust receipts because they are not ads.
Asking on launch
Why it happens: it is simplest to request everything in one place.
Fix: request each permission the first time a feature needs it, and handle "no" gracefully with a way to enable it later in settings.
Check yourself
Your reading app wants notification permission. When and how should it ask?
Asking at the moment of relevance, with a specific promise (one notification, Sundays), makes the value and the cost clear. People say yes to bounded, useful promises.
Exercise 11.1 50 minutes · on your own product
Outside-the-app words
List every notification and transactional email your product sends.
Rewrite each notification so its title is the news, in under 40 characters.
Rewrite your two most important emails with the anatomy above.
List every permission you request, when, and the purpose string. Move each request into context and write a priming screen for the most important one.
You're done when: every notification passes "would I want this on my lock screen?", and every permission is asked in context with a specific benefit.
Beginner
Competent
Strong
Notifications rewritten.
Notifications, emails and permission copy all rewritten.
Also removes at least one notification type and adds per-type notification settings with clear labels.
12
Numbers, dates and other languages
Taught by Unicode CLDR and W3C Internationalization, with GOV.UK style
Write numbers, dates and units the way your reader expects, let the platform format them by locale, and never build sentences by gluing strings together, because word order, plurals and length change in every language.
Numbers and units in copy
Digits, not words, in interface text: "3 files", "2 minutes". They are faster to scan. Exception: avoid starting a sentence with a digit if your style guide prefers words there, or restructure.
Units with a space and the standard symbol: "25 MB", "4 GB", "30 days". Be precise: "up to 25 MB per file".
Ranges: "10 to 15 minutes" reads better in speech and screen readers than "10-15 mins".
Money: always show the currency, the period and tax status: "₹299/month, including GST". Let the formatter place symbols and separators.
Round for humans, keep exact for records: "about 4 minutes left" in a progress line; "₹1,23,456.50" on an invoice.
Dates, times and relative time
"03/04/2026" means 3 April in India and the UK, and March 4 in the US. Avoid all-numeric dates in interfaces; write the month as a word ("3 April 2026", "Apr 3, 2026") using the locale's order. Relative time is friendlier for recent events ("just now", "5 minutes ago", "yesterday") and worse for older ones ("143 days ago" is a puzzle). A good default: relative for the past week, absolute date after that, and the exact timestamp on hover or long-press. For anything scheduled across regions (meetings, launches, deadlines), name the time zone.
A ladder, not one format. Apps such as Gmail and Slack use a similar ladder. Pick your thresholds once and implement them in one function.
Plurals are not "add an s"
English has two plural forms for whole numbers in most messages: "1 file", "2 files". Other languages differ. The Unicode Common Locale Data Repository (CLDR) defines plural categories named zero, one, two, few, many and other. Japanese and Chinese use one form ("other") for all counts. Russian and Polish use several forms depending on the last digits. Arabic uses all six categories. Your code must not decide plurals with n === 1 ? "" : "s". Use a message format that lets each language define its own forms, such as ICU MessageFormat, and the platform's plural rules (in JavaScript, Intl.PluralRules).
Lab: one value, many locales
Number
1,234,567.5
This lab uses your browser's built-in Intl formatters, the same ones you can call in your own code. Switch to en-IN and notice lakh grouping (12,34,567). Switch to Russian or Arabic and slide the count from 0 to 25: watch the plural category change in ways English never does. The relative time and list lines are full localized phrases, not glued pieces.
Localization-ready writing
Even if you only ship in English today, writing for translation makes your English better: shorter sentences, no idioms, complete strings. The rules that matter most:
Never concatenate."Delete " + name + "?" assumes English word order and grammar. Use whole strings with named placeholders: "Delete {name}?", so a translator can move {name} where their language needs it.
Plan for expansion. Translated text is often 30 to 40 percent longer than English on average, and very short strings can double or more. "Edit" can become "Bearbeiten". Never size buttons to the English word.
Avoid idioms and puns. "Hit it out of the park", "piece of cake", "it's a wrap" do not translate, and often confuse non-native English readers too.
Don't reuse a string in two places just because the English matches. "Open" (an adjective: the file is open) and "Open" (a verb: open the file) are different words in many languages. Give each its own key.
No text in images. It cannot be translated, resized or read by screen readers.
Give translators context: a comment per string saying where it appears and any length limit.
Strings are sentences, not Lego. If you find yourself joining strings with +, you are writing grammar in code, and it will be English grammar.
For the solo creator
You may never pay for translation, but you probably sell to people in several countries. Two habits cost nothing now and save weeks later: use Intl (or your platform's equivalent) for every number, date, currency and relative time; and keep every string in one file with named placeholders. An Indian user seeing "1,234,567" instead of "12,34,567", or a US user seeing "03/04" and reading March, is a small, avoidable crack in trust.
Do
Format numbers, money and dates with locale-aware APIs.
Write month names, not all-numeric dates.
Use full strings with named placeholders and plural rules.
Leave 40 percent spare width for labels and buttons.
Don't
Concatenate sentence fragments.
Pluralize by appending "s".
Reuse one string key for different meanings.
Use idioms, puns or culture-bound references in UI text.
In the wild
JavaScript Intl APIsECMAScript Internationalization API
NumberFormat, DateTimeFormat, RelativeTimeFormat, PluralRules and ListFormat are built into modern browsers and Node, backed by CLDR data. You do not need a library to format correctly for most locales.
ICU MessageFormatUnicode ICU
A widely used syntax for messages with plurals and selections, supported by libraries on most platforms. Choose a format that lets each language define its own plural forms.
GOV.UK date styleGDS
Uses dates like "4 June 2026", without ordinals like "4th", and the 12-hour clock with "am" and "pm". A written date rule removes a whole class of ambiguity.
Common mistakes
Hard-coded "s"
Why it happens: it works in English and takes one line.
Fix: route every count through a plural-aware function from day one, even with English only. It also fixes "1 items" bugs.
Locale = language
Why it happens: you set "English" and assume formatting follows.
Fix: en-IN, en-US and en-GB format numbers and dates differently. Use the full locale from the device or browser.
Fixed-width buttons
Why it happens: the design looks tidy when every button is 96 px.
Fix: let buttons grow with their label, and test with a pseudo-localized build that lengthens every string by 40 percent.
Check yourself
Your code shows count + " photo" + (count===1?"":"s") + " selected". You plan to add Polish. What is the right change?
Polish needs more than two forms, and the number and words may change order. Only a plural-aware message format handles that.
Exercise 12.1 45 minutes · in your codebase
The localization smell test
Search your code for string concatenation in UI text (+ ", template literals that join sentence parts).
Search for manual pluralization and hand-formatted numbers or dates.
Replace three of each with a formatter or a template with named placeholders.
Write your date and number rules in words.md (relative-time ladder, date style, currency style).
Temporarily lengthen every string by 40 percent (a quick pseudo-localization) and screenshot what breaks.
You're done when: you have a list of localization smells, nine fixed, written rules, and a screenshot of your UI with 40 percent longer text.
Beginner
Competent
Strong
Finds the smells.
Fixes nine and writes the rules.
Builds a single formatting module used everywhere, and fixes the layout breaks from pseudo-localization.
13
Words for trust: pricing, privacy and cancellation
Taught by Harry Brignull (deceptive patterns), with Mailchimp and GOV.UK
Around money, data and leaving, say the specific fact people are afraid you are hiding: the full price and when it is charged, what you collect and why, and exactly how to cancel.
Trust copy works on a simple mechanism. People arrive at a pricing page, a sign-up form or a cancel screen with a suspicion: "there's a catch". Every vague phrase ("Unlock premium", "We value your privacy", "Manage subscription") confirms the suspicion, because vagueness is what a catch looks like. Every specific fact ("₹299 a month after the 14-day trial. We'll email you 3 days before.") disarms it. Specifics are not only clearer; they are evidence that you have nothing to hide.
Pricing copy
Say the real price and period, including tax where the buyer expects it: "₹299/month incl. GST" or "$8/month, billed yearly ($96)".
Say when money moves: "You won't be charged today. Your trial ends 14 March; then ₹299/month."
Promise and keep a reminder before a trial converts. In India, RBI rules for recurring card payments already require a pre-debit notification before each charge; a friendly reminder is good practice everywhere.
Name plan differences in outcomes, not feature codes: "Unlimited invoices" beats "Pro tier quota uplift".
Put the cancellation path next to the price: "Cancel any time in Settings → Plan."
Don't
Start your FREE trial!
Unlock everything. Cancel anytime.*
Continue
*Subscription auto-renews at the then-current rate unless canceled 24 hours prior to the end of the trial period.
The catch is in the footnote. No price, no date, a generic button, and the important fact in 10 px legal text.
Do
Try Pro free for 14 days
Then ₹299/month. You won't be charged today. We'll email you on 11 March, 3 days before your trial ends. Cancel in Settings any time.
Start free trial
The catch, stated as a feature. Price, date, reminder and cancel route in four short sentences. People who sign up here stay longer because nothing surprises them.
Privacy copy
"We value your privacy" is the most ignored sentence on the internet, because everybody says it. Privacy copy earns trust only when it is specific and placed at the moment of collection. Next to a field, say what you use it for. In settings, describe what each toggle actually shares. In your privacy policy, start with a plain summary: what you collect, why, who sees it, how long you keep it, how to delete it. And only say "we never sell your data" if it is true and will stay true.
Privacy is a series of small answers. The legal policy still exists for completeness, but trust is built in one-line answers next to each request.
Cancellation and leaving
The cancellation flow is where many products reveal their real voice. The honest pattern: a clearly labeled path ("Cancel plan" in Settings), one screen that states what happens and when ("You'll keep Pro until 30 June; your notes stay; export any time"), an optional one-question survey, and a final button that does what it says. You may offer an alternative once (pause, a cheaper plan), as an equal option, not as a maze. Regulators in several countries have acted against hard-to-cancel subscriptions; for example, the US Federal Trade Commission sued Amazon in 2023 over how Prime sign-up and cancellation worked. But the stronger reason is simpler: people who leave easily are the people who come back and recommend you.
Don't
Wait! Don't leave us
You'll lose ALL your premium benefits forever. Are you really sure you want to give up on your goals?
Yes, I give upStay and save 50%
Guilt, exaggeration and confirmshaming. "Forever" is false; "I give up" shames the choice; the real action is a faint link.
Do
Cancel your Pro plan?
You'll keep Pro until 30 June, then move to the free plan. Your notes stay; you can export them any time. If price is the issue, you can pause for up to 3 months instead.
Pause insteadCancel plan
Facts, one fair alternative, a clear button. Calm tone in a moment that can feel awkward on both sides.
For the solo creator
Your reputation is your marketing budget. One angry post about a surprise charge can cost more than a month of revenue. Write your pricing, trial and cancellation copy as if a skeptical friend will screenshot it. Then set up the trial reminder email before launch, not after the first complaint. More on honest patterns in Honest & Calm; pricing pages in Identity & Launch.
Do
State price, period, tax and charge date in normal-sized text.
Explain each piece of data where you collect it.
Label the cancel path plainly and keep it short.
Tell people what they keep after canceling.
Don't
Hide the catch in footnotes or after the button.
Write "We value your privacy" without a specific fact.
Use guilt, false loss ("forever") or shaming decline labels.
Make canceling require email, phone or a chat.
In the wild
App Store subscriptionsApple
Subscriptions bought through the App Store can be viewed and canceled from one place in the account settings, with the renewal date shown. A predictable cancel location builds trust in buying in the first place.
App privacy labelsApple App Store, December 2020
Apps show a standard summary of the data they collect, in categories, before download. A short, structured summary beats a long policy for most decisions.
"Confirmshaming"Named on Harry Brignull's deceptive patterns catalog
Decline options worded to make people feel bad ("No thanks, I prefer paying full price"). Catalogued as a deceptive pattern. If your decline label would embarrass you read aloud, rewrite it.
Common mistakes
"Free" that isn't
Why it happens: "free" converts.
Fix: say "free for 14 days, then ₹299/month" in the same line. If a card is required, say so before the form.
Legal voice in product moments
Why it happens: copying the terms of service into the UI feels safe.
Fix: keep the legal text in the terms, and write the product moment in plain words that match it. Plain does not mean less accurate.
Check yourself
Your trial converts automatically. Some users complain about surprise charges. Which copy change addresses the cause?
The surprise comes from forgetting. A specific promised reminder, kept, removes it. Claims like "No surprises!" are vague and prove nothing.
Exercise 13.1 45 minutes · on your own product
The skeptical friend review
Screenshot your pricing, sign-up, every data-collection field and the cancel flow.
For each, write the question a skeptical friend would ask ("When do I pay?", "Who sees this?", "How do I get out?").
Check whether the answer is on screen, in normal-sized text. If not, write it.
Rewrite your cancel flow as one honest screen.
You're done when: every skeptical question has a visible, specific answer, and canceling takes at most two screens.
Beginner
Competent
Strong
Adds price details.
Answers all skeptical questions on screen.
Also ships the trial reminder email and a plain-language privacy summary.
14
Inclusive language
Taught by Microsoft Style Guide (bias-free communication), with W3C Internationalization and GOV.UK
Write so that nobody using your product feels excluded, assumed about or talked down to: neutral words for people, no assumptions about bodies, names, genders or cultures, and no "just" or "simply" that make struggle feel like failure.
Inclusive language is not a list of forbidden words; it is the habit of noticing who your words assume. Every interface sentence carries assumptions: that the reader is a man ("Hey guys"), that everyone has a first name and a surname, that a task is easy for everyone ("simply drag the file"), that everyone celebrates the same holidays, that "blind" and "crazy" are fine metaphors. When an assumption is wrong for a reader, the product tells them, in a small way, that it was not made for them.
Where assumptions hide
Area
Assumes
Write instead
Addressing people
"Hey guys", "Dear Sir"
"Hi everyone", "Hi Meera", or no greeting
Third person
"he" for a generic user
"they", or rewrite with "you"
Difficulty
"Simply", "just", "easy", "obviously"
Delete the word; give the steps
Disability metaphors
"blind spot", "crippled", "sanity check", "lame"
"gap", "broken", "quick check", "weak"
Technical terms
"whitelist / blacklist", "master"
"allowlist / blocklist", "main"
Names
First name + last name, both required
One "Full name" field, plus "What should we call you?"
Gender
Male / Female, required
Ask only if needed; include more options and "Prefer not to say"
Culture
"Merry Christmas" to every user, US-only examples
Neutral seasonal copy; varied example names, places and currencies
Names and forms
Forms encode assumptions most directly. Many people have a single name (common in parts of South India and Indonesia, for example), family names that come first, names with spaces or apostrophes, or names longer than 30 characters. The W3C's article "Personal names around the world" walks through these cases. A single "Full name" field that accepts any characters, plus an optional "What should we call you?", works for nearly everyone. Ask for gender, title or date of birth only if you truly need them, and say why.
Don't
First name*
Meenakshi
Last name*
Last name is required
Gender*
Male / Female
Forces a shape on people. A person with one name cannot continue honestly. Gender is required and binary, and nothing says why it is asked.
Do
Full name
Meenakshi
What should we call you? (optional)
Meena
We use this in emails and greetings.
Accepts any name. One field for the legal name, an optional friendly name, and no gender question because the product does not need it.
"Just" and "simply"
Help text often says "Just connect your account" or "Simply drag the file here". To the writer it sounds encouraging. To a reader who is stuck, it says the task is trivial and they are failing at it. These words add nothing to the instruction; deleting them makes the sentence shorter and kinder at once. The same goes for "obviously", "of course" and "easy". Let the person decide what is easy.
The "just" test. Search your strings for just, simply, easy, obviously and of course. In almost every case, deleting the word improves the sentence.
Accessibility and words
Inclusive writing overlaps with accessibility: link text that makes sense out of context, alt text that describes purpose, instructions that do not rely on color or position ("click the green button on the right"), and plain language for people with cognitive disabilities. Those are covered in depth in Accessible & Inclusive.
Do
Use "you", "they", "people", "everyone".
Use one flexible name field.
Use varied example names, places and currencies.
Describe actions, not senses ("select", "choose" rather than "see" where possible).
Don't
Use disability as a metaphor for "bad".
Assume gender, family structure, religion or holidays.
Say "just", "simply", "easy" in instructions.
Ask for personal data you do not need.
In the wild
GitHub default branchGitHub, October 2020
Changed the default name for new repositories' primary branch from "master" to "main". Many tools followed. Even deeply technical terms can be changed when a better word exists.
Microsoft Writing Style GuideMicrosoft
Includes a section on bias-free communication covering gender-neutral alternatives, people-first or identity-first language, and examples that reflect diverse people. Write your own short version; you do not need to invent the rules.
W3C "Personal names around the world"W3C Internationalization
An article explaining how names vary across cultures and what that means for form design. Read it once and you will never build a required last-name field again.
Common mistakes
Treating it as a word filter only
Why it happens: swapping banned words is easy to check.
Fix: also review the assumptions in your forms, examples, images and defaults. Who could not complete this flow honestly?
Over-correcting into vagueness
Why it happens: fear of offending leads to abstract, bloodless copy.
Fix: inclusive copy is still specific and warm. "Hi Meena" beats "Greetings, valued member".
Check yourself
Your onboarding says "Just pick a template and you're good to go, guys!" What should change?
Three small exclusions in one line: an assumption of ease, a gendered address and an idiom that translates poorly. The rewrite is friendlier because it removes a worry.
Fill your sign-up form as three people: someone with one name, someone with a 40-character name with an apostrophe, someone who does not want to give their gender.
Fix whatever blocked them.
You're done when: the search returns no hits and all three test people can complete sign-up honestly.
Beginner
Competent
Strong
Words swapped.
Words swapped and forms fixed.
Also adds an inclusive-language section to words.md and a lint rule for the word list.
Recap and connect: Part three
Empty screens teach, waits explain, notifications earn their interruption, permission prompts explain benefits in context, numbers follow the reader's locale, trust comes from specifics, and inclusive words avoid assumptions.
Connect the ideas
Which idea from Part one explains why "₹299/month after 14 days, reminder on 11 March" builds more trust than "Cancel anytime*"?
Trust copy is plain language applied to the topics people worry about most.
Connect the ideas
A notification reads "Hey guys! Just 1 days left!!". How many separate rules from this guide does it break?
A good rewrite: "Your trial ends tomorrow. Choose a plan to keep your 12 projects."
Part four
Craft and process
Good product words come less from talent than from editing and process. This Part teaches you to edit hard (cut, read aloud, judge readability scores for what they are) and to run a lightweight content design process alone: audits, content-first prototypes, and strings organized in code so they can be reviewed, kept consistent and translated.
15
Editing: cutting words, reading aloud and readability scores
Taught by William Strunk Jr. and E. B. White, with Steve Krug and Rudolf Flesch
Your first draft is always too long; cut in rounds, read every string aloud, and use readability scores as a smoke alarm, not as a judge.
Vigorous writing is concise. A sentence should contain no unnecessary words, a paragraph no unnecessary sentences, for the same reason that a drawing should have no unnecessary lines and a machine no unnecessary parts.William Strunk Jr., The Elements of Style
Strunk's rule, "Omit needless words", is the most useful single sentence about interface writing, even though it was written for students decades before screens existed. Steve Krug turned it into his third law of usability in Don't Make Me Think: get rid of half the words on each page, then get rid of half of what's left. Both are deliberately extreme. The point is not a word count; it is that most first drafts carry words that make the reader work without giving them anything.
There is a limit, and you need to know it. Concise is not the same as shortest. "Saved" is shorter than "Saved. Your changes are on all your devices", but if people worry about sync, the second one does more work. Cut words that carry nothing; keep words that answer a question. The test is not "can I delete this?" but "would anyone miss this?".
Three rounds of cutting
Round 1 deletes filler: "please note that", "successfully", "actually", "in order", "at this time". Round 2 swaps phrases for words: "is able to" → "can", "make a selection" → "choose". Round 3 restructures: lead with the outcome, merge or split sentences, turn the instruction into the button.
Lab: cut the words
Sentence 1 of 3
0words
0%cut
0grade (Flesch-Kincaid)
0reading ease
Press any word to strike it; press again to restore it. Aim to keep the meaning while cutting at least 40 percent. The result line shows what the reader would see. Scores update live: notice that the grade drops as you cut, but also that a broken sentence can score well, which is why scores cannot replace reading aloud.
Readability formulas, and their limits
Rudolf Flesch's Reading Ease score (1948) and the Flesch-Kincaid Grade Level (developed for the US Navy in 1975) are the most common formulas. Both use only two inputs: average sentence length in words, and average word length in syllables. Grade Level = 0.39 × (words per sentence) + 11.8 × (syllables per word) − 15.59. Tools like Hemingway Editor and many CMS plugins show these scores. They are useful because long sentences and long words really do slow people down.
But look at what the formulas cannot see: meaning, order, logic, jargon that happens to be short ("API", "fork", "ping"), and context. A two-word button is not a sentence. "Do not not turn off sync" scores beautifully and is nonsense. A score tells you where to look; only reading tells you what is wrong.
Two inputs, many blind spots. Use scores to find long sentences in help pages and emails. Don't run them on buttons and labels, and never write to hit a number.
The read-aloud test
Reading aloud is the single best editing tool you own, and it is free. Your ear catches what your eye skips: sentences that run out of breath, words you would never say ("utilize", "kindly"), a robot tone, repeated words, missing words. Read every new string aloud before you commit it. Better: read the whole flow aloud as the conversation from Chapter 1. If you would be embarrassed to say a line to a customer standing in front of you, rewrite it.
Before
Please be advised that, in order to ensure an optimal experience, it is recommended that you update the application to the latest version at your earliest convenience. (31 words)
Nobody talks like this. Read it aloud and you run out of breath before the point arrives.
After
A new version is ready. It fixes the sync delay some of you reported. Update now(14 words + button)
Sounds like a person. It also says why, which "optimal experience" never did. The instruction became the button.
For the solo creator
Batch your editing. Once a week, export all strings that changed (your string file's diff is perfect for this), read them aloud in one sitting, and cut. Twenty minutes a week keeps your product's words consistent, and editing in a batch makes inconsistencies jump out that you would never see one string at a time.
Do
Cut in separate rounds: filler, phrases, structure.
Read every string aloud before shipping.
Use readability scores on long text to find problem sentences.
Keep words that answer a real question.
Don't
Write to hit a score.
Run formulas on labels and buttons.
Cut reassurance or reasons just to be short.
Edit on the same day you wrote, if you can avoid it.
In the wild
Hemingway Editor2013
Colors hard-to-read sentences, adverbs and passive voice, and shows a grade. Many writers use it as a first pass. A highlighter is more useful than a score, because it points at sentences.
GOV.UK content reviewGDS
Content designers review each other's work in pairs (often called "2i", a second pair of eyes) before publishing. Alone, a weekly read-aloud is your second pair of eyes.
Apple release notesApple
App Store "What's New" notes from careful developers lead with the user-visible change in one sentence, not "Bug fixes and performance improvements". Even the most skipped text is a chance to sound like a person.
Common mistakes
Cutting the reason
Why it happens: the reason clause is the longest part, so it goes first.
Fix: cut filler, keep reasons. "Update now to fix the sync delay" is better than "Update now", even though it is longer.
Telegraphese
Why it happens: over-cutting removes articles and verbs ("File upload fail. Retry.").
Fix: keep normal grammar. Short sentences, yes; broken ones, no.
Check yourself
A help article scores grade 13. Which fix most likely improves it?
The score points at the problem (long sentences, long words), but the fix is editing for meaning, then checking by ear. Swapping synonyms to hit a number can make text worse.
Exercise 15.1 40 minutes · on your own product
Halve it, then halve it again
Pick your onboarding screens or your landing page's first screen.
Read the final version aloud to someone (or record yourself). Restore any word whose absence made it unclear.
You're done when: you have the four versions with counts, and the final one is at most 60 percent of the original with no meaning lost.
Beginner
Competent
Strong
Cuts 20 percent.
Cuts 40 percent, reads naturally aloud.
Cuts 50 percent or more and adds a missing reason or reassurance that the original lacked.
16
A content design process for one
Taught by Sarah Richards, with Torrey Podmajersky and Michael Metts & Andy Welfle
Treat words as a system: audit what you have, write before you draw, keep every string in one organized place in code, and check new words against your voice chart and glossary before they ship.
Teams have content designers, style guides and review steps. You have yourself and a codebase. That is enough, if you put the words where you can see them all at once. The biggest problems in product copy are not individual bad sentences; they are inconsistencies between sentences written months apart, and gaps (states nobody wrote). Both are invisible when strings are scattered across components. Both become obvious in a single file or a single spreadsheet.
Step 1: the content audit
A content audit is an inventory of every piece of text in your product, with a judgment on each. Sarah Richards' Content Design describes audits as the starting point for any content work: you cannot improve what you have not listed. For an app, export your strings (or walk every screen with a spreadsheet open) and record, for each one: where it appears, its type (button, error, empty state…), the text, and any issue you see against this guide.
An audit turns taste into a list. After 30 minutes you will see patterns (all your errors are codes; three words for one object) that no single screen reveals.
Step 2: content-first prototyping
For new features, reverse the usual order. Write the conversation (Chapter 1), list every string the feature needs including every state (empty, loading, error, success, permission), then sketch the screens around those strings, then build. Michael Metts and Andy Welfle's book Writing Is Designing (2020) argues exactly this: writing is a design tool for working out what the product should do, not decoration added after. When you code the screen, paste the real strings in from the start.
Words lead, pixels follow. The string list is also your test plan: every string is a state you must be able to trigger.
Step 3: organize strings in code
Put every user-facing string in one file per language (JSON, YAML, .strings, strings.xml, whatever your platform uses). Key strings by meaning, not by position: invoice.send.button rather than screen3_button2, so a key still makes sense after a redesign. Add a short comment for context and length limits. Use named placeholders and plural-aware messages. Now your whole product's voice fits in one scrollable file you can read, search, diff and hand to a translator.
{
"invoice.send.button": "Send invoice",
"invoice.send.success": "Invoice sent to {email}. We'll tell you when it's opened.",
"invoice.send.error.bounced": "We couldn't deliver to {email}. Check the address, then send again.",
"invoice.list.empty.title": "No invoices yet",
"invoice.list.empty.body": "Invoices you send will appear here.",
"invoice.list.count": "{count, plural, one {# invoice} other {# invoices}}",
"invoice.delete.title": "Delete invoice {number}?",
"invoice.delete.body": "It will be removed for you and {client}. You can't undo this.",
"invoice.delete.confirm": "Delete invoice"
}
Keyed by meaning, grouped by feature, every state present, placeholders named, plurals handled. Reading this file top to bottom is a content review.
Step 4: keep it consistent
Your style guide is words.md: voice chart, tone map, glossary, banned words, date and number rules, capitalization rule. One page is enough.
Lint the string file: a tiny script that fails the build on banned words ("Submit", "invalid", "simply", "successfully", rival synonyms from your glossary) costs an hour and runs forever.
Review the diff: before each release, read the changed strings aloud (Chapter 15).
Screenshot review: occasionally look at every screen with real data and the longest strings, to catch truncation.
AI-assisted writing: useful, with three traps
Language models are good at producing variants quickly: five ways to say an error, a shorter version of a help paragraph, a first draft of an email. Use that. But they bring three traps. First, a default voice: generic, upbeat, adjective-heavy ("Seamlessly unlock powerful insights!"), which is nobody's voice and certainly not your calm one. Second, inconsistency: a model does not know your glossary unless you give it, so it will happily call a "notebook" a "folder". Third, invented facts: help text that describes a setting that does not exist, or a limit you never set. Give the model your voice chart and glossary, ask for options rather than answers, and edit every output against this guide. Designing AI features themselves, including how they should talk, is covered in Designing with AI.
Raw AI draft
Unlock Your Productivity Potential!
Seamlessly organize your thoughts in folders and supercharge your workflow with powerful AI-driven insights.
Generic hype and wrong terms. Title case, "seamlessly", "supercharge", and "folders" when your glossary says "notebooks". Also a claim about AI insights the app may not have.
Edited against the voice chart
Your first notebook is empty
Write a note and it saves as you type. Group notes into notebooks whenever you like.
Calm, specific, on-glossary. The model's draft was a starting point; the voice chart and glossary did the real work.
Checklist: your product's words
Foundations
On every screen
When things go wrong
Beyond the screen
Craft
Do
Audit all existing strings once, then keep the audit current.
Write strings before screens for new features.
Key strings by meaning and add context comments.
Lint for banned words and rival synonyms.
Don't
Hard-code strings inside components.
Key strings by screen position.
Paste AI drafts without checking voice, glossary and facts.
Let the style guide grow beyond what you actually use.
In the wild
GOV.UKGDS
Built its content around user needs, a public style guide and peer review, and published how it works so others could copy it. Process, written down, is what keeps thousands of pages consistent.
Platform string filesiOS, Android, web i18n libraries
Every major platform supports external string files with comments and plural rules (Apple's String Catalogs, Android's strings.xml with plurals, and ICU-based libraries on the web). The tooling to organize words already exists; use it from the first screen.
Mailchimp Content Style GuideMailchimp
Released publicly under a Creative Commons license, so others can adapt it. Start from a good public guide and cut it down to what your product needs.
Common mistakes
A style guide nobody opens
Why it happens: you write a long guide once and forget it.
Fix: keep it to one page, and make the important rules executable (a lint script) so the guide enforces itself.
Strings scattered in components
Why it happens: inline text is fastest in the moment.
Fix: move strings out of components as you touch each file. In a month, most will be in one place.
Auditing once
Why it happens: the audit feels like a project with an end.
Fix: add one line to your release checklist: "Read changed strings aloud; check glossary."
Check yourself
You ask an AI to write onboarding copy. It produces fluent, upbeat text. What is the most important step before shipping?
Fluency is not the problem; voice, terminology and truth are. Those are exactly what the model does not know unless you check.
Exercise 16.1 90 minutes · on your own product
Audit, centralize, lint
Export or collect every string into an audit spreadsheet with Screen, Type, Text, Issue, Action.
Fill in Issue for every row using this guide's chapters. Sort by Issue and fix the top 20.
Move strings for one feature into a string file keyed by meaning, with comments.
Write a 20-line lint script that flags your banned words and rival synonyms.
Complete the checklist above honestly.
You're done when: you have an audit, 20 fixes, one feature's strings in a file, and a lint script that runs.
Beginner
Competent
Strong
Audit done, few fixes.
Audit, fixes and one string file.
All strings centralized, lint in the build, and words.md is a complete one-page style guide.
Wrap-up
Ten things to remember
Words carry the meaning of your interface. Write them first, with real lengths, before you settle the layout.
People scan. Front-load every line and lead with the outcome, then the action, then the detail.
Plain language is faster for everyone, including experts. Short common words, active voice, one idea per sentence.
Voice is constant; tone follows the reader's feeling. No jokes where something is at risk.
One concept, one word, in the user's language. Keep a glossary.
Buttons name outcomes: verb plus object, matching the dialog title.
Labels never disappear. Placeholders and tooltips never carry essentials.
Errors say what happened and how to fix it, without blame, where the person is looking.
Specifics build trust: price, date, data use, cancel path. Vagueness looks like a catch.
Strings are a system: one file, keyed by meaning, locale-aware formatting, linted and read aloud before release.
Self-assessment: I can…
Practice assignment for the next two weeks
About 30 minutes a day. Every day ends with something added to words.md or your string file.
Day 1. Gray-bar test and string inventory of your busiest screen (Exercise 1.1).
Day 2. Two-word scan on three lists (Exercise 2.1).
Day 3. Plain-language sweep and banned-word list (Exercise 3.1).
Day 4. Voice chart and tone map (Exercise 4.1).
Day 5. Glossary and synonym fixes (Exercise 5.1).
Day 6. Button audit (Exercise 6.1) and form words pass (Exercise 7.1).
Day 7. Rest. Notice the words in three apps you use; collect one great and one bad example.
Day 8. Error inventory and rewrite of the top ten (Exercise 8.1).
Day 9. Confirmation triage and success messages (Exercise 9.1).
Day 10. Empty states and loading copy (Exercise 10.1).
Day 11. Notifications, emails and permissions (Exercise 11.1).
Day 12. Localization smell test (Exercise 12.1) and trust review (Exercise 13.1).
Day 13. Assumption audit (Exercise 14.1) and the halving exercise (Exercise 15.1).
Day 14. Audit, centralize and lint (Exercise 16.1). Read your whole string file aloud. Compare it with your Day 1 inventory and write three sentences on what changed.
Reflection
After two weeks, answer in words.md: Which single change made your product feel most different? Which rule do you still break, and why? What did a user or friend notice without being told?
Reading list
Strategic Writing for UX
Torrey Podmajersky, O'Reilly, 2019 · The most practical book on writing interface text, with voice charts, conversation-first design and patterns for each kind of UI text.
Microcopy: The Complete Guide
Kinneret Yifrah, 2017 (2nd edition 2019) · Hundreds of examples of forms, errors, empty states and buttons, with the reasoning behind each.
Content Design
Sarah Richards, 2017 · From the person who led GOV.UK's content team. Read it for user needs, audits and the discipline of writing only what people need.
Writing Is Designing
Michael J. Metts and Andy Welfle, Rosenfeld Media, 2020 · How to use words as a design tool from the first sketch, with a strong section on voice and on working inside product teams.
Nicely Said
Nicole Fenton and Kate Kiefer Lee, 2014 · Warm, readable guide to writing for the web with a clear voice, from one of the people behind Mailchimp's Voice and Tone.
The Elements of Style
William Strunk Jr. and E. B. White · Short and old, still the best training in cutting. Read "Omit needless words" and the section on active voice.
Don't Make Me Think
Steve Krug · Read the chapter on omitting needless words and the third law of usability for the interface version of Strunk.
Mailchimp Content Style Guide
Mailchimp, free online · A complete, public style guide you can adapt; especially the voice and tone and the writing-for-accessibility sections.
Writing for GOV.UK and the GOV.UK style guide
Government Digital Service, free online · The plain-language benchmark: reading age, sentence length, words to avoid, and the A to Z of style.
How Users Read on the Web
Jakob Nielsen, 1997, Nielsen Norman Group · The study behind "write for scanning", still worth reading for the method as well as the result.
Personal names around the world
W3C Internationalization · Short article that will change how you design every name field.
Microsoft Writing Style Guide
Microsoft, free online · A thorough reference for UI terms, capitalization and bias-free communication.
Next, carry these words into every state your product has: Accessible & Inclusive builds directly on the plain-language, link-text and form chapters here.