The summary.
MEASURE THE DISTRIBUTION, NOT THE AVERAGE
Averages conceal the experience of the worst-affected requests.
Check query count and query time per request first — it is the answer more often than anything else.
TEST QUERIES AT PRODUCTION DATA VOLUME
A migration taking seconds on development data can take hours on production data, locking the table throughout.
POOL SIZE MULTIPLIED BY INSTANCE COUNT MUST STAY WITHIN THE DATABASE LIMIT
An exhausted pool makes requests wait, then fail. Alert on sustained high utilisation, which precedes failure.
SHEDDING LOAD BEATS COLLAPSING UNDER IT
Serving most users is better than serving none slowly. Know in advance what you would disable under pressure.
NEVER EDIT FILES ON THE SERVER, AND ALWAYS RESTART QUEUE WORKERS
They hold code in memory and otherwise keep running the old version indefinitely.
MAKE SCHEMA CHANGES COMPATIBLE WITH BOTH OLD AND NEW CODE
Both run simultaneously during a rollout. Add, migrate, switch, then remove — never rename in one step.
MONITOR FROM OUTSIDE, AND MONITOR BUSINESS OUTCOMES
Every technical check can pass while a defect has stopped all orders.