The Bare Minimum Budget: Tracking 'Survival Mode' vs 'Thriving Mode' Expenses in Beancount

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

  1. 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?
  2. 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?
  3. 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?
  4. 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

This is fantastic, Fred! I’m going to share this approach with my small business clients immediately.

I use a very similar tiered system for businesses with seasonal revenue (think lawn care companies that earn 80% of annual revenue April-October, or tax preparers who earn 60% January-April).

Business Application: Three Tiers

For my clients, I frame it as:

Tier 1 - Absolute Must-Pays (Survival)

  • Rent/mortgage on business location
  • Essential utilities (can’t operate without power/internet)
  • Payroll (at minimum staffing levels)
  • Insurance premiums (liability, workers comp—legally required)
  • Minimum debt service

Tier 2 - Important but Deferrable (Sustainable)

  • Marketing spend (can pause for a month if needed)
  • Equipment maintenance (can delay non-critical repairs)
  • Professional development
  • Software subscriptions (most can survive 30 days without)

Tier 3 - Growth Investments (Thriving)

  • New hires
  • Expansion projects
  • Major equipment upgrades
  • R&D / new product development

Beancount Implementation for Clients

I use the same metadata approach you described:

2026-03-01 * "Office rent" 
  @priority:tier1 @category:fixed
  Expenses:Occupancy:Rent          $2,500.00
  Assets:Checking

2026-03-05 * "Google Ads" 
  @priority:tier2 @category:marketing
  Expenses:Marketing:Online         $450.00
  Liabilities:AmEx

The @priority:tier1/2/3 tag tells us spending priority, and I add a second tag for category tracking.

One Addition: Tracking “Tier Violations”

Here’s something I’ve learned the hard way with clients: track when you violate your tiers.

If it’s a Tier 1 income month (barely covering essentials) but the owner spends on Tier 3 (buying new equipment), I tag it:

2026-02-15 * "New laptop" 
  @priority:tier3 @violation:tier1-month
  Assets:Equipment                 $1,800.00
  Assets:Checking

This creates accountability. At year-end review, we can see: “You had 4 Tier 1 months, but spent Tier 3 money in 3 of them—that’s why cash was so tight.”

The data doesn’t lie, and neither does Beancount.

Your Questions

How do you determine which expenses are truly essential (Tier 1) vs comfortable (Tier 2)?

I use the “30-day test”: If you stopped paying this for 30 days, would the business cease to function or face legal/safety consequences?

  • Stop paying rent for 30 days → eviction notice → Tier 1
  • Stop marketing for 30 days → revenue might dip but business survives → Tier 2
  • Stop buying new equipment for 30 days → no immediate impact → Tier 3

How do you handle expenses that cross tiers?

I split them when the amounts justify it. Your organic produce example: if you’re buying $400/month groceries and $100 is “organic premium,” I’d split:

2026-03-20 * "Whole Foods"
  @priority:tier1
  Expenses:Food:Groceries:Basic    $300.00
  @priority:tier2  
  Expenses:Food:Groceries:Organic  $100.00
  Liabilities:CreditCard

Takes an extra 10 seconds, but the clarity is worth it.

What about infrequent essential expenses?

I amortize them monthly:

; Set aside 1/12 of annual car insurance monthly
2026-03-01 * "Car insurance reserve"
  @priority:tier1
  Assets:Reserves:Insurance        $100.00
  Assets:Checking

; When annual bill arrives
2026-06-15 * "State Farm annual premium"
  @priority:tier1
  Expenses:Insurance:Auto         $1,200.00
  Assets:Reserves:Insurance      -$1,200.00  ; Draws from reserve

This smooths out the cash flow and keeps Tier 1 consistent month-to-month.

Great post! This is going into my client resource library.

— Bob

Oh my gosh, this resonates so deeply! I just started freelancing 3 months ago and my income has been all over the place:

  • January: $4,200
  • February: $2,100 (only 1 client paid)
  • March (so far): $5,800

I’ve been using a spreadsheet to track expenses, but it’s basically just “record everything and hope for the best.” This tier system makes SO much sense.

Questions from a Beginner

1. How do you handle expenses that blur the lines?

For example, my phone bill. I use my phone for:

  • Client calls (definitely business/essential)
  • Personal calls to family
  • Doom-scrolling Reddit at 2am (definitely not essential)

Is this Tier 1 because I literally need it for work? Or Tier 2 because I could downgrade from the $85/month unlimited plan to a $40/month limited plan?

2. Can you automate tier assignment in Beancount?

Or is it all manual metadata tagging? I’m a developer, so I’m thinking about whether I could write something like:

# Automatically tag recurring bills as Tier 1?
if transaction.payee == "Rent" or transaction.payee == "Insurance":
    transaction.add_metadata("budget-tier", "1")

But I’m not sure if that defeats the purpose of consciously choosing tiers.

3. How often do you recalculate which tier you’re in?

Do you:

  • Set tier at beginning of month based on projected income?
  • Adjust mid-month if a client doesn’t pay?
  • Only calculate tier at end of month when reviewing?

