Documentation Practice
7 Technical Writing Mistakes That Frustrate Developers

The most damaging technical writing mistakes are rarely dramatic. They are small gaps repeated across important workflows: a missing prerequisite, an unexplained field, an example that cannot run, an error code with no recovery step, or a page title that hides the answer.
These problems frustrate developers because they transfer work from the documentation to the reader. Instead of completing a task, the developer must infer configuration, reconcile contradictions, search other pages, inspect source code, or ask support.
This guide examines seven common mistakes in developer documentation, explains why each one causes failure, and provides concrete corrections you can apply during writing or a documentation audit.
1. Skipping prerequisites and “obvious” steps
Documentation often begins from the author’s environment rather than the reader’s. The author already has credentials, the correct runtime, a configured region, a project identifier, and access to a private package registry. The guide starts at the first interesting command and silently assumes everything else.
That creates an immediate failure for new users. A prerequisite is not merely software that must be installed. It includes every condition required for the instructions to behave as written:
- Supported operating system and runtime versions.
- Account, role, subscription, or billing requirements.
- Required credentials and where to obtain them.
- Network access, firewall rules, and allowed origins.
- Existing resources, identifiers, and permissions.
- Expected working directory and repository state.
- Commands the reader should run before the main procedure.
Weak prerequisite copy looks like this:
Make sure your environment is configured correctly.
It identifies no action and gives the reader no way to confirm success. A useful version is explicit:
node --version # Expected: v22.x or later
npm --version # Expected: v10.x or later
test -n "$RELAYLINE_API_KEY" && echo "API key is set"
Then explain where the key comes from and which permissions it needs. Do not make the reader discover that after a 401 response.
How to correct missing prerequisites
Run the procedure from a clean environment. A new container, temporary project, test account, or fresh virtual machine exposes assumptions that disappear on a long-lived development laptop. Ask a person outside the feature team to follow the guide without verbal assistance.
Record every question they ask. If the answer is required to continue, it belongs in the documentation or in a clearly linked prerequisite page.
2. Explaining a task without showing a complete example
Conceptual explanation is important, but developers need to see how the concept becomes a request, command, configuration file, or program. Documentation fails when it describes each piece separately and leaves the reader to assemble them.
Consider this instruction:
Send a POST request to the deliveries endpoint with your destination and event payload. Authenticate with a bearer token.
It sounds complete until someone tries to use it. Which base URL? Which header? What JSON shape? Which response means success? A complete example removes those translation steps:
curl --request POST \
https://api.relayline.example/v1/deliveries \
--header "Authorization: Bearer $RELAYLINE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"destination": "https://example.com/webhooks/orders",
"event": "order.created",
"payload": {"order_id": "ord_7M2L9"}
}'
Follow it with an expected response and a sentence that interprets the result. A code block by itself is not a verification step.
Complete does not mean enormous. Show the shortest safe path that runs. Move optional fields and variations into the explanation after first success. A quickstart with five language tabs, three authentication choices, and six alternative configurations forces a new user to make decisions before understanding the product.
Review code as executable product material
Check imports, package versions, environment variables, file paths, quotation marks, and output. Copy the rendered example rather than the source version into a clean terminal; rendering can introduce or hide problems. When possible, store important examples as tested source files and include them in the documentation build.
3. Using internal jargon instead of the reader’s language
Teams develop shorthand because it makes internal communication efficient. The problem begins when that shorthand enters public documentation without a shared definition.
An internal service called “Conductor,” a database field called tenant, and a UI label called “Workspace” may all refer to the same customer-facing concept. If documentation switches between them, readers assume they are different objects.
Jargon problems include:
- Acronyms that are never expanded.
- Internal project names used as product concepts.
- Several names for one resource.
- One name used for different resources.
- Marketing terms that do not appear in the interface or API.
- Generic words such as “item,” “object,” or “entity” where precision matters.
Create a terminology record with the approved term, definition, prohibited alternatives, and source of truth.
| Preferred term | Definition | Avoid |
|---|---|---|
| Project | Top-level container for API keys and deliveries | Tenant, workspace |
| Destination | HTTPS endpoint that receives events | Target, consumer URL |
| Delivery | One queued event sent to one destination | Message, job |
Use the preferred term in navigation, headings, prose, API descriptions, SDK methods, support macros, and UI labels where possible. When the implementation must expose a different term, explain the mapping once.
Clear terminology also improves retrieval. Search engines and language models can connect repeated, well-defined entities more reliably than pages that use creative synonyms for variety.
4. Organizing pages around the system instead of the task
Documentation frequently mirrors the product’s internal architecture. There is a section for the gateway team, another for identity, another for storage, and another for the SDK. The reader, however, wants to “send an event securely” or “rotate a compromised key.” Their task crosses several internal boundaries.
Organize top-level guidance around user goals and reserve subsystem structure for reference material. Compare these navigation labels:
| System-oriented | Task-oriented |
|---|---|
| Identity service | Authenticate requests |
| Delivery subsystem | Send and track events |
| Callback processor | Receive webhooks |
| Credential object | Create and rotate API keys |
Task-oriented titles are not merely friendlier. They match the language readers use in search and support questions. They also tell the reader what outcome the page provides.
Use a verb in procedural titles. Start the page with the result, prerequisites, and scope. Keep background information available, but do not place a five-paragraph architecture explanation between the reader and the first required step.
Build navigation from journeys
List the main audience groups and the tasks each must complete. Map the pages required for those tasks. If one page appears in several journeys, make it a shared concept or reference and link to it at the moment it becomes relevant.
Card sorting and task testing can validate the proposed structure. Even a small test with representative users reveals labels that make sense only to the product team.
5. Documenting the happy path but ignoring failure and recovery
The happy path is where teams write documentation. Failure is where developers urgently read it.
An error table containing only 400 Bad Request and 500 Internal Server Error does not help someone decide whether to change input, refresh credentials, wait, retry, or contact support. Document errors as operational decisions.
A useful error model includes:
{
"error": {
"code": "invalid_destination",
"message": "The destination must use HTTPS.",
"field": "destination",
"request_id": "req_01J6Y44C9N7Q2H5K8M3P"
}
}
For each stable error code, explain:
- The condition that produces it.
- Whether the caller can correct it.
- Whether retrying is safe.
- Any backoff or idempotency requirement.
- Which identifier to include when requesting support.
Also document partial success and asynchronous states. If an API returns 202 Accepted, say how to retrieve final status. If a batch accepts nine items and rejects one, show the response structure. If webhook delivery retries, provide the schedule and terminal state.
Troubleshooting pages should begin with observable symptoms. “Webhook signature mismatch” is a useful heading. “Advanced webhook concepts” is not. Under each symptom, give checks in a deliberate order, starting with the most likely and least destructive.
6. Publishing untested or stale examples
An outdated example is persuasive because it looks authoritative. The developer copies it, receives an error, and initially assumes they made a mistake. That experience damages trust more than an obvious gap.
Common causes of stale documentation include:
- A renamed field or endpoint.
- A new required permission.
- A changed default region or API version.
- A dependency release with a breaking API.
- UI screenshots from an earlier navigation model.
- A product release completed without documentation review.
Tie documentation changes to the product workflow. Add a documentation-impact field to feature specifications and pull-request templates. Identify pages and examples during implementation, not after release.
Automate checks at the level each example supports. Parse JSON and YAML. Compile SDK examples. Run safe requests against a sandbox. Check links. Build the site in continuous integration. Schedule manual review for screenshots and workflows that cannot be automated.
name: Documentation checks
on:
pull_request:
paths: ['docs/**', 'examples/**', 'api/**']
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 22
- run: npm ci
- run: npm run docs:check
- run: npm run examples:test
- run: npm run docs:build
Version pinning matters. An example tested against whichever dependency happens to be current can pass today and fail tomorrow. Record the supported range and update intentionally.
The docs-as-code guide explains how to connect review, checks, and deployment into one maintenance workflow.
7. Burying the answer and making pages difficult to scan
Developers rarely read documentation from the first word to the last. They scan headings, code blocks, lists, tables, and callouts to locate the part that matches their current state.
Long pages are not automatically bad. Unstructured pages are. A 2,500-word guide can be faster to use than a 500-word page if it provides a direct answer, descriptive headings, complete examples, and predictable progression.
Improve scanability by:
- Opening with the outcome and scope.
- Using headings that answer real questions.
- Keeping paragraphs focused on one idea.
- Putting prerequisites before steps.
- Numbering procedures that must be followed in order.
- Keeping code next to the explanation it supports.
- Using tables for repeated comparisons, not complex narrative.
- Ending procedures with verification and next steps.
Avoid generic headings such as “Overview,” “Details,” “Other,” and “Miscellaneous” when a specific label is possible. A search result or generated answer may surface a section without its surrounding page. “Rotate an API key without downtime” carries its own context; “Rotation” carries less.
Accessibility supports scanability. Use a logical heading hierarchy, meaningful link text, captions for informative images, and sufficient contrast. The WCAG 2.2 standard provides the current normative accessibility requirements.
Search visibility follows the same principle: make the answer easy to identify and genuinely useful. Google’s people-first content guidance emphasizes substantial, trustworthy information over pages written primarily to manipulate rankings.
How to review technical documentation systematically
Reading a page and asking whether it “looks good” produces inconsistent results. Use a repeatable review across several dimensions.
Accuracy
Does the content match current product behavior? Are commands, labels, fields, and responses correct? Can the reviewer identify the source of truth for each important claim?
Completeness
Can the intended reader complete the task without undocumented prerequisites or outside assistance? Are failure, recovery, and next steps covered?
Structure
Does the page type match its job? Is a procedure written as a sequence, a concept as an explanation, and reference as a predictable contract?
Findability
Can readers reach the page through navigation and search using their own language? Do page titles and headings reveal the answer?
Usability
Can a representative reader scan, follow, and verify the instructions? Do code blocks wrap or overflow? Are tables usable on smaller screens?
Maintainability
Is there an owner? Is the page connected to product-change triggers? Are important examples checked automatically? Does metadata show when the content was meaningfully updated?
Record specific evidence instead of vague criticism. “The quickstart is confusing” is hard to assign. “Step 2 uses workspace_id, but the current response and reference use project_id” identifies a bounded correction.
A before-and-after documentation example
Here is a weak instruction:
Configure authentication, create your resource, and check the response. Contact support if there is an error.
Here is a more useful structure:
- Create a test API key with the
deliveries:writepermission. - Store it in
RELAYLINE_API_KEY. - Send the complete request shown below.
- Confirm the response status is
202and save the returnedid. - Retrieve
/v1/deliveries/{id}until the status isdeliveredorfailed.
curl "https://api.relayline.example/v1/deliveries/$DELIVERY_ID" \
--header "Authorization: Bearer $RELAYLINE_API_KEY"
If the response is 401 authentication_failed, verify the environment prefix and key status. Do not retry a revoked key. Create a replacement key and update the secret in the calling service.
The improved version exposes requirements, sequence, success, and recovery. It also gives support teams precise points to reference.
Metrics that reveal documentation problems
Use metrics to find questions, then inspect the underlying journey.
- Internal searches with no results: terminology or coverage gaps.
- Repeated search reformulation: weak titles, synonyms, or ranking.
- High exits in a procedure: possible failure or misplaced next step.
- Support tickets by task: missing, inaccurate, or difficult-to-find guidance.
- First-request failure rate: onboarding, credentials, or example problems.
- Example test failures: contract drift or dependency changes.
- Review age: maintenance risk, not proof of inaccuracy by itself.
Do not use page views as a quality score. A troubleshooting page may receive high traffic because a product failure is common. A critical security page may be excellent and rarely visited. Interpret content data alongside product behavior and support evidence.
Technical writing quality checklist
Use this checklist before publishing a developer guide:
- The title names the reader’s task or question.
- The opening states the outcome and scope.
- Prerequisites are specific and verifiable.
- Terms match the product, API, and interface.
- Steps appear in the required order.
- The shortest complete example is available.
- Expected output or success criteria are shown.
- Important failure states include recovery guidance.
- Security warnings are placed before the risky action.
- Links describe their destination rather than saying “click here.”
- Images have useful alternative text and current UI labels.
- Code, commands, and links have been tested.
- The page identifies a sensible next step.
- Ownership and update triggers exist behind the page.
Frequently asked questions
What makes technical writing effective?
Effective technical writing helps a defined reader complete or understand a specific task accurately. It uses precise terminology, explicit prerequisites, complete examples, logical structure, verifiable outcomes, and recovery guidance.
How do you find documentation mistakes?
Combine task walkthroughs, technical review, support-ticket analysis, internal-search data, automated checks, and tests with representative users. Record page-level evidence and the affected reader journey.
Should technical documentation always be short?
No. Documentation should be as long as required to complete its purpose and no longer. A long, structured guide can be easier to use than a short page that omits prerequisites, examples, or errors.
Who should review developer documentation?
A subject-matter expert should review technical behavior, while a documentation specialist reviews audience fit, structure, terminology, and usability. Automated checks should cover objective issues such as builds, links, schemas, and testable examples.
Fix the task, not only the sentence
The seven mistakes share one cause: the documentation reflects what the organization knows instead of what the reader needs to do. Correcting individual sentences helps, but durable improvement comes from testing complete journeys, clarifying ownership, and connecting documentation to product change.
Use the Doc Health Check sample to see how page-level evidence becomes prioritized work. When you need a structured assessment of an existing portal, review the documentation audit service.