Five problems I find in almost every AI-built codebase
I read AI-built codebases. The tool matters less than people expect, Lovable, Cursor, Replit, or a coding agent, because they all optimize for the same thing, which is producing working code fast. Nobody in that loop is responsible for the code still being changeable a year later.
The same five problems repeat. I found every one of them in Homelab, the vibe coded app in my published sample audits, and I meet them again whenever I read generated code. Here is each one, what it costs you, and how to check for it yourself. None of the checks needs a developer, and each takes a few minutes.
1. The same logic written multiple times
The AI does not remember that it already solved a problem, so it solves it again. Your pricing rule, date handling, and permission checks exist in several places, each slightly different.
What it costs: bugs that come back after being fixed. You fix one copy, the others keep the old behavior, and which one runs depends on which screen the user came from.
Check it yourself: pick one rule your app applies, for example how a price gets rounded, and ask your AI assistant to list every place in the code that implements it. More than one answer is this problem.
2. No separation between screens, rules, and network calls
Everything is in the same giant files. The screen draws itself, applies the business rules, and calls the server, all in one place.
What it costs: changing a button can break a payment. Small visual changes force retesting of things that should have nothing to do with them, so every release is slower and riskier than it needs to be.
Check it yourself: ask how many lines your largest file has. A healthy codebase keeps files to a few hundred. In the vibe coded app in my published sample audit, six files are past two thousand lines.
3. State handled many different ways
The app's data lives in several places at once. Some in a global object, some passed from screen to screen, some duplicated between the database and memory.
What it costs: the bugs nobody can reproduce. When two copies of the same data do not match, what the user sees depends on the order things happened, and the bug report says "sometimes".
Check it yourself: count how often your bug reports contain the word sometimes.
4. No tests, or tests that never run
The AI can write tests when asked. Most people never ask. And of the projects that have tests, many never run them automatically: the sample audit found a CI setup that had compiled 33 releases without once running the tests that existed.
What it costs: neither you nor the AI can tell whether a change broke something. This is the reason prompting your app forward feels riskier every month. Without tests, every change is a guess checked by hand.
Check it yourself: ask when the tests last ran. If the answer needs research, they do not run.
5. Repeated fixes that now conflict with each other
When something broke, the AI patched the symptom where it appeared instead of the cause. Each patch made sense on its own. They are all still in the code.
What it costs: the same features break repeatedly in the same places, because the underlying cause was never removed, and the patches now interact in ways nobody planned or documented.
Check it yourself: list the last ten bugs. If three of them are the same feature breaking again, you are looking at this problem.
What to do with the result
If your app came through those checks clean, you are doing better than most, keep going. If it did not, that is normal, and it does not usually mean a rebuild. It means the code needs to be read by a person, scored, and given a fix order, before the next feature makes the fixing more expensive.
That reading is what I sell, so judge my bias accordingly: a fixed-price audit that scores the codebase across architecture, code quality, performance, stability, and delivery pipeline, and gives you a prioritized fix plan with an effort estimate per item. There is a real sample of the full report on the audit page, an audit of Homelab, a vibe coded app built by one developer with AI agents, so you can see the exact format before deciding anything.