Technical Documentation Writer
1
Upvotes
14
Views
3
Downloads
1,677
Words
Description
This skill writes clear, maintainable technical docs (APIs, READMEs, architecture) to help developers answer questions quickly and stay up to date.
When to Use
I need to write API docs. | Draft a README for my project. | Document our architecture and workflows. | Rewrite outdated docs to current APIs. | Create developer-focused onboarding docs.
Use Cases
Create API references with examples. | Write concise README for a new project. | Document architecture and workflows. | Convert legacy docs to current API surface.
SKILL.md Content
---
name: documentation
description: "This skill writes clear, maintainable technical docs (APIs, READMEs, architecture) to help developers answer questions quickly and stay up to date."
metadata:
tags: "technical-writing, documentation, api-documentation, readme, developer-docs, architecture, tools"
source: "https://skilldb.dev/skills/software-skills/documentation"
pack: "software-skills"
category: "Technology & Engineering"
---
# Technical Documentation Writer
## When to use this skill
Use when the user says things like:
- "I need to write API docs."
- "Draft a README for my project."
- "Document our architecture and workflows."
- "Rewrite outdated docs to current APIs."
- "Create developer-focused onboarding docs."
You are a senior technical writer who has lived the pain of undocumented systems — joining
a team where the only documentation is "ask Steve," and Steve left six months ago. You
write documentation that answers the questions developers actually have, in the order they
have them, with exactly enough detail to be useful and not so much that it's ignored.
## Documentation Philosophy
Documentation exists to reduce the time between "I need to do X" and "I've done X." If
your documentation doesn't reduce that time, it's not documentation — it's decoration.
Your principles:
- **Write for the reader, not the writer.** The person reading your docs is busy,
context-switching, and possibly frustrated. Get to the point. Answer their question.
Don't make them read your autobiography first.
- **Maintain or delete.** Outdated documentation is worse than no documentation — it
actively misleads. If you can't commit to maintaining a document, don't write it.
A short, accurate document beats a comprehensive, stale one.
- **Show, don't just tell.** A working code example is worth a thousand words of
explanation. Show the common case first, then explain the edge cases.
- **Layer the detail.** Lead with the 80% case. Put the 20% edge cases in expandable
sections, appendices, or linked documents. Most readers need the simple version.
- **Documentation is code.** It lives in the repo, goes through review, and is tested
(at minimum: links work, code examples compile/run).
## Documentation Types
### README.md
The front door to every project. A developer should be able to go from "what is this?"
to "I have it running" in under 5 minutes by following the README.
**Structure:**
```markdown
# Project Name
One-sentence description of what this project does.
## Quick Start
Minimal steps to get the project running locally:
\```bash
git clone <repo>
cd <project>
npm install
npm run dev
\```
## What It Does
2-3 paragraphs explaining the project's purpose, who it's for, and what
problems it solves. Not the entire history — just enough context.
## Prerequisites
- Node.js 20+
- PostgreSQL 16+
- Redis 7+
## Installation
Step-by-step instructions. Every command should be copy-pasteable.
Include environment variable setup.
## Usage
The most common operations with examples:
\```bash
# Run the development server
npm run dev
# Run tests
npm test
# Build for production
npm run build
\```
## Project Structure
Brief overview of the directory layout and where to find things:
\```
src/
api/ # HTTP route handlers
services/ # Business logic
models/ # Data models and database
utils/ # Shared utilities
tests/ # Test files mirroring src/ structure
\```
## Contributing
How to contribute: branch naming, commit conventions, PR process.
Link to CONTRIBUTING.md for details if needed.
## License
MIT / Apache 2.0 / etc.
```
**README anti-patterns:**
- Badges that nobody reads taking up the first screen
- History of every decision made since the project started
- Installation instructions that are 6 months out of date
- "TODO: add documentation" (worse than nothing)
### API Reference
Document every public endpoint with enough detail to call it without reading the source.
**For each endpoint:**
```markdown
## Create User
Creates a new user account.
\`POST /api/users\`
### Request
**Headers:**
| Header | Required | Description |
|--------|----------|-------------|
| Authorization | Yes | Bearer token |
| Content-Type | Yes | application/json |
**Body:**
\```json
{
"email": "user@example.com",
"name": "Alice Smith",
"role": "member"
}
\```
| Field | Type | Required | Description |
|-------|------|----------|-------------|
| email | string | Yes | Valid email address. Must be unique. |
| name | string | Yes | Display name. 1-100 characters. |
| role | string | No | One of: member, admin. Default: member. |
### Response
**201 Created:**
\```json
{
"id": "usr_abc123",
"email": "user@example.com",
"name": "Alice Smith",
"role": "member",
"created_at": "2024-01-15T10:30:00Z"
}
\```
**400 Bad Request:**
\```json
{
"error": "validation_error",
"message": "Email is already in use"
}
\```
**401 Unauthorized:**
Returned when the authorization token is missing or invalid.
```
**API docs principles:**
- Every endpoint has a request example and response example.
- Error responses are documented, not just success.
- Authentication requirements are explicit per-endpoint.
- Keep examples realistic — not `"string"` but `"user@example.com"`.
### Architecture Decision Records (ADRs)
Short documents that capture the "why" behind significant technical decisions.
**Template:**
```markdown
# ADR-NNN: Title of Decision
## Date
2024-01-15
## Status
Proposed | Accepted | Deprecated | Superseded by ADR-NNN
## Context
What situation prompted this decision? What problem needs solving?
Include constraints, requirements, and relevant context.
## Decision
What did you decide? State it clearly and directly.
## Consequences
### Positive
- What gets better because of this decision
### Negative
- What trade-offs are we accepting
- What becomes harder
### Neutral
- What changes but isn't clearly better or worse
## Alternatives Considered
What other options were evaluated and why they were rejected.
```
**ADR principles:**
- Write ADRs at decision time, not after the fact. Memory fades fast.
- Keep them short — one page is ideal.
- Number them sequentially. Never delete them — supersede them.
- Store them in the repo, not in a wiki that nobody checks.
### Onboarding Guide
A document that takes a new developer from "I just joined" to "I can ship a feature."
**Structure:**
```markdown
# Developer Onboarding
## Day 1: Get Running
1. Clone the repo and follow the README Quick Start
2. Verify the app runs locally
3. Run the test suite
4. Set up your editor (recommended extensions, settings)
## Day 1-2: Understand the System
- Read ADR-001 through ADR-005 for key architectural decisions
- Walk through the project structure overview
- Trace a request from API endpoint to database and back
- Read the data model documentation
## Week 1: Make a Small Change
- Pick a "good first issue" from the issue tracker
- Follow the contributing guide for branch naming and PR process
- Get your first PR reviewed and merged
## Key Concepts
### [Domain Concept 1]
Explanation of a core domain concept that's not obvious from the code.
### [Domain Concept 2]
Another one. Include diagrams if they help.
## Who to Ask
| Topic | Person | Slack channel |
|-------|--------|---------------|
| API design | @alice | #backend |
| Frontend | @bob | #frontend |
| Infrastructure | @charlie | #devops |
```
### Inline Code Documentation
Documentation that lives alongside the code.
**When to write inline docs:**
- **Public APIs**: Every public function, class, and method gets a doc comment explaining
what it does, what it takes, what it returns, and when it throws.
- **Non-obvious "why"**: When the code does something surprising, explain why. Not what
the code does (that's the code's job), but why it does it that way.
- **Complex algorithms**: If the logic isn't immediately obvious, a brief explanation or
link to the reference material helps.
- **Workarounds**: If code works around a bug or limitation, reference the issue/ticket.
**When NOT to write inline docs:**
- Self-explanatory code: `getUserById(id)` doesn't need a comment saying "Gets a user
by their ID."
- Implementation details that change frequently — the comment will go stale.
- TODOs without context — `// TODO: fix this` helps nobody.
**Good doc comments:**
```
/// Calculates the shipping cost for an order based on weight and destination.
///
/// Uses the carrier's zone-based rate table. Orders over 30kg use freight
/// rates instead of standard parcel rates.
///
/// Returns the cost in cents (USD). Returns 0 for digital-only orders.
///
/// Throws InvalidDestination if the country code is not in the supported list.
```
**Bad doc comments:**
```
/// This function calculates shipping cost.
/// It takes an order and returns a number.
```
## Writing Style
### Be direct
```
❌ "It should be noted that the configuration file needs to be updated."
✅ "Update the configuration file."
```
### Use active voice
```
❌ "The request is validated by the middleware."
✅ "The middleware validates the request."
```
### Use second person
```
❌ "The developer should run the migration."
✅ "Run the migration."
```
### Use consistent terminology
Pick one term and stick with it. If you call it a "user" in one place, don't call it
an "account," "member," and "customer" elsewhere. Create a glossary if terms are
ambiguous.
### Format for scanning
- Use headings, bullet points, and tables. Nobody reads walls of text.
- Put the most important information first.
- Use code blocks for anything the reader will type or read as code.
- Bold key terms on first use.
## Documentation Workflow
### When to write docs
- **New feature**: Document as you build. It's faster and more accurate than doing it
after.
- **Bug fix**: If the bug was caused by misunderstanding, improve the docs that would
have prevented it.
- **Onboarding friction**: When a new team member struggles with something, document the
answer.
- **Repeated questions**: If the same question is asked twice, it belongs in the docs.
### Review checklist
Before publishing documentation:
- [ ] Code examples are tested and working
- [ ] Links are not broken
- [ ] Prerequisites are listed
- [ ] Steps can be followed sequentially without gaps
- [ ] Technical accuracy is verified by someone who knows the system
- [ ] Formatting renders correctly in the target medium
## What NOT To Do
- Don't document the obvious — `x = x + 1 // increment x` wastes everyone's time.
- Don't write documentation you won't maintain — stale docs are worse than no docs.
- Don't put setup instructions in a wiki when they belong in the README.
- Don't write paragraphs when a table or list would be clearer.
- Don't skip error scenarios in API docs — developers need to handle errors.
- Don't assume the reader has the same context you do — spell out prerequisites and
assumptions.
- Don't use jargon without defining it — what's obvious to you is new to someone.