Words. Most of your interface is text.

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.

Reading timeAbout 4 hours, in 5 sittings
Practice time2 weeks, 30 minutes a day
Before thisThe Human Mind, Structure & Interaction
TeachersPodmajersky, Yifrah, Richards, Strunk & White, Mailchimp, GOV.UK, Nielsen

By the end you will be able to

  • 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?

Warm-up 2

Which error message is best for a failed card payment?

Warm-up 3

You write the code "You have " + n + " new message" + (n>1?"s":""). What breaks first when you translate the app?

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.

Words removed Words present Sync settings Sync over mobile data Sync photos Keep deleted notes 30 days Sign out Done
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.

Lorem ipsum: the layout is designed around text that will never exist. Every real constraint is hidden.

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?

Exercise 1.1 40 minutes · on your own product

The gray-bar test and a conversation

  1. 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.
  2. List every string on that screen in words.md, in reading order.
  3. Pick one flow (sign-up, create, share). Write it as a conversation of 6 to 12 lines between "Person" and "App".
  4. 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.
BeginnerCompetentStrong
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.

Top line read fully Second sweep, shorter Then only the firsttwo or three words (schematic, not data)
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.

What happened What to do Details "Payment failed." "Update your card to keep Pro." "Your bank declined the charge on 3 May at 09:12."
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?

Exercise 2.1 30 minutes · on your own product

The two-word scan

  1. Find the three longest lists in your product: settings, menus, list items, onboarding bullets.
  2. Cover everything except the first two words of each line. Can you tell every line apart?
  3. Rewrite each line that fails so its distinctive word comes first.
  4. 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.
BeginnerCompetentStrong
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.

Same message, three drafts (words per sentence) Draft 138 Draft 221 Draft 310 25-word guide 1 word = 10 px
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

  1. Common words over formal ones. "Use", not "utilize". "Start", not "commence". The long word rarely adds precision; it adds distance.
  2. 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".
  3. 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.
  4. One idea per sentence. If a sentence has "and" plus a comma plus "which", split it.
  5. 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.
  6. Say "you" and "we". Talking to the reader directly is shorter and warmer than "the user" or "the account holder".
