Gabriel Fonseca.
← Writing

Engineering

Documentation as an engineering discipline.

What useful technical documentation needs to explain, and what it should make easy to verify.

Technical documentation is often treated as material to be written after the engineering is complete. In practice, it is part of the system's operating model. Useful documentation reduces the time required to understand a design, change it safely, diagnose a problem, or transfer responsibility between people.

State the audience and scope

A developer integrating an API needs different information from an administrator operating a service. Documentation should say who it is for and what it covers. It should also say what it does not cover. A short, explicit scope statement prevents readers from assuming that a procedure applies more broadly than intended.

Show how the system behaves

Architecture diagrams can provide orientation, but the reader also needs concrete behavior: request and response examples, expected permissions, failure modes, configuration constraints, and the effect of changing a setting. Examples are most useful when they can be run or verified. An example that silently depends on missing context creates more work than it removes.

Explain decisions and trade-offs

Code shows what an application does; it rarely explains why a particular trade-off was accepted. Decision records can preserve the alternatives considered, the relevant constraints, and the conditions under which a decision should be revisited. That record becomes particularly valuable when the original author is no longer available.

Make maintenance possible

Each important document should have a clear owner or maintenance process. Links should resolve, commands should be tested, and instructions should be updated when interfaces change. A short accurate guide is more valuable than a comprehensive guide that cannot be trusted. Treat broken documentation as a product defect when it prevents people from using or operating the system safely.

Write for verification

Prefer explicit conditions and observable results over assurances. “Run this command and confirm the service returns a healthy status” is more useful than “verify that everything is working.” The same principle applies to security claims: specify a control, where it is enforced, and how its operation can be checked. Clarity makes technical work easier to maintain and easier to evaluate.

Gabriel FonsecaMore writing