Hacker News new | ask | show | jobs
by ktu100 3889 days ago
On this topic, I would like to get a book's recommendation on how to build a full stack product like this. Something more technical with war stories.

My background: I'm a very strong iOS engineer with decent Python and JS skill. However my backend skill is limited at: building a Flask app with custom end points. It will talk to a single sql instance. I'm completely oblivious to memcache, load balancer, different AWS services. My plan is (surprise surprise) to quit my day job next year to pursue my own project and I would like to gather enough best practice and understanding of a full stack app.

Thank you!

3 comments

"A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system." -- John Gall, 1975

If you are building a new service, and doubly so if you are new to web application, you want to build your system with a minimal set of moving pieces. Nginx as a webserver, Flask or Django for you application, and MySQL or Postgres for your database will get you very, very far, and likely remain the be the core of your stack.

Again, you can go very vary with a simple stack. Heck, I've served a very dynamic website to front page of Wired traffic off of single small physical server, PHP/MySQL with no caching. (Caching is great though!)

Avoid as the plague, Docker, unless you know why you needed it. Docker adds complexity, and unless your setup is large enough to benefit more than then costs, then your life has gotten worse and not better. And you've wasted a lot of time. Repeatable server build setups are great though - Ansible or even a good shell script.

Application/Server monitoring is a good thing. Datadog and NewRelic are good choices here.

Although you will one day hit a wall, scaling to bigger hardware is tremendously easier, (and probably cheaper) than building a big distributed system. Don't underestimate just how much more powerful a full, real, physical server can be than a $20/month cloud server.

When you do need to scale out, listen to your application and scale out just what you need too.

>Avoid as the plague, Docker, unless you know why you needed it.

Just wanted to add something here. Docker is great when you dont want to do setup work for a service or install unwanted software on your machine when you know it will only be used by that app. For eg - if your app used redis, you can just start a redis instance with 2 docker commands. Rather than downloading and installing it on your system.

You do not always need to dockerise your apps, you can use docker containers for dependencies too. I find it pretty nice.

This is almost a self-parody of an overbuilt system. Be aware that a lot of stuff you'll read war stories on is hugely overdesigned, especially in the cloud, because it's basically like playing engineering legos.

When someone else is paying for it, it's a huge amount of fun. If you're paying for it yourself, eliminate as many layers of the 'stack' as you can get away with.

You might get some more full-stack web understanding out of this talk: https://www.youtube.com/watch?v=8uxQOzKi3_0

It explains some of the steps between "web app and database" and a crazy interconnected diagram of various acronyms.