I’ve built the same notes app four times.
The first was in college — a Flask backend, jQuery on the front, SQLite. It worked. I used it for maybe three weeks before the novelty wore off and I went back to whatever I’d been using before.
The second was more serious. React, a proper REST API, deployment. I convinced myself the first one failed because the architecture was bad. This one had folders, tags, search, a dark mode. It lasted longer — a few months. Then it got slow, the codebase got messy, and I stopped opening it.
The third was a reaction to the second. Just files. Markdown in a directory, a tiny CLI to create them, a folder structure I invented and then forgot. I technically still “use” this one in the sense that the folder exists and has things in it.
The fourth is what I’m building now.
What I find interesting, looking back, isn’t the technical trajectory — though that’s there, the usual arc from complexity toward simplicity. What’s interesting is that each rewrite was a self-portrait.
The first version told me I valued shipping over quality. The second told me I valued architecture over actually writing. The third told me I valued control over convenience.
Each time, I thought I was solving the previous version’s problems. Each time, I was actually encoding a different set of priorities. The app didn’t get more notes into my head. It just became a better mirror for whatever I was thinking about software at that moment.
I don’t think this is a flaw in the way developers build personal tools. I think it’s the point.
Building something you use yourself is one of the few times you can hold the entire thing in your head — the data model, the interface, the workflow, the failure modes. You feel every wrong decision immediately and personally. That feedback loop is rare and valuable, even when — especially when — the thing you’re building is small.
So the notes app gets rewritten not because the old one is broken, but because I’m different. The new version isn’t better software. It’s a more current self-portrait.
The fourth one is simpler than all the others. No backend. No sync. No clever structure. Just a clean input, a list, and a file that saves to disk.
Which probably says something. I’m not sure what yet.