The BDBAFH Chronicles #001: The “Agile” Schema Change
It’s 4:45 PM on a Friday. The Lead Front-End Dev walks up to my desk, radiating the unearned confidence of someone who just watched a 10-minute YouTube video on NoSQL.
Incident #001 of the BDBAFH Chronicles: The “Agile” Schema Change. Dark-humor fiction: no real people, companies or incidents.
It’s 4:45 PM on a Friday. The Lead Front-End Dev walks up to my desk, radiating the unearned confidence of someone who just watched a 10-minute YouTube video on NoSQL.
— “Hey BDBAFH, we need to add a quick field to the users table for UI preferences.”
I don’t look up from my psql session.
— “What type? Boolean? ENUM?”
— “Nah, just make it VARCHAR(MAX). Or TEXT! That way, if we want to dump full Base64 images or raw JSON in there later, we don’t have to bother you with DB migrations. It’s way more Agile.”
I stop typing. Slowly, I turn my chair around.
— “You want to insert unvalidated 4MB JSON payloads into an unindexed column of a 3NF normalized table running 10,000 UPDATE queries per second?”
— “Yeah! Flexibility!”
I nod slowly. “Done.”
Two hours later, write-amplification melted the storage array. Every time a user toggled dark mode, Postgres wrote the entire tuple to disk, pinning NVMe I/O at 100%. When the CTO sprinted to my desk, I pointed at Grafana and delivered the official post-mortem:
“Schema integrity compromised by unvalidated payloads. Executed Emergency Protocol BD-99: dropped incoming app connections and throttled the Lead Dev’s IP to 56 kbps.”
The Lead Dev now spends his afternoons writing strict XSD schemas for legacy XML. He hasn’t said the word “flexible” in my presence since.
The BDBAFH Chronicles are works of dark-humor fiction inspired by the Bastard Operator From Hell and The Daily WTF. Names, companies and incidents are invented, and any resemblance to real ones is coincidental. Commands and outputs are illustrative and untested: do not run them on a system you care about.