I’m an engineer through and through, and like most of us, we like to tinker. Many of us have side projects where we get to exercise our desire to build things, unconstrained by the process and hurdles of real-world professional engineering. Often, my side projects come from a new thing that I just learned about and come with a “wouldn’t it be cool if…” kind of thought. I’m also just dangerous enough with coding to be able to make some of them happen.

Why, then, do so many of my projects never reach completion? So many get to about 75% before the momentum stops, the project goes stale, and I move on to the next project… or two. I can think of a few reasons this happens.

Why projects stall

First, sometimes the project is just about scratching the itch of exploring a new technology. This means that after playing with the idea a bit, my motivation starts to wane. This also means that there really might not be value in completing the project. When I was first learning about Arduino and sensors, I wanted to build remote temperature sensors in every room. I actually built several and started getting data. They looked ugly, dangling bits of circuit hanging from USB chargers. Then, after a little while, I realized that I didn’t actually use the data. The real joy of the project was building something that worked. After that, the value wasn’t there anymore.

A pile of temperature sensors and a microcontroller.

The remains of the temperature sensors. At least I still use the Wemos D1 Minis.

Second, it happens that I’ll discover that something already exists that’s just a little easier to work with. Creating something can be fun, but when you realize that there is a product or service that you can simply buy that’ll be easier, faster, and better, that’s hard to ignore. I spent many months buying parts and building a portable RetroPie. It was going to be a Raspberry Pi, with the 7" touch screen, a custom-built controller made with a Teensy to emulate a gamepad. It was on the shelf for months until I simply bought a Nintendo Switch and that project was scrapped.

A Raspberry Pi attached to a screen and a few joystick components.

Some parts for the portable RetroPie.

Third, I often can’t help myself from making things harder than they need to be. All of my enterprise software and cloud native experience sometimes leads me to think that everything needs CI/CD pipelines, utilizing microservices, and GitOps, and it can’t just be… simple. The eInk Radiator project that I’ve written about suffered from this. I was trending towards multiple git repositories, different languages, dependency trees, and a complicated, custom user interface for such a simple concept. There is a reason that even after putting in all the work, it starts to just feel like work and not fun.

An eInk display showing an image of a cardinal.

The eInk display hasn’t changed in over four years.

Fourth, finishing things is just hard. “In progress” is easy, but “done” means that you have to draw a line where it’s good enough, it’s complete enough, and it can live on its own. Maybe this is just the endpoint of the previous three parts: when the friction of making the project outweighs the fun, the learning potential, or the value of the finished project, then it’s doomed to be shelved. On the other hand, this point also highlights that for a project to be “done”, it has to stop demanding active work.

A pile of Nixie tubes and drivers.

Some parts for a nixie tube clock. Never even got started with this one.

How does AI change this?

How does this change in the world of AI? AI agents are supposed to make things easier, right? I’ve been actively using AI tools for a while now, both professionally and personally. They certainly have had a major impact, but they aren’t the silver bullet that’ll make polished products out of all our wildest ideas. If anything, it’s made things worse! The AI utilities, specifically coding agents, design agents, and the like, make it so much faster for me to prototype ideas and create components of a project. This is even more true for things where I don’t have core knowledge and I rely on the AI to create things where it would take me too long to read documentation to understand well enough to use.

But just like I struggle with the concept of “done”, the AIs understand it less. I can’t just say “finish this project” if I haven’t clearly defined what finishing looks like. And, the less specific I am, the more the AI will generate work that I feel unsure about and either re-write, or become unsatisfied and push me towards scrapping the whole project.

I also firmly believe that AIs are tools and does not replace the effort and knowlege required by humans. I’ve worked the best with them and I still feel in control. I delegate things to them that I know what the outcome should be.

What I’m learning

  1. Keep things fun. That’s the intrinsic motivation for these projects because that’s the only thing that’s getting me to do them. If there’s a feature or piece of the project that seems fun, do it. If there’s a part that isn’t fun, remove it or delay it if possible.

  2. Keep things simple. These are side-projects, not multi-quarter business solutions. Keeping things simple and fun also means that you keep the fun for longer.

  3. Document and keep a todo list. Inevitably, you’ll have long gaps of time when you won’t be working on the project and nothing kills the momentum like forgetting what needs to happen and what was already done. Hint: this is a great thing for the AIs to write!

  4. Define the end goal early. Knowing what done is helps you know if you’re getting close to “graduating” the project. Realize, also, that getting to that done point doesn’t mean it’s done forever, it’s just at a stable milestone.

  5. Maybe the most important: it’s OK to walk away from them. If it’s not fun, it’s not worth doing. You can always come back to it later…

A solderless breadboard showing several ICs and 14-segment displays.

The start of a clock using 14-segment units. Maybe I should come back to this one…