We've been building and rescuing software for over a decade. In the last year alone, the majority of projects that come to us for help share the same origin story: built with Cursor, Lovable, Bolt, Replit, or a similar AI coding tool.
The pattern is always the same. The AI gets you to 80% remarkably fast. A working UI, basic flows, something you can demo. That part is real and genuinely impressive.
But the last 20%—where a prototype becomes a product people pay for—is where things fall apart. And it's the same issues breaking every single time.
1. No Error Handling Beyond the Happy Path
AI coding assistants are optimized for the success case. They build what happens when everything works. But production software spends most of its life handling what happens when things don't work.
We see apps where a failed API call results in a blank white screen. No error message, no fallback UI, nothing in the logs. The user has no idea what happened. The developer has no idea what happened. Nobody has any idea what happened.
What production code needs:
- Typed error handling that makes failure states explicit
- Fallback UI for every async operation
- Structured logging that captures enough context to debug without reproducing
- Graceful degradation when dependencies are unavailable
The difference between a prototype and a product is what happens when things go wrong.
2. Auth That Looks Right but Isn't
Login works. Users can sign up, enter credentials, and see a dashboard. It looks like authentication is done.
But authentication and authorization are two different things. We consistently find apps where:
- Every user can access every other user's data by changing a URL parameter
- API endpoints have no server-side permission checks
- Row-level security is nonexistent
- Admin routes are "protected" only by hiding the navigation link
You don't catch this when you're the only person testing. The moment real users are in the system, it's a data breach waiting to happen.
What production auth needs:
- Server-side authorization on every endpoint—not just the frontend
- Row-level security policies in the database
- Scoped API tokens with proper expiration
- Audit logging for sensitive operations
Building something users will pay for? We help teams close the gap between AI-generated prototype and production-ready product. Proper auth, error handling, and architecture that holds up under real usage.
3. Payments Wired to the Frontend
This one is genuinely dangerous. We've seen Stripe secret keys exposed in client-side JavaScript. Subscription logic handled entirely in the browser. Webhook endpoints that don't verify signatures.
Someone with browser DevTools open could:
- Intercept and modify payment amounts
- Fake a successful payment response
- Access premium features without paying
- Extract API keys for use elsewhere
What production payments need:
- All payment logic on the server, no exceptions
- Webhook signature verification on every incoming event
- Server-side subscription status checks before granting access
- Secret keys that never leave your backend environment
If you're charging money, your payment integration needs a professional review before going live. Full stop.
4. Flat Databases That Collapse Under Real Data
AI tools tend to generate the simplest possible data model. Often that means everything crammed into one or two tables: user name, email, order details, preferences, subscription status—all on the same record.
This works fine with five test users. It fails in predictable ways with real data:
- Queries slow down as tables grow
- Updating one field requires loading entire bloated records
- Reporting becomes impossible without complex transformations
- Data integrity issues compound because there are no proper relationships
What production data needs:
- Normalized schemas with proper relationships
- Indexes designed for your actual query patterns
- Migration strategies for evolving your schema over time
- Consideration for how your data model handles the next feature, not just the current one
5. Duplicate Logic from Separate Prompts
This is unique to AI-generated code. You prompted the same feature on Monday and again on Thursday—maybe with slightly different wording. Now there are two implementations of the same logic, both running on every action.
Symptoms include:
- Emails sending twice
- Database writes duplicating
- UI events firing multiple handlers
- State updates conflicting with themselves
The AI doesn't have a map of your codebase's intent. Each prompt session starts relatively fresh. Without a clear architecture, it generates net-new code instead of extending what's already there.
What production codebases need:
- A clear service layer with single sources of truth
- Code review that catches duplication before it ships
- Architecture that guides where new logic should live
- Documentation of existing patterns for AI tools to follow
6. Zero Logging—Flying Blind in Production
This one is almost universal. The AI builds features. It does not build the infrastructure to understand those features in production.
When something goes wrong—and it will—there's nothing to look at. No structured logs, no request IDs, no correlation between what the user did and what the server did. The only debugging strategy is "try to reproduce it locally," which works right up until the issue is load-dependent, data-dependent, or timing-dependent.
We regularly see apps where:
console.logis the entire logging strategy- Errors are caught and silently swallowed
- There's no way to trace a user's request through the system
- Failed background jobs vanish without a record
What production logging needs:
- Structured logs with consistent fields (timestamp, request ID, user ID, severity)
- Log levels that let you filter noise from signal
- Centralized log aggregation—not scattered across serverless function invocations
- Correlation IDs that tie a user action to every service it touches
You can't fix what you can't see. And you can't see anything without logs.
7. No Observability or Telemetry
Logging tells you something went wrong. Observability tells you why and how often.
Vibe-coded apps almost never have metrics, tracing, or alerting. There's no dashboard showing response times, error rates, or throughput. The first time the founder learns about a performance problem is when a user tweets about it.
Without observability:
- You don't know your P95 response time (or even your P50)
- You can't tell if a deploy made things faster or slower
- You have no early warning before a small issue becomes an outage
- Capacity planning is pure guesswork
What production observability needs:
- Application metrics: request rate, error rate, latency distributions
- Infrastructure metrics: CPU, memory, database connections, queue depth
- Distributed tracing for requests that span multiple services
- Alerts that fire before users notice—not after
Modern tools make this easier than ever. OpenTelemetry gives you vendor-neutral instrumentation. But someone has to wire it in, and the AI won't do it unless you ask.
8. No Backup or Disaster Recovery Plan
This is the one that causes the most damage when it fails. AI tools provision databases. They do not set up backups, point-in-time recovery, or any plan for what happens when data is lost.
We've seen:
- Production databases with no automated backups at all
- Backups that exist but have never been tested (and don't restore)
- A single database instance with no replication—one failure away from total data loss
- No strategy for what happens if a deploy corrupts data
It sounds dramatic until it happens to you. A bad migration, an accidental DELETE without a WHERE clause, a provider outage—any of these can turn a growing product into a crisis overnight.
What production infrastructure needs:
- Automated daily backups with tested restore procedures
- Point-in-time recovery capability for your primary database
- A documented disaster recovery plan—even a simple one
- Regular backup verification (a backup you haven't restored is a hypothesis, not a backup)
- Environment separation so a mistake in staging can't touch production data
Stuck in the last 20%? Whether you vibe-coded an MVP or inherited one, we help teams audit, stabilize, and scale AI-generated codebases into production-ready products.
Vibe Coding Isn't the Problem
Let's be clear: AI coding tools are genuinely the fastest way to prototype. They lower the barrier to entry, they let non-engineers explore ideas, and they accelerate experienced developers significantly. That's not changing, and it shouldn't.
The problem is the gap between "it works on my machine" and "it works for paying customers." That gap has always existed—AI tools just made it easier to reach the edge of it faster.
The fix is straightforward: before you go live, get someone to review the backend. Not the UI, not the feature set—the backend. Auth, payments, data model, error handling, logging, observability, backups. One thorough review catches the issues above and saves thousands in emergency fixes later.
The teams that treat AI tools as a starting point—and invest in proper architecture before launch—ship faster and more reliably than teams that try to patch problems after users find them.
A Quick Checklist Before You Launch
If you've built with AI tools and you're preparing to launch, run through this:
- Error handling: Does every API call have a failure state the user can see?
- Authorization: Can User A access User B's data by modifying a request?
- Payments: Is all payment logic server-side with webhook verification?
- Data model: Will your schema handle 10x your current test data?
- Duplication: Are there multiple implementations of the same feature?
- Secrets: Are API keys, database credentials, or tokens in your frontend code?
- Logging: Can you diagnose a production issue without asking the user to screen-record?
- Observability: Do you have metrics, tracing, and alerts—or will you learn about outages from Twitter?
- Backups: Are backups automated, and have you actually tested restoring one?
- Disaster recovery: If your database disappeared right now, what's your plan?
If any of these are a "no" or "I'm not sure," address them before launch. The cost of fixing them now is a fraction of fixing them after a breach, an outage, or a billing dispute.
Need a second pair of eyes? We do pre-launch architecture reviews for AI-built products. One session to identify risks, prioritize fixes, and give you confidence that your product is ready for real users.
