Interaction Engineering · 7 / 10

The UI Speaks: How Users Read Your Copy

Picking the right control isn't enough—the UI still has to talk. The two words on a button and the one line in a dialog are the entire conversation between product and user. Microcopy is half of interaction: get it right and users don't have to think; get it wrong and even standard controls are wasted. AI has one trick for microcopy: slap "OK" on everything.

Button verbsOK / CancelSystem-speak translationDialog rewrite
"OK" is the busiest button—and the most useless

Count how many times you tapped "OK" today. It shows up in dialogs for delete, submit, quit, overwrite, clear—one word vouching for a hundred different consequences. Here's the problem: the button carries no answer; the answer lives in the body text, so users must finish the whole paragraph before they know what this tap does. OK/Cancel pairs are lazy—they push the reading cost onto the user.

The fix is to put the consequence on the button: swap "OK" for "Delete these 3," swap "Cancel" for "Keep them." Even if nobody reads a word of the body, a glance at the buttons is enough to answer safely. Cooper sets the same rule for action dialogs in About Face 4, Chapter 21: put a verb in the title. The title says what you're confirming; the buttons say what happens when you tap—neither side leaves the user guessing.

"Use a verb in the title of an action dialog."
Alan Cooper, About Face 4, Chapter 21: verbs carry action and consequence; nouns and "Notice" carry nothing.

There's a test version of this rule: cover the dialog body and look only at the title and buttons—can you answer safely? If yes, the copy passes; if you have to peek back at the body, it's still a lazy OK/Cancel variant. Start with a few contrasts and feel what verb buttons do.

ScenarioLazy versionConsequence-carrying
Empty cartOK / CancelEmpty 12 items / Keep them
Leave editorYes / NoSave & exit / Discard changes
Unlink phoneContinue / BackUnlink 138****2046 / Don't unlink

Notice a side benefit of consequence-carrying buttons: quantity and object land on the button too (12 items, 138****2046)—a final check done for the user. Most mis-taps happen because "I thought I selected a different batch"; naming the object on the button dissolves that misunderstanding on the spot.

The user's words vs. the system's words

Beyond buttons, the second disaster zone is nouns. The UI says "Field user_mobile validation failed" or "Violates uniqueness constraint"—words no user knows, lifted straight from the database and the logs. Cooper digs out the root in Chapter 14: developers put the database's needs ahead of the user's, so the software ends up serving the CPU, and users feel like they're working for the software.

Chapter 14 also has a much-cited principle: the error may not be the program's fault, but it is the program's responsibility. A phone number short one digit, a duplicate username—those count as the user's "mistakes," but translating the error into words they understand and can fix is the program's job. Even menu names don't escape this: Cooper argues that "File" itself is an implementation-model word; an invoicing app's menu should be called "Invoices." Whatever users call their stuff, the UI should call it that too.

System wordWhat it really meansRoot cause
This action cannot be undoneWhich action is "this action"? Say itSystem-perspective deixis—users must recall the last step themselves
Error 422What was filled wrong, and how to fix itHTTP status codes are developer logs (the case file from Lesson 2)
Session expiredYour login expired—sign in againSession is an implementation-model word; the user's word is "login"

AI is especially prone to this when writing UIs: it generates copy from the data structure, and the label becomes whatever the field is named. If you don't stop it, the database walks on stage and gives a speech. Next, rewrite a dialog by hand—three lines into human talk—and watch the mock change on the spot.

Try it · Rewrite a dialog; the mock updates live

The delete-confirm dialog on the left is real AI output: title "Notice," vague body, buttons "OK / Cancel." On the right, tap "Plain talk" on each of the three lines; every rewrite updates the dialog live. When all three are done, run the cover-the-body test.

Button-copy rewriter Rewritten 0 / 3
Scenario: the user selected 3 emails and hit delete. Tap "Plain talk" on each row on the right; the dialog on the left updates live
mail.example.com/inbox
Notice
Are you sure you want to perform this action? This action cannot be undone.
Cancel OK
TitleNoticePlain talk →
Delete these 3 emails?
"Notice" carries zero information. Action-dialog titles use verbs (Chapter 21)—put the action and the count in the title so users know what they're confirming at a glance.
BodyAre you sure you want to perform this action? This action cannot be undone.Plain talk →
Deleted mail goes to "Trash," kept for 30 days, then gone for good.
"This action" is system-perspective deixis—users have to recall what they just tapped. The body should cover consequence details: where things go, how long they stay, and whether they can still be recovered.
ButtonsCancel / OKPlain talk →
Keep them / Delete these 3
"OK / Cancel" stakes every answer on the body text. Buttons each carry their consequence; make the dangerous one red—and even without reading a word of the body, you won't tap the wrong one.
Duel · Which dialog is more dangerous

Define danger first: a dialog users will still tap through without understanding—that's dangerous. The cry-wolf experiment in the last lesson showed users spend less time on dialogs than it takes to finish one line; a fuzzy dialog is a knife left in a blind spot. Both dialogs below delete customer data—tap the one you'd dare hand a user.

