The system that
talks back.
Every button label, every error message, every empty state — that's the voice the product speaks in. A type system without a paired voice system is a screenshot. Voice is constant; tone shifts by moment.
01 — Voice vs tone
Voice is who you are. Tone is how you say it today.
Voice is constant. It's the personality of the product — recognizable across every screen, every state, every surface. Three to four adjectives carry it.
Tone is variable. The same voice shifts register depending on the moment. A success message is breezy; the same product writing an error message is plain and helpful. Tone is voice + context.
Voice (constant)
Direct. Confident. Human.
The personality readers feel across every product surface — onboarding, errors, marketing site, support docs. Three attributes carry it; more than five and it becomes incoherent.
Tone (variable)
Encouraging in onboarding. Plain in errors. Light at success.
The same voice, dialed for context. The product still sounds like itself — but it reads the room.
02 — Three attributes
Pick three. Pair each one with its opposite.
The classic Mailchimp method: three voice attributes, each paired with the thing it's not. The pairing matters more than the attribute — "Direct, not hedgy" tells a writer what to do; "Direct" alone is generic.
01
Direct
· not HedgyGet to the point. The user is here to do something, not to read your throat-clearing.
→Saved.
×Your changes have been successfully saved to your account.
→Try again
×Please consider trying that action one more time
02
Confident
· not PushySpeak from expertise. The product knows what it can do; the user should hear that, not feel sold to.
→Connect a calendar to sync events.
×Why not unlock the magic of calendar sync today?!
→Delete account
×We'd be sad to see you go but...
03
Human
· not CutePlain English. Contractions are fine. Jargon is fine when the audience uses it. Cuteness is what unconfident products reach for instead of clarity.
→Nothing here yet.
×Looks like the cupboard is bare! 🥺
→We couldn't save your changes.
×Oopsie! Something went wrong on our end...
03 — Four moments
Same voice, different register, four moments.
Onboarding, success, error, empty. Almost every product moment maps to one of these four. The voice attributes don't change — the dial does. Encouraging at the start. Light at success. Plain at the error. Helpful at the empty state.
01 · Onboarding
Encouraging · concise · forward
“Welcome. Three steps to get your first project running.”
Confidence the user came for, not a celebration. Get them moving.
02 · Success
Neutral · light touch · move on
“Saved.”
A success message that lingers becomes friction. Acknowledge, then get out of the way.
03 · Error
Plain · specific · with a fix
“We couldn't reach the server. Check your connection and try again.”
Name what went wrong, name the fix, drop the apology. "Oops!" is filler.
04 · Empty state
Helpful · pointed · one CTA
“No projects yet. Create your first one to start tracking work.”
Empty isn't a failure — it's an invitation. Tell the user the next step and where it lives.
04 — Microcopy patterns
Four patterns that decide ninety percent of product copy.
Buttons, destructive confirms, field labels, error messages. Locking the rules for these four surfaces covers the vast majority of every text the user actually reads in the product.
Primary button
Verb + noun · five words max
Good
- Create project
- Save changes
- Send invite
Bad
- ×Click here
- ×Submit
- ×OK
Destructive confirm
Name the verb · name the noun · no hedging
Good
- Delete invoice
- Cancel subscription
- Revoke access
Bad
- ×Are you sure?
- ×Yes / No
- ×Continue
Field label
Visible · concrete · sentence-case
Good
- Email address
- Project name
- Phone (optional)
Bad
- ×Email *
- ×PROJECT_NAME
- ×Tel.
Error message
Field name · what failed · how to fix
Good
- Email is invalid. Use the format name@example.com.
Bad
- ×Error 400
- ×Invalid input
- ×Something went wrong
05 — Anti-patterns
Four voices the product should never use.
From real product audits. Each one feels safe on the day it shipped; each one becomes the thing the team is most embarrassed by six months later.
Apologizing for the product
Avoid
Oops! Something went wrong :(Prefer
We couldn't save your changes. Try again.Sincere apologies are powerful and rare. Sprinkled on every error they read as evasion — the product doesn't take ownership, it just feels bad. Describe the problem and the fix; skip the regret.
Forced cheerfulness
Avoid
Yay! Your invoice is overdue! 🎉Prefer
Invoice 1042 is 3 days overdue. Send a reminder.Cheerfulness applied to a serious moment reads as gaslighting. Match the register to the moment — errors and overdue states should feel as concerned as the user already is.
Marketing voice inside the product
Avoid
Unlock the power of seamless collaboration!Prefer
Invite teammates to comment on this draft.Marketing copy lives on landing pages. Inside the product the user has already bought — they're trying to get work done. Drop the adjectives.
Placeholder pretending to be a label
Avoid
Input placeholder "Your email"Prefer
Visible label "Email" + input with helper textPlaceholder disappears on focus, fails contrast, isn't reliably announced. Voice and tone has to survive the UI patterns — a label can be sentence-case and human; a placeholder can't carry that weight.
Continue
Voice decides how the product sounds. Naming decides how it's referenced.
Token names, component names, the language teams use to talk about parts of the system — naming conventions are the API of the design system. Get them right once, save a year of grep-and-replace.