Command Palette

Search for a command to run...

The Canonical Event: Every Developer Eventually Builds a Personal Finance App

It doesn't matter if you're junior or staff, frontend or infra. At some point in your career you will build a budgeting app, and it will not survive. A field guide to the most universal side project in software.

By Victor Saisse ·

Listen to the intro
The Canonical Event: Every Developer Eventually Builds a Personal Finance App

The Canonical Event

There are very few universal experiences in software engineering. Merge conflicts. Blaming the cache. And, at some point in every developer's career (early or late, junior or staff), the moment you look at your bank statement, sigh, and say the six words that have launched a million repos:

"I'll just build my own app."

Physicists have the double-slit experiment. We have the personal finance app. I call it the canonical event: it doesn't matter when it happens to you; it only matters that it will.

This isn't a theory. GitHub has over 3,000 public repos tagged expense-tracker. Hacker News has hosted roughly 150 "Show HN" budgeting apps; there's one from 2013, and there's one from this year. One per era, forever, like cicadas.

And yes, I have one too. We'll get to that.

The Lifecycle

The canonical event follows the same arc every time. You can set your watch to it.

Stage 1: The Spreadsheet

Every finance app begins as a spreadsheet that works perfectly fine. As one HN user put it: "I handrolled my spreadsheet because I knew exactly how to create the tightest possible interface for my use patterns." This person was at peace. This person was happy. Which, for a developer, is an unstable state.

Stage 2: "I'll Just Build a Quick App"

The spreadsheet has one flaw: it doesn't feel like engineering. My favorite documented case is Ben Bernard's Mint clone, which started as a search for "the perfect budget tracker" and somehow ended with him running Selenium to scrape his own bank and writing expression parsers in both C# and Python. Nobody plans this. It just happens to you, like weather.

Stage 3: The Bank-Sync Rabbit Hole

Now you need transactions. Plaid killed its free developer tier in 2024, which means real bank sync costs more per month than your actual grocery budget, the very thing you were trying to track. An entire underground economy of workarounds exists. You will evaluate all of them at 1 a.m.

Stage 4: Categorization Hell

Is Costco "groceries" or "shopping"? Is the airport sandwich "food" or "travel"? People have deployed actual machine learning to answer this question. The model is wrong about Costco too.

Stage 5: The Abandoned Repo

Somewhere around month three, you realize you've spent 40 hours building an app to avoid 10 minutes of monthly data entry, and that you are, and will forever remain, its only user. The commits get further apart. The README still says "WIP 🚧". It always will.

Stage 6: Back to the Spreadsheet

The final stage is acceptance. One dev, eulogizing his own abandoned app: "I'm tempted to remake its functionality in a spreadsheet, but haven't mustered the will power yet." The spreadsheet always wins. The spreadsheet was always going to win.

The Variations, by Career Stage

Here's the beautiful part: the canonical event evolves with you. The app you build tells you exactly where you are in your career.

  • Junior: a todo app with money fields. Three columns, one chart, deployed on the free tier. It's literally a Codecademy portfolio tutorial, part of the holy trinity of doomed side projects, alongside todo lists and time trackers.
  • Mid-level: full-stack now. Auth, Postgres, charts with tooltips, dark mode before any transactions exist. Maybe a KNN model to predict spending. The predictions are wrong, but they're wrong in TypeScript.
  • Senior: the over-engineered ledger. Double-entry accounting, event sourcing, local-first sync. This is not hypothetical; the creator of Prettier built Actual with CRDTs and hybrid logical clocks over SQLite, then gave a conference talk about it. The terminal form is plain-text accounting in a git repo, maintained with more discipline than most production systems.
  • Staff: doesn't build the app. Writes the blog post about why they went back to the spreadsheet. (Hello.)

Nobody Escapes

You might think professional distance would grant immunity. It does not.

  • When Mint shut down, an ex-Intuit employee responded by building a budgeting app. The call was coming from inside the house.
  • Maybe Finance raised venture money to build one, shut down, open-sourced it, pivoted, and got community-forked. Even with funding, the budget app abandons you.
  • In the AI era the cycle has compressed: someone tweeted asking for a simple finance app and it existed two hours later. We can now reach the abandoned-repo stage before dinner.

My favorite piece of evidence is an old Ask HN thread: "How do you manage your personal budget?" The top answer, in its entirety: "Poorly."

My Confession

Mine followed the classic arc: a spreadsheet (organized to a level only OCD can explain), then "I'll just build a small dashboard," then a weekend of wiring charts to a database, then... you know how this ends. The spreadsheet is open in another tab right now. It's beautiful. It has conditional formatting.

Why We Keep Doing It

Here's my honest defense of the canonical event: it's the cheapest engineering education you'll ever get.

The finance app is a perfect trap because it looks like a CRUD app and is a distributed-systems problem wearing a CRUD app's clothes: external data you don't control, categorization that resists automation, sync, correctness that actually matters (it's your money), and a user (you) who abandons products exactly like a real user. If you want to know what "scope creep" feels like in your bones, this is the tuition, and it's free. Just read Accounting for Developers before you event-source your ledger, not after. Ask me how I know.

So no shame. Build it. It's a rite of passage, not a product. Somewhere between Stage 2 and Stage 5 you'll learn more about real-world software than any tutorial will teach you.

Then go back to the spreadsheet, like the rest of us.


Currently at Stage 6 and at peace. If you're mid-Stage 3 and evaluating bank-sync APIs at 1 a.m.: I see you. It gets better.