River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

UX Writing Style Guide Template

Extract every user-facing string, rank the sentences by who actually reads them, and write the rules from the ones that already work.

Free download  ·  No account needed

A style guide is normally written by looking at a product, forming a view, and writing the view down. Nobody argues with clear, human and direct, because there is nothing there to argue with. Check its examples against the strings the product actually contains and the problem shows up immediately. At the fictional Marlbury, thirty-four do-and-do-not examples matched eleven real strings. The other twenty-three described copy nobody had ever shipped. That guide was not wrong, it was unfalsifiable, and nothing inside it could say so.

Meanwhile the sentences people read most were not in the guide, because they are not in the design files either. They sit hardcoded in the code, written while an engineer was handling a failure. Marlbury had 4,812 user-facing strings, 1,622 of them hardcoded, and 1,085 of those were sentences rather than labels. So this pack builds the corpus first and derives the rules from it, which is the opposite order to every guide template on the internet.

Split sentences from labels, join them to render and error telemetry, and the ranking inverts. Marlbury's twenty most-read sentences carried 65.3% of all sentence impressions from 1.01% of the sentences. Sixteen were failures, thirteen were hardcoded and therefore shipped in English to nine locales, and the existing guide named three. It sits alongside the handoff pack that decides which failure states get written at all, and the design system's own documentation.

4,812 strings, and the twenty most-read are the ones nobody owns

Sentences ranked separately from labels, duplicates grouped by event rather than by text, and every fix marked as a catalogue edit or a code change.

String Register, sentences only

The twenty most-read sentences carry 65.3% of the reading

Illustrative, for a fictional B2B product called Marlbury. 4,812 user-facing strings, 88,000 monthly active users, thirty-day window. Labels are excluded from this ranking: Save is rendered more often than any sentence in the product and there is nothing to decide about it.

SentenceKindSourceReads / 30dLocalesIn the old guide
Something went wrong. Please try again.ErrorHardcoded, 17 sites611,400en onlyNo
No results foundEmptyCatalogue498,2009No
Your session has expired. Please sign in again.RefusalHardcoded421,900en onlyNo
This field is requiredErrorCatalogue396,5009Yes
You do not have permission to view this page.RefusalHardcoded344,700en onlyNo
Enter a valid email addressErrorCatalogue318,0009Yes
Unable to connect. Check your network and try again.ErrorHardcoded287,300en onlyNo
Nothing here yetEmptyHardcoded default, 12 surfaces264,100en onlyNo
Request failed with status code 500ErrorHardcoded251,800en onlyNo
An unexpected error occurredErrorHardcoded, 9 sites238,400en onlyNo

Ten of twenty shown. Across all twenty: 5,449,700 of 8,340,000 sentence impressions, sixteen failures, thirteen hardcoded and therefore untranslated, three named in the guide Marlbury already had. All three were form validation, which is the only copy visible from inside a design file.

Inconsistency Log

1,977 sentences, 1,143 events, 834 of them redundant

Grouped by what happened from the reader’s point of view, then ranked by combined impressions. Sorted by variant count this reads as tidying. Sorted by reading, the top row is larger than most things on the quarter’s roadmap.

The eventSentencesCombined readsMerge isStatus
A server call failed and the client does not know why41,275,900Code, 35 call sitesOpen
The session ended and the user has to sign in again7942,500CodeOpen
A collection is empty because nothing exists yet2762,300CodeOpen
How much trial is left2711,100BothOpen
A collection is empty because the filter matched nothing2657,100Catalogue editIn review
A required field is empty2611,100BothOpen
The role cannot see this3542,600CodeOpen
Confirming a destructive action1186,300Code, 14 actionsOpen
Asking someone to bring colleagues in2165,800Catalogue editBlocked on terminology
An integration stopped syncing127,400None, keep as isClosed

The seven sentences behind the session event: Your session has expired. Please sign in again. / You have been signed out due to inactivity. / Session timeout / Authentication required / Your token has expired / Please log in again / 401 Unauthorized. The last one was read 11,300 times a month by humans.

Terminology Map

One concept, five words, and the decision is per word

The container a team’s work lives in, counted across the corpus. The surface pattern is the whole story: each word was chosen locally by somebody who never saw the other four.

WordStringsShareSurfaces it ownsDecisionTo change
workspace41238.6%Product body, empty states, onboardingKeep as the standard0
team28927.1%Invitations, member managementReplace241 copy, 48 code
organisation17616.5%Settings, security, audit logReplace150 copy, 26 code
account15114.2%Billing, invoices, plan changesKeep, billing only0
company383.6%Signup, sales-assisted flowsReplace31 copy, 7 code

