22
33This guide covers prose written for people: pull request descriptions,
44README sections, documentation pages, changelog entries, and comments that
5- explain a decision. It exists because reviewers asked for it directly — the
5+ explain a decision. It exists because reviewers asked for it directly. The
661.0 review stalled partly on language, not code.
77
8+ Parts of the "patterns to avoid" section are adapted from Cursor's
9+ [ unslop skill] ( https://github.com/cursor/plugins/blob/main/pstack/skills/unslop/SKILL.md ) ,
10+ which catalogs the tells of machine-generated prose.
11+
812## Who you are writing for
913
1014Write for a motivated, intelligent reader who probably works in healthcare
@@ -19,54 +23,124 @@ remove it.
1923
2024## Jargon: define on first use, with one good metaphor
2125
22- Terms of art are allowed — this is a technical project — but each one gets
23- a plain-language definition the first time it appears in a document, and a
24- concrete metaphor helps more than a formal definition. Examples:
26+ Terms of art are allowed, since this is a technical project, but each one
27+ gets a plain-language definition the first time it appears in a document.
28+ A concrete metaphor helps more than a formal definition. Examples:
2529
2630- A ** transfer syntax** is the file's packing instructions: the same
2731 clothes fold differently into different suitcases, and the label on the
2832 suitcase tells you how to unpack it.
2933- A ** DICOMDIR** is the table of contents on the CD a patient receives:
3034 it lists which studies, series, and images are on the disc and where.
31- - ** Streaming** means reading a file the way you read a book — one page at
32- a time — instead of photocopying the whole book before reading page one.
35+ - ** Streaming** means reading a file the way you read a book, one page at
36+ a time, instead of photocopying the whole book before reading page one.
3337
3438Pick one metaphor per concept and stay with it for the whole document.
3539Switching metaphors mid-explanation makes the reader re-learn.
3640
41+ A boundary worth stating: metaphors are for teaching, not decoration. A
42+ metaphor that gives a newcomer a concept they did not have is doing work.
43+ A metaphor draped over a technical statement the reader already understands
44+ ("the plan holds it", "the writer rides along on the stream") is
45+ decoration; say the literal thing. If removing the metaphor loses
46+ information for a newcomer, keep it. If removing it changes nothing but
47+ tone, remove it.
48+
3749Spending a few extra sentences on a well-chosen explanation is preferred
3850over being ultra-concise. Concision that costs comprehension is not
3951concision; it just moves the cost to the reader.
4052
41- ## Banned patterns
53+ ## Patterns to avoid
4254
4355These constructions read as machine-generated filler and are not welcome
44- in this repository's prose:
45-
46- - The words _ delve_ , _ dive into_ , _ landscape_ , _ robust_ , _ seamless_ ,
47- _ leverage_ (as a verb), _ utilize_ , _ cutting-edge_ , _ game-changer_ .
48- - The frame "It's not just X, it's Y" and its cousins ("This isn't about
49- X"; "X isn't merely Y").
56+ in this repository's prose.
57+
58+ ### Words and phrases
59+
60+ - AI vocabulary: _ additionally_ , _ crucial_ , _ cutting-edge_ , _ delve_ ,
61+ _ dive into_ , _ enduring_ , _ enhance_ , _ fostering_ , _ game-changer_ ,
62+ _ garner_ , _ interplay_ , _ intricate_ , _ landscape_ (abstract), _ pivotal_ ,
63+ _ robust_ , _ seamless_ , _ showcase_ , _ tapestry_ (abstract), _ testament_ ,
64+ _ underscore_ , _ vibrant_ . Use the plain word.
65+ - Fancy synonyms for plain words: _ utilize_ means use, _ leverage_ means
66+ use, _ facilitate_ means help, _ numerous_ means many, "in the event
67+ that" means if. The fancier synonym is rarely clearer.
68+ - Fancy ways to say "is": "serves as", "stands as", "boasts",
69+ "features". Just say "is" or "has".
70+ - Filler phrases: "in order to" becomes "to". "Due to the fact that"
71+ becomes "because". "It is important to note that" gets deleted.
72+ - Vague attributions: "experts believe", "industry reports suggest",
73+ "some argue". Name the source or delete the claim.
74+ - Superficial trailing "-ing" phrases: "...ensuring reliability",
75+ "...highlighting the importance of standards". Delete them, or replace
76+ them with a specific fact.
77+
78+ ### Constructions
79+
80+ - The frame "It's not just X, it's Y" and its cousins ("This isn't
81+ about X"; "X isn't merely Y"). State the point directly.
82+ - Forcing ideas into groups of three. Use however many there really are.
83+ - False ranges: "from X to Y" where X and Y are not points on a real
84+ scale. List the items directly.
85+ - Synonym cycling: calling the same thing the parser, the reader, and
86+ the engine within one page. Pick one name and repeat it.
5087- Staccato sentence fragments for emphasis. ("Fast. Simple. Done.")
51- - Chains of clauses spliced with em-dashes where ordinary sentences would
52- do.
53- - Piles of three adjectives or three parallel phrases where one precise
54- word would do.
55- - Openers like "Certainly!", "Great question!", or "Let's explore".
88+ - Excessive hedging: "could potentially possibly be argued that it
89+ might" becomes "may".
90+ - Generic conclusions: "The future looks bright." State specific plans
91+ or facts, or end without a conclusion.
92+ - Chatbot phrases and sycophancy: "I hope this helps!", "Let me know
93+ if...", "Certainly!", "Great question!". Respond directly.
5694- Exclamation points in technical prose.
57- - Emoji.
58-
59- If a sentence would survive in any project's README, it is probably
60- saying nothing about this one. Delete it.
61-
62- ## Sentence-level guidance
6395
64- - One idea per sentence.
65- - Active voice: "the parser reads the header," not "the header is read."
66- - Prefer verbs to noun-forms of verbs: "we validated the output," not
67- "we performed validation of the output."
68- - Numbers beat adverbs: "parses a 500 MB file in 1.2 seconds," not
69- "blazingly fast."
96+ ### Punctuation and formatting
97+
98+ - Avoid em dashes. If a thought needs separation, end the sentence or
99+ use a comma.
100+ - Colons are fine before a list or an example, not as mid-sentence
101+ connectors gluing two clauses together.
102+ - Bold sparingly. Do not bold every proper noun or acronym. The bold
103+ label with a colon that restates its own line ("** Performance:**
104+ performance improved") converts to prose. A bold lead-in that ends in
105+ a period, names the item, and is followed by genuinely new detail is
106+ fine.
107+ - Headings in sentence case, not Title Case.
108+ - Straight quotes, not curly quotes.
109+ - No emoji, decorative or otherwise.
110+
111+ ### Jargon dressed as depth
112+
113+ Abstract metaphor nouns read as technical but usually hide a plainer
114+ concrete word: _ substrate_ , _ wedge_ , _ vector_ (for "way"), _ locus_ ,
115+ _ nexus_ , _ primitive_ (as a noun), _ harness_ (as metaphor), _ surface_ (as
116+ in "API surface"), _ bedrock_ , _ scaffolding_ (as metaphor), _ paradigm_ ,
117+ _ north star_ , _ flywheel_ , _ endgame_ , _ ratchet_ , _ gold-plating_ .
118+ "Substrate" becomes "base". "Wedge in" becomes "add". "Endgame" becomes
119+ "the last phase". Pick the concrete word.
120+
121+ ## Plain speech
122+
123+ - Say what it does, not how it feels. "SQL you can read" and "the
124+ database stays close at hand" name a feeling. Name the mechanism or a
125+ number instead: "a column rename fails the build", "parses a 500 MB
126+ file in 1.2 seconds". If you cannot restate a sentence as a concrete
127+ instruction, fact, or number, cut it. And if the sentence could appear
128+ unchanged in another project's documentation, it says nothing about
129+ this one; cut it.
130+ - One idea per sentence. If the reader has to backtrack to parse a
131+ sentence, break it in two or drop clauses.
132+ - Active voice, with the actor named: "the compiler validates queries",
133+ not "queries are validated". Passive is fine only when the actor is
134+ unknown or genuinely does not matter.
135+ - Cut adverbs, or use a stronger verb or the measured number. "Runs
136+ quickly" becomes the number. "Significantly improves" becomes the
137+ measured difference.
138+ - Do not over-compress. Dropped articles, verbless fragments, arrows,
139+ and unexplained abbreviations make the reader decode instead of read.
140+ "Parser rejects bad date → exit 2, no write" becomes "The parser
141+ rejects a bad date, exits with code 2, and writes nothing." Write
142+ whole sentences with their articles and verbs, and spell out arrows
143+ and abbreviations.
70144- Write the explanation the way you would say it to a colleague across a
71145 desk, then delete the throat-clearing from the transcript.
72146
@@ -86,8 +160,7 @@ saying nothing about this one. Delete it.
86160> file required 20 GB of memory; now it requires about 2 GB, because the
87161> library only holds the piece it is currently working on. The reading
88162> code announces each piece as an event, and other code listens for the
89- > events it cares about — the way a radio broadcasts and receivers tune
90- > in.
163+ > events it cares about, the way a radio broadcasts and receivers tune in.
91164
92165The second version is longer. It is also the only one of the two that
93166tells the reader anything.
0 commit comments