ENGINEERING
Technical Debt in MVPs: What We Actually Skip (and What We Never Do)
"Move fast and break things" is terrible advice for MVPs. Move fast and break things means your first engineer hire spends three months fixing things instead of building features. But moving slowly and building everything perfectly means you run out of money before you find product-market fit.
After shipping 12+ MVPs, we've found the middle ground. Here's our actual framework.
What We Skip in Every MVP
1. Comprehensive Test Coverage
We don't write tests for everything in an MVP. We test the money paths — payment flows, authentication, data integrity. The settings page? It gets manual QA.
Our MVP testing rule: If a bug here loses money or data, it gets automated tests. Everything else gets tested when you hire your first engineer.
2. Perfect Responsive Design for Every Screen
We design mobile-first for the core flows. But that admin dashboard? It works on desktop. The edge case of a 4K ultrawide monitor? We'll handle that in v2.
3. Internationalization
Unless your MVP specifically targets multiple languages from day one, we hardcode English. i18n adds complexity to every string in your app. It's a week of work to add later — not a reason to slow down now.
4. Advanced Caching Strategies
For an MVP with hundreds of users, a simple database query is fast enough. We add Redis when you actually have performance problems, not when we imagine you might.
What We Never Skip
1. Authentication Security
This is non-negotiable. We use battle-tested auth libraries (NextAuth, Clerk, or Supabase Auth). We never roll our own auth, never store passwords in plaintext, never skip CSRF protection. A security breach kills an early-stage startup.
2. Database Migrations
Every schema change goes through a proper migration. No manual SQL in production. Ever. When your next developer joins, they need to run one command and have an identical database schema.
3. Environment Configuration
Secrets in environment variables. Different configs for dev, staging, production. A `.env.example` file that documents every required variable. This takes 30 minutes to set up and saves days of debugging later.
4. Deployment Pipeline
Every MVP we ship has automated deployment from day one. Push to main, tests run, app deploys. No manual FTP uploads, no SSH-ing into servers, no "it works on my machine."
5. Error Tracking
Sentry or equivalent goes in before launch. When your first real user hits a bug, you need to know about it before they email you.
The Handoff Test
Here's how we decide if a shortcut is acceptable: Would a senior engineer joining in 6 months understand this codebase in a week?
If a shortcut makes the code confusing or fragile, we don't take it. If it just means a feature is simpler than its final version, that's fine.
Bad debt: Spaghetti code that "works" but nobody can modify. Good debt: A feature that handles 3 cases instead of 30, with a clear path to extend it.
The Conversation We Have With Every Client
Before we start building, we walk through this framework with our clients. We show them what we'll skip and why. We show them what we'll never skip and why.
This transparency is important. Some agencies cut the wrong corners — they skip tests and deployment pipelines to save time, then charge you again when things break. We'd rather have the honest conversation upfront.
When to Pay Down the Debt
You have product-market fit. Users are growing. You're hiring your first engineer. That's when you invest in:
1. Comprehensive test coverage 2. Performance optimization 3. Advanced error handling 4. Full responsive design 5. Documentation beyond code comments
Not before. Every hour spent on premature optimization is an hour not spent finding product-market fit.