Founders ask me "how much does an MVP cost?" and I give them the honest answer: it depends. Then they ask for a range, I say €8K–€25K for a solo dev, and they nod politely and still have no idea what they're paying for.
This post is the version I wish existed when I was on the other side. A real project, anonymized but unchanged in scope and hours. Every line item, every hour block, every decision that moved the price up or down.
The total was €12,200. Here's where every euro went.
The project
A B2B SaaS for a logistics startup. Three user roles (admin, dispatcher, driver), one core workflow (job assignment and tracking), integrations with Google Maps and a payment provider. Web app only, no mobile.
Timeline: 8 weeks. Fixed scope, milestone billing.
The breakdown
| Phase | Hours | Cost | % of total |
|---|---|---|---|
| Discovery & spec | 12 | €960 | 8% |
| Design system + UI kit | 16 | €1,280 | 10% |
| Auth + user management | 14 | €1,120 | 9% |
| Core workflow (CRUD + state machine) | 28 | €2,240 | 18% |
| Maps integration | 10 | €800 | 7% |
| Payment integration | 12 | €960 | 8% |
| Dashboard + analytics | 14 | €1,120 | 9% |
| Email notifications | 6 | €480 | 4% |
| Deployment + CI/CD | 6 | €480 | 4% |
| Testing + QA | 16 | €1,280 | 10% |
| Launch prep + handoff | 8 | €640 | 5% |
| Buffer (used for scope changes) | 10 | €800 | 7% |
| Total | 152 | €12,160 | ~100% |
Effective rate: €80/hour. The contract was fixed-price milestones, not hourly — but the hours are how I scoped it internally.
Let me walk through what each line actually means.
Phase by phase
Discovery & spec (12h, €960)
Before writing code, I write a spec. Not a 40-page document — a 3–5 page brief that covers:
- Three core user flows, written as step-by-step stories
- Data model sketch (what entities exist, how they relate)
- Integration list with API docs links
- What's explicitly out of scope
- Success metric: "the MVP is done when [one sentence]"
This phase usually saves 20–30 hours downstream. Every ambiguity caught here is a scope change avoided later. The spec becomes the contract's appendix — both sides agree on what "done" means before a line of code exists.
Design system + UI kit (16h, €1,280)
Not a full design handoff from Figma. A functional design system: color tokens, typography scale, spacing, component library in Tailwind. Enough that every screen looks consistent without a designer per-screen.
For this project: dark sidebar layout, data tables with sortable columns, form patterns, modal patterns, toast notifications. I build these as reusable React components first, then assemble screens from them.
Why 16 hours? Because cutting this short means every subsequent screen takes 30% longer. The design system is an investment that pays off by week 3.
Auth + user management (14h, €1,120)
Three roles, email/password auth, password reset, session management. I used NextAuth (now Auth.js) with a Postgres adapter.
14 hours sounds like a lot for "just login." Here's what's actually in there:
- Registration flow with email verification
- Login with rate limiting
- Password reset with token expiry
- Role-based middleware (admin sees everything, dispatcher sees their zone, driver sees their jobs)
- Session refresh logic
- Account settings page (change password, update profile)
Auth is one of those things that's 4 hours if you skip edge cases and 14 hours if you handle them. Skipping edge cases means support tickets in week 2.
Core workflow (28h, €2,240)
The biggest line item. This is the thing the app actually does — job assignment and tracking.
A dispatcher creates a job (pickup, dropoff, time window, payload details). The system finds available drivers in the zone. Dispatcher assigns. Driver accepts or declines on their dashboard. Job moves through states: created → assigned → accepted → in-progress → completed.
28 hours because:
- State machine with 6 states and 8 transitions, each with validation rules
- CRUD for jobs, drivers, zones
- Real-time status updates (polling, not WebSockets — MVP decision)
- Filter/search/sort on the dispatcher's job list
- Bulk operations (assign 10 jobs at once)
- Edge cases: what happens if a driver declines? Goes offline mid-job? Dispatcher cancels?
This is where most MVPs either over-build (adding features nobody asked for) or under-build (skipping the edge cases that will break in week 1). The spec from Phase 1 is what keeps this focused.
Maps integration (10h, €800)
Google Maps API for two things: showing driver locations on a map, and calculating estimated delivery times.
10 hours because the API is well-documented but the edge cases aren't:
- API key restrictions (HTTP referrer for frontend, IP for backend)
- Geocoding fallbacks when addresses are ambiguous
- Rate limiting on the free tier
- Displaying 50+ markers without killing mobile performance (clustering)
Payment integration (12h, €960)
Stripe for invoicing dispatchers monthly based on job volume.
Not a simple checkout — this is usage-based billing:
- Metered billing: count completed jobs per billing period
- Stripe webhooks for payment confirmation and failure handling
- Invoice PDF generation
- Grace period logic (what happens when a payment fails?)
- Stripe test mode → production mode switch (sounds trivial, it's not)
Dashboard + analytics (14h, €1,120)
Admin dashboard showing: jobs per day/week/month, completion rate, average delivery time, revenue per driver, zone heatmap.
All charts are server-rendered (no client-side charting library). Data aggregation runs in Postgres with materialized views refreshed every 15 minutes. This keeps the dashboard fast without real-time complexity.
Email notifications (6h, €480)
Transactional emails via Resend: job assigned, job completed, payment received, password reset. Each email has a plain-text fallback and is tested across Gmail, Outlook, and Apple Mail.
6 hours because email HTML is stuck in 1999 and every client renders differently.
Deployment + CI/CD (6h, €480)
Vercel for the Next.js app. Supabase for Postgres. GitHub Actions for CI (lint, typecheck, test on every PR). Environment variable management for staging vs production.
6 hours because most of this is template work I've done before. The time goes to project-specific configuration, not infrastructure setup.
Testing + QA (16h, €1,280)
Integration tests for the core workflow (job creation → assignment → completion). E2E tests for auth flows. Manual QA on the three user roles across desktop and mobile.
16 hours = 10% of total. I won't ship below 10%. The tests catch regressions when I make changes in week 6 that break something from week 2.
Launch prep + handoff (8h, €640)
- Production environment setup
- DNS configuration
- SSL certificates
- Monitoring setup (Sentry)
- Documentation: how to deploy, how to add a new driver, how to manage billing
- 1-hour walkthrough call with the founder
Buffer (10h, €800)
Every project has scope changes. The founder realizes mid-build that drivers need to upload proof-of-delivery photos. Or that the admin dashboard needs an export-to-CSV button.
I budget 7–10% buffer for these. This project used 10 hours of buffer for: proof-of-delivery photos (4h), CSV export (3h), and a "duplicate job" shortcut the dispatcher asked for (3h).
What moves the price
Three levers that shift a similar project from €8K to €25K:
Integrations. This project had 2 (Maps + Stripe). Each integration adds 8–15 hours. A project with 5 integrations (payment + maps + email + SMS + calendar sync) easily adds €3K–€5K.
User roles and permissions. This project had 3 roles with simple rules. A project with 6 roles, nested permissions, and audit logging adds 20–30 hours to auth alone.
Real-time requirements. This project used polling (simple, cheap). WebSockets for live driver tracking, live job board, and push notifications would add 30–40 hours. I built that for E7 — it's doable, but it's not MVP-cheap.
What I'd cut to hit €8K
If the founder had said "I have €8K, not €12K" — here's what I'd scope out:
- Dashboard analytics → replace with a simple Postgres query the founder runs manually. Saves 14h.
- Payment integration → invoice manually for the first 3 months, add Stripe when billing volume justifies it. Saves 12h.
- Buffer → keep it, but smaller. 5h instead of 10h.
- Email notifications → send from a personal email address via Resend, no branded templates. Saves 3h.
That's ~34 hours / €2,700 cut. The app still works, still solves the core problem, but the founder does more manually in the first months.
This is the real MVP tradeoff: not "what features do I skip?" but "what work am I willing to do manually until automation pays for itself?"
The takeaway for founders
When you get a quote for €12K or €15K or €20K, ask for the breakdown. Not "frontend, backend, testing" — that tells you nothing. Ask for the phase-by-phase hours. Ask what's in the buffer. Ask what gets cut if the budget is 20% lower.
A developer who can answer those questions has actually thought about your project. One who can't is estimating from vibes.
If you want this level of breakdown for your project — specific phases, specific hours, specific tradeoffs — book a scoping call. I'll tell you what it costs and what I'd cut to hit your budget.