There’s a common political idea that dates back to the 1800s (that some attribute to John Adams, though this seems contested) proclaiming that as folks age, their political beliefs adopt a more conservative-leaning vibe. While Pew, NYU and others have challenged this idea in recent years, it’s a model of individual development that I’ve seen echoed somewhat in other areas of technology and culture.
While I was in college, I had a lot of spare time for tinkering and learning outside of my classes. As with many folks who studied software-related subjects, I learnt a lot about the non-software side of the craft. Hosting websites, Linux, administrating servers, sharing access with others and orchestrating deployed applications. Essentially, the software equivalent skillset of a building site or a truck depot manager.
With this newfound knowledge, I suddenly had the ability to run my own services on the public internet. As with many college students, I didn’t have much money. I couldn’t pay for several subscriptions, and why would I when I can spin up my own WordPress website on a $5/month server?
And with that began an era of running every container under the sun and assigning it a domain name. I would host websites for friends, infrastructure for projects I helped with, I even hosted an Iodine DNS server which meant I could get free internet access on metered connections.
I was in it partly for control. But not control over my data, as is the common logical justification for self-hosting. The feeling of operating a small fleet of machines and software for some reason made the nerd in me happy. I even open-sourced the stack I had crafted under the brand “picostack” as I thought it would be useful for small shops that didn’t need Kubernetes.
It turns out that small shops that don’t need Kubernetes just buy hosted services. Need a log aggregator? There are plenty. I was learning by experience what over-engineering was.
Fast forward 8 years and I’m deleting another server. This time from Fly.io, which is my new favourite platform for getting code in front of people as fast as possible. I run Storyden’s demo site there, plus all of Odin’s services.
But a simple static blog doesn’t need to be self-hosted. Sure, I don’t own my data but I also just don’t have the capacity or the time to care. So where’s this going? We know over-engineering is bad, there are plenty of articles about that on the internet, I’m not here to preach that dead horse to the choir.
Over-engineering is borrowing future context
When I discuss “technical debt” I frame it as consciously borrowing time from your future to utilise now, in the hopes that you can leverage that time now and win overall in the long run.
Young software engineers can leverage knowledge in the same way by over-engineering projects. So I often encourage it when mentoring folks with their projects, in the same way that I treat technical debt as a positive if handled well.
I may have spent a bunch of time in 2014 wiring up micro-services, self-hosting GitLab and operating my own metrics but if I spent that time years later doing the same thing, I would have ultimately come off worse. Why? Because my time was worth far less in 2014 compared to 2018 when I joined the workforce and started using these technologies in the Real World™.
And it’s not only about understanding conceptually how modern infrastructure works. These experiences also allowed me to appreciate under-engineering fairly early on in my career and focus on building and solving.
Coming back to John Adams, the actual meaning behind this idea of changing your political leanings as you age, while contested, certainly resonates with some people’s model of personal development. Different things matter to you at different parts of your life, and leveraging what’s going to help you most right now to get to where you want to be is a skill you should always be sharpening.
So if you’re studying and you’ve got some spare time, go over-engineer a to-do list app, and you’ll learn a lot. And if you frequently mentor or teach, consider this idea when introducing the ideas of complexities and over-engineering, allowing people to weather the storm helps them see why the sunny side is so sunny.