Five years into tracking every dollar of my financial life in Beancount, I made a $7,200 mistake with my quarterly tax payments. Not underpaying—overpaying.
In my first year of serious side income from my FIRE blog and consulting work, I was terrified of IRS penalties. So I did what felt safe: I estimated my total year income (optimistically), calculated the tax, and divided by four. When April came around, I got a massive refund. That’s money I’d loaned to the government interest-free while I was trying to optimize every basis point of my investment returns.
The irony wasn’t lost on me.
That experience sent me down a deep research spiral into estimated tax payments, and I want to share what I’ve learned. Because for anyone with side income, freelance work, or investment income beyond W-2 wages, getting this right is the difference between financial stress and financial peace.
The Safe Harbor Framework: Your Shield Against Penalties
The IRS gives us three paths to avoid underpayment penalties:
- Owe less than $1,000 after subtracting withholding and credits
- Pay 90% of current year’s tax liability through estimates and withholding
- Pay 100% of prior year’s tax liability (or 110% if your AGI exceeded $150,000)
Here’s the game-changing insight I wish I’d understood earlier: safe harbor protects you from penalties, NOT from owing taxes. You might still have a balance due in April, but you won’t pay the underpayment penalty on top of it.
For most people with variable income, the prior-year method is the clear winner. Why?
- Predictable: You know exactly what you owe based on last year’s return
- Simple: Total tax from line 24 of Form 1040 ÷ 4 = quarterly payment
- Stress-free: No need to project current-year income (nearly impossible for variable income)
- Legally bulletproof: Even if you earn 3x more this year, you’re protected from penalties
The High-Income Trap: When 100% Becomes 110%
Here’s where it gets tricky: if your prior year AGI exceeded $150,000 ($75,000 if married filing separately), you must pay 110% of prior year tax to qualify for safe harbor.
Example: Your 2025 AGI was $160,000 with total tax of $38,000. For 2026 safe harbor, you need to pay $41,800 (110% × $38,000) = $10,450 per quarter.
The psychological trap? Your income might drop in 2026, but you’re still making larger estimated payments based on your higher 2025 earnings. It feels wrong, but it’s the law.
My Beancount System for Tracking Quarterly Taxes
I’ve evolved a system that gives me complete visibility:
Account structure:
Assets:Checking:Main
Assets:Checking:TaxReserve
Expenses:Taxes:Federal:Estimated
Expenses:Taxes:State:Estimated
When side income hits:
2026-03-15 * "Blog consulting payment"
Assets:Checking:Main 5000.00 USD
Income:Consulting -5000.00 USD
2026-03-15 * "Transfer to tax reserve (30%)"
Assets:Checking:TaxReserve 1500.00 USD
Assets:Checking:Main -1500.00 USD
Quarterly payment:
2026-04-15 * "Q1 2026 Federal Estimated Tax Payment - Confirmation #123456789"
Assets:Checking:TaxReserve -8500.00 USD
Expenses:Taxes:Federal:Estimated 8500.00 USD
The magic is in that immediate 30% transfer. The money is “already gone” psychologically before I’m tempted to invest it or spend it.
Query to check if I’m on track:
SELECT account, sum(position)
WHERE account ~ 'TaxReserve'
OR account ~ 'Expenses:Taxes:.*:Estimated'
This shows both how much I’ve set aside and how much I’ve paid. In Fava, I have this as a saved query I check monthly.
The Fluctuating Income Challenge
What if your income varies wildly quarter to quarter—seasonal business, large project payments, year-end bonuses, or crypto gains?
The IRS offers the annualized income installment method (Form 2210, Schedule AI). This lets you calculate tax based on when income was actually earned rather than assuming equal quarterly amounts.
Example: If you earn 10% of annual income in Q1, 15% in Q2, 20% in Q3, and 55% in Q4 (maybe you’re a tax preparer with seasonal rush), you can make proportional estimated payments.
The downside? Significantly more complexity. You need to:
- Track income by quarter meticulously
- Calculate tax liability for each period
- File Form 2210 with your return to justify uneven payments
- Get it wrong and you’re back to penalties
For most people, the simplicity and certainty of prior-year safe harbor beats the marginal benefit of optimizing cash flow with annualized income.
Practical Tips from 5 Years of Data
Automate the reserve funding, not just the payment. I have a Python script that parses my Beancount file weekly and calculates my tax reserve target (30% of all income minus salary). If I’m short, I get an alert to transfer money.
Calendar reminders one week early. The 2026 quarterly deadlines are April 15, June 16 (moved from Sunday June 15), September 15, and January 15, 2027. I set reminders for April 8, June 9, September 8, and January 8. The buffer has saved me multiple times.
Save confirmation numbers in transaction notes. I pay through IRS Direct Pay and immediately record the confirmation number in the Beancount transaction. During an IRS inquiry about a 2023 payment, this saved me hours of scrambling for proof.
Don’t play catch-up in Q4. If you realize in December you’ve underpaid, making an oversized Q4 payment doesn’t erase Q1-Q3 shortfalls. The underpayment penalty is calculated per quarter. Just pay what you owe and accept the small penalty.
Track state separately. Most states have their own estimated tax requirements. I maintain separate reserves and queries for federal vs. state (California in my case, which has its own rules).
The 2026 Math: Penalty vs. Opportunity Cost
The underpayment penalty in 2026 is around 7% annually (federal short-term rate + 3 percentage points, adjusted quarterly). With rates higher than the 2010s, this is real money.
But compare to the opportunity cost: if you keep tax reserves in a high-yield savings account earning 4.5%, the net cost of underpaying is ~2.5%. For a $2,000 shortfall over 6 months, that’s about $25 in real cost.
Meanwhile, overpaying by $10,000 for a full year costs you $450 in lost interest (at 4.5%).
The math matters, but so does peace of mind. I lean toward slight overpayment because the stress of an unexpected tax bill outweighs $200-300 in optimization gains.
The FIRE Angle: Taxes in Early Retirement
For those pursuing FIRE, estimated taxes become even more important post-retirement. With no W-2 withholding, you’re 100% responsible for estimates on:
- Roth conversion income
- Capital gains from rebalancing
- Dividend and interest income
- Part-time consulting or side business
I’ve built a spreadsheet that projects these income sources and calculates quarterly estimates. It syncs with my Beancount data via a Python script that exports account balances and year-to-date income.
Your Turn: How Do You Handle This?
I’d love to hear from this community:
- Do you use prior-year safe harbor, or estimate current-year liability? What drove your choice?
- Has anyone implemented the annualized income method? Is it worth the complexity?
- How do you track quarterly payments in Beancount? Any clever account structures or automation?
- Any painful stories about penalties—or overpayment regrets like mine?
The IRS makes this harder than it needs to be, but with Beancount, at least we can bring order and visibility to the process. Let’s help each other get this right.