Cadabra All articles
Tools & Reviews

Write It Down Before It Disappears: Building a Documentation System Your Team Will Actually Use

Cadabra

Every engineering team has that one person. The one who knows why the payment service can't run on anything below Node 16, why the third-party auth library got forked, and why there's a mysterious DO_NOT_DELETE folder in the repo root that's been there since 2021. They're invaluable. They're also a single point of failure.

When that person leaves — and eventually, everyone leaves — the knowledge doesn't transfer. It evaporates. And the team that inherits the codebase gets to spend the next six months rediscovering decisions that were already made, arguing over architecture choices that were already settled, and making mistakes that were already made once before.

Good documentation isn't about writing everything down for its own sake. It's about capturing the right things in a format that survives long enough to be useful. Here's how to actually do that.

The Problem With Most Docs Isn't What You Think

The common diagnosis is that engineers just don't like writing documentation. That's partially true, but it's not the core issue. The core issue is that most documentation systems create work without providing proportional value to the person doing the writing.

If writing a doc means opening a wiki, navigating to the right section, figuring out the template, writing something that may or may not get read, and then never knowing whether it actually helped anyone — you've built a system that requires discipline to maintain and offers almost no feedback loop. Of course people skip it.

The documentation systems that actually stick are the ones where writing feels like a natural extension of the work itself, not a separate chore bolted on afterward.

Architecture Decision Records: The Most Underused Tool in Engineering

If there's one documentation practice worth evangelizing, it's Architecture Decision Records — ADRs. The concept is simple: every time your team makes a significant technical decision, you write a short document capturing what you decided, why you decided it, and what alternatives you considered.

Not a design spec. Not a full technical breakdown. Just a lightweight record that future engineers (including future you) can read and understand why the system is the way it is.

Tools like ADR Tools make this easy to integrate directly into your repo. The docs live next to the code, get versioned with it, and are visible in pull requests. When someone asks 'why are we using Redis for this instead of Postgres?' the answer isn't locked in someone's head or buried in a Slack thread from two years ago — it's right there.

The format matters less than the habit. A markdown file with three sections — context, decision, consequences — is enough. The goal is a paper trail, not a manifesto.

Decision Logs vs. How-To Docs: Know the Difference

One reason documentation systems get bloated and then abandoned is that teams try to write everything in the same format. How-to guides, architectural explanations, runbooks, and decision records are fundamentally different documents serving different purposes.

How-to docs answer 'how do I do X?' They're procedural and should be kept short, specific, and tested against reality regularly. If the steps in your deployment runbook don't match what actually happens when you deploy, the doc is worse than useless — it's actively misleading.

Architecture docs answer 'how does this system work?' These are higher-level and change less frequently, but they need to be maintained when they do change. Tools like Structurizr or even simple C4 diagrams in Mermaid can keep these visual and readable without requiring a dedicated architect to maintain them.

Decision logs answer 'why does this system work this way?' That's ADRs, covered above.

Runbooks answer 'what do I do when this breaks at 3 a.m.?' These are operational docs tied to specific systems or alerts. They should be written by the people who built the thing, reviewed by someone who didn't, and updated after every incident.

Keeping these separate — literally in different folders or sections — makes it dramatically easier to find what you're looking for and to know what needs updating when something changes.

Tools Worth Actually Using

A quick rundown of what's working for real teams right now:

Notion is flexible and has great UX, but it requires discipline to keep organized. Without a clear structure enforced from the start, it becomes a graveyard of half-finished pages. Works best for smaller teams with someone willing to be the doc sheriff.

Confluence is the enterprise standard, and for good reason — it integrates well with Jira and has solid permissions. But it's heavy, and its search is notoriously bad. If you use it, invest in a consistent page structure early.

Obsidian with a shared vault (via Git or a cloud sync tool) is increasingly popular with engineering teams who want something lightweight and markdown-native. The graph view is genuinely useful for seeing how docs relate to each other.

Docs-as-code — keeping documentation in the same repo as the code, in markdown — is the approach most likely to stay current because it's reviewed alongside code changes. Tools like Docusaurus or MkDocs can turn those markdown files into a proper searchable site with minimal overhead.

The tool matters less than the workflow. The best documentation system is the one your team will actually open.

Making It Stick: The Habits That Matter More Than the Tools

Documentation is a team behavior, not an individual one. If it's only valued when someone's offboarding or a new hire is confused, it won't get written proactively.

A few practices that help:

The goal isn't a perfect documentation system. It's a good-enough one that the next engineer on your team — the one who joins in eight months and has never met the person who built the auth service — can understand what they inherited and why. That's the spell worth casting.

All Articles

Related Articles

The Overengineering Trap: When Elegant Code Becomes a Maintenance Nightmare

The Overengineering Trap: When Elegant Code Becomes a Maintenance Nightmare

Cast Away the Busywork: 7 AI Tools Small Business Owners Are Genuinely Obsessed With Right Now

Cast Away the Busywork: 7 AI Tools Small Business Owners Are Genuinely Obsessed With Right Now

Ghost in the Machine: Why Your Team Keeps Chasing Bugs That Vanish on Command