Key idea: Documentation types are defined by who needs the information, not by whether the pages are public or locked behind a VPN.
The internet is cluttered with advice on doc portals, wikis, and ReadMe templates. What often gets missed is the simple filter that should lead every choice: Who will read this, and what job are they trying to finish? That single question separates internal documentation from external documentation far more cleanly than the usual labels, such as “public‑facing” or “confidential.”
Below is a practical guide for product and engineering teams that need clarity on the split, especially those building developer tools, where the boundary is often blurry. Use it to decide what to write, where to put it, and how to keep it functional after launch.
External Documentation: Unblock A User
External docs target people who do not share your Slack workspace. They might be customers, partners, or members of an open-source community. The common thread: they need your API, SDK, or command-line tool to function within their systems.
Core goals
- Teach quickly – Reduce time‑to‑first‑success.
- Answer precisely – Provide authoritative reference material so no one has to scrape the source.
- Scale support – Replace one‑off support tickets with self‑serve knowledge.
Typical formats
Format | When to use | Key attribute |
---|---|---|
Quickstart / Hello World | A new developer arrives. | The shortest path to a working call. |
How‑to guide | A developer searches, “How do I create a webhook?” | Step‑by‑step task completion. |
Reference page | A developer already knows the task; they need details. | Parameter tables and response schemas. |
Concept article | A developer asks, “How does your auth flow differ from OAuth2?” | Explains mental model, not code. |
Tone and depth
Keep opinions minimal. The audience often scans during an incident or sprint. Write declarative sentences, present examples that compile, and avoid company slang. Above all, external documents are transactional; they exist so that an unknown engineer can complete work without needing to consult with you.
Internal Documentation: Give Context
Internal docs live inside the org chart. They serve teammates who depend on engineering decisions but may not live in the codebase, including product managers, designers, technical writers, customer success teams, sales engineers, and support agents. These readers need more than how something works; they need to know why it exists and the edges that could slice them.
Devin, our CEO, frames it like this:
“Internal docs explain not just what we built but why we built it, and the trade‑offs we accepted along the way.”
Core goals
- Preserve context – Decisions fade from memory faster than code ages out.
- Avoid repeat mistakes – “Footguns” and shortcuts should be documented so new contributors see the hazards before they step in.
- Align roadmaps – Ensure that product, design, and marketing teams speak the same language when describing a feature.
Typical formats
Format | When to use | Key attribute |
---|---|---|
Design rationale | After a major architecture choice. | Lists considered options and trade‑offs. |
Technical debt log | Any deferred cleanup. | Links to ticket numbers, impact, and timeline. |
Incident post‑mortem | After on‑call fire drills. | Blameless analysis, root cause, follow‑up PRs. |
Integration playbook | When sales or support need edge‑case steps. | Combines diagrams, sample payloads, and “gotchas.” |
Tone and depth
Internal docs can be subjective. They often include half-finished ideas and candid reminders, such as “We chose GraphQL here because Bob had expertise, not because REST was impossible.” The goal is honesty, not polish. The audience is trusted to interpret nuance.
One Feature, Two Very Different Docs
Consider a permissions overhaul shipped last quarter:
External reference page
POST /roles
Content‑Type: application/json
{
"name": "billing‑admin",
"scopes": ["payments:read", "invoices:write"]
}
Bullet points cover required fields, rate limits, and HTTP status codes. No more, no less.
Internal design rationale
- Why we switched from Row-Level ACLs to Role-Based Access.
- Shortcuts we took to meet the Q2 deadline (legacy roles still map 1:1 until the migration tool ships).
- Risks: token bloat on certain tenants, flagged for follow‑up.
- Future work: UI for custom role creation targeted for Q3.
The public doc empowers customers. The private doc prevents teammates from reopening the same debates.
Where the Lines Blur (Especially in Developer‑Tools Companies)
When your paying users are developers, the split can feel artificial. Support engineers often read the public reference first, then hop into an internal document when a tricky edge case arises. That’s normal.
The guideline remains: include only the context that an outsider must know on the external side. Keep the rest internal. This reduces noise for users and lets the team speak frankly about debt, staffing, and roadmap pivots.
Why Internal Docs Matter More Every Year
- Remote and hybrid teams – Context no longer spreads by osmosis near a whiteboard. Once half the company works five time zones away, a missing doc equals a blocked sprint.
- Employee turnover – The average tenure at high-growth startups is under two years. Written context prevents rewriting history every handover 1.
- Compliance – SOC2, ISO27001, and similar audits require demonstrable processes. Clear internal docs reduce scrambling before attestations.
- Scaling teams – When headcount doubles, tribal knowledge fragments. Centralized narratives keep new hires productive.
Static Pages Are Not Enough
Developers and the rest of the company now expect answers in the same place where they chat. Modern knowledge flows look like:
- Slack‑native search bots that surface relevant headings when someone types /docs search in the deploy pipeline.
- Contextual links embedded in pull‑request templates (“Updating auth? Review the
auth‑migration
playbook first.”). - Short Loom or Descript videos linked alongside decision records for visual learners.
- Frequently updated FAQ decks for live sales demos.
The pattern: documentation becomes conversational. People don’t swipe through a 30‑page Google Doc; they ask and expect immediate pointers.
That shift is why Dosu invests in surfacing internal knowledge as structured snippets, allowing developers to answer once, and then the platform pipes that answer wherever it’s useful.
Keeping Docs Alive
Writing is step one. Step two lasts forever. Below is a lightweight maintenance loop:
Step | Owner | Frequency | Tips |
---|---|---|---|
Assign a doc steward | Tech lead or product manager | When the doc is created | Steward ≠ sole editor; they ensure relevance and accuracy. |
Add docs to the code review checklist | Entire squad | Every PR touching the feature scope | Link updated docs in PR description. |
Quarterly audits | Docs advocate | 4x per year | Archive or merge obsolete pages. |
Analytics review | Docs advocate + support | Monthly | Which pages have a high bounce rate? Improve examples. |
A few hours each quarter beats a two‑week “doc freeze” emergency before launch.
Best‑Practice Checklist (Pin to Your Wiki)
For external docs
- Quickstart produces a real, verifiable response in <10 minutes.
- Each code sample is copied without 404 dependencies.
- Reference tables list defaults and data types.
- Breaking changes are flagged in a changelog feed or RSS.
For internal docs
- The decision record explains rejected options.
- The Technical Debt section links to Jira/Linear tickets.
- Known pitfalls bolded ("⚠️ Avoid infinite loop in V2 sync if …").
- The future work outline includes the owner and the target quarter.
If a draft misses more than two checkmarks, postpone the code freeze and fill the gaps.
Case Study: GitLab’s 2017 Database Outage
On January 31, 2017, an engineer at GitLab.com mistakenly wiped the primary PostgreSQL data directory while resynchronizing a lagging replica. The slip left the site offline for roughly 18 hours and permanently erased approximately six hours of new data, including 5,000 projects, 5,000 comments, and 700 user accounts. (Post-mortem)
External documentation
GitLab responded with a detailed public post-mortem, about 19 minutes of reading, that laid out:
- A minute-by-minute timeline of events.
- The exact
rm -rf
command that triggered deletion. - Twenty-plus action items covering backup monitoring, WAL archiving, and safer production prompts. (Post-mortem)
The transparency became an industry standard for honest RCAs, allowing outsiders to learn from failures without opening support tickets.
Internal documentation
Concurrently, the SRE team opened 30+ internal follow-up issues in their private infrastructure project. Each issue tracked a single fix (for example, “Prometheus monitoring for backups” and “Hourly LVM snapshots of the production DB”), with an owner and due date. Weekly ops syncs reviewed progress until every item was closed. (Issue list: gitlab-com/gl-infra#1684)
Why split the docs?
Audience | What they needed | Where it lived |
---|---|---|
Customers & community | Reassurance and lessons | Public blog post-mortem |
GitLab engineers & cross-functional teams | Detailed remediation plan, trade-offs (e.g. single-node vs. multi-AZ Postgres) | Private infrastructure repo issues & runbooks |
Outcomes
- Support load fell once the public write-up answered common questions.
- Engineering alignment grew as the internal issue list created clear ownership and kept the recovery work on the roadmap for months.
- Industry impact: The case is now cited in SRE handbooks as a model of post-incident transparency, demonstrating that rigorous internal documentation can coexist with candid external communications.
Practical Advice for Teams Starting From Scratch
- Spin up one space per audience – Docs for customers live in your public portal; docs for staff can start in a Notion folder or a Git repo. Don’t mix.
- Seed internal docs with questions you answer twice – Whenever a Slack thread hits >10 replies, summarize and file.
- Review documents in the sprint retro – Treat missing documents as defects; celebrate cleaned-up pages.
- Automate linking – Use pull-request templates, Slack bots, and CI jobs to ensure that doc links remain intact, maintaining momentum.
- Favor plain text over slides – Markdown in Git tracks changes; decks tend to grow stale quickly.
Word on Style (What You’re Reading Now)
This post follows the writing style Dosu prefers:
- Direct, no filler adjectives.
- Honest about trade‑offs.
- Sentences start with conjunctions when they aid flow.
- No AI hype or marketing jargon.
Apply the same principles to your docs. Readers value clarity above clever analogies.
Summary
- Audience defines the doc type. If the reader is outside your walls, keep context minimal and code runnable. If they are inside, record the messy why.
- Context matters. Architectural decisions, tech debt, and pitfalls belong where teammates can find them.
- Docs must live. Surface them in chat tools, CI pipelines, and dashboards, or they will rot.
Adopt these habits, and both customers and coworkers will spend less time hunting for answers and more time shipping high-quality software.