My Personal Blog
All posts

What I Learned Building My First Side Project

The technical and personal lessons from six months of building something from scratch — including the ones I'd rather not admit.

Six months ago I started building a small web app. It's nothing impressive — a tool for organizing reading notes. But building it taught me more about software and myself than anything I'd done in a while.

Starting Is the Easy Part

The first week was the best. Clean slate, fresh energy, endless possibility. I had a rough design, a half-baked schema, and the naive confidence of someone who hasn't yet encountered their own blind spots.

The rough design was fine. The schema was not. I rebuilt it three times.

The Trap of Premature Polish

My biggest mistake was spending two weeks on the UI before the core data model worked properly. It felt productive — things looked nice — but I was decorating a building with an unstable foundation.

When the model changed (twice), I ripped out interface work I'd been proud of. It stings in a specific way to delete code you liked.

The discipline I wish I'd had earlier: nothing matters until the data is right. Figure out what you're storing and how, get that working end-to-end in the ugliest possible way, then care about how it looks.

What Actually Helped

Writing before coding. When I was stuck, I'd write out what I was trying to do in plain sentences. Three times this revealed that I was solving the wrong problem.

Smaller scope, always. Every feature I cut made the project more likely to ship. Features I thought were essential turned out to be nice-to-haves. Nice-to-haves are features that exist in your imagination.

Showing it to one person early. A friend used it for ten minutes and immediately tried to do something I hadn't considered. That ten minutes was worth a week of solo testing.

The Part I'd Rather Not Admit

I almost quit around the four-month mark. The initial excitement had long since worn off, and the remaining work felt tedious rather than interesting.

What got me through was lowering my expectations for what "done" meant. I stopped trying to build the version I'd imagined at the start, and started trying to build the smallest version I'd actually use. That version exists now. It's not what I planned. I use it every day.