See it as a diagram
Everything below, as a diagram you can edit. Describe yours and see it in seconds.
No account needed · Editable canvas, not a picture
What a freshness policy contains
Scope draws the boundary: which spaces, folders, and repos the policy covers, and just as important, what it explicitly does not. Classes group docs by decay rate, because a runbook and an ADR should not share an SLA. Each class gets an SLA in days and an owner role, a role rather than a name, so the policy survives staffing changes. Enforcement names the mechanism that notices violations, and exceptions pre-answer the whatabouts that otherwise kill adoption in the first month.
The relationship to a documentation SLA is containment: the SLA numbers are one clause here. Writing the SLA without scope, owners, and enforcement produces a number nobody is bound to; the policy is what binds it.
The template
Check it into the docs repo it governs, at the root, where a reader of any covered page can reach it in one hop. Keep it under a page: length is the leading cause of policy death.
# docs-freshness-policy.yml
scope: >
Everything under /docs and the Engineering wiki space.
Excludes /docs/archive, personal drafts, and meeting notes.
classes:
runbooks: { sla_days: 30, owner: on-call rotation }
architecture: { sla_days: 90, owner: owning team tech lead }
service-pages: { sla_days: 90, owner: service owner }
onboarding: { sla_days: 180, owner: engineering manager }
adrs: { sla_days: ~, note: immutable, supersede instead }
generated-refs: { sla_days: ~, note: regenerated on release by CI }
enforcement:
- ci: warn on PRs that change infra/ without touching docs/
- dashboard: pages past SLA, standing agenda item in monthly eng sync
- escalation: two consecutive missed SLAs moves the page to /docs/archive
exceptions:
- archived pages carry a banner and no SLA
- pages generated from source inherit their generator's release cadence
- a page may be marked frozen with a reason; frozen pages are re-approved yearlyEnforcement that does not depend on willpower
A policy with no mechanism is a wish. The cheapest hook is a CI warning on pull requests that touch architecture-shaped paths without touching docs, which converts the policy from a document people remember into a prompt they see mid-change; the patterns are covered in docs checks in CI. The second hook is a freshness dashboard fed by git dates or the wiki API, surfacing pages past SLA to their owner, with the numbers defined in documentation freshness metrics.
The escalation clause matters more than it looks: archive after two missed SLAs is the policy admitting that an unmaintained page is a liability, not an asset. Without it, the dashboard becomes a wall of shame everyone learns to ignore.
Rolling it out from zero
Order matters. First inventory: list what exists, which the documentation audit checklist structures. Second, cull: archive everything nobody would re-verify, because every archived page shrinks the surface the policy must police. Third, assign owners to the survivors; a policy enforced against unowned pages punishes nobody and fixes nothing. Only then declare classes and SLAs, and switch on enforcement last, starting with warnings rather than blocks.
Teams that run this order backwards, enforcement first, ownership never, get a month of CI noise and a repealed policy. The rollout is four small steps over four weeks, and the cull in week two typically removes a third of the surface before the SLAs ever apply.
The exceptions clause keeps the policy alive
Every policy meets a page that legitimately should not change: an ADR, a postmortem, a design doc for a shipped system. Without a written exception path, these become precedents for ignoring the policy wholesale. The template handles the known cases, immutable records, generated pages, and offers a frozen marker with a stated reason for the rest, re-approved yearly so frozen does not become a synonym for abandoned.
Generated pages deserve their special case: a diagram regenerated from the repository or an API reference built on release is fresher than any SLA requires, and stamping it by hand would be theater. The policy tracks its generator instead, which is one of the quieter arguments for generating what you can.
Adoption in one month
FAQ
What is a documentation freshness policy?
What SLAs should different doc types have?
How do you enforce a docs freshness policy?
What is the difference between a docs freshness policy and a documentation SLA?
How should a team adopt a freshness policy from zero?