First published: 2020-03-30
Most people on the internet are wrong. Just look at the Ruby community. Below are some correct opinions.
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.
Scaling? OS and software upgrades? 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.
Some applications (disk heavy for example) need to run on a "real" server, but most don't.
I use Google AppEngine for my apps. It comes with its own set of problems, but instability is not one of them. It's 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.
I'm one of those condescending Golang users, and I'm here to tell you: don't use PHP, 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:
It just serves as a backup, really.
You can read more about why I picked Paddle.
I use EmailOctopus. Support is great and the UI is simple.
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.
I spent more time than I should have picking a platform for my blog. After several failed tries I went with Tailwind's Typography Plugin.
I use Go for everything.