Ask HN: What is your goto stack when building a MVP and why?

40 points by jennoo ↗ HN
I've been fiddling with a idea sometime and I want to turn it into a product. I first want to build a MVP. I can't make a decision stack I am going to use. I find it difficult to make the difference between taking too much and too little account of an untenable and scalable 'future'.

Do you consider SQL for your data layer or settle for NoSQL solution, or maybe for something like firebase? How do you think serverless functions can contribute to a MVP?

39 comments

[ 3.0 ms ] story [ 79.8 ms ] thread
I use mongodb, I found it is quick for prototyping. But I'm worried about race conditions, because I think its transaction is limited. But for my current stage (MVP), it seems to be fine.

I might eventually switch to postgresql, but I don't know how to deal with data migration once my database changes. I want the program design to be stabilized first.

I will not use firebase, it will be very expensive. I have tried aws lambda once to create myself an email redirect service. I found it hard to debug.

If you don’t know what to use. Use Javascript
I'm a Python/C++ programmer and I think this is good advice. There are a lot of JavaScript programmers around, JS engines are fast and the tooling is great. I have rarely had an opportunity to share frontend and backend code, but it does happen.

If I were starting a new product I'd look into TypeScript. Haven't used it, but I hear a lot of "I tried it and it was a clear improvement" which I think is a good sign. I would also look into whatever the big companies are pushing as their storage layer of choice, though I'm normally a Postgres guy. Would give me peace of mind to still talk to it with SQL though.

We're building a new tool which makes it really easy to build backends, and MVPs are particularly easy. We literally built someone's product with them during a one hour onboarding earlier. https://darklang.com (or email me: paul@darklang.com)
I can't find any code syntax examples on the website.
I would highly recommend completely ignoring scalability for your MVP. Choose tech you enjoy writing/learning.

Right now you don't have enough info to make a good performance decision, so you might as well choose a stack that will encourage you to complete the project.

As you learn more about the task, you will be able to decide what kind of tech makes the most sense.

Rails + Postgres for MVP. Very quick to prototype (you can build a CRUD app with a few commands) and fairly flexible. Then when you want to scale you can add a JS framework if you need and use Rails for the API piece.
Phoenix + Postgres, railsy enough to get it done quick and room enough to take the same codebase to a million user throughput. I wouldn't have it any other way.
If I were you I’d use the stack you are most comfortable with if it can satisfy your requirements.

Otherwise choose what would be easiest to learn. E.g. if you know python but not web python, learn a python web framework instead of moving to NodeJS.

I’d probably keep it simple for an MVP and use a cloud managed SQL database, a popular stack like rails or something equivalent and use minimal client side JS (not a SPA) because that’ll reduce your time to getting it done.

Use cloud services to save you headaches as much as possible: managed databases, VMs preloaded with Linux. Cheat by chucking cloudflare in front of it to get SSL, unless your cloud can do the letsencrypt for you.

Avoid Kubernetes, docker, nosql, lambdas and anything else that’ll complicate things.

You want a monolithic crud app that serves up HTML like it’s 2006.

Web app: Django+Postgres+Bootstrap locally done with Docker, deployed with Heroku.

With Django you get a lot straight out of the box, including: user management, admin dashboards. For an 1 or 2 person built MVP I wouldn't even bother with a JS frontend, just Django forms & Bootstrap templates and full HTTP/POST forms. It simplifies everything and removes a point of failure.

You can get a solid functional system working very, very quickly. Which you can deploy to Heroku for $0 while you iterate, which can be converted to production ready system for as under $50/month depending on what you need.

Desktop: Python+Qt - but thats old and probably bad advice in 2019.

Just curious, what are better alternatives to desktop apps? And why is python + Qt bad?
Heroku Postgres + Heroku + Any framework that you are comfortable with

For me, it's Play + Vue (shameless plug: https://github.com/GIVESocialMovement/sbt-vuefy).

The real time sink is not development. It's ops. Configuring server, making sure it's secure and online at all time, rotating logs, backing up database regularly, no-downtime deployment.

I'm using SQL because it's more flexible than a NoSQL solution. You don't need to plan in advance how to model your data. Just add a new index, and it works decently enough. I can also modify data without building a specialized admin UI.

Digital Ocean droplet with LAMP stack. Lumen for the API and Web components with Polymer for the front-end
Node.js(If needed) + jQuery + Theme + Firebase & Heroku deploys
I've recently re-discovered Google app engine, together with firestore for any persistence it's truly a low friction MVP environment.

I usually use it together with go and Vue for the frontend.

No-one using React?
Can someone explain why OP is downvoted?

I'm new to react and thought it would be used in MVP's.

Can someone explain please

Most likely because developing a web app using a react frontend and an API backend adds a significant amount of work for arguably little to no benefit, especially not at MVP stage.
I found React to be very nice for interactive HTML mockups. But if it's mostly CRUD, just server side rendering is probably the fastest road to a working product.
For me it's Elixir + Phoenix because it's what I build fastest with. While it's not the very most performant stack in the world, it's built for scaling and can handle far more users than anything I've built with has gotten.

