Project: Plim

My Image

The old-timey way to manage your money:

  • Throw your cash into buckets

  • Spend the month shooting holes in them

  • And try not to let them run dry

  • Fun for the whole family.

A simple data system for planning personal budgets and tracking your spending. Works on Linux CLI and also as local web interface. The guiding principles are simplicity, verifiability, and minimal user effort for maximum value.

Data is taken directly from bank records, downloaded in CSV form and never modified. App user inputs are tracked in human readable CSV files and everything is tracked in a GIT repo to provide easy rollback.

The data is read directly from banking CSV files. Every month is completely isolated from the previous and next. There is no data carried from month to month, other than the unspent funds in the cistern.

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

Does plim stand for Plugging Leaks In Money? No, that’s not a bad description, but plim is not an acronym - it’s an old English dialect word. Did you know that if you let a wooden bucket dry out, the wooden slats will shrink and the bucket will develop leaks? So you never let them dry out. Instead, you keep the wood wet so the slats will stay swollen and the joints will be tight. You need to keep your buckets plim.

And that’s the metaphor I’ve built my budget app around. Allocate your money into spending category buckets and then keep topping them up so they don’t run dry.


Project Log Entries

/images/_23ba29e4-1877-41f8-a5d6-2ca440ff91ab.jpeg

Testing for Gold

For something as crucial as a financial tool, I want to be sure that plim is always extracting an accurate model of my finances from the data files I’ve download from my financial service providers. So, to ensure that new code never breaks that “ground truth,” I’ve added a simple golden file regression testing system, which gets automatically run every time I check in code changes with git.

By carefully curating a set of testing data that illustrates tricky situations and then hand-verifying that the model built from them is correct, I can ensure that plim will faithfully handle the weird cases, even when they occur in live data.