6 min readFDSE.dev editors
Runbooks Operators Will Actually Open
How forward-deployed engineers write runbooks for customer operators: triggers, first checks, and when to call you.
A runbook that sits unread in a wiki is not operational documentation. It is wishful filing. Operators open a runbook when something is already wrong — usually outside business hours, often while an executive is asking for a status. In that moment they need triggers, first checks, and a clear line for when to escalate. They do not need a tutorial on the system's philosophy.
This article is about writing for that 2 a.m. reader. It is not a general writing-skills essay; for the broader communication toolkit that shows up in hiring bars, see the FDSE skills checklist and the five skills overview. Here the craft is narrower: how a forward-deployed engineer turns deployment knowledge into procedures customer operators will trust under pressure.
Design for the worst shift, not the author
Write as if the reader has never met you, has half your context, and has ten minutes before the next status ping. That constraint forces structure. It also exposes where your system still depends on tribal knowledge — the same problem that shows up during deployment handoffs.
Assume the operator:
- Knows how to use the customer's VPN, ticketing, and chat, but not your internal jargon.
- Can follow numbered steps and paste commands, but will not reverse-engineer a prose paragraph into a procedure.
- Needs to decide quickly whether this is "safe to wait until morning" or "page someone now."
If a section fails that test, cut or rewrite. Clever background belongs in an architecture note, not in the page opened during an alert.
The minimum viable runbook shape
Every production-facing runbook should open with the same spine. Consistency lowers cognitive load when someone is already stressed.
- Title that matches the alert or symptom. Prefer "Ingest lag > 60 minutes" over "Data pipeline overview."
- Impact in one sentence. What users feel, what reports go stale, what SLA clock is ticking.
- Trigger. Exact alert name, dashboard panel, or user-reported symptom that means "use this page."
- First checks (5–10 minutes). Non-destructive verification steps only.
- Mitigations. Ordered actions with expected results after each step.
- Escalation. Who, how, and what information to bring.
- Rollback / stop conditions. When to halt and wait for a senior owner.
Optional sections — architecture diagrams, historical incidents, deep diagnostics — go below a horizontal rule labeled "Reference." Tired operators scroll past reference; they should never have to climb through it to find the first check.
Triggers beat narratives
The fastest way to make a runbook useless is to start with history. Operators arrive from an alert, a ticket subject, or a chat paste. Mirror that entry point.
Good trigger lines look like:
- Alert:
fdse-sync-watermark-stallfiring for 15 minutes. - Symptom: Customer portal shows yesterday's counts after 09:00 local.
- Ticket phrase operators already use: "shipments stuck in Pending Enrichment."
Map one primary trigger per runbook. If two unrelated failure modes share a page, people follow the wrong branch. Prefer two short runbooks over one encyclopedic page.
Hypothetical example: Sam (hypothetical customer ops lead) gets paged for auth-callback-spike. The old wiki page began with three paragraphs on OAuth history. Sam closed it and called the vendor. The rewritten page opens with the alert name, a one-line impact ("logins fail for SSO users; local accounts unaffected"), and three first checks. Sam stays in the runbook.
First checks: prove the world before you change it
First checks exist to prevent panicked remediation. They should be read-only whenever possible: dashboards, log queries, status pages, queue depths, certificate expiry panels. Each check needs:
- Where to look (link or navigation path).
- What good looks like.
- What to do if bad (go to mitigation step N, or escalate).
Avoid checks that require production writes, config edits, or restarting services. Those belong under mitigations, after the situation is confirmed.
A compact first-check block might read:
- Open the Sync Health dashboard → panel "Watermark age." Healthy: under 15 minutes. If over 60, continue.
- Check vendor status page for the upstream API. If degraded, open incident with vendor; do not restart local workers yet.
- Confirm the last successful run ID in the ops table. If none in 2 hours, go to Mitigation A.
When to call you (and when not to)
Ambiguous escalation is how FDSEs become permanent on-call for customers who already have operators. Spell out call/no-call rules in the runbook itself.
Call / page when:
- Data corruption is possible (duplicates, wrong tenant, irreversible deletes).
- Security boundaries are involved (auth bypass, secret exposure, unexpected admin access).
- Mitigations from the runbook have been tried and the symptom remains.
- The blast radius includes executives or regulated reporting deadlines.
Do not call for:
- Known flaky upstreams already marked "wait and recheck" in the runbook.
- Single-user issues that reproduce only for one account and have a documented workaround.
- Questions that are really feature requests.
Put contact paths in customer-owned tools: on-call schedule, ticket queue, bridge number. Personal cell numbers in runbooks become stale and encourage side-channels that skip the owner map.
Language that survives fatigue
Prefer verbs and objects over abstractions. "Restart the enrichment-worker deployment in namespace prod-ops" beats "recycle the enrichment tier." Define every acronym once at first use on the page. Ban humor in the critical path; jokes age badly during outages.
Commands should be copy-paste ready, with placeholders marked obviously (CUSTOMER_ID, DATE_UTC). Note whether a command is read-only or mutating. If a step is irreversible, say so above the command, not after.
One table operators can scan
Keep a single quick-reference table near the top for the failure modes this runbook covers. One table per article for this site's editorial shape; in your wiki, you may split further, but do not bury the scan table under essays.
| Symptom / alert | First check | Safe mitigation | Escalate if |
|---|---|---|---|
| Watermark stall | Dashboard age + upstream status | Pause consumer, clear poison message | Stall >2h or data mismatch |
| SSO callback errors | IdP status + cert expiry | Fail open to break-glass admin only if approved | Any suspected account takeover |
| API 5xx burst | Error budget panel + deploy timeline | Rollback last change in change window | Error continues after rollback |
| Report counts off | Reconcile job vs source sample | Quarantine report; do not re-push | Finance or compliance report affected |
Maintenance: runbooks rot on a schedule
A runbook is wrong the day after a silent infrastructure change. Attach maintenance to real events:
- After every incident, update the matching runbook in the same change set as the fix when possible.
- After every handoff drill, patch steps the operator hesitated on.
- Quarterly, assign a customer owner to click every link and run every read-only check in a non-emergency window.
If nobody owns maintenance, the document will drift until operators stop trusting it — and once trust is gone, they will not reopen it. That trust dynamic is why runbook quality shows up in field interviews and interview Q&A prompts about operational maturity.
Link related durable pages from a short "See also" line, not from buried footnotes: architecture overview, owner map, and the resources your team standardizes on for templates.
Frequently asked questions
How long should an operator runbook be?
Long enough to cover first checks, mitigations, and escalation — often one to three screens for a single failure mode. If you need a table of contents for the critical path, split the page. Depth can live in linked reference docs.
Should runbooks include screenshots?
Sparingly. Screenshots help for tricky UI navigation and die quickly when the product UI changes. Prefer stable selectors, menu paths, and dashboard names; add a screenshot only where text repeatedly fails in drills.
Who writes the first draft — FDSE or customer ops?
The FDSE usually drafts from deployment knowledge; customer ops must edit for local tooling and must execute a drill before the page is marked production-ready. A runbook never validated by an operator is still a draft.
Do we need a runbook for every alert?
No. Start with alerts that wake humans and with failure modes that have bitten you once. Low-severity noisy alerts need tuning more than prose. Expand coverage as the owner map solidifies and drills reveal gaps.
Related articles
7 min read
How to Hand Off an FDSE Deployment Without Breaking It
Exit criteria, owner map, and a cutoff plan so a forward-deployed system keeps running after the embedded engineer leaves.
7 min read
Switching Into an FDSE Career From SWE or Consulting
How software engineers and consultants transition into Forward-Deployed Software Engineer roles — skills to prove, stories to tell, and timeline expectations.
7 min read
Palantir FDSE Interview Prep — What Candidates Should Know
Preparing for Palantir-style Forward Deployed Engineer interviews: technical depth, mission focus, and what FDSE.dev readers should study.