The Hierarchy of ML Engineer Panic
- mahdinaser
- May 16
- 3 min read
You can date an ML engineer's career by their panic vocabulary.
There is a stable trajectory from "model converged, time for coffee" all the way down to "the boss saw the AWS bill." Most days you'll move up and down it like Maslow on a bad Monday. I want to walk through the levels, because naming the panic is the first step to managing it.
ZEN — "Training is running. Loss is dropping."
The myth of stable training. You set up your run, you tail the logs, and the loss curve descends at a reasonable rate. You feel like a scientist. You make a cup of coffee. You consider going outside.
This phase lasts an average of 11 minutes.
HUH — "Loss plateaued. Should I worry?"
You return from your coffee and the curve has flattened. Is this a local minimum? Did the learning rate decay too aggressively? Did you accidentally turn off your gradients? You stare at TensorBoard for seven minutes trying to remember what a healthy loss curve looks like.
OOF — "Why is my model outputting Chinese?"
You run inference. Your English-only sentiment classifier returns characters from three different scripts. Briefly, you wonder if you accidentally became a polyglot researcher. You check your tokenizer config. You did not become a polyglot researcher.
WAT — "Validation accuracy is suspiciously high."
99.7 percent on the validation set. The benchmark paper got 84 percent. You did not invent a new architecture. You leaked the test set. You always leak the test set. The question is just where this time.
BOOM — "Training crashed. Checkpoint didn't save."
Process killed at step 14,873 of 20,000. You check the checkpoint directory. The most recent file is from yesterday. You consider, briefly, whether anyone would notice if you walked into the sea.
FIRE — "GPU memory at 99.4 percent. OOM incoming."
You batched too aggressively. Or you forgot a no_grad. Or some intermediate tensor decided to be persistent. The watchdog will kill the process in roughly 60 seconds, and you are watching it like a hostage negotiation.
RIP — "The boss just saw the AWS bill."
You left a multi-GPU cluster running over the weekend. The Slack message arrives in the form of a screenshot. There is no caption. There does not need to be one.
How to climb back down
The funny thing is that most of these aren't actually emergencies — they're feedback. Each panic level has a hygiene intervention available one tier below it.
ZEN → HUH: bad learning rate schedule, or you're just impatient. Plot more curves before reacting.
HUH → OOF: tokenizer mismatch, preprocessing bug, non-ASCII contamination. Print the first 100 examples through your full pipeline.
OOF → WAT: data leakage, duplicate splits, test-train contamination. Hash your splits and assert disjoint sets.
WAT → BOOM: missing exception handler, or checkpoint logic only triggers on a "best model" condition that never fires. Save every N steps unconditionally.
BOOM → FIRE: batch size too big, forgot torch.no_grad in eval, accumulating gradients you didn't mean to. Profile your forward pass once.
FIRE → RIP: missing budget alerts, no cluster auto-shutdown, no cost-tracking on training jobs. Set up CloudWatch billing alarms before the next experiment, not after.
The pattern: every panic level has a hygiene intervention one tier below it. The career trajectory isn't avoiding panic — it's building reflexes so each level lasts shorter.
The day you set up GPU memory monitoring before your first OOM is the day you graduate from "ML engineer who learned by burning the cluster down" to "ML engineer with a runbook." Both are valid. The second one sleeps better.
The pyramid is, of course, only mostly serious. In practice, the real ML engineer panic hierarchy is the same six events repeated for the entire calendar year, with slightly different model names attached.




Comments