I kept looking for a broken one
I’ve had this client, a small indie music magazine, since 2012. I didn’t build their original site. It came to me on ExpressionEngine 1, and the first thing I did for them was move it to EE2, which, if anyone who lived through it will tell you, was one of the uglier upgrade paths the platform ever shipped. There was no budget to restructure anything, so I did what the budget allowed. I got it working on EE2 and left the shape of the site alone. Then it sat.
It sat for years. I let the client know that we should upgrade, and they kept not having the room in the budget, and I understood it, because they’re small and the site mostly worked.
By the time I came back to it seriously, EE2 was about a decade old and long past security support, and every attempt to upgrade broke the same way. Run the upgrade, and all the content lost its paragraphs, more than sixty thousand entries going back to 2001, collapsing into walls of unreadable text.
I’d try, it would break, I’d put it down and come back months later with fresh eyes, and it would break again.
I brought in help. More than one developer. At one point, I went directly to ExpressionEngine, and their support didn’t catch it either. The client was gracious about all of it. Whenever you can get to it, Mel, no rush, everything’s fine.
Meanwhile, their site was timing out under high CPU load, so things were not fine, and the upgrade sat untouched because the bug blocking it had been elusive to everyone who looked at it.
Then I pointed AI at it.
Not at fixing it. Every attempt up to that point, mine and everyone else’s, had been trying to fix the thing. Try a different field type, try different settings, run the upgrade again. This time, I had AI go look at what was sitting in the database, the raw content, before any of it was rendered to a page. I asked what was there, not how to repair it.
It came back in about thirty minutes. The paragraphs were never in the content. The old version of EE had been making them up at display time, turning plain line breaks into paragraphs every time a page loaded. Sitting in the database, the article bodies had no paragraph formatting at all. The newer version didn’t do that conversion, so it rendered the content as it had always been stored underneath one big solid wall of text. Twenty-five thousand-odd article bodies, all with the same issue.
What I love about this story, though, is that it did not sting. I’ve read enough takes about AI humbling the expert, and that is not what this was. I was elated! I almost didn’t believe the fix had worked, so I started clicking through entries to find one that was still broken. Then more of them, going further back into the archive.
When I couldn’t find a single one, I was beside myself with joy. Absolute awe. I’d just watched a tool do something a lot of really good people couldn’t figure out.
The reason the bug survived more than one developer and EE’s own support is that finding it meant reasoning through sixty thousand entries to spot a pattern nobody had thought to look for in the raw data. That’s the thing AI is extraordinary at, and humans are slow and expensive at. This wasn’t a competence problem. The bug was elusive to everyone, and the difference this time was a tool that could read the entire dataset at once and surface what had been hiding in it.
So I kept going, because obviously! And also fun!
If AI could find that, what else could we do with a site that had spent years getting by on the bare-minimum upgrade the budget had allowed? The same pairing that found the bug went after the CPU problem. We made the templates leaner, cut the database queries down, went after the embeds I knew were hammering the server, brought in better caching, reduced the number of entries loading per page. One section that had been timing out at around 36 seconds came down to under .7 seconds.
But what’s funny is that AI didn’t specifically know what to do to make the site run better. Every one of those speed fixes came from me knowing this platform after twenty years of building on it, pointing AI at what to look at and what to change. AI was fast. It still needed someone who knew which embeds bled the database and why.
The cleanest proof of that came near the end. AI hit a bug it couldn’t crack and went into a long methodical checklist, I’ll check this, then I’ll check that, working the problem the way it works problems.
I looked at it for a second and asked whether dynamic was even turned off on the entries tag. It wasn’t, which was the whole problem. That’s a small EE quirk: when a page doesn’t show the entry you expect, that setting is usually why.

A few more rounds, it said? Ah, maybe.
I knew it at first glance because I’ve built hundreds of these sites, and that exact symptom means one thing to me. So it sat there running its checklist, and I told it the answer in one line.
