I have the engineer’s disease of overcomplicating solutions. When I find a problem, my focus is so much on developing a holistic system to resolve it. What this so often results in is unimplemented great ideas for solutions that I’ll come back to someday.

The mantra I’ve used to get around this tendancy is “Do It Dumb”. I ask myself what is the simplest way to resolve the core of a problem as quickly as possible. I appease my inner perfectionist with the promise that if the solution I implemented ever gets annoying, I can always rip it out and fix it.

When I first built this blog, I wanted to host images in a CDN with a set of scripts to upload images and insert their URLs into blog posts. Well geez, no one reads this blog, so I just stuck the images in the static directory of the site and host them from there. This works fine.

I’ve worked on infrastructure configuring code where I’ve researched the AWS API or using Terraform to properly configure the environment, only to remember that I’m just setting up and tearing down some test infrastructure and shelling out to the AWS CLI is totally ok!

There is a client site that I built several years ago where the Let’s Encrypt cert renewal is managed by a GitHub Actions cron job that SSHs into the virtual machine and runs a shell script. This seems silly stupid, but it has run successfully for 4 years without incident.

As I’ve matured as a software engineer, I find myself writing worse code and solving more problems. The code isn’t bad. It’s not negligent. It’s dumb and done instead of genius and unimplemented.