How do you keep your journal structure scalable over time?

I've been running hledger for a few years and settled on an approach that might be useful, especially for those coming from a spreadsheet-heavy background.

I keep a single main.journal for all transactions (may split by bank account in the future). The only files I split out are:

  • prices.journal — commodity prices

  • budget.journal — periodic budget declarations

I find year-splitting more trouble than it's worth — the opening/closing balance dance never feels clean to me.

For account names, I use hledger's --strict mode, but enforce names at the data entry layer with Excel data validation. All valid account names live in a dedicated sheet, and every entry cell validates against that list. It works like autocomplete with a hard constraint — you can't enter a typo or an ad-hoc sub-account without first adding it to the list deliberately. New accounts become an intentional act, not an accident.

The account hierarchy matters more than the account count. A deep hierarchy (expenses:food:dining:work-lunch) gives you flexibility to query at any level, but you pay for it at entry time. I keep it to 3 levels unless there's a real reporting reason for a 4th.
I maintain hledger-Excel, a VBA-based pipeline that handles this data validation setup if anyone wants to see it in practice.