Background

A practical guide to documenting background processes

David Watson

The One-Line API Call That Hid 27 Processes

The payment gateway docs were clean. One endpoint, one parameter, one action: send the card number, call charge. Behind that single API call, however, lay a distributed saga—antifraud scoring, 3D Secure, issuer verification, fund holds, audit logging, retry logic. None of it was documented.

When transactions started hanging for seven minutes, the integration team had no playbook. No SLAs to share with their own customers, no timeout values to reference, no retry schedule to explain. The product didn't break; the docs did. Clients churned—not because the gateway failed, but because the documentation couldn't describe what was happening while they waited. Relying on a conventional help authoring tool without visibility into these underlying processes often leaves integration teams completely blind.

This isn't an edge case. It's the default failure mode for invisible mechanics: background automation, AI classification, event-driven webhooks, and async pipelines. The user sees a green checkmark. The system sees a state machine. And the documentation, if it exists at all, usually describes the button, not the blast radius.

Another team learned this the hard way. They documented screens and input fields while their backend shifted to event-driven architecture, AI sorting, and background sync. Support drowned in "why doesn't this match?" tickets. Six months later, they rewrote their approach around triggers, states, and transitions. Support load dropped 40%.

Understanding Background Processes

Background processes (quiet features) are everything that happens between the click and the result. Autosave, search reindexing, antifraud scoring, AI ranking, webhook delivery, data replication. They carry no UI of their own, which is why technical writers, even those using advanced help authoring tools, often skip them.

But they aren't implementation details. For a payment gateway, antifraud is the product. For a cloud editor, autosave is the product. When these systems fail, the interface often still looks fine. The user discovers the damage later—stale search results, lost files, or transactions that never settled. Traditional docs focus on screens, buttons, and forms. Background operations need a different frame: triggers, states, transitions, and failure modes.

Why Invisible Mechanics Need a Different Doc Strategy

Standard user docs answer "how do I click this?" Docs for background processes answer "what's happening while I wait," "why did the result differ from what I expected," and "what do I do when nothing seems to happen?"

This shift results in four practical differences:

  • Async by default. The user triggers, then waits. Documentation must cover time windows, intermediate states, and where to check progress. Without this, users assume a hang and click again—generating duplicate load and race conditions.
  • Non-deterministic AI. Two identical inputs can yield different outputs. Docs need to state confidence thresholds, edge cases, and model limitations. Marketing copy like "intelligent sorting" means nothing without the 94% accuracy footnote and a note on mixed-language inputs.
  • No visual feedback. No spinner, no toast notification, no progress bar. The documentation becomes the UI—telling the user, "After you click Import, the system validates the file. This takes up to five minutes. Don't close the tab."
  • Multi-level audience. End users need reassurance. Integrators need endpoints and status codes. Internal teams need architecture and decision logic. One document rarely serves all three. Either split them, or use clear headings so each reader can self-select.

A Practical Guide to Documenting What You Can't See

Phase 1: Discovery—Mapping the Invisible

You can't write docs for invisible pipelines if you don't know they exist. Background jobs hide in cron tasks, message queues (RabbitMQ, SQS, Celery), event handlers, and webhook endpoints. Check your repos for directories named workers, jobs, background, async, or scheduler. Check infrastructure: Kubernetes Jobs, Lambda functions, CI pipelines. Check logs for keywords like "background," "queue," "retry," "dead letter."

Then talk to engineers. Ask what happens after the user clicks, not just when. Ask what happens if they close the tab. Ask what runs at 3 AM.

For every process you find, capture four things:

  • Trigger. User action, timer, or external event.
  • Executor. Service, worker, or model that does the work.
  • Dependencies. External systems or datasets it relies on.
  • Output. What the user or downstream system receives, including error states.

Capturing these four elements is the foundation of any robust user manual for software that deals with backend logic. Name things by behavior, not by filename. Not worker_3, but "fraud filter."

Phase 2: Modeling the Flow

Text alone fails for async logic. When a paragraph mentions five services and four error paths, readers lose the thread. Visual models fix this.

  • Sequence diagrams for API and webhook flows. They show who calls whom, and in what order.
  • State diagrams for long-running jobs. Users need to know what "pending" actually means and how long the system can stay there.
  • Flowcharts for AI decision trees. If the model checks language, then length, then keywords, draw it.

Build diagrams in Mermaid or PlantUML so they stay in sync with your docs. But never ship a diagram without supporting prose. The image shows structure; the text carries the edge cases, timeouts, and exceptions.

Phase 3: Pick Your Audience

One background feature needs three different descriptions. Pile them into a single page and you get an unreadable wall. Split them across ten pages and no one finds the timeout value.

Use three distinct layers to structure your technical documentation software output:

  1. End-user layer. What started, how long to wait, what to do if it stalls. No technical jargon. Example: "We're verifying your payment. This usually takes up to two minutes. If it's been longer than five, refresh the page." The goal is calm, not completeness.
  2. Integration layer. Endpoints, response codes, timeouts, retry behavior. Example: "Webhook delivery times out at 30s. On HTTP 5xx, we retry three times at 5s, 25s, and 125s intervals." The goal is precision.
  3. Architecture layer. Why the system behaves this way. Example: "The classification model was trained on 500k tickets. Accuracy is 94.2%. Mixed-language inputs are a known blind spot." The goal is predictability.

Start with the user layer. Add integration details only when readers ask for them. Keep architecture in a separate doc or deep appendix. Don't overwhelm end users with sequence diagrams, and don't leave integrators guessing retry intervals.

Phase 4: Structure Around Six Questions

