Ask HN: Which stack will get my MVP API off the ground fastest?

18 points by fastbeef ↗ HN
I have an idea for a service as a side business and need some kind of E-commerce API for it. The main feature is it’s going to produce one-off artifacts and none of the off-the-shelf solutions I’ve looked at really fit.

Basically I need a way to stand up an API with an /price/ endpoint and a /orders/ endpoint that run a bit of logic, put stuff in a database and trigger the payment processor flow. Easy-peasy except I have analysis paralysis over what to build it with and where to host it.

I’m comfortable with “classic” .net and dabbled in Node.js. I’d love to build it as an .Net Web API but the prospect of cloud hosting scares me (plus azure is freakin pricy).

30 comments

[ 3.9 ms ] story [ 83.8 ms ] thread
Can’t really go wrong with python + Django (or flask if you want to stay minimal). Sounds like you’ll need auth, so Django should support that out of the box.

Both will integrate easily with Postgres, and for flask, take a look at the peewee ORM.

What’s the easiest/best way to host python+flask?
Easiest? Probably heroku after you get past the initial boilerplate - but can quickly become expensive.

Most cost efficient would be to Spin up a cheap droplet in digital ocean, install docker-compose with a Postgres service and python image. In the python image, just boot up a Django server on port 80. If you need https, youll need to add something in front of Django, like nginx to handle ssl termination.

App engine could also be a very quick and cheap way - you get ssl, and domain for free, but you do need to buy into their way of doing things, which has a bit of a learning curve .

I'd use Gunicorn instead of Django dev server.
Yes, definitely for production use. Getting started though the dev server is fine for testing.
I recommend using Dokku to save money! It’s the open source version of Heroku. You can deploy by adding one 2 line config file to your repo, the you “git push dokku master” and it builds and deploys your website in a few seconds.

You can use a digital ocean or light sail instance to host Dokku for way cheaper than Heroku and you have more control of the machine. Downside is Dokku is made for one server, so you can only really scale to like 64 cores before you need something else.

Most apps will never need more than one server realistically, but you have to determine that for yourself!

I use it for a Flask app. FWIW, I believe digital ocean has tutorials and an image to use to get Dokku off the ground fast!

fully agree. I wrote a pretty complex API within a couple of days in Django + Django Rest Framework. I did not know how to build web applications or APIs before. Great experience.
Stop wasting time debating and just use .NET, don't overthink things.
So many side projects I could have simply done over the years if I wasn't trying to figure out which LAMP/Rails/etc framework would get me there fastest... despite my not knowing PHP/Ruby/Python/etc
I'm biased but I'd go with .NET if you actually want to get the thing built. Obviously use a new stack if you want to use it as a learning experience.

With .NET Core and Postgres you can get something stood up within a few days and host on a cheap Linode, Digital Ocean or another provider's box for $6 a month or so. That should last you scalability wise until you have enough money from it to do something else and gives you type safe, performant code.

This was my main plan, is hosting .Net Core easy to do on a bare-bones image like DO or Linode? Or is it worth to pony up for a Azure App instance?
It was a while ago now (I can't remember the last time I ssh-ed into the box) but I set up my blog using this guide [0].

I just logged into Digital Ocean to check, I'm running a single 512 MB memory droplet with a 20GB disk for $6 a month and apart from getting familiar with Linux (especially managing user permissions correctly), setup was easy, I run an Nginx reverse proxy in front of a Kestrel instance but I know people have said you don't even need Nginx.

I also used Let's Encrypt for a free SSL certificate and setting that up to correctly refresh on a CRON job was the hardest part of the whole thing.

I've no doubt the site [1] would fall over if it ever got anything like the HN hug of death but this would be easy to plan for assuming organic growth, I imagine there are fairly easy ways to set up load balancing for droplets on DO and moving the database onto a separate droplet etc should give you enough headroom for scaling.

The code [2] is way outdated now and awful quality but it's on GitHub.

Others who have more experience may say it's worth learning a certain cloud feature or serverless stuff but my gut feeling is it's better to get the thing out there and worry about that sort of stuff when you get there.

Edit: It's worth mentioning that [0] talks about developing the site on Linux, though I did that just to get a feel for Linux it's not at all necessary and much easier to do the development on Windows with Visual Studio then all you need to do is:

  dotnet publish -c Release -r linux-x64 
To get a published site to run on the Linux droplet/machine.

[0]: https://www.hanselman.com/blog/PublishingAnASPNETCoreWebsite...

[1]: https://eliot-jones.com/

[2]: https://github.com/EliotJones/LightBlog

There is no framework that can match the feature set and the development speed of RoR.

If you are not familiar with ruby, go with a language you are familiar with. There is a clone in every major language. It’s just that RoR is the “original”.

Usually, I cannot finish what I have started because of debating over which shiny new framework/stack I need to use. I overoptimize things and always try to code for worst case. I cannot resist to think about hundreds of users, peak performance, hn traffic of death etc. Eventually it never finishes or I loose interest.

Best thing you can do is to make something that just works in fastest way possible. Anything that can print out text will work. You will always have a chance to make it better once it starts to get some traction.

Personally I would choose ASP.Net Core, hosted on a Microsoft Azure App Service with continuous integration from AppVeyor.

Benefits - Azure App Service free tier is awesome. AppVeyor have a 14 day trial that supports deployment directly from Git to Azure and .Net Core is awesome.

Here’s a blog I wrote recently which covers this exact implementation -

https://www.simongilbert.net/xunit-ci-azure-appveyor-aspdotn...

In terms of a database implementation, Azure’s NoSQL table storage is super cheap and awesome, as covered here -

https://www.simongilbert.net/dependency-injection-aspnet-mvc...

Whatever you know best.

"But deployment" deployment is cheap.

"But hosting" hardware is cheap.

"But time" time is _not_ cheap.

You don't need to screw around and learn another language/framework/ecosystem to get an MVP off the ground. You need to be able to hit the ground running and never let off the gas. This means you need to be able to change/adapt/feature what you need to. That takes brain cells. So does learning another language/framework/ecosystem. Don't make it harder than it needs to be.

.NET Core Web API is absolutely perfect for this and the fact you already have some .NET experience makes it a no brainer in my opinion.

Just get started knocking out a prototype running locally and break the analysis paralysis, you'll have no end of hosting options to choose from later. You'll be amazed what a 5 dollar a month Ubuntu server from Digital Ocean or similar will handle running .NET Core. Azure is obviously an option too but don't rule out AWS.

PostgreSQL with PostgREST might be enough for your needs if you’re mostly reading/writing to the DB. Can run on your own server, cloud, Heroku, etc.
This is kind’ve a bait question. I mean the “no duh” answer (as others have already mentioned) is “whichever you are most comfortable with”. I’m confused as to what other answer you could want
Plenty of cheap asp.net hosts, so don’t worry about cost. You don’t need to use Azure.
For a MVP and to validate your business idea you could put something together with webhooks/ifttt.com/zapier.com/googleSheets.