I’m worried about constantly second-guessing myself: “Wait, I spent $50 on coffee this week thinking I was in Tier 2, but now a client delayed payment so I’m actually Tier 1…”

4. Sample Beancount file?

Would you be willing to share a sanitized snippet of your actual Beancount file showing how you structure this? I learn way better from real examples than from abstract descriptions.

I’m SO close to abandoning my spreadsheet and committing to Beancount, and this tier budgeting approach might be the thing that pushes me over the edge. The idea of having a flexible budget that matches reality instead of feeling like I’m failing every month is really appealing.

Thanks for sharing this!

— Sarah

Fred, I absolutely love this approach. This is exactly the kind of practical wisdom that makes Beancount so powerful for real-world financial management.

My Similar Journey

I went through almost the identical evolution you described. When I first started with Beancount 4+ years ago, I tried to create this elaborate, rigid budget system. I had goals like:

  • Dining out: $300/month (no more, no less)
  • Entertainment: $200/month
  • Savings: $1,000/month

And every month I’d “fail” because reality didn’t cooperate. Some months my car needed repairs. Other months I traveled for work and expenses were higher. The budget became a source of stress instead of clarity.

Then I discovered what you’ve articulated beautifully: I needed flexibility built into the system, not rigidity.

My Implementation: “Floor, Normal, Ceiling”

I use the same concept but call it slightly differently:

  • Floor = Can’t go below this (your Tier 1)
  • Normal = Sustainable baseline (your Tier 2)
  • Ceiling = Full life when income allows (your Tier 3)

The metadata is similar:

2026-03-10 * "Groceries - basics"
  @spending-level:floor
  Expenses:Food:Groceries          $85.00
  Assets:Checking

Technical Tip: Fava Custom Queries for Dashboard

Sarah asked about automation—here’s something I built that helps a lot. In Fava, I created custom queries to show my tier status:

-- Query: Current Month Tier Status
SELECT 
  sum(position) as "Tier 1 Spending",
  sum(if(metadata('budget-tier') = '2', position, 0)) as "Tier 2 Spending",
  sum(if(metadata('budget-tier') = '3', position, 0)) as "Tier 3 Spending"
WHERE 
  account ~ '^Expenses'
  AND year = 2026
  AND month = 3

Then I have another query showing income vs tier thresholds:

-- Query: Which Tier Am I In This Month?
SELECT 
  sum(position) as "March Income"
WHERE
  account ~ '^Income'
  AND year = 2026  
  AND month = 3

When March Income shows $5,200, I know I’m safely in Tier 2 ($3,250 threshold) and can spend up to Tier 3 ($4,200 threshold).

Addressing Sarah’s Questions

On tier assignment automation: I tried automating it and learned it’s better to tag manually. Here’s why:

The act of consciously choosing “This is Tier 1” or “This is Tier 3” keeps you honest. It’s like the difference between auto-categorizing transactions vs manually categorizing—the manual work builds awareness.

That said, I DO use Beancount plugins to:

  • Warn me if a known Tier 1 expense (like rent) isn’t tagged properly
  • Auto-suggest tiers based on historical patterns (but I still confirm manually)

On recalculating tier: I do it at beginning of month:

  1. Week before month ends: Project next month’s income based on confirmed clients/gigs
  2. First day of new month: Declare “This is a Tier X month”
  3. Mid-month: If major income change (client cancels, unexpected bonus), recalculate
  4. Month end: Review actual spending vs planned tier

On expenses that blur lines (phone bill): Bob’s answer about splitting is perfect, but here’s my take:

The “minimum viable version” goes in Tier 1. Could you survive with a $40/month phone plan instead of $85? Then $40 is Tier 1, and the extra $45 is Tier 2 “quality of life upgrade.”

The Philosophy That Matters Most

Here’s what I wish someone had told me when I started:

Budget flexibility isn’t a failure—it’s a feature when income is unpredictable.

You said this perfectly, Fred. Too many budgeting systems assume stable income. But the gig economy, freelancing, seasonal work, variable commission—these are the NEW normal for millions of people. Rigid budgets don’t work for irregular income.

The three-tier approach acknowledges reality: some months you’re in survival mode, some months you’re thriving, most months you’re somewhere in between. And that’s OKAY.

Beancount’s metadata system is perfect for this because it lets you track the tier alongside the transaction without reorganizing your entire chart of accounts.

To Sarah: Start Simple

Don’t try to build the perfect tier system on day 1. Here’s my advice:

  1. Start with just Tier 1: What are your absolute non-negotiables? Track those for 2 months.
  2. Add Tier 2: What makes life comfortable but isn’t emergency-level? Track for 2 more months.
  3. Add Tier 3: What does “thriving” look like? By now you’ll have 4 months of data and the patterns will be clear.

Start simple, build complexity gradually. That’s the path to Beancount success.

Great discussion, everyone!

— Mike

This is brilliant! I’m a CPA and I’m absolutely going to recommend this approach to my clients with irregular income. This solves so many budgeting challenges I see.

Adding a Tax Planning Perspective

As an accountant, I want to add one more dimension that complements your three-tier system beautifully:

Tier 0: Pay Yourself First (Emergency Fund)

Before any of your three tiers, I’d suggest adding Tier 0:

