Why this session exists
In Session 2 you rewrote Pulse's NOTES.txt into crisp active sentences (docs/notes-rewrite.md). But a page of good sentences is still a wall, and readers do not read walls - they scan them. This session is about the containers: lists, tables, paragraphs, and headings. Choose the right container and readers find the fact in five seconds; choose the wrong one and your perfect sentences go unread.
Lists: the workhorse 8 min live
Google's guidance starts with one question: does order matter? Everything else about list craft - which list type, how steps begin, how items line up - follows from that answer. Most doc lists in the wild get at least one of these wrong.
LiveBulleted vs numbered, and the first-verb rule3 min▶
The choice between list types is not aesthetic. It is a signal to the reader about whether they can rearrange the items:
- Bulleted list: order does not matter. Rearranging the items changes nothing. Valid event types, prerequisites, known limitations - all bulleted.
- Numbered list: order matters. Rearranging the items breaks the meaning. Pulse's run order (ingest, then clean, then metrics) must be numbered - a bulleted version silently tells readers they can run the scripts in any order.
- Start each numbered step with an imperative verb. "Run the ingest script", not "The ingest script should be run" and not "Running the ingest script". Command verbs make steps executable at a glance.
And parallelism, the rule that makes lists feel professional: every item in a list matches every other item in grammar, category, capitalization, and punctuation. One item that starts with a noun in a list of verbs reads like a wrong note in a chord.
LiveConditions before instructions3 min▶
Google highlights this rule because getting it backwards causes real damage: state the condition BEFORE the instruction, not after. Readers execute instructions the moment they read them - a condition that arrives afterwards arrives too late.
In pipeline docs this pattern is everywhere: "If metrics.py reports LOW days, check alerts.min_daily_events before paging anyone." The reader who needs the caveat gets it before they act; the reader who does not skips the whole line from the first two words.
The backwards warning. A team's runbook said "Rerun the backfill job - note this drops the staging table if the date range overlaps." An on-call engineer executed the first clause at 2am and read the second clause while the table was dropping. The fix in the postmortem was word order, nothing else: "If the date range overlaps, this drops the staging table. To proceed, rerun the backfill job."
Self-studyTables: when two dimensions demand one3 min read▶
A list holds one dimension of information. The moment each item carries two or more facts - a setting AND what it does AND whether you can touch it - a list forces the reader to parse prose for structure. A table hands them the structure directly:
| Shape of the facts | Right container | Pulse example |
|---|---|---|
| One fact per item, order-free | Bulleted list | The four valid event types |
| One action per item, in sequence | Numbered list | The three-script run order |
| Several facts per item | Table | config.yaml: key × meaning × safe-to-change |
Table hygiene, per Google:
- Label every column with a meaningful header - readers scan headers before cells.
- Keep cells short. If a cell needs three sentences, the content wants to be a paragraph or its own section, not a cell.
- Introduce the table with a sentence ending in a colon, preferably containing "following": "The following table describes every config.yaml setting:"
Paragraphs and headings 7 min live
Not everything fits in a list. For the prose that remains, two structures decide whether scanners survive: the lead sentence of each paragraph and the headings above them. Eye-tracking studies keep finding the same thing - readers sweep a page in an F shape, and only the left edge and the top lines actually get read.
LiveThe lead sentence carries the paragraph3 min▶
Google's paragraph unit has one non-negotiable rule: the opening sentence establishes what the whole paragraph is about. Scanners read lead sentences and nothing else, so the lead sentence IS the paragraph for most readers.
- The test: read ONLY the first sentence of every paragraph in your doc, top to bottom. If the story survives - you can still follow what the doc says and why - your structure works. If the story falls apart, your key points are buried mid-paragraph where scanners never look.
- One topic per paragraph. The moment a second topic sneaks in, split. A paragraph is a unit of thought, not a unit of typing.
- Three to five sentences. Under three, consider merging or promoting to a list. Over seven is a wall - readers' eyes slide off it, and walls are where facts go to hide.
LiveHeading craft2 min▶
Headings are the largest text on the page and the first thing scanned, yet most docs treat them as an afterthought. Microsoft's scannable-content guidance is specific:
- Sentence case, always: "Run the pipeline", not "Run The Pipeline". Google's style guide agrees, so this one is settled across the industry.
- No end punctuation on headings. No periods, no colons.
- Task-based over topic-based. "Configure alert thresholds" tells the reader what they will be able to do; "Alerts" makes them open the section to find out. Verb-first headings double as a table of contents of actions.
- Short. A heading that wraps to two lines is a sentence wearing a costume.
Self-studyThe what, why, how check2 min read▶
Google's completeness test for a paragraph: a good paragraph answers three questions. Not always in this order, but all three should be findable:
- What are you telling the reader? The core fact or instruction.
- Why does it matter to them? The consequence of knowing or ignoring it.
- How should they use the knowledge? The action it enables, or the way to verify it worked.
Run the check on a paragraph like "Pulse flags LOW days." What: any day with fewer events than alerts.min_daily_events is flagged. Why: a LOW day usually means an upstream export failed, not a real traffic drop. How: check the raw folder for that date before trusting the metric. Three sentences, three answers, one complete paragraph.
Turn the run order into a numbered procedure ★ 8 min · everyone follows
docs/notes-rewrite.md states Pulse's run order in prose. Prose is the wrong container for a sequence: it must become a numbered list with imperative first verbs, one action per step, and every condition placed before its instruction.
Find the run-order sentences in docs/notes-rewrite.md. Underline each distinct action - you should find exactly three, plus the prerequisites.
Write the prerequisites as a short bulleted list (order-free facts) and the actions as a numbered list (order matters). Start every step with an imperative verb.
Add one condition-first warning where a newcomer could go wrong. Check the word order: condition, comma, instruction.
Compare with the finished procedure below, then save yours as docs/run-procedure.md - Session 4 pastes it into the README.
Turn config.yaml into a table ★ 8 min · build your own
Every config.yaml key carries three facts: what it is, what it does, and whether a newcomer can safely change it. Three facts per item is table territory - the decision tree from Part 1, applied for real.
Open pulse/config.yaml and list every key. There are six: four paths, the valid event types, and the alert threshold.
Build a markdown table with three columns: setting, what it does, safe to change. Keep every cell to one short phrase or sentence.
Introduce the table with a colon sentence containing "following", then check the columns read top to bottom as parallel phrases.
Lead-sentence audit on your own doc ★ 6 min · build your own
The lead-sentence test works on any doc, not just Pulse. Run it on the longest doc you personally own - the wiki page, the design note, the runbook - and watch it locate every buried key point in minutes.
Open your longest doc. Read ONLY the first sentence of every paragraph, top to bottom, and nothing else.
Score it: could a scanner reconstruct the doc's story from those sentences alone? Mark every paragraph where the answer is no.
For each marked paragraph, find the real key point (it is usually hiding in sentence three or four) and promote it to the front. Do not rewrite anything else yet.
Bonus pass: read the headings alone as an outline. Rewrite any heading that is topic-based ("Alerts") into task-based sentence case ("Diagnose a LOW day").
The audit that took eleven minutes. A data engineer ran the lead-sentence test on her team's 3,000-word onboarding doc. Nine of fourteen paragraphs failed - including the one holding the VPN step that every new hire had been Slacking her about. She promoted nine sentences, changed nothing else, and the doc started working. Structure was the whole problem.
Try it yourself - this week ◐ 30-45 min total
- Finish
docs/run-procedure.mdanddocs/config-table.mdfor Pulse if you didn't complete them live - Session 4 assembles both into the README. - Run the Demo 3 lead-sentence audit on your longest work doc and promote the buried key points. Keep the before/after - it makes a great case when your team asks why structure matters.
- Find one bulleted list at work that should be numbered (or the reverse), and one "condition last" instruction. Fix all three - each fix is a one-minute edit.
- Read the two Self-study cards: table hygiene and the what/why/how check.
- Optional depth: Google's lists-and-tables and paragraphs units are free at developers.google.com/tech-writing/one; Microsoft's scannable-content guidance lives in the Microsoft Style Guide online.
Official sources covered
This session teaches the working content of these source units. Markdown syntax itself is deliberately delegated to the sibling course.
Three questions before you go 🎯 ◐ 90 seconds
1 · You're documenting Pulse's three run commands. Which container?
Numbered means "the sequence is load-bearing". A bulleted version silently tells the reader they can run clean.py before ingest.py - and someone will.
2 · Which warning follows Google's condition-placement rule?
Condition before instruction. Readers act the moment they read an instruction, so a trailing condition arrives after the damage - see the 2am backfill story.
3 · The lead-sentence test says your doc's structure works when...
Scanners read lead sentences and skip the rest, so the lead sentences ARE the doc for most readers. Short paragraphs help, but the survival test is the rule.