Usually for the MVP, I'll just stick with a traditional back-end MVC app and take advantage of all the Phoenix generators. As it gets a bit bigger, I might bring in Vue components on specific pages.

Once an app is really getting larger, I might bring in TypeScript on the front-end. I pretty much stick with Postgres the whole way unless there's a really compelling reason to do otherwise.

Disclosure: I run https://alchemist.camp, which teaches Elixir and Phoenix, but this screencasting project was the result of how much value I found in using Elixir for my last startup, not the reason I'm a fan of it now.

Plain HTML, PHP I learned 10 years ago and a text file for a database, as simple as possible or else I will lose interest before getting my environment even setup.
HTML, Bootstrap and GitHub Pages.
Clojure is great for fast prototyping I usually start with Boot + System https://github.com/danielsz/system and the holy grail: https://github.com/danielsz/system#the-holy-grail It is a full-stack template with hot-reloading on both sides.
C++ and postgress. In theory it should be the worst choice for fast prototyping. No interactive development like lisp. Forces types on you. No awesome web framework.

But I'm so familiar with the language and tool chains I can prototype extremely rapidly. With just a few minimal sane decisions, the prototype can be "web scale" buzzword compliant.

I have a saas sideline I have been selling for 10 years. Some time ago I settled with the toro php router, mysql, jquery and bootstrap. I do most of my coding in Sublime over ssh i.e. my test sites live in containers on a little core2duo desktop. Each container has it’s own Sublime. I can spin up any sublime, from any project, from any machine on my lan. As it’s internal go for a weak but performant ssh cipher or you will get too much latency. Copies of the same containers are used in the live environment. I have a container running Gitlab for versioning.

The core2duo box cost £25 and I love it. It’s also a file/plex server. Duckdns has also been a great friend. As well as nginx, lets encrypt and basic auth. Keeping in mind this is my test system.

You might want to replace that core2duo with an ivy bridge laptop or a similar device, which you could find for ~£50 (maybe with a broken screen). The power consumption will drop by more than half.

But if you don't run the system 24/7 then it's not worth it.

Funny you mention power as it was on my mind recently. The box hits 60w at full use so it is not a major concern.

I would be more concerned leaving a laptop power supply on 24/7. I’m not sure if my concern is unfounded, what do you think?

Assuming that it's well built (i.e. it comes from a major manufacturer and it's not a cheap Chinese product), that worry is completely unfounded.

A modern power adapter is at its core just a transformer and a regulator. Three transformer itself is a passive device, it's the regulator that will use a bit of power that will turn into heat, but any well built one will have no risk of overheating. The heat is proportional to how much power the laptop is using, (i.e. under how much load it is on average).

Modern laptops use very little power, so I'd say there is little cause for concern.

Mostly pick one with a big community that other are using for quick prototypes. And (as others have said) ignore scaling unless scale is what you are prototyping. Use SQL to start. (MySQL/PostGres/Etc..) It's better to denormalize if you need scale then have to normalize noSQL data if needed at the app layer (maybe that's up for debate?).

C#/.net It's the one I know the best and supported for both fast prototyping (.net MVC apps) and scale [Linux and Windows]. Desktop Apps / Mobile / AWS Lambda etc... I use MSSQL for my data, but have used MySQL in the past.

I haven't seen Meteor.js mentioned here yet, which is a shame. It's great for quickly building out MVPs due to their out-of-the-box real-time functionality.

Things can get a bit bogged down once there are a certain number of components that chain update each other and Meteor still primarily uses Mongo, but neither should be a problem for a MVP.

Nginx- unicorn- rails - MySQL + redis

Everything is crud so rails with percona is nice and scalable and easy to deploy.

Redis solves all the unsolvable problems... locking, queuing, caching, magic kittens, and it’s easy to operate at scale

Nginx - makes it easy to have a robust front end for serving up css / js / images with http2

Unicorn is just nice way to run rails apps

Gatsby starter + Firebase For Mobile: react native + firebase

People always complain about Firebase being expensive, but how many apps really make it to that phase that it becomes?

Web: Create React App for the front-end and NodeJS+ExpressJS+MongoDB/MySQL for the backend. Any MVP could be delivered under one week.

On the other hand - I really love what other folks saying. As for myself, I'm thinking about trying out some Django/Rails setups

We were planned to use these technologies to build our MVP with scale-up in mind too: Instead of OpenID and JWT we wanted to use Redis. For front-end: React.js + ES6. For back-end: PHP 7 (Laravel 5+) and Phyton 3. For the database: MySQL 8 (MySQL improved a lot after this version) + Redis. Flutter for MVP. And Kotlin and Swift for the final product.

But I decided to build our MVP with ODOO ERP and CMS to test and then when is needed develop our own product.

What do you think about this?