Tier 0 - Emergency Fund Contribution

Even in your lowest income months (when you’re operating in Tier 1 survival mode), try to contribute SOMETHING to emergency fund:

2026-03-01 * "Emergency fund - even in low month"
  @priority:tier0
  Assets:Savings:Emergency         $50.00
  Assets:Checking

The amount might be tiny ($25, $50, $100 depending on the month), but the habit matters. Your emergency fund target should be 3-6 months of Tier 1 expenses, not your full budget.

In your case:

  • Tier 1 monthly: $2,850
  • Emergency fund target: $8,550 to $17,100 (3-6 months)

This is your true safety net—enough to survive 3-6 months even if income goes to zero.

Tax Planning Application

Here’s where the tier system becomes powerful for tax planning:

Business Expense Timing

If you’re self-employed, some expenses can be timed for tax optimization:

  • Tier 1 business expenses: Non-negotiable, happen when they happen (rent, insurance, critical equipment)
  • Tier 2 business expenses: Some flexibility (professional development, marketing)
  • Tier 3 business expenses: Fully discretionary timing (new equipment, expansion)

In a high-income year, you might accelerate Tier 3 expenses to December to reduce taxable income. In a low-income year, you might defer Tier 3 expenses to January to preserve cash.

Example in Beancount:

2026-12-28 * "New laptop - accelerating to 2026 for tax deduction"
  @priority:tier3 @tax-strategy:accelerated
  Expenses:Equipment:Computer      $2,000.00
  Assets:Checking

This gives you data to analyze: “In 2025, I accelerated $8,000 of Tier 3 business expenses to December for tax savings.”

Metadata Suggestion: Essential Flag

In addition to tiers, I’d recommend tagging expenses as @essential:true or @essential:false:

2026-03-01 * "Health insurance premium"
  @priority:tier1 @essential:true
  Expenses:Insurance:Health        $300.00
  Assets:Checking

2026-03-15 * "Dining out"
  @priority:tier2 @essential:false
  Expenses:Food:Restaurant          $45.00
  Liabilities:CreditCard

Why both tags?

  • Tier tells you “at what income level can I afford this?”
  • Essential tells you “do I HAVE to pay this, or is it optional?”

Sometimes they align (Tier 1 = essential), but not always:

  • Annual property tax: Essential (must pay) but might be Tier 3 amount (only affordable in high-income month)
  • Spotify subscription: Non-essential but Tier 1 (cheap enough to keep even in survival mode)

Answering Your Question: Infrequent Essential Expenses

You asked about annual car insurance ($1,200 Tier 1 expense) not fitting monthly budget. Bob’s reserve approach is perfect, and here’s how I’d frame it for tax purposes:

Option 1: Monthly Accrual (Bob’s approach)

; Monthly accrual
2026-01-01 * "Car insurance reserve (1/12 of annual)"
  @priority:tier1 @essential:true
  Expenses:Insurance:Auto:Accrued   $100.00
  Assets:Reserves:Insurance        -$100.00

; Repeat monthly...

; When annual bill arrives
2026-06-15 * "State Farm - annual premium"
  @priority:tier1 @essential:true  
  Assets:Reserves:Insurance         $1,200.00
  Assets:Checking                  -$1,200.00

This keeps Tier 1 consistent at $2,950/month instead of $2,850 + occasional $1,200 spike.

Option 2: Sinking Fund with Future Transaction

; Create sinking fund account
2026-01-01 open Assets:Savings:Insurance-Fund

; Monthly contribution
2026-01-01 * "Car insurance fund"
  @priority:tier1
  Assets:Savings:Insurance-Fund     $100.00
  Assets:Checking

; When bill arrives, pay from fund
2026-06-15 * "Annual car insurance"
  @priority:tier1
  Expenses:Insurance:Auto          $1,200.00
  Assets:Savings:Insurance-Fund   -$1,200.00

Both accomplish the same thing: smoothing lumpy essential expenses across months.

Practical Implementation for Clients

I’m going to create a “Tier Budget Template” for my irregular-income clients:

  1. Tier 0: Emergency fund contribution (even $25 in low months)
  2. Tier 1: True survival expenses (~30-40% of ideal income)
  3. Tier 2: Comfortable living (~20-30% more than Tier 1)
  4. Tier 3: Full life (~30-40% more than Tier 2)

The percentages are rough guidelines, but your breakdown is pretty close:

  • Tier 1: $2,850 (baseline)
  • Tier 2: $3,250 (14% above Tier 1)
  • Tier 3: $4,200 (29% above Tier 2)

One Warning: Irregular Income ≠ Unpredictable Tax

Even if your income is irregular month-to-month, you still owe quarterly estimated taxes if you’re self-employed. Make sure your Tier 1 includes:

2026-04-15 * "Q1 estimated tax payment"
  @priority:tier1 @essential:true
  Expenses:Tax:Federal:Estimated    $800.00
  Expenses:Tax:State:Estimated      $200.00  
  Assets:Checking

Missing estimated tax payments results in penalties, even if your annual income was lower than expected.

This is a fantastic framework, Fred. Thank you for sharing!

— Alice