Fuzzy copy vs. clear copy A/B duel
Tap the one you'd dare hand a user; after you vote, see where the other one is dangerous
Plan A
crm.example.com/customers
Warning
This operation will affect the selected data. Are you sure you want to continue?
CancelOK
What data is affected, and how—left entirely to the user's imagination
Plan B
crm.example.com/customers
Delete these 3 customers?
This also deletes 24 follow-up records under their names. You can recover them from Trash within 30 days.
Keep themDelete these 3
Object, side effects, and an exit—all written in the open
Try it · Translate system-speak into human talk

Buttons done—now nouns. The five lines below are system-speak AI loves to dump on the UI. For each, pick the real human talk from two translations. Watch out: some options only dress up the system-speak; underneath they're still logs.

System-speak translation drill 0 / 5
Pick one translation per row; wrong answers explain why—you can pick again
DB_CONN_TIMEOUT
ADatabase connection timeout (error code 10060). Please try again later.
BCouldn't reach the server just now. What you wrote is saved on this device—we'll retry automatically when you're back online.
System-speak in a costume. "Database" and "error code" are still implementation-model words. Users don't care which hop timed out—they care whether their stuff is gone, and whether they need to do anything.
Right. Not a word about the database. Lead with what users fear most (nothing is lost), then whether they need to act (no—it'll retry). Swallow the technical failure yourself—Lesson 2's three elements, noun edition.
Field user_mobile validation failed
AYour phone number is missing a digit—it's 10 digits now. Add one more to submit.
BInvalid phone number format. Please check and re-enter.
Right. Translating user_mobile to "phone number" is only a passing grade. Saying "missing a digit" finishes translating the validation result—users know how to fix it without counting.
"Invalid" plus "please check" makes the user re-run the validator themselves. The program already knows what's wrong—saying it is its responsibility (Chapter 14).
Session expired, token invalid
ASession credentials have expired. Please reacquire an access token.
BYour login expired. Sign in again to keep editing—your draft is still here.
Translating Session to "session credentials" and Token to "access token" makes the words Chinese—but the model is still the implementation model. The user's dictionary only has "login."
Right. The user's word (login), a clear way out (sign in again), and the reassurance that matters most (draft still here)—three jobs in one sentence.
404 Not Found: /orders/8291
AThe requested resource does not exist. Please verify that the address is correct.
BThis order can't be found—it may have been canceled. Check "All orders," or contact support to look it up.
"Resource" and "address" are HTTP words. The user tapped an order—their world has no resources, only orders.
Right. Use the user's word (order) to state the situation, and give two ways out (go to the list, contact support). On a dead-end page like a 404, a way out is worth more than an explanation.
This operation violates a uniqueness constraint
AThat username is taken. Try another—maybe add a number.
BDuplicate data. Operation rejected. Please modify and try again.
Right. "Uniqueness constraint" is a rule the database made for itself. To the user, this is "someone already took that name." A tip (add a number) turns a dead end into a fork.
"Duplicate data" is a bit clearer than "uniqueness constraint," but which data, against whom, and what to do—none of that is said. Translate until the user can act.
Error-message three elements—covered in Lesson 2

By now you may recall Lesson 2's error-copy rewriter: what happened, why, and what to do. Those three elements frame the skeleton of an error message; this lesson covers word choice inside that skeleton. Together they make a complete copy craft. We won't re-teach the three elements—the jump card is here.

Chapter cross-ref · The three states: loading, empty state, error stateThe error-message three elements (what happened, why, what to do) and full rewrites of three weak messages are covered in Lesson 2—tap here to jump.

One last combined quiz: button craft from this lesson plus the three elements above.

Closing a doc with unsaved changes—how should the button set be paired? Single choice
Wrong answers explain too—keep going until you're right
A"OK / Cancel," with body text saying unsaved changes will be lost
B"Save & close / Don't save / Cancel"—three buttons, each carrying a consequence
C"Yes / No," with body asking "Do you want to save?"
D"Got it," announcing that changes will be lost
Key Takeaways

Buttons carry consequences: swap "OK" for "Delete these 3," swap "Cancel" for "Keep them." Acceptance test: cover the body, look only at title and buttons—you can still answer safely.

Use the user's words: Session, field names, and error codes are implementation-model words—don't serve them to users (Cooper, About Face 4, Chapter 14). Translate until the user can act.

Errors are the program's responsibility: user input can be wrong; turning that wrong into words they understand and can fix is the program's job. Don't blame the user in the wording—the three-element skeleton is in Lesson 2.

How to brief AI: "Button copy names the action and the count; ban OK/Cancel pairs. UI copy must not show field names, error codes, Session, or other system words." UI details end here—next lesson starts translating these requirements for AI.

Source: Original to Xiaoshan Academy's Interaction Engineering series; some interaction principles adapted from About Face 4: The Essentials of Interaction Design.