You Don’t Need All That Complex/Expensive/Distracting Infrastructure

By David Futcher

Infrastructure for your next side-project?

How do you run your web products?

Kubernetes clusters? Load balancers across multiple cloud regions? Zero-click, Blue-Green deployment based on real-time metrics from a continuous deployment pipeline?

It’s all really cool. And if you spend much time on Hacker News, or reading the latest treatises from FAANG DevOps wizards, you’re convinced it’s all absolutely essential for your site. But it’s all a nightmare. Setting it all up is a complicated time-sink. And if you don’t want to roll it all yourself, it’s alarmingly expensive. Even then, it’s still a nightmare, you’ve just paid for the privilege of this particular nightmare.

The good news? You don’t need any of it*.

(* well you need some of it … but so much less than you think)

On Twitter Pieter Levels — multiple Product Hunt Maker of the Year winner, founder of a growing list of sites generating thousands a month in revenue and basically the god of the “Indie Maker” community — was asked what kind of infrastructure he used to host all of his wildly successful indie projects?.

The answer? Simple … a single Linode VPS.

https://twitter.com/levelsio/status/1101581928489078784

Now I’m not saying I know exactly what infrastructure Pieter has in place. But it’s a pretty firm guess that there’s no complicated auto-scaling groups, no fleet of expensive cloud machines to pay for, no complex Kubernetes clusters.

Your goal, when launching a product, is to build a product that solves a problem for your users. Not build the fanciest deployment pipelines, or multi-zone, multi-region, multi-cloud Nuclear Winter proof high availability setup. I’ve seen the idea that every minute spent on infrastructure is a minute less spent shipping features. Now obviously that’s not entirely true; you can’t ship features unless you have a server, or some way to get your features onto your server (and preferably keep them there, for a bit at least). But it’s not a bad mindset. You need the most simple, least time consuming infrastructure that gets you to that point.

When I was building my side project Curated Design Boutique, I spent hours setting up a simple and free continuous deployment pipeline. Commit to git, Semaphore CI builds the Docker image, uploads the image to a container registry, then pulls & restarts the container on my server. It’s really cool. I felt like a wizard once I got it working … and it was free! I actually sat down here to write all about how to do it yourself, until I realised how long I spent on it and how much value it delivered to my users (and as a result: how much money it put into my bank account) — absolutely nothing. Sure, automatically building & uploading to a registry? Great! Saves me a lot of repetitive error prone tagging & typing. But the really time consuming, fiddly & unreliable part of the system was the automatic deployment. Manually running the `docker-compose` script on my server costs nothing (and I’m paying attention when I do it, so I don’t need the extra automatic monitoring infrastructure to tell me when I’ve screwed it all up).

Your users to don’t care how your code gets onto your server. 99.9% of the time they don’t care about your fancy high availability setup either. Obviously if you’re FAANG-level or some established site where that 0.1% downtime translates into vast quantities of cash disappearing from your books, this stuff is all great. You have the funds to do things “right”. Your fancy zero-click continuous deployment system saves you thousands/millions a year. But at indie maker, “Hey look at this cool thing I built … please, please someone look at it (and upvote it on Product Hunt too, thx)” scale — the scale of almost every single site on the net — that 0.1% is vanishingly insignificant.

‘Engineers get sidetracked by things that make engineers excited, not that solve real problems for users’ — we’ve heard it all before. There’s no shocking revelation here (you are on Medium.com after all …). But there seems to be a pervasive sense that you can’t launch a product without a K8s cluster or two, load balanced across a couple of regions, oh and if you have to deploy anything manually how can you possibly expect to turn a profit?

So, finally getting that next Unicorn idea down into code? You don’t need all of that infrastructure you have planned out.