4 minute read

Mechanics are able to look at a car’s engine, figure out what’s wrong, and fix it. They can tweak an existing engine to make it work better or prevent some malfunctions that are occurring. Chances are, however, that they couldn’t build one from scratch.

My job title may say software engineer, but most of the time I feel more like a software mechanic. I take existing software and tweak it, making small changes to fix or improve things. I almost never build a brand new thing from the ground up. When I do, it’s usually something small.

Lately, I’ve been trying to actually engineer something new. Specifically, I’m making an affiliate marketing site template. The plan is to make one website that will be mostly data-driven so that I (or other people) could use it to spin up a brand new affiliate marketing site with ease. It’s an opportunity to play around with Azure databases, GitHub actions, and general good design concepts. Most importantly, it’s a chance for me to make something useful from scratch.

And boy, do I feel dumb. A little console app that does exactly one piece of business logic? No problem! A basic calculator that nobody is going to use because, well, why wouldn’t they use the million calculators already out there? I got you! An actually useful website that I’m going to use to generate actual revenue? Uhhhh, sure? I’m sure once I get going it won’t seem so daunting, but there’s something terrifying about opening Visual Studio and seeing nothing. There’s no database to connect to, no existing forms to expand upon, no sleek tricks I can copy/paste from a smart developer. So I sit there and stare at the empty project, doing nothing.

I know, I know. “The best way to eat an elephant is one bite at a time!” Uhuh, right. “The longest journey begins with a single step!” Okay, I guess. That’s advice I’ve told other people, but I’m not really good at taking that advice. I know I need to do something - anything, really - to get the ball rolling and that the momentum will carry me from one thing to the next.

When I was a younger programmer, this wasn’t a problem. “I’m going to make the next big video game… starting RIGHT NOW!” and off I went, coding away. I kept adding features - more kinds of weapons, more graphical effects, even bullet-time (clearly The Matrix left an impression on me) - but never hammered out the core systems like creating and loading levels. So I had all this cool stuff that I showed friends and family in, essentially, a test sandbox. When I really thought about how to structure things to allow me to have an actual set of levels, I realized I’d have to refactor almost everything to even get started. Turns out planning was important after all, but I had done exactly zero planning. Now I’m on the opposite end of that spectrum. I’m so afraid of making a huge mess that all I do is plan. The other day I spent like 2 hours thinking about how to best structure the folders in my project, reading other people’s opinions on the matter and deciding which way appealed to me. And you know the worst part? I still haven’t made a decision.

As I’m writing this I realize that it’s all the same root cause: procrastination. As a young’n making a video game, I thought planning was boring. I jumped right into making the most exciting stuff (i.e.: tons of weapons, visual effects) and left everything else (i.e.: loading levels and other important infrastructure pieces) for an undefined later that never came. I distinctly remember sitting down and thinking today is the day I make a way to create and load levels so I can start fleshing out a campaign for the game and instead I spent time making enemy ships crash to the ground when destroyed (rather than just explode), eject the pilot on their way down, and let the player shoot the enemy pilot’s parachute to cause him to also fall to his death. Personal note: it was a really cool, totally useless feature that I “play tested” more than I care to admit. And now here I am, writing a blog post about how hard it is to create something new instead of, you know, creating something new. In both cases, I’m doing the easy, immediate thing as a way to put off the harder, more important thing.

On that note, I think I’m going to go and make something new. I’ll do something, anything, to move the project forward instead of planning. I’ll keep telling myself I can refactor later, and maybe my next blog post will be about this cool project that I’ve made a lot of progress on. Here’s hoping! 🤞

Updated:

Leave a comment