Why this session exists
Readers judge a doc's quality sentence by sentence, and sentence-level craft is about 80% of that perceived quality. A doc with perfect structure and wobbly sentences still reads as unreliable; a doc of plain, active, one-idea sentences reads as trustworthy even before it is. Today's five rules come from Google's Technical Writing One and Microsoft's style tips, and they are all mechanical - no talent required, just editing moves you can apply on any Tuesday.
Words that don't wobble 7 min live
Before sentences can work, the words inside them have to hold still. Google's Words unit has two enemies: terminology that drifts (one concept, three names) and pronouns that wander (a "it" whose owner left the paragraph). Both make the reader do detective work you were paid to do.
LiveOne concept, one name3 min▶
Google's rule is short: use terminology consistently. If you name something "the staged data" in paragraph one, it stays "the staged data" for the rest of the doc - not "the validated rows", not "the intermediate output". Synonyms feel like good style; to the reader they read as new concepts.
- New or unfamiliar term? Either link to a good existing definition, or define it yourself the first time it appears. Never make the reader infer a definition from usage.
- Pick official terms early. For Pulse we lock three today: staged (output of ingest.py), cleaned (output of clean.py), metrics (output of metrics.py). Every later doc uses exactly these.
- Elegant variation is for novels. In fiction, repeating a word is clumsy. In technical writing, repeating the term is the feature - repetition is how the reader knows it's the same thing.
LivePronouns on a five-word leash2 min▶
Pronouns are pointers, and like pointers they dangle. Google's guidance: keep a pronoun within about five words of the noun it stands for, and if anything ambiguous could grab the reference, repeat the noun instead.
- The ~5 word rule. "Run clean.py after ingest.py finishes; it dedups the rows" - which script is "it"? Two nouns are in range, so the pronoun wobbles. Write "clean.py dedups the rows".
- Watch it, they, this, that. These four cause most of the damage. "This is important" - what is? Google's fix: put a noun after this or that ("this filter step is important").
- When in doubt, repeat the noun. Repeating "clean.py" three times in a paragraph costs nothing. One ambiguous "it" costs a re-read, or worse, a wrong command at 2am.
The it that deleted a table. A runbook said "the job repopulates the table after the sync, so you can safely drop it." An on-call engineer read "it" as the table. It was the sync. The postmortem fix was one word: replace "it" with the noun. Pronoun discipline is an incident-prevention technique, not a style preference.
Self-studyAcronyms: when to define, when to just say the words2 min read▶
Google's acronym rules are more restrictive than most people expect, and they save readers real effort:
- On first use, spell out the full term in bold with the acronym in parentheses: "directed acyclic graph (DAG)". After that, use only the acronym - do not flip between the two.
- Only introduce an acronym at all if it is significantly shorter than the full term AND appears many times in the doc. An acronym used twice is a puzzle, not a shortcut - just write the words.
- Remember the cost model. Every acronym makes the reader run a tiny mental lookup on each occurrence. Familiar ones (CSV, API) are free for your audience; team-invented ones (PMDQ, the "pipeline metrics daily quality" job) are not.
Active, strong, short 8 min live
Google's formula for a working sentence is actor + verb + target: who does what to whom. Most weak technical sentences fail this three ways at once - passive voice hides the actor, a vague verb hides the action, and three ideas share one sentence. The fix is surgery, and it is teachable.
LiveSpot the passive: "form of be + past participle"3 min▶
You don't need grammar school to find passive voice - you need one pattern. Passive verbs are a form of be (is, are, was, were, been, being) plus a past participle (usually a verb ending in -ed or -en). Find that pattern, and you've found a sentence hiding its actor.
| Passive (be + past participle) | Active (actor + verb + target) |
|---|---|
| "The rows are dropped if event_id is missing." | "ingest.py drops rows that are missing event_id." |
| "Timestamps are converted to UTC." | "clean.py converts timestamps to UTC." |
| "Low days are flagged." | "metrics.py flags days with fewer than 50 events as LOW." |
Notice what the active versions add for free: the actor. In pipeline docs the actor is usually a specific script, and naming it answers the reader's next question ("which script do I look at?") before they ask it. Active is also shorter - the passive tax is roughly two words per sentence, forever.
LiveOne idea per sentence, strong verbs only3 min▶
Google draws the analogy explicitly: shorter code is more maintainable, and so are shorter sentences. Each sentence should carry exactly one idea; when a sentence carries a list of things, convert it into an actual list (Session 3 goes deep on lists).
- The comma-and test. Every ", and" in a long sentence is a candidate cut point. "ingest.py validates headers, and it drops bad rows, and it writes staged output" is three sentences wearing a trench coat.
- Strong, specific verbs. "Occurs", "happens", "is done" are verb-shaped placeholders. "The dedup happens in clean.py" tells you less than "clean.py dedups rows on event_id" in the same breath. Weak verb + noun ("performs validation of") is one strong verb ("validates") in disguise.
- Reduce "there is / there are". These openers bury the real subject. "There is a threshold that flags low days" becomes "metrics.py flags days below the threshold". The sentence starts doing work two words sooner.
- Vague adjectives are unpaid promises. "Very fast", "quite large", "significantly better" - replace with the number. "Drops about 3% of rows" beats "drops some rows" in every audience.
- That vs which, the US convention: that introduces a clause the sentence needs (restrictive, no comma); which plus a comma adds an aside the sentence survives without (nonrestrictive). "Rows that lack event_id are dropped" vs "config.yaml, which lives in the repo root, holds the settings."
Self-studyMicrosoft's rewrite moves, with receipts3 min read▶
Microsoft's Top 10 tips arrive at the same place as Google from the product-writing side, and their before/after pairs are worth memorizing verbatim:
- "Use bigger ideas, fewer words." Their example: "If you're ready to purchase Office 365 for your organization, contact your Microsoft account representative." becomes "Ready to buy? Contact us." Same decision enabled, 80% fewer words.
- "Write like you speak." Read your sentence aloud; if you'd never say it to a colleague at their desk, rewrite it until you would. Contractions are welcome - "don't" reads faster than "do not".
- "Revise weak writing." Three concrete moves: start sentences with a verb where you can, cut "you can" openers, and avoid "there is / there are / there were". Their example: "You can access Office apps across your devices..." becomes "Store files online, access them from all your devices, and share them with coworkers." Every clause now starts with the action.
- The shared consensus. Where Google and Microsoft agree, treat it as law: second person "you", active voice, present tense (avoid "will" for things that simply happen), US spelling, no unexplained jargon.
Autopsy NOTES.txt ★ 7 min · everyone follows
In Session 1 you read pulse/NOTES.txt and felt the pain. Today we diagnose it with the tools from Parts 1 and 2. Every fact in this paragraph is true, and almost every sentence-level rule is broken. That combination - true but unusable - is what most tribal-knowledge docs look like.
Underline every passive verb. Hunt the tell: form of be + past participle. "is run", "is ingested", "are being calculated", "are being filtered", "are being converted"... count them (there are at least seven). Notice not one names which script does the work.
Circle every ambiguous pronoun. "filtered out by it" - by what? "if it is wrong" - the config or the change? "when it is run" - which script? Each wobbly "it" forces the reader to guess, and at 2am guesses become incidents.
Count ideas per sentence. Trick question: it is one sentence. One 160-word sentence carrying seven distinct facts, joined by commas and "and". Say out loud how many sentences this should be.
Find the buried treasure. Two genuinely important facts are hiding mid-clause: wrong config fails without an error message, and timestamps caused real issues before. Both deserve their own sentence, up front.
Rewrite it: docs/notes-rewrite.md ★ 10 min · build your own
Now the surgery. Same facts, new sentences. Target: every sentence active with a named actor, one idea each, official terminology only (staged, cleaned, metrics - locked in Part 1). This file becomes raw material for the README in Session 4.
Create docs/notes-rewrite.md. List the facts first, one per line, before writing prose - extraction and rewriting are separate jobs.
Rewrite each fact as one active sentence. For each, ask: who is the actor? In Pulse it is always one of three scripts, config.yaml, or you the operator.
Check terminology: the word for ingest.py's output is staged, everywhere. No "validated", no "preprocessed".
Handle "ask Dana". A doc that ends in "ask a person" has a hole where a fact should be. Convert it to a visible, honest placeholder that names the missing fact - then actually go ask Dana this week.
The 10-minute sentence workout ★ 8 min · build your own
Now run the same passes on your own writing. Pick one doc you own - a README, a runbook, that design note you keep meaning to fix - and give it four timed passes. Mechanical, repeatable, no inspiration needed.
Pass 1 - passive hunt (3 min). Search for is, are, was, were, been, being. Rewrite every be + past participle where you can name the actor. Flag the ones where you can't - those are knowledge gaps, not grammar problems.
Pass 2 - pronoun check (2 min). Search for it, they, this, that. Any pronoun more than about five words from its noun, or with two possible owners: repeat the noun.
Pass 3 - sentence split (3 min). Any sentence over roughly 25 words or with more than one ", and": cut it at the idea boundaries. Three or more parallel items become a list.
Pass 4 - filler sweep (2 min). Delete "basically", "it should be noted that", "in order to", "very", "quite". Replace vague adjectives with numbers where you know them.
The workout as a review habit. One data team made pass 1 and pass 2 a checklist item on runbook PRs - two searches, five minutes. Within a quarter, their on-call handoff questions dropped noticeably, because runbooks finally said which script does what. The workout scales better as a review habit than as a heroic rewrite.
Try it yourself - this week ◐ 30-45 min total
- Finish
docs/notes-rewrite.mdif you didn't complete it live, and commit it - Session 4's README builds on it directly. - Run the full 10-minute sentence workout on your most-read doc at work. Keep a count of passives found; it makes a satisfying before/after number.
- Pick one core concept your team names inconsistently, choose the official term, and fix it in one doc. Announce the official term where your team will see it.
- Read the Self-study cards: acronym rules and Microsoft's rewrite moves. Memorize the "Ready to buy? Contact us." example - it recalibrates your sense of how short a sentence is allowed to be.
- Optional depth: Google TW One's words, active voice, clear sentences and short sentences units at developers.google.com/tech-writing/one, and Microsoft's Top 10 tips at learn.microsoft.com.
Official sources covered
This session teaches the working content of these source units. What stays with the originals: the full worked exercise sets and answer keys.
Three questions before you go 🎯 ◐ 90 seconds
1 · The reliable tell that a sentence is in passive voice is...
"Is dropped", "are being converted", "was flagged" - be + past participle is the pattern. Length and "there is" are separate (also fixable) problems.
2 · "Run clean.py after ingest.py finishes; it dedups the rows." What's wrong?
Two script names sit within range of "it", so the pronoun wobbles. Google's fix: keep pronouns within about five words of one clear noun, or repeat the noun.
3 · Google justifies "one idea per sentence" with an analogy to...
The analogy is straight from the short-sentences unit: sentences are like code, and shorter units are easier to read, maintain and debug.