How to write documentation for three users.

•

•

Docs Pay Off at User Number Two

I once spent three hours in a dark Slack thread trying to explain a simple API change to a DevOps engineer who just wanted to know which port to open, while simultaneously dodging a product manager asking for a roadmap and a junior dev who couldn’t find the entry point. Most “expert” guides on how to write documentation for three users will tell you to build a complex, multi-layered wiki or invest in expensive documentation tooling. That’s nonsense. Complexity is just a way to hide the fact that you don’t actually know who you are talking to, and in a production environment, ambiguity is a liability we can’t afford.

I’m not here to teach you how to use Confluence or how to write perfect prose. I want to talk about the practical reality of partitioning information so the person building the feature, the person maintaining the infra, and the person who accidentally deleted the database all find what they need without losing their minds. I’ll share what I’ve learned from a decade of fixing things that should have been obvious, focusing on how to structure your notes so they actually work when the pressure is on.

Table of Contents

Targeted Technical Writing for the Person Who Actually Fixes It

Targeted Technical Writing for the Person Who Actually Fixes It

When I’m staring at a flickering terminal at 2 AM because a service is throwing 500s, I don’t need a high-level overview of the system architecture. I need to know exactly which config file controls the retry logic and what the fallback behavior is when the database connection pool saturates. This is where most teams fail; they write for the person who designed the system, not the person who has to keep it breathing. A true user-centric documentation approach for the operator means focusing on actionable state changes rather than abstract theory. If the doc doesn’t tell me which lever to pull to stop the bleeding, it’s just noise.

To keep this from becoming a massive, unmaintainable burden, I lean into lean documentation practices. I don’t believe in writing a thousand-page manual that nobody reads; I believe in writing the specific, surgical notes that prevent a repeat incident. This means prioritizing “how to restart,” “how to roll back,” and “how to verify health” over long-winded explanations of why we chose Kafka over RabbitMQ. By focusing on these high-leverage points, you achieve a much better documentation ROI because you’re solving the problems that actually cost the company money during an outage.

Minimizing Documentation Overhead When Everything Is on Fire

Minimizing Documentation Overhead When Everything Is on Fire

The biggest trap I fall into—and I’ve seen entire teams fall into it—is thinking that more documentation equals better coverage. It doesn’t. It just means more stale READMEs that nobody trusts. When you’re trying to implement lean documentation practices, you have to accept that some things shouldn’t be written down in a formal wiki. If a process changes every two weeks because the service is still evolving, a static document is just a lie waiting to be discovered. Instead, I try to bake the “why” into the code itself or keep the instructions as close to the execution point as possible.

To get a decent documentation ROI for niche audiences, you have to stop writing for the sake of completeness and start writing for utility. I don’t need a 40-page manual on our deployment pipeline; I need a single, high-signal paragraph that tells me which environment variable will kill the connection pool if I set it wrong. If the documentation isn’t helping someone make a decision or fix a failure, it’s just technical debt disguised as helpfulness. Focus on the high-leverage bits—the edge cases, the weird legacy quirks, and the “don’t touch this unless you want to spend your weekend in a war room” warnings.

Five rules for not wasting everyone's time

  • Stop trying to build one giant wiki page. The developer needs a README that lives next to the code, the admin needs a runbook that lives in a searchable repository, and the stakeholder needs a high-level summary that doesn’t require a terminal to read. If you mix them, nobody finds what they need when things go sideways.
  • Write for the person who is currently losing sleep. If a step requires a deep dive into a three-year-old architectural decision just to run a migration, your documentation has failed. Keep the “why” for the design docs and the “how” for the operational docs.
  • Use “If/Then” logic instead of prose. “If the latency exceeds 200ms, then check the connection pool” is infinitely more useful than a paragraph explaining the theoretical importance of connection pooling in a distributed system.
  • Assume the reader is smart but exhausted. When I’m debugging a production incident, I don’t have the cognitive load to parse flowery language or “best practice” fluff. I need commands, expected outputs, and the specific error codes to look for.
  • Treat documentation like code, not like an afterthought. If a change in the API requires a change in the docs, make it part of the same Pull Request. If it’s not in the PR, it didn’t happen. I’ve learned the hard way that “I’ll update the docs later” is just a polite way of saying “this information is now a lie.”

The TL;DR for the Tired

Stop trying to write a single, unified source of truth that satisfies everyone; instead, build modular notes that serve the specific person holding the pager, the person building the feature, and the person just trying to understand the architecture without getting lost in the weeds.

If a piece of documentation requires a twenty-minute preamble to explain why it matters, it’s useless during an incident; prioritize “how” and “where” over “why” when the clock is ticking, and save the philosophical justifications for the design docs.

Documentation is a living debt, not a one-time tax; if you find yourself explaining the same workaround twice in a month, the documentation didn’t fail, your process did—update the note immediately or admit it’s not worth writing down.

The Long View on Documentation

The Long View on Documentation strategies.

At the end of the day, documenting for three different audiences isn’t about being a literary genius or following some rigid corporate template. It is about recognizing that a high-level stakeholder needs a map of the terrain, a developer needs the schematics of the engine, and an operator needs to know exactly which valve to turn when the pressure spikes. If you try to mash them all into a single, monolithic README, you end up with a document that is useless to everyone. By separating the “why” from the “how” and the “what if,” you stop creating noise and start building a functional toolset that actually survives its first encounter with a real-world problem.

I’ve spent enough time staring at broken systems to know that the best documentation isn’t the most polished; it’s the most reliable. Don’t aim for perfection, and don’t get bogged down in the aesthetics of your Markdown files. Just aim to be the person who leaves the campsite better than they found it. If your notes allow the next engineer to solve a crisis in twenty minutes instead of two hours, you’ve done your job. Writing things down is a gift to your future self, and more importantly, it’s a mercy to whoever follows you into the trenches.

Frequently Asked Questions

How do I stop the documentation from becoming a massive, unmaintained monolith that everyone ignores?

Stop treating documentation like a library and start treating it like code. If it’s a massive, static monolith, it’s already dead; it’s just waiting for someone to realize it’s lying. Keep docs close to the logic—READMEs in the repo, ADRs in the same PR as the architectural change. If a piece of documentation isn’t being used to solve a problem or onboard someone, delete it. Rot is a feature of neglect; keep the surface area small.

If I'm writing for three different audiences, how do I avoid duplicating the same technical info three times?

Don’t repeat yourself. If you copy-paste the same configuration steps into three different files, you’ll eventually update one and forget the others. That’s how outages happen.

At what point does "enough documentation" become a waste of engineering time?

Documentation becomes a waste of time the moment you start writing for a hypothetical person who doesn’t exist. If you’re documenting edge cases that haven’t happened, or polishing prose for a stakeholder who only reads the executive summary, you’re just burning cycles. I stop when the documentation answers the questions that actually come up in Slack or during post-mortems. If it doesn’t help someone make a decision or fix a bug, it’s just noise.

How do I handle documentation for a system that is changing so fast the notes are obsolete by the time they're merged?

If your docs are obsolete before the PR merges, you’re likely treating documentation like a book instead of code. Stop writing long-form manuals. Move the “truth” closer to the implementation. Use READMEs in the repo, decorate your code with enough context to explain the why, and let the tests act as your living specification. If a piece of info changes every sprint, it doesn’t belong in a Wiki; it belongs in a comment or a test case.

Tomasz Wierzbicki

About Tomasz Wierzbicki

I am not interested in arguing about frameworks. I am interested in why the thing broke at two in the morning and what would have prevented it. Most of what I know came from being wrong in production and writing it down afterwards.