How I keep an MVP cheap to run
Founders usually ask what an app costs to build. The question I'd rather answer first is what it costs to keep running, because that is the number that decides how long you can afford to find out whether anyone wants it.
Here is how I pick the stack with that in mind.
Start with one codebase for both phones
For most products, React Native with Expo gives you iPhone and Android from one codebase, and EAS handles builds and over-the-air updates. One codebase means half the bugs and half the maintenance. I only drop to Swift or Kotlin for the parts that need it, like Live Activities, home-screen widgets or a watch app.
Don't run a server you don't need
An always-on server is a monthly bill and a thing that can fall over at night. A lot of MVP backends are really a database, auth, file storage and a handful of functions. Supabase or Firebase cover the first three. Small jobs, like relaying data or calling a third-party API, fit in Cloudflare Workers, which cost close to nothing at MVP scale and never need patching.
On Dulce, my diabetes app, the backend is a small Cloudflare relay rather than a server I'd have to look after.
Pay for the boring parts
Payments, email and analytics are solved problems. Stripe on the web and the App Store and Play billing on phones are cheaper than any custom system you'd build, once you count the time.
Build the expensive parts once, properly
Some things really are heavy. On Tremap the map serves about 15.5 million tree points, and that needed a proper map API, not a list loaded onto the phone. The trick is spending on the one part that is actually hard and keeping everything around it simple.
Questions worth asking before you build
- Which part of this is actually hard, and which parts are solved problems?
- What happens to the bill at 10 users, 1,000 and 100,000?
- Can one person maintain this in a year?
If you want a second opinion on a stack or a budget, write to me at giorgikhimshiashvili@gmail.com. More about me and what I've shipped is on the home page.