An Introduction to Plaintext Accounting

Indie Hackers - March 19, 2021

Michael Lynch (@deliberatecoder)

https://decks.mtlynch.io/plaintext-accounting/

Xero sucks

  • Zero help to the user in processing transactions
    • Is that why it’s called Xero?

Xero sucks

  • It natively includes a bunch of garbage accounts

Xero can’t classify Xero

Issues with Xero

  • No easy way to fix systemic errors
  • Transactions can be “deleted”, “unreconciled”, and “removed”
    • What’s the difference?
  • High lock-in
    • Difficult to take your data elsewhere

The plaintext way

Demo

Full Disclosure

  • I’m not an expert at accounting or plaintext accounting
  • Based on a few months of experiments

Benefits of plaintext accounting

  • Low abstraction means it’s easy to reason about
  • Can fix most systemic errors with find/replace
  • Easy to write helper scripts

Benefits of plaintext accounting

  • Everything under source control
  • Possible to migrate between tools

Drawbacks of plaintext accounting

  • Cooperation among users is surprisingly bad
    • Everyone seems to be duplicating effort in converting the same file formats over and over

Drawbacks of plaintext accounting

  • You’re making your books unusual
    • “Nobody ever got fired for choosing QuickBooks.”

Drawbacks of plaintext accounting

Double Entry Accounting with Graph Theory

Beancount

  • My favorite
  • Python-based

Beancount

  • Pros
    • Nice web interface
    • Fairly mature
    • Focused on financial accounting
    • Easy to install

Beancount

  • Cons
    • Steep learning curve
      • File format is strict
      • Lots of work to get imports working
    • v2 (stable) to v3 (incomplete) transition adds confusion
    • Most reports are web-only

Ledger

  • The OG of plaintext accounting
  • Written in C++

Ledger

  • Pros
    • Most mature and popular tool
    • Nice, flexible plaintext reports

Ledger

  • Cons
    • I had trouble installing a recent version / installing from source
    • Transaction importing tools were hard to use

hledger

  • Written in Haskell

hledger

hledger

  • Cons
    • Importer is not powerful or intuitive enough for me

Useful resources

Questions?