variantsystems.io
Claude Code Built Your App. Here's What Needs Fixing.
Excerpt
The core issue is that Claude Code builds what you described, not what you needed. Every product description has gaps. When you describe a feature to a human engineer, they ask questions. “What happens when the user does X?” “How should this behave at scale?” “What’s the auth model?” They fill gaps with experience and questions. Claude Code fills gaps with assumptions. And the assumptions are reasonable. That’s the trap. They’re not random or stupid. They’re the kind of assumptions a competent engineer might make if they had zero context about your market, your users, and your business constraints. Technically sound. Contextually wrong. The result is a codebase where every file looks right in isolation. The architecture diagram makes sense. The data flows are logical. But the foundational assumptions - the ones everything else is built on - might be wrong in ways that only show up when real users with real data hit real edge cases. … We regularly see Claude Code projects with three or four layers of indirection for features that serve a handful of users. The code is beautiful. It’s also impossible to change quickly, which is the one thing early-stage code needs to do well. ### Assumption-heavy architecture Your prompt said “handle user authentication.” Claude Code assumed OAuth2 with email/password, built a full session management system, added password reset flows, and implemented remember-me tokens. Clean implementation. Every piece works. But your users are enterprise buyers. They need SAML SSO. Or your product is consumer-facing and magic links would convert three times better than passwords. Or you’re building a B2B tool where the auth model is organization-based, not individual-based. Claude Code picked the most common pattern. The most common pattern isn’t always your pattern. And auth architecture touches everything. It’s not a feature you swap out. It’s a foundation that everything else sits on. ### Context-dependent quality The first files Claude Code generates are usually excellent. Your initial prompts are detailed. You’re thinking clearly. The foundation gets built well. Then you start building faster. Your prompts get shorter. “Add a dashboard.” “Build the settings page.” “Create the billing flow.” Each prompt builds on the context of everything before it. But that context includes every assumption from every previous generation. … ### Missing operational concerns This is the most consistent gap. Claude Code builds features. It doesn’t build operations. No structured logging. No error tracking integration. No health check endpoints. No rate limiting. No graceful degradation when downstream services fail. No circuit breakers. No monitoring hooks. No alerting thresholds. The code works perfectly in development. It handles the happy path elegantly. But production isn’t the happy path. Production is partial failures, network timeouts, malformed data, and traffic spikes. Claude Code doesn’t think about production because you didn’t describe production. You described features. … ## What a Claude Code audit reveals A SaaS startup came to us after three weeks of building with Claude Code. ... Our audit found three foundational problems. First, zero error monitoring. No Sentry, no structured logging, no way to know when something failed in production. The app would break silently and users would just see blank screens. … ### Ops hardening Add everything Claude Code didn’t. Structured logging. Error tracking. Health checks. Rate limiting. Monitoring. Alerting. Graceful degradation. These aren’t features - they’re the difference between a demo and a product. This is often the fastest fix because it’s additive. You’re not changing existing code. You’re adding the operational layer that Claude Code never builds unless you explicitly ask for it. And even when you ask, it tends to add minimal implementations rather than production-grade observability. … ### Assumption mapping We go through the codebase and document every implicit decision. Auth model, data architecture, API boundaries, error handling strategy, scaling assumptions, security model. For each one, we identify whether it was explicitly specified or implicitly assumed. Then we check each assumption against your actual business requirements. This usually takes two to three days. It produces a clear map of what’s right, what’s wrong, and what’s risky. Most Claude Code projects have two or three foundational assumptions that need changing and a dozen smaller ones that should be addressed before scale. ### Operational audit We check everything that Claude Code doesn’t build by default. Logging, monitoring, error tracking, security headers, rate limiting, input validation depth, graceful degradation, backup and recovery, deployment pipeline, environment configuration management. Most Claude Code projects score well on code quality and poorly on operational readiness. The gap is consistent enough that we have a standard checklist. It covers the thirty-seven operational concerns that Claude Code most commonly misses.
Related Pain Points
Assumption-Heavy Architecture Generation
8Claude Code fills specification gaps with reasonable but contextually wrong assumptions (e.g., OAuth2 instead of required SAML SSO, individual auth instead of organization-based). The generated code looks correct in isolation but creates unmaintainable architectures that don't match actual business requirements.
Limited to prototypes and POCs; not production-ready
6Claude Code is effective for proof of concepts and prototypes but unsuitable for heavy production usage due to code quality, maintainability, and reliability concerns.
Generates over-engineered and hacky solutions
6Claude Code frequently produces overly complex, hacky implementations for relatively simple problems, creating technical debt and maintainability issues even when code is functional.