buenomini

Why I never finish side projects (and why that's fine)

An unfinished project usually means I got what I came for and moved on.

4 min readlearningrkv

I started rkv to learn Rust and Zig. Four modules in, I got distracted by anchors, a completely unrelated project about static analysis and LLMs, so now I have two unfinished projects instead of one.

Before that I built hush to learn Go and networking. It works, but I stopped adding features the moment I understood PAKE and TCP framing.

This keeps happening. I start something, get deep into it, then wander off before it's "done". By conventional standards my GitHub is a graveyard of abandoned projects. I don't think that's a problem.

# The conventional wisdom is wrong

"Finish what you start" sounds reasonable, but it doesn't always apply. The advice assumes your goal is to ship a product and have something to show for it (a portfolio piece, a tool other people use, a line on your resume). That was never my goal. I pick a project to learn something I don't understand, and the project is just the vehicle. Once I've learned what I came for it has done its job, and continuing past that point is mostly inertia.

When I lose interest in a project it's usually because it got easy. With rkv the first four modules were intense: memory management in Zig, fighting the borrow checker in Rust, figuring out how event loops actually work. I was confused about something every day and every day I learned something I didn't know before.

Then I got to module 5 and I knew what to do. The architecture was clear and the remaining work was... implementation. Important if you're shipping a product, boring if you're trying to learn. The learning curve had flattened and the easy part doesn't teach you anything.

# Side quests come from curiosity

Anchors didn't interrupt rkv at random, it came out of rkv. Building an event loop got me thinking about code as graphs of function calls, and that was fresh in my head when I ran into the code archaeology problem at work. The connection was clear to me... what if static analysis did the graph traversal and the LLM did what it's good at?

That question was more interesting than finishing modules 5-7 of rkv. So I followed it.

That's kind of how side quests work for me. Project A teaches you something that lets you ask a question you couldn't have asked before, and project B comes out of that question. Compounding curiosity, if you want a name for it!

Not all project-hopping is equal tho. Sometimes you're following curiosity: you learned something that opened a new door, the new thing is more interesting than the old one, and you're moving toward something. Other times you hit a wall, something you don't understand, and instead of pushing through you start something new, which is moving away from something. The first one is how learning works. The second one is procrastination with extra steps.

How do I tell them apart? Honestly it's not always clear, but I have a rough rule. If you're leaving because the remaining work is too easy, that's curiosity. If you're leaving because it's too hard, that's avoidance.

With rkv I could tell you exactly how to implement the remaining modules. There's no mystery left and that's why I stopped. The encryption module I had planned is a different story. I didn't understand it well enough to implement it, so if I had stopped there it would have been quitting cause it was hard.

# Unfinished doesn't mean failed

Each of these projects taught me something. None of them is "finished", and all of them made me a better engineer. The understanding is what I was after, and once I have it the code is just... code. I can write it anytime, and I probably don't need to.

And even if I forget how something specifically works, exposing yourself to new paradigms is valuable in itself. Gives you diversity of thought.

In my learning framework post I wrote about structure: knowledge bases, project logs, writing things down. That still matters. The logs help you consolidate what you learned, they don't oblige you to keep going after the learning stops. If anything they make it easier to move on, because once I've written down what I learned I don't need to keep the project alive to remember it.


So will I finish rkv? Will anchors become a real tool or stay a proof of concept? I don't know, and honestly I don't care that much. I understand things today that I didn't six months ago, and the unfinished projects are how I got here.