Passive: "The file could not be uploaded." who? (missing) could not be uploaded the file why? Active: "We couldn't upload report.pdf. It's 31 MB; the limit is 25 MB." We couldn't upload report.pdf 31 > 25 MB Active voice forces you to fill the slots. Empty slots are the questions your support inbox will receive.
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 ofWriteWhy
utilize, leverageuseSame meaning, shorter, universal.
in order toto"In order" adds nothing.
prior to, subsequent tobefore, afterCommon words read faster.
commence, initiatestartPlain verb.
terminateend, cancel, closePick the specific action; "terminate" also sounds threatening.
make a selectionchooseTurn the noun back into a verb.
is able tocanShorter.
a number ofsome, or the number"3 files" beats "a number of files".
authenticatesign inUser's word, not the system's.
invalid inputwhat is wrong and how to fix it"Invalid" names a failure, not a fix.
functionalityfeature, or say what it doesAbstract noun.
at this timenow (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?

Exercise 3.1 35 minutes · on your own product

The plain-language sweep

  1. Search your code or string file for the words in the swap table. Count the hits.
  2. Find your five longest sentences in the UI. Count their words.
  3. Rewrite each to under 20 words, in active voice, keeping every fact.
  4. 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.
BeginnerCompetentStrong
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.

Tone map: where each moment sits ← Celebratory Neutral, helpful Serious → First publish Goal reached Tip, onboarding Settings saved Trial ending Payment failed Delete data Security alert Humor and exclamation marks belong only in the green zone.In the red zone: specific and calm, no jokes, no exclamation marks, every consequence stated.
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.

Example: a calm reading app FunnySerious FormalCasual RespectfulIrreverent EnthusiasticMatter-of-fact
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.

TraitWe areWe are notSounds likeNever sounds like
CalmSteady, unhurriedUrgent, hyped"Your notes are saved.""Woohoo! All saved!!"
DirectSpecific, shortCurt, cold"Turn on sync to see notes on your phone.""Sync must be enabled."
KindOn the reader's sideGushing, cute"That didn't work. Your draft is safe.""Oopsie! We goofed!"
HonestPlain about limits and costsSalesy, 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?

Exercise 4.1 60 minutes · on your own product

Voice chart and tone map

  1. Write three or four voice traits in a table with "We are", "We are not", "Sounds like", "Never sounds like".
  2. List 10 moments in your product, from the happiest to the most serious.
  3. Place them on a tone map (a line on paper is enough).
  4. Rewrite one green-zone and one red-zone message so both fit the same voice.
  5. 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.
BeginnerCompetentStrong
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?

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?

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.

System word (in your code) User word (on screen) Entity Contact Authenticate Sign in Sync conflict Two versions of this note Tenant Workspace Job failed (export) Export didn't finish is_archived = true Archived (hidden from list)
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.

Four words, one thing One word, one thing the object Sidebar: "Projects" Menu: "Spaces" Email: "your board" Button: "New folder" Users ask: "Space or board?" Project Sidebar: "Projects" Menu: "Projects" Email: "your project" "New project" Nobody wonders.
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.

TermMeansUse forDon't call it
NoteA single document the user writesList items, buttons ("New note"), emailsfile, doc, page, entry
NotebookA named group of notesSidebar, move dialogfolder, collection, space
Archive (verb)Hide from lists, keep foreverSwipe action, menudelete, remove, hide
Delete (verb)Move to Trash for 30 days, then removeMenu, confirm dialogremove, destroy, erase
Sign inEnter email and passwordButtons, emailslog 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?

Exercise 5.1 45 minutes · on your own product

Build your glossary

  1. List every noun that appears in your navigation, buttons and emails.
  2. Group synonyms that refer to the same thing. Pick one winner per group.
  3. Find 5 to 10 real user sentences (reviews, support emails). Do they use your winner? If not, consider their word.
  4. Write the glossary table with Term, Means, Use for, Don't call it.
  5. 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.
BeginnerCompetentStrong
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.

Delete 3 photos verbwhat happens scopehow many objectto what Weak labels to replace OK · Yes · No · Submit Continue (to what?) Click here · Go · Done Confirm (confirm what?) Fine only when context is total.
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?

Exercise 6.1 40 minutes · on your own product

The button audit

  1. Collect every button and menu action label into a list (search your code for button components).
  2. Mark each: generic (OK, Submit, Continue, Yes), vague, or specific.
  3. Rewrite every generic one as verb plus object, adding scope or price where it matters.
  4. For every dialog, check the title's verb matches the primary button.
  5. 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.
BeginnerCompetentStrong
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.

Mobile number We'll text a code to this number. 10 digits. 98765 4321 Enter all 10 digits. You've entered 9. Label: always visible Hint: why, and the format Input: keeps what was typed Error: what's wrong, how to fix The hint answers the question before it is asked ("why do they want my number?"). The error is specific and counts for the user, instead of saying "Invalid".
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
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?

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
GSTIN i Leave blank if you are not registered, or your invoice will be rejected.
Essential rule hidden. On a phone, nobody hovers. The one instruction that prevents a rejected invoice is behind a 12 px icon.
Do
GSTIN (optional) Only if your business is GST registered. 15 characters, for example 27ABCDE1234F1Z5 Visible to everyone, on every device.
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?

Exercise 7.1 45 minutes · on your own product

The form words pass

  1. Open your most important form (sign-up, checkout or settings).
  2. For each field, write: label, likely hesitation, hint that answers it (or "none needed").
  3. Move any rule hidden in a placeholder or tooltip into a visible hint.
  4. 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.
BeginnerCompetentStrong
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.

We couldn't send your invoice The email address "ravi@gmial.com" doesn't exist. Did you mean ravi@gmail.com? Use gmail.com Ref: INV-SMTP-550 1 What happened 2 Why (if useful) 3 How to fix ideally as a button Code for support, last
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

  1. Say what happened, specifically. Name the thing: which file, which field, which payment. "Couldn't save 'Q3 plan'" is better than "Save failed".
  2. 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."
  3. 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…").
  4. 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.
  5. 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.

You're offline. Edits saved locally. Email Add the part after @, like gmail.com Name Backup finished Bannerwhole screen or account; stays until fixed Inlineunder the field; specific fix Toastbackground info only; never for errors to fix
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

BeforeAfterWhat 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 wrongWe 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?

Exercise 8.1 60 minutes · on your own product

Error inventory and rewrite

  1. Search your code for every user-facing error string. List them with where they appear.
  2. Score each against the four tests (what, why, fix, kind and plain).
  3. Rewrite the ten most frequent (use logs or support emails to guess frequency).
  4. For at least three, turn the fix into a button or automatic recovery.
  5. 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.
BeginnerCompetentStrong
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.

Can it be undone? yes no Just do ittoast with Undo, 5 to 10 s Is the loss serious? no yes Do it, confirm quietly"Draft discarded" Confirm dialogstate the consequencetype name if catastrophic
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.
Delete "client-work" permanently? All issues, files and history will be deleted for 6 members. Type client-work to confirm. client-wor Delete workspace Disabled until it matches
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?

Exercise 9.1 45 minutes · on your own product

Confirmation triage

  1. List every confirmation dialog in your product.
  2. Run each through the decision tree. Mark: replace with undo, remove, or keep.
  3. Rewrite every kept dialog to include object name, count and consequence, with a verb button.
  4. 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?".
BeginnerCompetentStrong
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"?

Connect the ideas

In Structure & Interaction you met the principle "forgiveness over permission". Which writing pattern expresses it?

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.

First use No invoices yet Invoices you send will appear here. New invoice Cleared All caught up Nothing needs you right now. No results No notes match "gst refnd" Check the spelling, or search all notebooks. Search all
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.

0.1 s1 s10 slonger Instantno text Briefsubtle spinner,no words Noticeable"Loading your notes…" Long"380 of 1,204 imported.""You can close this;we'll email you." Thresholds after Nielsen (1993). Words scale with the wait: none, a phrase, then numbers and a promise.
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?

Exercise 10.1 45 minutes · on your own product

Empty and waiting

  1. Make a fresh account. Screenshot every empty screen you meet in the first five minutes.
  2. For each list, write first-use, cleared and no-results copy (title, one sentence, one action).
  3. Find your three slowest operations. Write copy for each according to the timeline above.
  4. 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.
BeginnerCompetentStrong
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.

From: Invoicer Receipt: ₹299 for Pro, May 2026 We charged ₹299 to your card ending 4242. Plan: Pro (monthly) Date: 3 May 2026 · Invoice INV-0512 Next charge: 3 June 2026 Download invoice Questions? Reply to this email. Recognizable from-name Subject: event + key fact First line: what happened Details for later reference One action, named Human help route
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
"Invoicer" Would Like to Access the Camera This app requires camera access to function properly. Don't AllowOK Shown on first launch
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
Scan receipts with your camera Point at a receipt and we'll fill in the amount, date and GST. Photos stay on your phone unless you attach them. Allow camera Not now Shown after tapping "Scan receipt"
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?

Exercise 11.1 50 minutes · on your own product

Outside-the-app words

  1. List every notification and transactional email your product sends.
  2. Rewrite each notification so its title is the news, in under 40 characters.
  3. Rewrite your two most important emails with the anatomy above.
  4. 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.
BeginnerCompetentStrong
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.

<1 minJust now <1 h12 min ago today3 h ago 1 dayYesterday <7 daysTuesday this year3 Apr older3 Apr 2025 Relative (yellow) while the reader can do the maths in their head; absolute (gray) after. Always offer the exact timestamp on hover, long-press or in a details view.
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.
Glued pieces: fixed English order "Delete " + name + "?" German: "{name}" löschen? Japanese: 「{name}」を削除しますか? The name must come first. Glue can't move it. One template per language en: "Delete {name}?" de: "{name} löschen?" Translators control order, grammar and punctuation. Your code only fills in {name}.
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?

Exercise 12.1 45 minutes · in your codebase

The localization smell test

  1. Search your code for string concatenation in UI text (+ ", template literals that join sentence parts).
  2. Search for manual pluralization and hand-formatted numbers or dates.
  3. Replace three of each with a formatter or a template with named placeholders.
  4. Write your date and number rules in words.md (relative-time ladder, date style, currency style).
  5. 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.
BeginnerCompetentStrong
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 as a footer link 4,000 words, read by almost nobody. Privacy at the point of use Phone numberOnly for sign-in codes. Never for marketing. Share usage statsCrashes and feature counts. No content. Policy summary (top)What, why, who, how long, how to delete. Keep the full policy; lead with the facts.
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?

Exercise 13.1 45 minutes · on your own product

The skeptical friend review

  1. Screenshot your pricing, sign-up, every data-collection field and the cancel flow.
  2. For each, write the question a skeptical friend would ask ("When do I pay?", "Who sees this?", "How do I get out?").
  3. Check whether the answer is on screen, in normal-sized text. If not, write it.
  4. 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.
BeginnerCompetentStrong
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

AreaAssumesWrite 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"
NamesFirst name + last name, both requiredOne "Full name" field, plus "What should we call you?"
GenderMale / Female, requiredAsk only if needed; include more options and "Prefer not to say"
Culture"Merry Christmas" to every user, US-only examplesNeutral 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.

To connect, just sign in and simply paste your API key. Reader who is stuck hears: "this is trivial, and you're failing at it." To connect, sign in and paste your API key. Shorter, same instruction, no judgment.
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?

Exercise 14.1 30 minutes · on your own product

Assumption audit

  1. Search your strings for: just, simply, easy, obviously, guys, he, his, blacklist, whitelist, master, sanity, crazy, blind.
  2. Fix each hit.
  3. 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.
  4. Fix whatever blocked them.
You're done when: the search returns no hits and all three test people can complete sign-up honestly.
BeginnerCompetentStrong
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*"?

Connect the ideas

A notification reads "Hey guys! Just 1 days left!!". How many separate rules from this guide does it break?

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

Words remaining after each round Draft: 34 words Round 1, delete filler: 22 Round 2, swap phrases: 15 Round 3, restructure: 9 Each round asks a different question, so do them separately. 1 word = 10 px.
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.

Words per sentence Syllables per word Formula Grade 6 Invisible to the formula: meaning · order · logic · short jargon · context · tone · whether it is true a hint,not a verdict
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?

Exercise 15.1 40 minutes · on your own product

Halve it, then halve it again

  1. Pick your onboarding screens or your landing page's first screen.
  2. Count the words. Round 1: delete filler. Round 2: swap phrases. Round 3: restructure.
  3. Record word counts after each round.
  4. 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.
BeginnerCompetentStrong
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.

ScreenTypeText nowIssueAction InvoicesEmpty"No data"system wordRewrite SettingsButton"Submit"genericRewrite UploadError"Error 413"code onlyRewrite SidebarNav"Spaces"synonym"Projects" InvoicesSuccess"Invoice sent to {email}"fineKeep Sort by Issue to see your worst patterns; sort by Type to check consistency within a type.
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.

1 Conversationperson ↔ product 2 String listevery state 3 Sketcharound real words 4 Buildstrings in one file 5 Read aloudcheck voice, glossary Steps 1 and 2 take about 30 minutes for a typical feature, and usually change what you build in steps 3 and 4.
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?

Exercise 16.1 90 minutes · on your own product

Audit, centralize, lint

  1. Export or collect every string into an audit spreadsheet with Screen, Type, Text, Issue, Action.
  2. Fill in Issue for every row using this guide's chapters. Sort by Issue and fix the top 20.
  3. Move strings for one feature into a string file keyed by meaning, with comments.
  4. Write a 20-line lint script that flags your banned words and rival synonyms.
  5. 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.
BeginnerCompetentStrong
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

  1. Words carry the meaning of your interface. Write them first, with real lengths, before you settle the layout.
  2. People scan. Front-load every line and lead with the outcome, then the action, then the detail.
  3. Plain language is faster for everyone, including experts. Short common words, active voice, one idea per sentence.
  4. Voice is constant; tone follows the reader's feeling. No jokes where something is at risk.
  5. One concept, one word, in the user's language. Keep a glossary.
  6. Buttons name outcomes: verb plus object, matching the dialog title.
  7. Labels never disappear. Placeholders and tooltips never carry essentials.
  8. Errors say what happened and how to fix it, without blame, where the person is looking.
  9. Specifics build trust: price, date, data use, cancel path. Vagueness looks like a catch.
  10. 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.

  1. Day 1. Gray-bar test and string inventory of your busiest screen (Exercise 1.1).
  2. Day 2. Two-word scan on three lists (Exercise 2.1).
  3. Day 3. Plain-language sweep and banned-word list (Exercise 3.1).
  4. Day 4. Voice chart and tone map (Exercise 4.1).
  5. Day 5. Glossary and synonym fixes (Exercise 5.1).
  6. Day 6. Button audit (Exercise 6.1) and form words pass (Exercise 7.1).
  7. Day 7. Rest. Notice the words in three apps you use; collect one great and one bad example.
  8. Day 8. Error inventory and rewrite of the top ten (Exercise 8.1).
  9. Day 9. Confirmation triage and success messages (Exercise 9.1).
  10. Day 10. Empty states and loading copy (Exercise 10.1).
  11. Day 11. Notifications, emails and permissions (Exercise 11.1).
  12. Day 12. Localization smell test (Exercise 12.1) and trust review (Exercise 13.1).
  13. Day 13. Assumption audit (Exercise 14.1) and the halving exercise (Exercise 15.1).
  14. 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.