Choosing a tech stack for your MVP in 2026
The stack matters less than you think, and more than founders admit. A practical way to decide between Next.js, Flutter and the rest without betting the company on it.
- product
- architecture
- startups
Every founder I talk to asks the same question in the first call: what should we build it with? The honest answer is that your first version will be rewritten in parts no matter what you pick. The goal is to choose something that lets you learn fast and does not punish you when you do.
Three questions that actually decide it
- Where are your users? If 80% of them will arrive from a Google search or a shared link, you want a web app with good SEO. If they open the product ten times a day, a native-feeling mobile app earns its keep.
- Who will maintain it in twelve months? Pick what the team you can realistically hire knows. A brilliant Elixir backend is a liability if your next two hires are TypeScript developers.
- What is the riskiest assumption? The stack should make that cheap to test. For a marketplace it is supply; for a B2B tool it is the integration with the customer's existing data.
If you cannot answer question three in one sentence, you are not ready to pick a stack. Run three customer interviews first.
My defaults
These are the tools I reach for unless something in the answers above says otherwise.
| Need | Default | Why |
|---|---|---|
| Web app, dashboard, marketing site | Next.js + TypeScript | One codebase for SEO pages and app screens, great hosting story |
| Mobile app on both stores | Flutter | Native performance, one team, mature tooling |
| Backend for a small team | Firebase or Postgres (Supabase/Neon) | Auth, storage and data without running servers |
| Payments | Stripe | Boring in the best way |
What I avoid at the MVP stage
- Microservices. One deployable unit until you have a reason.
- Custom auth. Use a provider; your users do not care how the login was built.
- A design system before a design. Ship screens, then extract patterns.
// Keep risky features behind a flag so you can ship daily without a big-bang launch
export const flags = {
newOnboarding: process.env.NEXT_PUBLIC_FLAG_ONBOARDING === "1",
};The decision in one line
Pick the stack that lets the smallest team ship to the channel your users already live in, then stop debating and build.
Marco Restif
Software engineer · AI & full-stack. Writing about what I build.
Offline-first mobile apps: what actually breaks in the field