DEV Community

Om Keswani
Om Keswani

Posted on

The Documentation Lie: Why Your Wiki Is Actually Technical Debt

The Confession

I didn’t sleep that night.

At 2:00 AM, my phone buzzed with a PagerDuty alert. The authentication service was down. Again. But this time, it wasn’t a code issue. It was a documentation issue—and it nearly cost us a $50,000 client.

Let me back up.

A junior dev named Arjun had joined the team three weeks earlier. Bright kid. Sharp. Eager. I pointed him to the "Getting Started" wiki and patted myself on the back for being such a thorough mentor. "Just follow the setup guide," I said. "It’s all in there."

He nodded, opened his laptop, and disappeared into the conference room.

Four hours later, I walked by and saw him staring at his terminal like it had personally insulted his ancestors. His face was pale. The screen was red.

"What’s up?" I asked.

He didn't look at me. "It says I'm missing the legacy environment variables. But I copied them exactly from the page. I even restarted twice."

I leaned over, glanced at the README, and felt my stomach drop.

That variable had been deprecated eighteen months ago. We had migrated to a new secret manager in Q4 of last year. The wiki still referenced the old vault. Arjun had been typing a dead API key into his .env file for three hours, thinking he was the problem.

He wasn't the problem. I was. The team was. The culture was.

The Genesis of the Fossil

I remember the day we wrote that wiki. It was the Friday before a major launch. The PM said, "We need documentation for the handoff." So we all grabbed a page, slammed some bullet points into Confluence, and called it a day.

It was never meant to be permanent. It was a temporary artifact to get us through the release.

But temporary artifacts in software engineering have a terrifying habit of becoming permanent infrastructure. The release happened. The pressure dropped. The team moved on to the next fire. And that wiki page—the one with the deprecated keys and the outdated Docker commands—sat there, untouched, gathering virtual dust.

Management loved it, though. They saw a full wiki and checked the "Knowledge Transfer" box on their quarterly roadmap. We looked organized. We looked professional.

We were neither.

The Slow Rot

Over the next year, we pushed forty-seven hotfixes to that service. We refactored the database connection three times. We switched CI/CD pipelines.

Guess how many times we updated the wiki?

Zero.

Every new hire got the same script: "Read the docs, ask questions if you get stuck." But "asking questions" just meant bothering the one guy who actually wrote the original service—a senior dev named Priya. She became the human search engine.

"Hey Priya, where's the new config?"
"Hey Priya, why doesn't this migration work?"
"Hey Priya, the staging environment is throwing a 500, any ideas?"

She handled it with grace for about six months. Then the grace turned into terse Slack replies. Then the terse replies turned into silent mode. Then she updated her LinkedIn profile to "Open to Work" and vanished into a competitor's office across town.

We threw a farewell party. We bought her a cake. We said, "We'll miss your expertise."

We never said, "We'll miss you because we forced you to be our living documentation, and we never wrote a single useful word to save your sanity."

The Climax (2:00 AM)

Which brings me back to 2:00 AM with the PagerDuty alert.

That night, the authentication service crashed because a new microservice was trying to read a token from the old secret location—because the developer who built the microservice read the damned wiki. He trusted it. He built his entire integration around a fossil.

When the token rotated, the microservice couldn't authenticate. The cascade failure took down user logins for three regions.

The fix took five minutes. It was just changing one environment variable.

But the damage—the lost sleep, the client screaming into the phone, the junior dev crying in the breakroom, the senior dev who quit because she was tired of being a walking encyclopedia—that damage took years of trust to rebuild.

The Brutal Realization

Documentation isn't a nice-to-have. It's not a "sprint 0 task." It is the UI of your team's brain. And if your UI is broken, your users (your developers) will hate you.

We made a new rule after that night. It wasn't complicated.

First, no PR gets merged if the corresponding wiki page doesn't get updated in the same branch. Same diff. Same review. Docs rot when they're decoupled from code. We coupled them with violence.

Second, we assigned documentation to the freshest person on the team. Not the senior. The junior. Because if a junior can't understand it, it's not clear. And if they update it, they actually learn the system in the process.

Third, and this was the hardest one—we killed the "just in case" docs. We deleted hundreds of pages. If it hadn't been viewed in six months, it went to the trash. We treated it like dead code. Because it was.

The Payoff

Six months later, a new junior joined. I walked over, opened the wiki, and watched him run the setup script.

It worked. On the first try.

He looked at me, confused. "That was it?"

I shrugged. "That was it."

He didn't know the war. He didn't know Priya. He didn't know the 2:00 AM panic. All he knew was that the documentation worked. And that, right there, was the most beautiful thing I'd seen in my entire career.

Documentation isn't about preservation. It's about liberation. It's about setting your seniors free to do actual architecture instead of answering DMs. It's about letting juniors ship without feeling like frauds.

Your wiki is either your greatest safety net or your greatest technical debt.

There is no in-between.


Got a "wiki horror story" that keeps you up at night? Drop it below. Let's trauma-bond.

Top comments (0)