The Bare Minimum Budget: Tracking “Survival Mode” vs “Thriving Mode” Expenses in Beancount
Hey everyone,
I want to share something that completely transformed how I budget with irregular income, and I’m curious if others have found similar solutions using Beancount.
My Income Rollercoaster
I work in the gig economy—mix of Uber, DoorDash, and freelance writing. Some months I earn $6,000. Other months? $2,500. Traditional budgeting advice (“create a monthly budget and stick to it!”) just doesn’t work when your income swings 140% month to month.
For years, I tried:
- Fixed monthly budgets (failed when income dropped)
- Percentage-based budgets (still required guessing income)
- Envelope budgets (worked okay but still rigid)
Then I discovered something: I don’t need one budget. I need three.
The Three-Tier Budget System
I built a three-tier budget system in Beancount that matches spending to current reality:
Tier 1 - Bare Minimum (Survival Expenses)
This is “what I absolutely MUST spend to avoid crisis.” Total: $2,850/month
- Rent: $1,800
- Utilities: $150
- Groceries: $400
- Health insurance: $300
- Minimum debt payments: $200
If I earn less than $2,850 in a month, I’m in trouble. This is my floor.
Tier 2 - Sustainable (Quality of Life)
Adds comfort without excess. Total: $3,250/month
Everything from Tier 1, plus:
- Dining out: $200
- Hobbies: $100
- Clothing: $100
This is my baseline for comfortable living. Not thriving, but sustainable.
Tier 3 - Thriving (Full Budget)
When income is strong, I can live my full life. Total: $4,200/month
Everything from Tiers 1 & 2, plus:
- Travel fund: $300
- Entertainment: $150
- Savings goals: $500
This is where I want to be, but I’ve learned it’s okay if I’m not always here.
Implementing in Beancount
Here’s the beautiful part—Beancount makes this trackable with metadata:
2026-03-15 * "Kroger" "Groceries"
@budget-tier:1
Expenses:Food:Groceries $87.43
Liabilities:CreditCard:Chase
2026-03-16 * "Netflix" "Monthly subscription"
@budget-tier:2
Expenses:Entertainment:Streaming $15.99
Assets:Checking
2026-03-18 * "Travel fund contribution"
@budget-tier:3
Assets:Savings:Travel $150.00
Assets:Checking
Then I can query each tier:
SELECT sum(position)
WHERE account ~ '^Expenses' AND metadata('budget-tier') = '1'
AND year = 2026 AND month = 3
The Behavioral Shift
What changed for me:
Before: Felt guilty every time I couldn’t afford something. “Why can’t I stick to my budget?!”
After: I know exactly which tier I’m in based on this month’s income. Low income month? I operate in Tier 1 without guilt. High income month? I enjoy Tier 3 without worry.
The data:
- 2025: 4 months in Tier 1, 5 months in Tier 2, 3 months in Tier 3
- So far in 2026: 2 months Tier 2, 1 month Tier 3
Tracking this in Beancount lets me see patterns: “I’m usually Tier 2, occasionally dip to Tier 1, sometimes reach Tier 3.”
Questions for the Community
-
How do you determine which expenses are truly essential (Tier 1) vs just comfortable (Tier 2)?
- Example: Is my phone bill Tier 1 because I need it for gig work, or Tier 2 because I could downgrade to a cheaper plan?
-
How do you handle expenses that cross tiers?
- Groceries are Tier 1, but buying organic produce feels Tier 2. Do you split the transaction or categorize the whole thing?
-
What about infrequent essential expenses?
- Annual car insurance ($1,200) is definitely Tier 1, but it doesn’t fit “monthly bare minimum.” How do you account for this?
-
Anyone using similar approaches? I’d love to see how others solve irregular income budgeting in Beancount.
The key insight for me: Budget flexibility isn’t a failure—it’s a feature when income is unpredictable. Beancount’s metadata lets me track which tier I’m in without rebuilding my entire chart of accounts.
What am I missing? What would you do differently?
— Fred