Kueri.me All articles
Opinion & Retrospectives

Docs Are the Dark Matter of Your Engineering Org

Kueri.me
Docs Are the Dark Matter of Your Engineering Org

Photo: CMyrick-WMF, CC BY-SA 4.0, via Wikimedia Commons

There's a Confluence page at almost every company I've ever talked to that was last updated sometime around a product launch that nobody on the current team remembers shipping. It still ranks first in the internal search. New engineers find it on their first week. They follow its instructions. Something breaks. Nobody knows why.

That's documentation debt in action — and unlike code debt, it doesn't throw errors. It just silently warps everything around it.

Code Debt Has a PR. Doc Debt Has a Vibe.

When technical debt piles up in a codebase, you eventually feel it. Builds slow down. Bugs cluster in weird corners. Someone finally calls a meeting with a slide titled "The State of Our Platform" and everybody winces in recognition. The debt becomes visible, measurable, and eventually — reluctantly — prioritized.

Documentation debt doesn't work that way. It accumulates in the background like carbon monoxide. Odorless. Invisible on the dashboard. And by the time you notice it, someone's already made three wrong decisions based on an architecture diagram that hasn't been accurate since the Obama administration.

The reason this happens is pretty straightforward: writing docs feels like optional work. It's the thing you do after the feature ships, which means it's the thing you do when there's time, which means it's the thing you never quite do. And updating existing docs? That's even lower on the list. Nobody gets a pat on the back for editing a runbook.

What Rotting Documentation Actually Costs You

Let's be specific, because vague warnings about "knowledge silos" don't move the needle on anyone's sprint planning.

Onboarding drag is the most obvious one. The average developer onboarding period in the US is somewhere between two weeks and three months, depending on the role and company size. A meaningful chunk of that time is spent reverse-engineering what the documentation should say from what it actually says. New hires learn early that the official docs are a starting point at best and a trap at worst. So they do what everyone does — they ping the one senior engineer who's been there longest and interrupt their deep work to ask questions that should have been answered in writing years ago.

Security gaps are scarier. Outdated access control documentation, stale credential rotation procedures, infrastructure guides that reference deprecated services — these aren't just inconvenient. They're liabilities. When the docs say "contact Bob in IT" and Bob left eighteen months ago, someone's either going to give up and skip the step or improvise in a way that creates an exposure. Neither outcome is great.

Institutional knowledge evaporates faster than you think. When the person who built a system leaves, their mental model of how it works goes with them. If that mental model never got written down — or got written down once and then drifted from reality — you're left with a black box that everyone's afraid to touch. This is how you end up with microservices that exist in a kind of organizational ghost state: running in production, doing something important, understood by nobody.

Why Developers Deprioritize Docs (And It's Not Laziness)

It'd be easy to frame this as a discipline problem, but that's not really fair. Developers deprioritize documentation for structural reasons that make complete sense given the incentives most teams operate under.

First, documentation is rarely in the definition of done. If the ticket says "ship the feature" and the PR gets merged, the work is over. Docs are someone else's problem, or a follow-up ticket that gets created and immediately falls to the bottom of the backlog.

Second, writing good documentation requires a different cognitive mode than writing code. You have to step outside your own understanding and think about what someone who doesn't know the system needs to know. That context-switching is expensive, and it happens at the worst time — right after you've finished something and your brain wants to move on.

Third, there's almost no feedback loop. Bad code breaks. Bad documentation just quietly misleads people, and by the time the confusion surfaces, it's been attributed to something else entirely.

Making Documentation a Living Part of the Codebase

The teams that actually maintain decent docs tend to treat them less like a deliverable and more like a dependency. Here's what that looks like in practice.

Co-locate docs with code. When documentation lives in the same repo as the code it describes, it becomes part of the same review process. A PR that changes behavior without updating the relevant docs is an incomplete PR — full stop. This doesn't fix everything, but it makes the gap visible in a way that a separate wiki never will.

Build doc reviews into your incident process. Every time something goes wrong because someone was working from outdated information, that's a documentation failure. Your postmortem should include a line item: what documentation was missing or wrong, and who's updating it before this incident closes? This reframes docs from a nice-to-have into a reliability concern.

Set a documentation TTL. Some teams are experimenting with treating documentation like perishable content — assigning a "review by" date to high-stakes pages and routing them through a lightweight audit process when they expire. It sounds bureaucratic, but it's less bureaucratic than the three-hour archaeology session that happens when someone tries to set up a dev environment from a guide written in 2021.

Make it easy to flag stale content. A simple "was this helpful?" or "is this outdated?" button at the bottom of internal docs pages creates a low-friction feedback loop. People who notice something's wrong often won't fix it themselves, but they'll click a button. That signal is useful.

The Honest Conversation Nobody's Having

Here's the thing about documentation debt that makes it genuinely harder to address than code debt: fixing it requires admitting that a lot of institutional knowledge was never really captured in the first place. It's not just about updating a few pages. It's about acknowledging that your organization has been running on the implicit knowledge of a shrinking group of long-tenured people, and that the moment those people leave, a significant chunk of how your system actually works goes with them.

That's an uncomfortable thing to put in a quarterly planning doc. But it's the real conversation.

Code debt is fixable with refactors and rewrites. Documentation debt is fixable with time, discipline, and a genuine cultural shift in how teams think about what counts as finished work. The tooling helps. The processes help. But none of it sticks unless writing and maintaining documentation is treated as engineering work — not as the thing engineers do when they have nothing better going on.

Spoiler: they always have something better going on. That's exactly why this has to be structural, not optional.

Your docs are dark matter. You can't see them failing. You just feel the gravity of the consequences, usually at the worst possible moment.

All Articles

Related Articles

The Silent Tax on Your Codebase: How Technical Shortcuts Become Budget Nightmares

The Silent Tax on Your Codebase: How Technical Shortcuts Become Budget Nightmares

Dead Integrations Walking: How to Audit the API Debt Nobody Wants to Talk About

Dead Integrations Walking: How to Audit the API Debt Nobody Wants to Talk About

I Built the Same App Three Times in Three Frameworks. Here's What a Year Taught Me.

I Built the Same App Three Times in Three Frameworks. Here's What a Year Taught Me.