I remember the first time I ran an AI code review tool on our main billing module. I expected it to flag a few style issues, maybe some unused imports. Instead, it surfaced a circular dependency between the invoice generator and the tax calculator that had been there for six years. Six years. Every developer who touched that code just worked around it, adding flags and special cases until the thing looked like a ball of yarn after a cat got hold of it.
That was the moment I realized technical debt isn't hidden because we lack tools. It's hidden because we stop seeing it. The AI didn't know our history or our deadlines or which developer was afraid to refactor that module. It just read the code as data. And data doesn't have loyalty to the way we've always done things.
But here's where I made a mistake. I got excited. I turned on the AI reviewer for every pull request across four teams without talking to anyone first. The next morning my Slack was full of angry messages. Senior devs were getting automated comments on code they'd written years ago, and they felt attacked. One guy pointed out that the AI flagged a pattern as "excessive complexity" that was actually an intentional optimization for a database with millions of rows. He was right. The tool didn't know that.
So we pulled back. Instead of making it a gate, we made it a second pair of eyes. The AI runs on every PR but its comments go to the author first, not the whole team. The author decides what's worth discussing. That small change saved the initiative. People stopped feeling policed and started treating the tool like a curious intern who asks uncomfortable questions.
What surprised me most was how the AI changed our conversations about technical debt. Before, debt discussions were vague. Someone would say "this module is a mess" and everyone would nod and then move on. Now we have specific, prioritized lists of code smells, duplication clusters, and risky dependencies. The AI ranks them by how often the code changes and how many bugs come from that area. It's not perfect, but it's concrete. You can't argue with "this function has been modified 47 times in the last year and has three nested try-catch blocks."
Of course, there are false positives. The AI still flags things that aren't problems in our context. We've learned to feed it examples of code we consider clean and code we consider legacy. It gets better over time, like a new team member learning the house style.
The biggest lesson for me is that AI code review doesn't eliminate technical debt. It makes the debt visible and forces a conversation. Whether you actually pay it down is still a human decision. A tool can tell you the roof leaks, but someone still has to climb up there with a bucket.