Introduction
Tech stack selection for an MVP is one of those decisions that feels consequential and usually isn't. For most products, the stack matters much less than the scope discipline and team experience. That said, there are ten specific decisions where you can save yourself serious pain. This framework covers them.
Language and framework — pick what your team knows
The correct language is the one your team ships fastest in. If your team has TypeScript experience, Next.js + Node is the obvious default. If they have Python depth, FastAPI + a solid frontend works. If they have Rails history, Rails is still fine in 2026.
Our default stack for new projects: TypeScript end to end. Next.js 15/16 for web, NestJS or tRPC + Next.js API routes for backend services, React Native for mobile. This choice is not 'best' in the abstract; it is best because one engineer can own a feature from mobile to API to database, and cognitive load stays low.
- Stack = what your team ships fastest in, full stop
- TypeScript end-to-end: Next.js + NestJS or tRPC + React Native
- One engineer owning mobile→API→DB beats specialists in an MVP
Database — PostgreSQL. Always.
Use PostgreSQL. For MVPs, nothing else is worth considering as your primary store. It handles relational data, JSON, full-text search, vector embeddings (pgvector), geo queries (PostGIS), and time-series (TimescaleDB) through extensions.
When teams choose otherwise — MongoDB, DynamoDB, Firestore — we usually see them migrate back to Postgres within 18 months. Save yourself the migration.
- PostgreSQL for primary store, no exceptions in an MVP
- Extensions cover JSON, search, vectors, geo, time-series
- Teams that skip Postgres usually migrate back within 18 months
Hosting — serverless platforms until you cannot
For most MVPs, Vercel (for Next.js) or Railway/Fly.io (for container workloads) are the right defaults. They give you deploy-on-push, managed CDN, automatic SSL, and reasonable pricing until you hit real scale.
Graduate to AWS ECS/Fargate or GCP Cloud Run when your bills exceed roughly $3k/month on managed platforms, when you need specific networking that serverless platforms do not support, or when compliance constraints require your own VPC.
- MVP default: Vercel for web, Railway/Fly.io for containers
- Graduate to AWS ECS/Fargate or GCP Cloud Run at ~$3k/month
- Moves also triggered by networking or compliance needs
Auth — Clerk, Auth.js, or managed service
Do not roll your own auth in an MVP. Clerk and Auth.js cover 95% of what startups need: email/password, social login, magic links, MFA, user management. Supabase Auth is also excellent if you use Supabase for your database.
Self-hosted Keycloak or a custom OIDC stack is an antipattern unless you have specific regulatory or enterprise identity requirements.
- Clerk or Auth.js for most MVPs; Supabase Auth if using Supabase
- Never roll your own auth in an MVP
- Self-hosted Keycloak only for specific enterprise identity needs
Payments — Stripe. Always.
Stripe handles cards, subscriptions, invoicing, tax calculation, and most international payment methods out of the box. For mobile in-app purchases, use Apple StoreKit or Google Play Billing. Never store card data yourself.
- Stripe for web; StoreKit/Play Billing for mobile subscriptions
- Never store card data yourself
Observability — Sentry, PostHog, and structured logs
Sentry for errors, PostHog or Mixpanel for product analytics, a structured logger (Pino for Node, structlog for Python) sending to Logtail, BetterStack, or Axiom. Total cost at MVP scale: under $150/month.
Skipping observability is the single most expensive 'save' in an MVP. You buy one week and pay for it with months of debugging.
- Sentry + PostHog/Mixpanel + structured logger
- Total cost at MVP scale: <$150/month
- Skipping this is the most expensive 'save' you can make
CI/CD — GitHub Actions is the default
GitHub Actions covers 95% of startup CI/CD needs. For mobile, pair it with Fastlane or Expo EAS. Deploy-on-merge to staging, manual promotion to production, simple rollback via git revert. Budget 2–3 days of setup in week 2.
- GitHub Actions for CI; Fastlane or EAS for mobile release
- Deploy-on-merge to staging, manual promotion to prod
- 2–3 days of setup in week 2 of the MVP
Decisions that do not matter
CSS framework choice (Tailwind, CSS-in-JS, CSS modules — pick one, ship). State management library (useState + useContext covers most MVPs; add Zustand or TanStack Query when needed). Testing framework (Jest, Vitest — same thing). Component library (Shadcn, Radix, MUI — whichever your team likes).
Teams that spend more than one day on any of these decisions are trading scope for bike-shedding. Pick and ship.
- CSS framework, state library, test framework, component library — pick and ship
- More than one day on these is trading scope for bike-shedding
Conclusion
Tech stack selection in an MVP is mostly about avoiding a handful of expensive mistakes: don't roll your own auth, don't skip observability, don't pick MongoDB over Postgres, don't use Kubernetes. Beyond those, pick what your team ships fastest in and move on. The stack is not the MVP's moat; the product is.
