Bugs.
I should have known. I changed a lot of things to get performance where it is. (And I'm not done yet.) I thought I'd tested everything, but I forgot one important item: posting photos. Rats.
What's more, I don't know why I can't upload photos. I haven't touched the photo uploading system in ages. I didn't test it because it "shouldn't" be affected at all. But clearly it is.
I've done without automated testing until now because DMG really was pretty simple. But it's reached a level of complexity that leaves me between a rock and a hard place: I don't have time to test properly, but I can't accept breaking stuff.
Automated testing is the way around that dilemma. It will tell me in ten seconds what's broken, which means I can refactor zeal and abandon knowing that there are guardrails that will tell me when I've bulndered.
And I can add it as I have time. This week, I'll add automatic testing for the blog entry creation and editing system. Next week, I'll get around to the comment submission system. And in a few months, I'll have a testing mechanism that saves me huge ammounts of time and ensures that bugs rarely make it to production.
But tonight, it's first things first: create an automated test that catches the bug in photo uploads, then fix that bug.
It's time to plant the seeds of test-driven development.