Three years ago, I left my corporate consulting gig where I got a predictable biweekly paycheck. Same amount, same day, every two weeks. Now? I’m living in what I call “variable income chaos.”
Some months I invoice $15K. Other months it’s $4K. Sometimes clients pay within a week. Sometimes I’m chasing invoices 60+ days past due. I’ve had quarters where February is feast and April is famine, and other years where the pattern flips entirely.
Traditional budgeting advice—“spend less than you earn”—becomes almost meaningless when you have no idea what you’ll earn this month, or when that invoice from last month will actually hit your account.
The Three Challenges I Face
1. Irregular Payment Timing: I can deliver a project today and get paid tomorrow, or 75 days from now. There’s no pattern.
2. Varying Amounts: My projects range from $2K to $20K. Monthly income swings wildly.
3. Seasonal Patterns: Some quarters are consistently stronger, but not reliably so year-over-year.
My Beancount Workflow for Surviving This
After two years of trial and error, here’s what actually works:
Tracking Expected vs Actual Income
I use metadata to track invoice lifecycle:
2026-03-15 * "ABC Corp" "Website redesign project - INVOICE SENT"
invoice_number: "2026-015"
invoice_date: 2026-03-15
due_date: 2026-04-14
expected_amount: 8500.00 USD
Assets:Accounts:Receivable:ABCCorp 8500.00 USD
Income:Consulting:WebDesign
2026-04-22 * "ABC Corp" "Payment received - 8 days late"
invoice_number: "2026-015"
payment_date: 2026-04-22
Assets:Bank:Checking 8500.00 USD
Assets:Accounts:Receivable:ABCCorp -8500.00 USD
This lets me see what’s owed vs what’s landed at any moment.
Cash Flow Runway Calculation
I have a custom BQL query that answers: “How many months can I survive with current cash if ZERO new income arrives?”
SELECT
account,
sum(position)
WHERE
account ~ 'Assets:Bank' OR account ~ 'Assets:Savings'
Divide by my “baseline monthly expenses” (tracked separately) = runway in months.
Emergency Fund as a Separate Account
I keep 9-12 months of expenses in Assets:Savings:EmergencyFund and NEVER touch it unless income dries up completely. It’s psychologically separate from “operating cash.”
Seasonal Pattern Analysis
I tag every transaction with the quarter and run year-over-year comparisons:
2026-01-15 * "Client payment"
quarter: "Q1"
year: "2026"
...
Then I can query: “What did Q1 2024, Q1 2025, and Q1 2026 look like?” This helps me see if seasonal patterns are real or imagined.
Key Principles That Keep Me Sane
Budget Based on Lowest Month, Not Average: If my average is $8K/month but my worst month was $3K, I plan life around $3K. Everything above that goes to taxes, emergency fund, or profit distribution.
Separate Operating Cash from Profit: I maintain a minimum operating balance ($15K) in checking. Anything above that is “profit” and gets moved to savings or invested.
Balance Assertions Everywhere: Weekly balance checks catch errors fast. When income is chaotic, data integrity is critical.
What I’m Still Figuring Out
- How to model “worst case” scenarios (e.g., 3 major clients don’t pay for 60 days)?
- Whether I should track “expected income” as a liability offset or just in metadata
- Best way to visualize cash flow trends in Fava
How do others handle variable income in Beancount? Am I overcomplicating this, or are there better patterns I’m missing?
Looking forward to hearing how the community approaches this challenge!