Why track personal finances?

Most of the people have to deal with financial decisions, including bigger ones once in a while. Having the data about your assets and spending available helps to make more informed decisions, potentially resulting in saving more money or just saving time for routine operations and decision-making.

Keeping track of the financial situation is easier if you have just one bank account and becomes more complicated once you have a few debit/credit cards, a broker account or shared expenses with your partner or friends.

Honestly, if you earn more than you spend, already have an emergency fund, and also a process to get rid of crippling unwanted regular expenses/subscriptions, you may not need to do anything else and complicate things unnecessarily. However, in order to do that you may already use some organizational instruments, like spreadsheets. If you invest in stocks or crypto or whatever, it’s even more likely that you do. In these cases read on and see if you can switch to Beancount to get more features and reduce maintenance time costs in the long run.

Why open-source

I believe that your data should belong to you. There are a few decent looking solutions for personal finance that also may be free (as in beer). But even if you trust them enough to aggregate all your financial data in a single place in a cloud and not sell it, perhaps you could still be concerned about breaches and data leaks?

Happily, a plethora of open-source and self-hosted tools exist and they are already feature-rich enough, and will be available to you forever. Moreover, with some coding or data analysis skills you have an ability to get more from the data you have, which will rarely be the case with commercial systems.

Why plain-text accounting

There are few open-source tools for similar purposes I tried, e.g.: Actual, Ghostfolio, Portfolio Performance, Firefly III, Silverstrike, Paisa, old-school GnuCash. More tools exist listed, for example, here. Some of them look great for particular uses but none came close to Beancount or ledger/hledger in terms of flexibility or features.

All in all, it comes down to the storage format, be it spreadsheet, csv, database or – as in this case – a text file in a simple human-readable domain-specific language. The text file is trackable in source control, refactorable and pretty flexible. Moreover, all the other data can be converted into it (and, probably, back) automatically or semi-automatically using straightforward scripting.

You can read more reasoning about why plain-text accounting is superior here or here as well as find a list of various resources at plaintextaccounting.org.

Why Beancount?

Because it has Fava and because it uses Python. As much as at some point I’d like to learn some more Haskell (speaking about hledger), for the open-source project of this scale I think using mainstream language such as Python or Javascript is strategically beneficial. Even more so with Python, as it has rich libraries for data analysis (and loading Beancount data into pandas is a matter of a few lines of code).

If you end up choosing Ledger, I would recommend to check out Paisa. Before fully committing you can take a look at the pre-configured examples, which is easy since both systems have a Docker image available.

What about “lazy” in the name?

From the very beginning, as I started on this little side-project, one of the primary concerns was how much time it takes to do any manual work to keep the system useful and up-to-date. As I consider myself lazy enough and want to minimize amount of time spent on financial maintenance, I wanted the system particularly optimized for this. If you read through some plain-text accounting documentation and recommendations it may seem as if you have to be particularly disciplined or pedantic in order to use them. This is just not true! A 15 minutes a month is all you need to get most benefits.

Moreover, if you are familiar with the concept of lazy calculation, there are some similarities here as well. In general the process builds up a framework, based on which you can get all the precision on the important high-level details like account values graphs, and varied precision on things like classifying monthly expenses. It only depends on how much you have available and need or want to invest into tracking things more precisely.

In most cases you can improve on the system and get more data for your particular needs when you need them for particular purpose. You can clean up your transactions of import data from more acounts when you feel like it. If you are into coding and data analysis, it may even be fun.

So, how much time does it take to use?

It depends on your needs for precision and specificity. I’d say, beyond setup and learning, it would take from 15 minutes once every two weeks or a month to maintain the system, depending on your choice. Or as little as 5 minutes weekly for a regular update and then additional half an hour at another time you commit every couple of months or so. You can opt for less frequent or irregular updates, it just will make your data less detailed and clean. Overall I roughly followed these principles:

  • Some of the values should be tracked precisely (e.g. net worth)
  • Other things are an approximation (e.g. expenses breakdown)
  • Data entry should be automated or easy
  • But it should be possible to track things to the level of precision you need

As for consuming the data (analysing, prognosing, optimizing), it fully depends on you.

Note that this guide attempts to ease the learning curve for you but you will still need to invest some time initially, for the setup and understanding of the primary concepts. Hope you’ll find this time paying off later.