Skip to content
IntroductionLesson 2 of 2

X broke? Read Y

A map from production symptoms to the module that explains the cause and the fix.

Goal
Go straight to the right module when something goes wrong in production, without reading the whole guide.

Use this page as a reverse index. Find the symptom, read the likely cause and go to the module. Modules that aren’t written yet appear without a link.

Symptom Likely cause Where to read
Fast locally, slow in production Network latency multiplied by many database round trips (N+1) 1.3, M11
A route gets slower as the table grows Missing index, large OFFSET, SELECT * M10, M11
Every request stalls at the same moment Event loop blocked by CPU work or synchronous I/O M06
Slow at peak times, fine the rest of the day Exhausted connection pool, no caching M25, M26
Great p50, terrible p99 Contention, GC, a slow external dependency M26, M17
Page loads slowly even though the API is fast Large bundle, wrong rendering strategy, images M08
Symptom Likely cause Where to read
Duplicate records (charge, email, order) A non-idempotent operation being repeated 2.2, 2.3
A balance or counter is “sometimes” wrong Race condition (read, compute, write) 1.3, M10
User sees old data right after saving Cache without invalidation, lagging replica M25, M27
Data disappears after a deploy State kept in process memory 2.1
A migration locked the table in production ALTER TABLE taking a heavy lock M12
Webhook processed twice or out of order At-least-once delivery treated as exactly-once M24, M28
Symptom Likely cause Where to read
An external service goes down and takes your app with it No timeout, unbounded retries, no circuit breaker M17
Worked in staging, broke in production Environment differences (config, data, scale) 1.2
A deploy broke and you can’t go back No rollback strategy, irreversible migration M22, M12
The domain stopped resolving after a change DNS and TTL M14
A queue keeps growing Slow consumers, no backpressure M24
The build broke “on its own” Dependency without a pinned version M09
Symptom Likely cause Where to read
A user sees someone else’s data by changing the ID in the URL Missing per-resource authorization (IDOR) M16
An API key showed up on GitHub or in the bundle Secret in the wrong place M16
An npm package behaves strangely Supply chain attack M09
A user manipulates your app’s LLM Prompt injection M33
Symptom Likely cause Where to read
A production error that won’t reproduce locally No structured logs or tracing M19, M34
You find out it’s down when customers complain No alerts or SLOs M19, M35
A bug showed up and nobody knows since when History not put to use M04 (git bisect)
A simple change breaks something far away Coupling, wrong abstraction, missing tests 3.3, M18, M23