The Modular MVP: Building So You Can Pivot Without Burning Everything
The modular MVP is an MVP built with a deliberate separation between the stable infrastructure layer (authentication, billing, user management, email) and the product hypothesis layer (the core feature that is being tested). This structure allows a pivot -- changing the product hypothesis -- without rebuilding the infrastructure. The teams that survive pivots with minimal technical cost are the ones that built the infrastructure once and reused it across multiple hypothesis tests; the teams that burn everything on a pivot built an inseparable tangle of infrastructure and hypothesis.
Written by Yashveer Singh, founder of Yashveer Labs.
What you actually need to know
- Authentication, billing, and email are stable across pivots. The core product feature is not. Build the infrastructure to last; build the feature to be replaced.
- The pivot cost is proportional to how entangled the product hypothesis is with the infrastructure. Modular MVPs pivot for the cost of replacing the product layer only.
- The stable infrastructure layer (auth, billing, email, user settings) should be built with quality: tests, documentation, clear interfaces. The product hypothesis layer should be built with speed: simple, explicit, and easy to delete.
- The "everything is urgent" pressure of MVP development usually causes teams to skip the clean separation and tangle everything together. This is the decision that makes pivots expensive.
- Reusing infrastructure across startup ideas (or product pivots) is one of the highest-leverage technical advantages available to a serial founder or a team with multiple pivots.
| Component | Stable Across Pivots | How to Build | Reusable |
|---|---|---|---|
| User authentication | Yes | Auth.js / Clerk | Yes |
| Subscription billing | Yes | Stripe + webhook handler | Yes |
| Transactional email | Yes | Resend + React Email | Yes |
| User settings | Yes | Simple settings page | Yes |
| Product entity schema | No | Simple, explicit, replaceable | No |
| Product feature UI | No | Minimal, delete-friendly | No |
| Product-specific integrations | No | Isolated, external-facing | Partially |
The core argument
The MVP that survives a pivot is the one where the infrastructure and the product hypothesis are separate layers. The authentication code knows how to authenticate a user; it does not know whether the user is a note-taker, a project manager, or a restaurant owner. The billing code knows how to process a subscription; it does not know whether the subscription grants access to a CRM, a content platform, or a booking tool. The email code knows how to deliver a welcome email; it does not know what the welcome email is welcoming the user to.
This separation is not about elegant architecture for its own sake. It is about the economics of startup experimentation. A team that rebuilds authentication, billing, and email with each pivot is spending 2-4 weeks of engineering time on infrastructure that does not test the hypothesis. A team that reuses the stable layer is spending 1-2 days swapping the product feature layer. Over three pivots, the modular team has 6-12 more weeks of product experimentation time than the non-modular team. That is the value of the modular MVP: not architectural purity, but engineering efficiency for hypothesis testing.
The stable infrastructure layer
Authentication. A user account system with email/password authentication, social OAuth (Google, GitHub), session management, and password reset. This is identical in every SaaS product. Use Clerk or Auth.js -- these tools are built specifically for this use case and provide the functionality without custom engineering.
The key architectural constraint: user accounts should be independent of the product entity. A User table with id, email, name, and createdAt is stable. A User table that has projectIds or currentPlan embedded in it is coupled to the product model. Keep the user account model minimal and stable.
Billing. Stripe Checkout for payment collection, Stripe Customer Portal for subscription management, and a webhook handler that updates the user's subscription status. This is the same pattern across every SaaS billing implementation.
The stable billing abstraction: a subscriptions table that stores userId, stripeSubscriptionId, status, and planId. The planId maps to a set of features. When the product pivots, the feature set associated with each plan may change, but the billing structure (a subscription with a status, owned by a user) remains.
Transactional email. A set of React Email templates for the lifecycle emails: welcome, password reset, subscription confirmation, cancellation. These templates have the brand identity and the product name; they do not have product-specific content that changes with the hypothesis.
The product hypothesis layer
The product hypothesis layer is everything that is unique to the current product thesis. For a task management tool: the task entity schema, the project hierarchy, the collaboration features, the dashboard UI. For a booking tool: the availability model, the booking flow, the calendar integration.
This layer should be built with two priorities: speed (get it in front of users as fast as possible) and replaceability (when the hypothesis changes, the minimum work to replace it).
The patterns that make the product layer replaceable:
Isolated database tables. Product-specific tables have no foreign keys into the stable infrastructure tables beyond userId. The connection between a user and their tasks is a userId column on the tasks table -- the tasks table can be dropped without affecting the user account table.
Isolated API routes. Product-specific API routes are in a separate directory from infrastructure routes. The infrastructure routes (/auth/*, /billing/*, /settings/*) remain unchanged; the product routes (/tasks/*, /projects/*) are the scope of the pivot.
Isolated UI. The product feature UI is in a separate directory from the shared UI (navigation, layouts, settings pages). The shared UI uses the design system and styling approach; it can be reused across hypothesis changes. The product UI is replaced when the hypothesis changes.
The pivot operation in practice
When the hypothesis changes and the team decides to pivot to a new product idea:
- The stable layer (auth, billing, email) remains unchanged.
- The product-specific database tables are dropped (or archived) and new tables are created for the new product entity.
- The product-specific API routes are replaced with new routes for the new product.
- The product-specific UI is replaced.
- The billing plan features are updated to reflect the new product's feature set.
The stable layer work is zero. The pivot work is bounded to the product layer. For a typical MVP product layer (3-5 database tables, 10-20 API routes, 15-30 UI screens), this is 3-5 days of engineering work to swap, not 3-5 weeks.
Common mistakes teams make with MVP architecture for pivots
- Embedding product logic in the authentication flow. The signup page that asks product-specific questions during account creation ties the auth flow to the current hypothesis. When the hypothesis changes, the signup flow needs to change. Keep signup generic: email, password (or OAuth), and redirect to the product onboarding.
- Embedding product entity IDs in the user table. A users table with a
currentProjectIdorteamIdcolumn is coupled to the product model. When the product pivots to a different model, the user table must be migrated. Keep the user table stable. - Using billing plan IDs that encode product features. A plan called
"project-creator-pro"encodes the current product concept. When the pivot changes the product, the plan ID is wrong. Use plan IDs that are stable ("tier-2-annual") and separately define what features each tier includes. - Building the product hypothesis with future scalability in mind. The MVP hypothesis layer is not the final product. Optimizing it for scale, building abstraction layers, and implementing caching for a feature that may be replaced is wasted engineering time. Build it simple and replaceable.
- Not separating the product hypothesis layer in the codebase from the stable layer. If every file in the project mixes infrastructure code and product code, the pivot requires touching everything. The physical separation of stable and hypothesis code is the technical boundary that makes the pivot tractable.
Where to start: a 3-step modular MVP structure
Step 1: Build the stable infrastructure layer first, before any product feature code. Authentication (Clerk or Auth.js), billing (Stripe Checkout + Customer Portal + webhook handler), and transactional email (Resend + React Email). This takes 3-5 days. It is the same code that every SaaS product needs.
Step 2: Define the product entity model and create isolated database tables for it. The product entity schema should have minimal coupling to the user account schema beyond the userId foreign key. Keep it simple: the MVP hypothesis tests whether users want the product, not whether the data model is perfectly normalized.
Step 3: Build the product feature UI in a separate directory from the shared application UI. app/(product)/ or pages/app/ contains the product hypothesis screens. app/(auth)/ and app/(settings)/ contain the stable screens. This separation makes the pivot scope immediately obvious.
The Architecture That Lets You Learn Faster
Yashveer Singh. Founder of Yashveer Labs. I built the infrastructure for Expert Tutorials once: auth with Clerk, billing with Stripe, email with Resend. When the product hypothesis evolved from a tutorial platform to a guided learning product (a different UX model for the same audience), the pivot involved replacing the course browsing UI and the lesson delivery model. The auth, billing, and email stack was untouched. That pivot took four days. I have seen teams at a similar hypothesis stage take four weeks for equivalent pivots because the infrastructure was entangled with the product layer. The four-day pivot versus the four-week pivot is not a skill difference. It is an architectural decision made at the beginning of the project.
Related reading
Frequently asked
Why this is the work I do
The work in this article is not theoretical for me. It is what I shipped last quarter, last month, and this week. Yashveer Singh, founder of Yashveer Labs. I do not write about things I have not done. I do not pretend to expertise I do not have. If the topic here is the topic you are dealing with, I am the person who has dealt with it. Multiple times. Recently.
Posts that line up with this one.
- MVP Development and Startup Builds
Technical Co-Founder vs Hired Developer: The Decision That Decides Your Startup
Choosing between a technical co-founder and a hired developer is one of the most consequential early startup decisions. Here is the framework for making it correctly.
- MVP Development and Startup Builds
The Complete Startup App Development Process from Idea to Launch
Building a startup app is not one project. It is five sequential projects with different goals. Here is the complete process from idea to launched product.
- MVP Development and Startup Builds
How to Avoid the Mini Salesforce Trap as a First Time Founder
First-time founders consistently overbuild. The mini Salesforce trap is how a focused product becomes a bloated platform before a single customer pays for it.
- MVP Development and Startup Builds
How to Budget for an MVP Without Knowing Software Costs
You do not need to understand software costs to budget for an MVP. You need a framework that translates product decisions into cost ranges, so you can plan before the first developer conversation.