Account survives inside billing because the invoice, the card statement and the tax receipt all use it, and a product that disagrees with the receipt is worse than a product that uses two words. Total change cost for this concept: 422 catalogue edits and 81 code changes.

What is in the pack

01

String Register

Every user-facing string from both halves of the corpus, the translation catalogue and the hardcoded literals, joined to how many times each was actually rendered. Sentences separated from labels, because ranking them together buries every sentence in the product under Save and Cancel.

02

Inconsistency Log

Sentences collapsed into the events that cause them, ranked by combined impressions rather than by variant count. Marlbury's session-expiry event had seven sentences behind it and 942,500 monthly impressions between them, which is 11.3% of all sentence reading and invisible while it sits in seven rows. Grouping by event rather than by text is the move the accessibility remediation pack makes when it groups findings by component instead of by page.

03

Terminology Map

Every concept with more than one word in use, counted, with a decision per word rather than per concept. Billing keeps account, because that is the word on the invoice and the card statement, and the product body standardises on one noun everywhere else.

04

Error Message Standard

The three-part shape, derived from the failures that already work rather than from first principles. WCAG 2.2 requires that a known correction is offered wherever an input error is detected, which is the floor here rather than the target. It handles the generic failure message explicitly: Marlbury's was hardcoded at seventeen call sites, so the fix was seventeen specific sentences and not one better vague one. A failure large enough to need a notice as well as a sentence is incident comms rather than copy work.

05

Voice and Tone Guide

Written backwards. Find the two or three strings you would ship unchanged, work out what they have in common, and make that the rule. Tone moves with what is at stake for the reader rather than with brand adjectives, so warmth gets cut on the billing failure.

06

Pattern Library

One entry per recurring message type, each carrying the sentence shape, a worked example from the register, and the count of strings that do not currently match it. An entry with no strings behind it is the same failure as an invented example.

How it works

  1. 1

    Send both halves

    The translation catalogue in whatever form it exists, plus read access to the front-end source. Either alone still produces findings, and the code half is the half nobody has read.

  2. 2

    Rank by who reads it

    Join every string to render and error telemetry, then rank the sentences separately from the labels. Expect a small fraction of the sentences to carry most of the reading.

  3. 3

    Collapse into events

    Group sentences by what happened from the reader's point of view. Marlbury's 1,977 sentences came from 1,143 events, leaving 834 redundant ones nobody could see from inside one team.

  4. 4

    Split the plan in two

    Every fix is a catalogue edit that ships today or a code change that needs a release. Marlbury split 291 against 543, with thirteen of the top twenty in the second group.

Frequently asked questions

Why not just write the style guide?

Because you cannot check it. A guide with no counts behind it is a set of preferences, and the space rule here is that no rule gets written without the register column that decides compliance and the current number of strings failing it. Marlbury's existing guide had thirty-four examples and eleven of them described a real string.

What if we do not have render telemetry?

You still get a register, an inconsistency log grouped by event, and a terminology map with real counts. What you lose is the ranking, so the work gets scheduled in file-path order. Error telemetry alone recovers most of it, since failures are where the reading concentrates.

Is reading our source code really necessary?

It is the point. The catalogue holds the copy a writer has always been able to see, which is why that copy is already reasonable. The hardcoded half is unreviewed, untranslated, and at Marlbury it held thirteen of the twenty most-read sentences in the product.

Our error messages come from the API. Is that a problem?

Usually yes. Server validation text is written for an API consumer and it is correct for that reader. Marlbury rendered one such string to users from twenty-three endpoints. The client should map a machine-readable error to a sentence a person reads, and the GOV.UK Design System bans exactly this, along with status codes and jargon.

Why does it care about numbers inside sentences?

Because a sentence assembled at runtime from fragments cannot be translated. ICU's own documentation says a message has to be written and translated as a single unit, since a translator handed pieces cannot reorder them. Marlbury welded a number onto the hardcoded fragment days left, 298,400 times a month, in English, to nine locales.

Will this tell us to use one word everywhere?

No, and a map that does would be wrong. The decision is made per word, not per concept. Billing keeps its own noun because the invoice, the card statement and the tax receipt all use it, so the product disagreeing on those screens is worse than the inconsistency.

How is this different from a content audit?

A content audit inventories pages and surfaces. This inventories strings, joins them to reading, and collapses them into events, which turns 1,977 rows into 834 decisions with an owner and a delivery route. Messages you send deliberately are a separate corpus, handled by the in-product messaging pack.

Find out what your product actually says

Send the translation catalogue and read access to the front end. The first number back is how much of your copy no writer has ever seen.

Read your own strings