Every background process doc should answer the same six questions. Use them as your outline:

  1. Why does this exist? One sentence of user value. Not "Background sync," but "The system refreshes inventory automatically so you see live stock without reloading the page."
  2. What triggers it? User action, system event, or schedule. Be specific: "Every 15 minutes" beats "periodically."
  3. What happens? Step-by-step for linear flows; diagrams for branching logic. Ten clear bullets beat two vague paragraphs.
  4. What should I expect? Duration, intermediate states, and where to check progress. If it takes five minutes, say so. Don't make the user guess.
  5. What can go wrong? Not just error codes, but what they mean and what to do. "Error 504: the verification server didn't respond within 30s. Wait two minutes, then check status in your dashboard."
  6. What are the limits? Quotas, timeouts, rate limits, and AI confidence boundaries. Honesty beats marketing.

Phase 5: Write Scenarios, Not Specs

Abstract descriptions rarely help. The reader thinks: "Okay, but what does this look like for me?" Scenarios close that gap.

Cover four paths:

  • Happy path: The ideal flow from trigger to completion.
  • Delay: Where to check status, when to escalate, whether cancellation is possible.
  • Hard failure: What the user sees, where the link leads, and who can fix it.
  • Partial success: AI returns low confidence, or an import finishes with dropped rows. Explain how the system surfaces warnings and whether manual cleanup is possible.

Example scenario—AI ticket classification:

Input: Ticket contains "urgent" and "contract."

Expected: High priority, routed to Sales.

Edge case: If the same ticket contains "spam," the model may deprioritize it. The training data correlated "spam" with low urgency, creating a false negative on mixed-intent language.

Phase 6: Validate With Three Checks

Your draft is complete when it survives three filters:

  • Engineering review. Hand it to the developers who wrote the code. Ask: "What's missing?" They'll catch hidden retries, implicit dependencies, and stale limits. They'll also flag what should stay internal.
  • Support review. Give it to your support team. Can they find answers to the top five user questions in under 30 seconds? If not, your information architecture is off.
  • User test. Find someone who has never used the product. Ask them to complete a task that relies on the background process, using only the docs. Watch where they get stuck. Don't help.

Three Strategies Compared

Different architectures and audiences require different documentation strategies.

Parameter Interface-Centric Docs Process-Centric Docs Event-Centric Docs
What you describe Buttons, fields, and notifications the user sees Step-by-step flow from trigger to result Triggers, events, and system reactions
Best for Simple synchronous operations with clear UI feedback Complex multi-step background processes Event-driven architecture, microservices, webhooks
Weakness Async processes, AI, and invisible flows Can overwhelm non-technical readers Requires architectural literacy from the reader
Effort Low Medium High
Maintenance burden Low Medium High; event schema changes break links
Canonical example CRM form documentation Stripe's background payment processing docs GitHub's webhook documentation

The hybrid approach wins. Use event-centric docs for integrators, process-centric docs for support, and interface-centric docs for end users. Cross-link aggressively between layers.

The Hidden Costs Nobody Talks About

Search and Discoverability

Users don't search for "async validation pipeline." They search for "email didn't arrive" or "order stuck." Your docs need to contain the language your users actually use. Build synonym coverage into your search index and cross-link heavily. A page called "Order Status" should point to "Background Payment Verification."

Also remember that search engines give greater weight to headings. If a critical process is buried in a paragraph instead of an H3, users won't find it.

Analytics That Lie

Time-on-page and scroll depth are poor metrics for reference documentation. A user who finds a timeout value in 20 seconds and closes the tab is a success, not a bounce. The better signal is support ticket volume. If webhook delivery questions drop 30% after you publish your retry policy, the doc is working.

Maintenance Debt

Background logic changes faster than UI. Retries get added, timeouts shift, models get swapped. Stale docs are worse than no docs because they create false confidence.

The fix is to embed documentation in code. Store process parameters in config files that feed both the runtime and the docs portal. Use structured comments that generate documentation automatically. If automation isn't possible, assign a code owner to each background process section.

Total Cost of Ownership

Documenting invisible machinery costs more than it appears. Engineer interviews take time. Diagrams rot when architecture shifts. AI accuracy statements expire with every model retrain.

Be honest about ROI. An internal tool that changes weekly may only need a README and an architecture diagram. A customer-facing pipeline that affects revenue justifies the investment, because the alternative is support overhead and churn.

How the Best Teams Do It

Stripe: Webhooks as a First-Class Concern

Stripe's webhook documentation doesn't just list event types. It explains delivery semantics, timeout behavior, retry schedules, and signature verification. Three audiences served: the end user sees payment status, the integrator configures the endpoint, the architect understands delivery guarantees.

GitHub Actions: Background Execution in Plain Sight

GitHub Actions docs treat queueing and execution as primary concerns, not afterthoughts. Triggers (push, pull_request, schedule), job states (queued, in_progress, completed), concurrency limits, and log-based debugging are all documented. Users understand the backstage mechanics without access to GitHub's infrastructure.

AWS Lambda: Predictable Event-Driven Behavior

The AWS Lambda invocation docs distinguish synchronous from asynchronous paths, detail error handling, dead-letter queues (DLQ), and scaling behavior. This is the standard for documenting invisible machinery so integrators can predict, not just observe, system behavior.

Closing

Background processes aren't edge cases. They are the product. The documentation just hasn't caught up yet.

Writing docs for under-the-hood operations means hunting down pipelines that don't appear in UI mockups, modeling them for the right audience, and structuring answers around time, state, and failure. A dedicated help authoring tool with context-sensitive help and single-source publishing capabilities can make this complexity manageable. It means validating with engineers, support, and real users. And it means treating docs as infrastructure that rots—so you bake maintenance into the workflow.

Stripe, GitHub, and AWS don't treat async behavior as an afterthought. Neither should you, especially if you rely on a help authoring tool to deliver a seamless user manual for your software.


See also