Readability and README Writing
Two jobs. The common one: measure and improve reading level in any prose —
a doc, an email, a proposal, a spec, a plan. The narrower one: structure a
README.
Always Measure — Never Estimate
Syllable counts cannot be eyeballed accurately across a document. Reporting a
Flesch-Kincaid score without running the script is guessing. Run it.
cat FILE | ruby scripts/flesch_kincaid.rb
Works on any text, not just markdown — pipe in an email draft, a section of a
doc, a paragraph pasted into a heredoc.
Target: grade level 11 or below. Technical terms inflate the score, and
that's fine — the goal is to keep the surrounding prose clear so the technical
content stays accessible.
Revise, then re-measure. Focus revision on:
- Shortening sentences (not dumbing down terminology)
- Replacing complex connectors with simple ones
- Breaking multi-clause sentences into two
Report the before and after scores.
Vocabulary Coverage
Many readers of technical writing are not native English speakers.
cat FILE | ruby scripts/vocabulary_profiler.rb
Aim to raise the percentage of words in the top 1000 most common English words.
Technical terms lower this number — expected. Keep the non-technical words
simple.
Do:
- Use active voice
- Keep noun phrases short and direct
- Limit embedded clauses to one level of nesting
- Use simple "if/then" conditionals
- Make logical connections explicit with transition words (however, therefore, because)
- Spread information across multiple sentences when needed
Don't:
- Stack multiple modifiers before nouns ("the recently revised standardized testing protocol")
- Rely on mixed or inverted conditionals ("Had she known...")
- Expect readers to infer relationships between ideas
- Pack too many new concepts into a single sentence
- Assume shared knowledge of idioms or cultural references
Flow and Transitions
- Start with concepts, then details. Give readers the "why" before the "how"
- Add transitions between major sections so the piece reads as a narrative, not a list of disconnected blocks
- Create logical progression from high-level to detailed
README Structure
When the document is specifically a README, it flows through these sections:
- What and why — what the package does and why it matters (the "what's in it for me")
- Install and use — how to get started quickly
- Configuration — common options and methods
- Contributing — how to contribute, or a pointer to CONTRIBUTING.md. Notes on the build environment and portability
- Project layout — unusual top-level directories or files, hints for navigating the source
Formatting
Use GitHub-flavored callout blocks to highlight important information:
[!CAUTION]
[!IMPORTANT]
[!NOTE]
[!TIP]
[!WARNING]
- Use bold for key concepts on first introduction
- Use
code for commands, filenames, config keys, and values
- Use concrete, descriptive names for examples ("Invoice Approval" not "Example 1")
Quality Checklist
Bibliography
1---2name: readme-writer3description: Measure and improve the reading level of any prose — docs, READMEs, emails, proposals, specs, plans. Scores Flesch-Kincaid grade level and top-1000 vocabulary coverage with real scripts instead of estimates. Triggers on 'readability', 'reading level', 'grade level', 'Flesch-Kincaid', 'plain language', 'make this easier to read', 'simplify this writing', 'too dense', 'ESL-friendly', and on 'write readme', 'improve readme', 'readme review', 'documentation writing'.4license: MIT5---67# Readability and README Writing89Two jobs. The common one: **measure and improve reading level in any prose** —10a doc, an email, a proposal, a spec, a plan. The narrower one: **structure a11README**.1213## Always Measure — Never Estimate1415Syllable counts cannot be eyeballed accurately across a document. Reporting a16Flesch-Kincaid score without running the script is guessing. Run it.1718```bash19cat FILE | ruby scripts/flesch_kincaid.rb20```2122Works on any text, not just markdown — pipe in an email draft, a section of a23doc, a paragraph pasted into a heredoc.2425**Target: grade level 11 or below.** Technical terms inflate the score, and26that's fine — the goal is to keep the *surrounding prose* clear so the technical27content stays accessible.2829Revise, then re-measure. Focus revision on:3031- Shortening sentences (not dumbing down terminology)32- Replacing complex connectors with simple ones33- Breaking multi-clause sentences into two3435Report the before and after scores.3637## Vocabulary Coverage3839Many readers of technical writing are not native English speakers.4041```bash42cat FILE | ruby scripts/vocabulary_profiler.rb43```4445Aim to raise the percentage of words in the top 1000 most common English words.46Technical terms lower this number — expected. Keep the non-technical words47simple.4849**Do:**50- Use active voice51- Keep noun phrases short and direct52- Limit embedded clauses to one level of nesting53- Use simple "if/then" conditionals54- Make logical connections explicit with transition words (however, therefore, because)55- Spread information across multiple sentences when needed5657**Don't:**58- Stack multiple modifiers before nouns ("the recently revised standardized testing protocol")59- Rely on mixed or inverted conditionals ("Had she known...")60- Expect readers to infer relationships between ideas61- Pack too many new concepts into a single sentence62- Assume shared knowledge of idioms or cultural references6364## Flow and Transitions6566- Start with concepts, then details. Give readers the "why" before the "how"67- Add transitions between major sections so the piece reads as a narrative, not a list of disconnected blocks68- Create logical progression from high-level to detailed6970## README Structure7172When the document is specifically a README, it flows through these sections:73741. **What and why** — what the package does and why it matters (the "what's in it for me")752. **Install and use** — how to get started quickly763. **Configuration** — common options and methods774. **Contributing** — how to contribute, or a pointer to CONTRIBUTING.md. Notes on the build environment and portability785. **Project layout** — unusual top-level directories or files, hints for navigating the source7980## Formatting8182Use GitHub-flavored callout blocks to highlight important information:8384> [!CAUTION]85> [!IMPORTANT]86> [!NOTE]87> [!TIP]88> [!WARNING]8990- Use **bold** for key concepts on first introduction91- Use `code` for commands, filenames, config keys, and values92- Use concrete, descriptive names for examples ("Invoice Approval" not "Example 1")9394## Quality Checklist9596- [ ] Flesch-Kincaid grade level **measured with the script**, at or below 1197- [ ] Vocabulary coverage measured; non-technical words kept simple98- [ ] Each section flows naturally into the next99- [ ] Key concepts are bolded on first use100- [ ] Examples use real scenario names, not generic placeholders101- [ ] No corporate buzzwords (comprehensive, robust, seamless, leverage, utilize)102- [ ] Terminology is consistent throughout (same word for same concept)103- [ ] Acronyms and specialized terms are defined on first use104- [ ] Active voice is used wherever possible105106## Bibliography107108- GNU Coding Standards, https://www.gnu.org/prep/standards/html_node/Releases.html109- Software Release Practice HOWTO, https://tldp.org/HOWTO/Software-Release-Practice-HOWTO/distpractice.html