Taking a step back
I've spent a long time learning things. Now I stopped overengineering.
Over the past few years, I’ve spent a lot of time diving into all kinds of software engineering topics. I’ve gotten very familiar with (and blogged about!) Kubernetes, set up all kinds of end-to-end tests, tested what feels like seventeen different CI providers, automated deployments and so much more.
My new projects don’t use any of this. Instead, I
- Rent a few cheap servers from Hetzner Cloud (still provisioned by Terraform) and just run things on there.
- Deploy by hand, with a process that is designed to not take longer than two minutes.
- Run tests before every commit with pre-commit hooks, moving the feedback loop to before I push to GitHub rather than pushing and waiting for those checks to pass. That way, I also make use of local cache.
- Don’t test end-to-end. It’s too slow and doesn’t pay off. Overall, I test much less - the systems I build are not safety critical and any pragmatic assessment of the risks running fewer tests point me towards “push work faster.”
For the vast majority of projects, current software engineering practices are thoroughly overengineered. Especially when starting out and collecting feedback from potential customers (or realising there aren’t any at all), there’s a million things more important than setting up CI pipelines, learning Kubernetes or running slow, brittle tests. Just… click around before and after deploying, that’ll give you a much faster indication of whether your changes broke something.