Strict Rules Only Where a Machine Checks
Map your docs to the four Diátaxis types. Keep current state apart from history. Make a rule strict only when a tool checks it. The rest are habits.
We already have doc types. We just never called them that.
Diátaxis sorts every doc with two questions. Does the reader want to do something, or to understand it? Are they new to it, or using it at work? Here is how our own files answer them.
Map our files onto those four types, and the picture is clear.
| Our file | Diátaxis type | Lives in | Reader |
|---|---|---|---|
| README Quick Start | tutorial: learn by doing | repo | engineer, AI agent |
| RUNBOOK | how-to: do one task | repo | engineer, AI agent |
| ARCHITECTURE | explanation: why it works this way | repo | engineer, AI agent |
| ADR | decision record | repo | engineer, AI agent |
| API docs (built from code) | reference: look up facts | repo | everyone |
| PRD / overview | explanation | team wiki | PM and business roles, new team members |
Keep current state and history in different files
- Current-state docs: README, ARCHITECTURE. Keep only the latest version and edit it in place. It must be true today.
- History docs: ADR, journal. Only add new entries. A new entry replaces an old one, and you never edit the old one.
This matches two kinds of memory: “what is true now” and “what happened when”.
Two kinds of rules: a machine blocks one, people remind the other
A machine can check the first kind. CI runs on every push, and if a doc breaks the rule, the build fails. Nobody can forget it. Examples: required fields exist (owner, date), links are not broken, the file is in the right folder, and the Markdown format is valid.
Only a person can see the second kind. A tool cannot judge how much detail is enough, or whether a doc fits its reader. For these, the team agrees, and reviewers remind each other in code review. Examples: how much detail to write, who to write for, clear and plain wording, and the ADR template (Status, Date, Author, then Context → Decision → Consequences).
If nobody can check a rule, nobody follows it. Then people stop trusting every rule. So keep the strict side short.
A habit can move to the strict side when you add a tool. The commit format <type>: <title> (TICKET-123) is one example. Add a commit message check, and the habit becomes a rule. To see where that check runs, read Keep Docs Alive: Three Reminders, One Direction.
Lower the load on the reader
Habits that every senior engineer already knows stay out of our docs. Link to a standard once, for example Conventional Commits or the ADR template. Do not rewrite it. New team members and AI agents follow the link.
Without fields like owner and date, nobody can tell that a doc is old. The team chooses which fields every doc must have: owner, last checked date, status, reader, ticket number (Jira, Linear), tags, end date.
A rule that a machine checks is a rule. Everything else is an agreement.
References
- Diátaxis: the four doc types
- Conventional Commits
- Michael Nygard: Documenting Architecture Decisions (the ADR template)
Related: see how names carry meaning, see where the checks run, or go back to the series overview: Docs in the AI Era.