Blog
The documentation paradox: every PR makes your docs less accurate

Here's the fundamental problem with engineering documentation: the moment you write it, it starts becoming less true.
A wiki page accurately describes the payment service's architecture on the day it's written. The following week, a PR restructures the retry logic. The week after, another PR adds a new payment provider integration. A month later, a refactor consolidates two modules into one. None of these changes update the wiki page, because there's no connection between the code and the docs. Each PR makes the documentation slightly less accurate, and the drift accelerates with shipping speed.
This is the documentation paradox: the faster your team ships, the faster your docs go stale, which means the teams that most need reliable documentation are the ones whose docs rot fastest. Manual documentation is a race against your own velocity, and it's a race you can't win because the documentation is always a step behind the code.
Why manual maintenance fails
The standard response to stale docs is a maintenance process: assign owners, schedule review cycles, add documentation updates to PR checklists. These processes help at the margin but they all depend on human discipline, which degrades under exactly the conditions where documentation matters most.
When the team is shipping fast, under deadline pressure, or dealing with an incident, documentation maintenance is the first thing that gets deprioritised. PR reviewers stop checking whether the docs were updated. Wiki page owners fall behind on their review cycle. The maintenance process works when things are calm and fails when things are intense, which means it works least when it matters most.
The other problem is that nobody knows which docs are affected by a given code change. A refactor might invalidate three wiki pages, two architecture diagrams, and an onboarding guide, and the engineer making the change has no way to know which documents reference the component they're modifying. Even a conscientious engineer who wants to update the docs can't do it reliably because the mapping between code and docs is unmaintained and often non-existent.
The architectural solution
The only documentation that keeps pace with a fast-moving codebase is documentation that updates itself from the same sources that change the code.
Self-writing documentation resolves the paradox by generating docs from live engineering activity. When a PR changes how two services communicate, the documentation about that communication updates to reflect the change. When a Slack conversation discusses and resolves a design question, the relevant docs incorporate the decision. When a meeting covers a migration plan, the documentation reflects the current plan rather than the one from three months ago.
The docs stay current because they're written from the same sources that change the system. There's no gap between the code and the docs because the docs are derived from the code activity rather than maintained alongside it.
Engineers still review and refine the generated docs, but the baseline accuracy is maintained automatically, which means the review is a quality assurance step rather than a rewriting exercise. The paradox is resolved because the docs don't need to be manually kept in sync with a moving target. They move with it.
Frequently asked questions
How quickly do manually maintained docs go stale? In fast-moving teams, significant inaccuracies can appear within weeks of a doc being written. A doc that's three months old in a codebase with active development is typically unreliable on details, even if the broad strokes are still correct.
Can we just mark docs with a "last verified" date? This is better than nothing because it gives the reader a signal about how much to trust the content. But it doesn't solve the underlying problem: someone still has to verify the doc, and that verification requires understanding which code changes might have invalidated it.
Is this a problem for all types of documentation? It's worst for documentation that describes implementation details, system architecture, and integration points, because these change most frequently. Conceptual documentation (why we use microservices, our philosophy on testing) is more durable because the underlying decisions change less often.
Related reading: Outdated docs are worse than no docs, Documentation debt, Self-writing docs explained. Related pages: Self-writing docs, For engineering teams.
Other blog posts:

How much is bad documentation actually costing you?

Why Confluence doesn't work (and what does)

What if your docs wrote themselves?

The documentation paradox: every PR makes your docs less accurate

Good docs are a hiring advantage

A new engineer costs $15K/month while they ramp. Docs cut that in half.

Your AI tools are only as good as your docs

Your codebase is documented. Your decisions aren't.