Picking A Tech Stack

So many tools, frameworks and service providers to choose from. They all seem alike and their landing pages appear to be interchangable. Being an idealist I put in more effort into making these choices than I should have.

Save some time and have a look at the theory behind my technical decisions. You’ll find a list of services that I use at the bottom.

Don’t run your own server

I always feel a tingle of anxiety when someone mentions they host their hardware over at Hetzner. I’ve been running servers half of my life and if there is one thing that I’m certain of is that they will break.

Disks crumble, filesystems run out of space, memory sticks get corrupted, CPUs fail, power supplies burn down and network cards start dropping frames.

It’s fun to run a physical server, if you’re into that sort of thing, but when you’re building a product you should be focused on building, not fun.

Use a virtual machine from AWS or GCP. You can even get a few thousand bucks of free credits to get you started. Sure, it’s more expensive, but think of it as your first employee - a virtual system administrator.

There is no need to take care of your own hardware.

Don’t run your own OS

Scaling? OS and software upgrades? What a headache. Some applications (disk heavy for example) need to run on a “real” server, but most don’t. Avoid a whole other class of problems by going serverless.

I use Google AppEngine. Again, it is more expensive, but the time and effort saved is well worth it. Your app made it to the front page of Hacker News and you need to scale up? You won’t even notice, that’s done automatically and by default.

Serverless applications are a brand new thing. You might object and say “surely it’s better to use technology that I already know?” The first web browser was released in 1991, and Amazon AWS launched in 2006. The computer world is in a constant state of turmoil. Unless you plan to retire soon get used to learning new things quickly.

I spent my career as a UNIX sysadmin and I loved it. The job got automated away, it’s gone. Better to accept it sooner than later.

Here’s a nickel, kid. Get yourself a better programming language

I’m one of those condescending Golang users, and I’m here to tell you: don’t use Python or Ruby. Those languages are easy to learn but tough to maintain. Because they use dynamic typing your compiler won’t help you catch bugs, you can only see them with testing (or in production). This means you have to write tests that check function arguments and return values. More code makes your codebase more rigid and makes it harder to refactor.

Did you notice how certain startups create an initial version of their product fast and then development grinds to a halt? Bugs are no longer fixed, features are on the waiting list for a year or more. I’m willing to bet every product exhibiting that symptom was written in a dynamically typed language.

Go is simple (as opposed to complex), but it’s also difficult (as opposed to easy) to learn. But the languages that are the easiest to learn are also the ones that are the most difficult to use in the long run.

For some dated but still valid thoughts see these essays by Paul Graham:

My stack

Here’s what I use for my products.

Hardware

All my servers run almost for free.

Software

Code Repository

GitHub.

It just serves as a backup, really.

Payments

Paddle.

You can read more about why I picked Paddle.

Mailing lists

I use EmailOctopus. Support is great, pricing is great, the UI is simple.

Email notifications

MailGun.

My apps sometimes need to send an email to the user. That’s different from a mailing list. I picked MailGun for their pay-as-you-scale payment system.

User authentication

auth0.

I don’t want to handle password resets on my own. They seem to be the number one choice.

Blogs

Hugo.

Hugo takes some getting used to, but in the end everything seems nicely designed. It balances control vs premade well. I can write my articles in markdown, which means I can easily repost or migrate them later.

Social monitoring

Syften.

Of course I’d use my own tool for that.

Programming language

I use Go for everything.

Frontend

I don’t host my landing pages separately (I know that a lot of SaaS products do that). Go has built-in html template functionality.

Other than Bootstrap I don’t use any frontend frameworks.

General Tips

See Also