the case for unfinished projects

TLDR: Building incomplete projects taught me everything I know about programming

I, like many programmers, have this habit of starting projects with a lot of excitement, working nonstop for a few days or a week on it, and then getting sick of it and never touching it again.

Take the expense tracker I built in Java with Spring Boot. I wrote a handful of endpoints, did the whole Interface/Service/Controller dance for each one, and never bothered adding the features that would've made it actually fun or interesting. But by the time I bailed, I'd learned how HTTP methods work, how to write API endpoints and middleware, how cookies behave, and how to wire code up to a database.

And that's exactly what let me build and ship canvasbot and asudines later: one needed real endpoints I now knew how to write, both needed databases I had to connect to (Supabase and D1) and debug when things inevitably broke (a larger nightmare, perhaps deserves another post). Work that would've stumped me felt trivial, because I'd already done the hard part on a project nobody will ever see.

Or take ChromaLite, a musical scale classifier I built later that year. That one I actually finished, though I can see a dozen things I'd build differently now, and some I might still go back and fix. But writing it got me comfortable reading and writing PyTorch, and gave me the intuition behind neural nets, CNNs, loss functions, and backprop. Now, I'm in a research environment, a completely different domain solving a much harder problem with almost no connection to ChromaLite, and while it is (more) daunting, the feeling is familiar enough for me to not be as daunted as I would've otherwise been.

Most recently, I started porting canvasbot's FastAPI server to Go, just to stretch a language I'd recently picked up. I never finished, but the Go I learned banging out those endpoints by hand is exactly what I'm leaning on for my current project.

I've found this pattern across most of my programming experience since I started in middle school: start something, build enough of it to lose interest, abandon it. Features stay unfinished, plans never get implemented, sometimes the core thing never even gets built. But completion (for some projects) is never the point. The point is to have a good time building something fun and pick things up along the way, things that help me ship better software down the line and ideally make me a better programmer in the process.