Use when writing or improving READMEs, API docs, runbooks, architecture docs, ADRs, release notes, or user-facing help content. Focus on clarity, accuracy, and audience.
Good docs are a force multiplier. Bad docs are worse than none (they lie confidently).
Different readers, different docs. One document cannot serve all four audiences.
Four distinct kinds of docs, each with a different shape:
| Type | Purpose | Voice |
|---|---|---|
| Tutorial | Learning | "Let's build X together" |
| How-to |
| Task completion |
| "To do X, do these steps" |
| Reference | Lookup | "X is defined as..." |
| Explanation | Understanding | "Why X exists, and how it fits" |
Don't mix them. A tutorial cluttered with reference details loses the learner. A reference wrapped in prose slows the expert.
A README should answer, in order:
Test your quickstart on a clean machine. If it doesn't work verbatim, fix it.
For each endpoint:
Generate from OpenAPI when possible. Hand-written drifts.
For on-call and ops:
## <Incident type>: Database connection pool exhausted
### Symptom
Grafana alert "db_conn_pool_saturation > 0.9" fires.
Users see 500s on /api/*.
### Verify
1. Check Grafana dashboard X.
2. Run `kubectl exec ... -- pgbouncer-show pools`.
### Mitigate
1. Scale replica count: `kubectl scale deployment/api --replicas=N`.
2. If still failing, failover to standby: ...
### Root cause hunt (after mitigation)
- Check slow query log.
- Check for recent deploys.
### Escalation
Page <team> via PagerDuty if not recovered in 15 min.
Runbooks are read under stress. Optimize for speed, not style.
One file per decision, in docs/adr/:
# ADR 0007: Use Postgres for primary storage
Date: 2026-04-06
Status: Accepted
## Context
We need a primary datastore for...
## Decision
We will use Postgres 16.
## Alternatives considered
- MongoDB: rejected because...
- MySQL: rejected because...
## Consequences
- Positive: ...
- Negative: ...
- Neutral: ...
ADRs are append-only history. Don't edit old ones — supersede them with new ones.
For users, not engineers:
## v2.4.0 — 2026-04-06
### ✨ New
- Bulk export of reports as CSV.
### 🐛 Fixed
- Dashboard no longer freezes when loading > 10k rows.
### 💥 Breaking
- The `/v1/users` endpoint is removed. Use `/v2/users`.
### 📦 Dependencies
- Upgraded Postgres driver to 3.1 (you don't need to do anything).
Lead with impact to the reader, not internal implementation.
Docs rot. Fight it: