Internal vs. External Documentation: What Belongs Where
Originally published at https://ninadpathak.com/articles/internal-vs-external-documentation/. Internal documentation helps your team operate the system. External documentation helps customers, partners, and public developers use the supported product. When both tasks exist, publish a public task page and keep a separate private operating record. Classify each subject as internal, external, or split. Internal vs. external documentation: choose by reader task Google's technical writing guidance on audience defines an audience by the knowledge and skills it needs for a task. Use that task, not a person's job title, to decide where a page belongs. Ask four questions: - Does someone outside the organization need this information to evaluate, use, integrate with, administer, or recover the product? - Does the subject contain credentials, private topology, unpublished plans, exploit detail, personnel information, or candid incident analysis? - Does an internal operator need implementation context that an external reader does not? - Who owns the source of truth, and which product or process change makes it stale? Internal vs. external documentation comparison | Signal | Internal documentation | External documentation | Split documentation | |---|---|---|---| | Primary reader | Employee, contractor, or approved operator | Customer, partner, public developer, or product administrator | Both groups | | Reader task | Build, deploy, operate, support, decide, or change the system | Evaluate, start, integrate, configure, use, migrate, or recover | Complete an external task while preserving private operating context | | Typical detail | Architecture decisions, private dependencies, internal commands, staffing, controls, and candid analysis | Supported behavior, prerequisites, procedures, examples, limits, errors, and recovery | Public contract on one side, implementation and sensitive context on the other | | Access | Identity and role based | Public or customer authenticated | Separate access and separate documents | | Update trigger | Process, topology, control, tooling, or ownership change | Product contract, interface, workflow, or release change | Either side changes | IBM's code documentation overview makes the same practical distinction. Coding standards and development-environment setup serve internal work, while public API reference, integration notes, configuration, and README files can serve external work. What belongs in internal documentation Architecture decisions and system design Keep architecture decision records, private topology, capacity assumptions, data classifications, vendor constraints, and unreleased plans with the team that operates them. A public architecture page should explain only the integration model, trust boundary, data flow, or deployment responsibility that changes a customer's decision. Runbooks and internal recovery procedures Keep privileged commands, escalation paths, rollback criteria, dashboards, and candid failure analysis behind the appropriate access boundary. External troubleshooting should start from an observable symptom, give a safe recovery path, and state when to contact support. Employee onboarding and working agreements Local access, internal repositories, approval paths, team ownership, coding standards, and deployment responsibilities belong in contributor onboarding. Atlassian's internal documentation guidance treats this material as living team knowledge, which means it still needs ownership and review. What belongs in external documentation Product scope and getting started Publish prerequisites, the supported first action, expected result, and the next useful page when an outside reader needs them to start. A documented happy path should not require a support conversation to complete. Public interfaces and product contracts Publish API endpoints, SDK methods, command flags, configuration fields, error behavior, limits, compatibility promises, and supported authentication flows. The reader needs the request shape, authorization requirement, response, failure behavior, and relevant limits, not the service graph that fulfills the request. Releases, migrations, and customer recovery Publish release notes, migration guides, deprecation notices, and troubleshooting when product behavior changes or a supported task can fail. The page must answer whether the reader is affected, what to change, when to change it, and how to confirm recovery. When to split internal and external documentation A split is not a redacted internal page. It is a public document with a customer task and a private document with the operating detail required to maintain that public promise. | Shared subject | Internal documentation | External documentation | |---|---|---| | Production incident | Timeline, contributing conditions, response decisions, corrective work, and private evidence | Customer impact, affected period, restored state, customer action, and follow-up commitment | | System architecture | Decisions, private topology, controls, dependencies, and operational constraints | Supported deployment model, integration boundary, data flow, and customer responsibility | | Authentication | Key handling, abuse controls, rotation operations, and internal escalation | Authentication flow, scopes, supported credentials, errors, rotation task, and recovery | | Product release | Launch plan, rollout criteria, internal risks, and rollback decision | Shipped behavior, impact, required action, compatibility, and migration path | Link the private source to the public contract it maintains. Give each page its own owner and update trigger, because a supported authentication flow can change without changing the internal key-rotation runbook. Documentation placement audit template Start with an inventory. Record whether an external reader has a task, whether private context exists, whether an internal operator has a separate task, who owns the page, and what makes it stale. I encoded that inventory in a small documentation placement audit and ran it against an eight-artifact sample manifest. The run classified three artifacts as internal, three as external, and two as split. python3 documentation_placement_audit.py AUDIT PASSED: 8 artifacts, internal=3, external=3, split=2, review=0 Inspect the generated CSV report before adapting the fields to your own inventory. The script exposes mixed audiences and missing ownership, but a security or legal reviewer still decides what the organization may publish. Documentation ownership and update triggers | Placement | Primary owner | Useful update triggers | Completion signal | |---|---|---|---| | Internal | Team closest to the system or process | Topology, workflow, control, tooling, incident, or ownership change | An operator can complete the internal job safely | | External | Product documentation, developer experience, or product team | Interface, behavior, prerequisite, limit, error, version, or support-pattern change | An outside reader can complete the promised task | | Split | Named owner for each side, with one contract between them | Any change that makes the public promise and private operation disagree | Both pages agree on supported behavior without sharing private context | GitLab's documentation style guide treats product documentation as a maintained source of truth for implementation, use, and troubleshooting. Apply the same maintenance discipline to private operational material. Start with the external task. If the answer also requires private operating context, create paired documents instead of widening one page until it serves neither reader well. Use the types of technical documentation to choose the artifact each reader needs. If duplicate pages and navigation drift already hide the canonical answer, organize the documentation site before adding more pages. Top comments (0)
Comments
No comments yet. Start the discussion.