Blog

I Built a Database of Every ZIP Code in America. Here’s What It’s Actually Good For (and Not).

5 minute read

Investment Assessment By Zip Code

My younger kiddo asked me the other day what I was working on, and I said “a spreadsheet of every ZIP code in the country.” She looked at me the way you’d look at someone who just told you their hobby is watching paint dry. Ah well, maybe I was cooler when I was younger…

So, about that “spreadsheet” — it’s really a SQLite database at this point. It has become the first thing I touch every time I’m wondering whether a market is worth a second look. And I think it’s worth walking through candidly: what it can tell you, what it can’t, and where I’ve had to stop myself from trusting a number more than it deserves.

The Question I Was Actually Trying to Answer

When we bought our rentals, market research meant me, a browser with forty tabs open, and a weekend I wasn’t getting back. Census data in one tab, rent comps in another, unemployment stats somewhere else, all on different geographies, different vintages, none of it talking to each other.

The real question I wanted answered wasn’t “what’s the population of this ZIP code.” It was: is this market actually getting better, or does it just look cheap right now? Those are very different questions, and answering the second one honestly requires the first one plus about five others, all at once, all comparable across ZIP codes.

So I built a database to do that comparison for me.

What’s Actually In There

The database pulls ZIP-code-level (and in more than a couple of cases, county-level) data from four sources:

  • Census — population and population growth
  • FRED (the St. Louis Fed’s economic database) — income and employment trends
  • HUD — rent and vacancy figures
  • Census Building Permits Survey — new housing supply in the pipeline

From those, I score every ZIP code on six metrics: population growth, employment trends, median income, rent growth, vacancy rate, and supply pipeline (how much new housing is being permitted nearby — more supply coming online is downward pressure on the rents you can charge). Each metric gets normalized and combined into a single market score, and the whole country lights up on a heatmap I can scan in about ten seconds.

That last part matters more than it sounds like it should. Ten seconds to go from “no idea” to “okay, that cluster of ZIP codes near the interstate is worth a closer look” is the entire point. It’s a screening tool, not a verdict.

Where This Genuinely Earns Its Keep

It replaces the forty-tabs problem. Comparable, same-vintage data across every metric, for every ZIP code, queryable in one place. I can’t overstate how much friction that removes. The forty-tabs version of me would spend a Saturday evaluating three markets. The database version can screen a few hundred in the time it takes to make coffee.

It’s honest about relative strength. A single ZIP code’s rent-growth number in isolation doesn’t tell you much — is 3% good? Depends entirely on what everywhere else is doing. Scoring every ZIP code on the same scale, at the same time, turns an ambiguous number into a comparison. This is what you actually need to make a decision.

It catches things I’d never think to check manually. The permits pipeline is the one that surprised me most. I wouldn’t have thought to go pull county-level building-permit filings for a market I was casually curious about. The database does it as a matter of course. And, it’s flagged more than one market that looked great on income and rent growth but had a wave of new supply about to hit — the kind of thing that quietly erodes your rents two years after you buy.

Where I Have to Talk Myself Out of Trusting the Scraped Data Too Much

This is the part I think matters more than the highlight reel, so let’s actually sit in it.

ZIP codes are a terrible unit of geography, and I use them anyway. ZIP codes were built by the Postal Service to deliver mail efficiently, not to describe economically coherent neighborhoods. A single ZIP code can span a genuinely rough pocket and a gentrifying strip three streets over. However, the aggregate score smooths right over that seam. I treat every score as “this ZIP code, on average” — never as a guarantee about the specific block a property sits on.

Lag is baked in, and it’s not the same lag for every metric. Census population figures update on a different clock than HUD rent data, which updates on a different clock than FRED’s employment series. A market can already be turning — for better or worse — for months before that shows up in the score. I’ve started thinking of the database less as “current conditions” and more as “conditions as of somewhere between three and eighteen months ago, metric depending.” That’s a real caveat, not a throwaway one. It’s why I like looking at the outputs from the with a healthy dose of skepticism.

A high score answers “is this market improving,” not “will this specific property cash-flow.” I have to remind myself of this constantly, because it’s tempting to let a good market score do more work than it earned. Six macro metrics tell you nothing about a specific listing’s condition, its actual achievable rent, its property taxes, or whether the roof needs replacing next year. The database gets you to the short list. It does not get you to a purchase decision.

Correlation across metrics can fake out the composite score. Rent growth and income growth tend to move together, because they’re both downstream of the same local economic story. When they do, they can reinforce each other in the composite score in a way that looks like more independent confirmation than it actually is. I haven’t fully solved this — right now I mostly just eyeball whether a market’s high score is coming from one or two metrics doing all the work versus a genuinely broad-based improvement, and I trust the latter more. This is something I want to dig into in the future as I get more comfortable with the data and its interpretation.

How I Actually Read a Query Coming Out of It

A few rules I’ve settled into, for anyone building something similar or just trying to sanity-check a number I hand them on this blog later:

  • A single metric is a data point, not a conclusion. I don’t act on rent growth or population growth alone. I want at least two or three metrics agreeing before I take a market seriously.
  • The score tells you where to look, not where to buy. Every market that clears the screen still gets the forty-tabs treatment — just for three markets instead of three hundred.
  • Recency matters …possibly more than the score itself. I check when each underlying data point was last refreshed before I trust a comparison between two close scores.
  • A weird outlier is usually a data problem, not a hidden gem. I’m learning that if a ZIP code’s score looks dramatically better than its neighbors for no obvious reason, my first move is to check the source data, not to get excited.

A Database Is Not A Substitute For Thought

The database didn’t replace my judgment — it changed what my judgment gets to spend its time on. Instead of burning a weekend figuring out whether a market is even worth investigating, I get to spend that time on the part that actually needs a human: walking a property, checking comps by hand, deciding whether I believe the story the numbers are telling.

My daughter’s spreadsheet-watching-paint-dry assessment wasn’t wrong, exactly. It’s just that watching the right paint dry, across every ZIP code in the country at once, turns out to save me a lot of Saturdays.

A reminder that we’re not licensed financial or investment professionals — just sharing what we’ve learned and how we think about it. Talk to a qualified advisor before making decisions with real money on the line.

My Scoring Tool Almost Missed That a “Good” Market Was Actually a Coin Flip

4 minute read

Cash Flow Risk

I built a market assessment engine specifically so I wouldn’t have to eyeball spreadsheets and talk myself into deals. So it’s a little embarrassing that, until today, the tool’s price-to-rent grading didn’t actually predict the thing I care about: whether a property cash flows.

Here’s what I mean, using ZIP 07083 — Union, NJ — as the test case, because it happened to be sitting at the top of my recent searches when I made the fix.

The Question

Union scores a 70/100 on my six-metric engine. That’s a B — “good market,” strong buy signal, the whole banner. Tight vacancy (4.1%), healthy unemployment (4.2%), solid income ($114,938 median). On paper, exactly the kind of place I’d tell you to dig deeper on.

But the price-to-rent ratio is 17.9x. And that number was graded an A. Which raises the obvious question: how does a market get an A on four metrics, and an A on a key measure of investment feasibility but would have shaky cash flow. On the surface this was still coming out looking “strong buy”, but represented a much riskier investment profile than the report card illustrated. That mismatch is what sent me back into assessment_engine.py this morning.

What Actually Changed

The underlying price-to-rent calculation didn’t change — it’s still home price divided by annual rent, same Census ACS and HUD FMR inputs as before. What changed is how I score the result, and I tied it directly to something every buy-and-hold investor already uses as a gut check: the 1% rule.

New tiers:

GradePrice-to-rentScoreMonthly rent ÷ price
A≤ 8.3x20 (100%)≥ 1.0% — meets the 1% rule
B≤ 10.5x16 (80%)≥ 0.8%
C≤ 14.0x12 (60%)≥ 0.6%
D≤ 18.0x7 (35%)≥ 0.45%
F> 18.0x3 (15%)< 0.45%

Here’s the arithmetic behind that top row, since I don’t like handing you a table without showing my work: if monthly rent needs to be at least 1% of purchase price, then price divided by monthly rent has to be 100 or less, which means price divided by annual rent — the ratio my tool actually reports — has to be 100 ÷ 12, or about 8.3x. That’s where the A cutoff comes from. Same logic scales down the table: the D/F line at 18.0x works out to roughly a 0.463% monthly rent-to-price ratio, which is why I rounded it to “≥ 0.45%” in the label.

Now go back to Union NJ. 17.9x. Run that through the same formula — 1 ÷ (17.9 × 12) — and you get 0.466% monthly, call it 5.6% annual. That’s a hair over the 0.45% floor, which is exactly why its A rating raised a warning flag for me. Under the old scoring, a market like this could still post a decent-looking composite score because price-to-rent was just one input among six, weighted the same regardless of how far it missed the mark. Now, missing the 1% rule this badly costs you real points, and it shows.

Why I Also Fixed Population Growth

While I was in there, I made a second change that’s less dramatic but matters more over a hold period: population growth used to be a single year-over-year comparison. One good or bad Census estimate could swing the grade, and ACS 5-year figures already carry enough sampling noise that a one-year snapshot is a shaky thing to underwrite a decade-long hold on.

It’s now a rolling 3-year CAGR instead. Union’s current read is +1.04% annually — in line with the national average — but the number is doing a steadier job now: it’s smoothing across three years of estimates instead of betting the grade on whichever single year happened to land in the data pull. A market that had one weird up-year won’t get an A it doesn’t deserve, and one bad year won’t tank a market that’s actually growing fine.

What This Means for a Market Like Union

Put the pieces together and 07083 tells a more honest story than the old headline did. Demand fundamentals are genuinely strong — tight vacancy, healthy employment, income that supports real rent growth. But you’re paying a lot for that demand, and there’s a heavy supply pipeline on top of it: 59.7 permits per 1,000 units, an F on my sixth metric. New construction at that pace tends to put a ceiling on rent growth right as you’d be counting on it to bail out a thin cash-flow deal.

None of that means don’t buy in Union. It means don’t buy in Union assuming day-one cash flow. Any deal here needs more scrutiny around cash flow. And it also warrants an honest appreciation thesis, or unusually favorable financing, to make the math work — the score is telling you to underwrite it as an appreciation play, not a yield play, and to be skeptical of pro formas that lean on rent growth outpacing a market that’s about to see a wave of new supply.

Where This Could Still Be Wrong

A couple of honest caveats. The 1% rule is a rough screening heuristic, not gospel — plenty of good long-term holds never clear it, especially in high-appreciation coastal and near-coastal metros, and Union sits inside the New York-Newark-Jersey City metro, which is exactly the kind of market where that rule of thumb has always struggled. I’m using it as a scoring anchor because it’s a well-understood shorthand, not because I think 1% is some magic cash-flow line. As always, investors need to do their own homework before making offers and signing on to a deal with less than solid fundamentals.

And the population and price-to-rent inputs are both still running off 2022 ACS data — that’s the most recent 5-year release available, but it means the “3-year CAGR” is really the most recent 3 years the Census has published, not the most recent 3 calendar years. If you’re underwriting a specific deal here, that lag is worth remembering.

Wrap Up

The whole point of building this tool was to stop me from fudging a deal I wanted to like. Today’s fix is a small, unglamorous change — a table of grade cutoffs, a rolling average instead of a single-year snapshot — but it’s exactly the kind of thing that keeps a scoring engine honest. A market can still be worth buying into at a lower price-to-rent. It just shouldn’t be able to hide so easily.

A reminder that we’re not licensed financial or investment professionals — just sharing what we’ve learned building and using this tool. Talk to a qualified advisor before putting real money into a deal.


Read time: ~6 minutes

Building the Thing I Wish I’d Had Before I Bought My First Rental

5 minute read

It’s 11:40pm. Do you know where your polygons are?

It’s 11:40pm on a Friday and I’m staring at a ZIP code boundary that won’t render correctly on a map for the 20th time. The polygon is trying to wrap itself around the entire Eastern seaboard because somewhere in a coordinate system I don’t fully understand, a projection did something a projection should not do. My wife went to bed an hour ago. I am debugging a map.

This is, apparently, how I relax now.

I own two rental properties. I underwrote both of them the old-fashioned way: a spreadsheet, a lot of Zillow tabs, some gut feel, and a healthy dose of “well, it seemed fine.” It worked out. But “it worked out” is not a strategy, and I’ve always wanted something more rigorous — something that forces me to ask the boring, unglamorous questions before I fall in love with a listing photo of a nice kitchen.

So I’m building one. It’s called, very unpoetically, the REW platform (real estate underwriting — I never claimed to be a marketer). And I want to talk about it now, while it’s unfinished, rather than waiting until it’s polished enough to be impressive. Partly because I think the process is more interesting than the finished product. Mostly because I suspect I’m going to get a bunch of this wrong, and I’d rather be honest about that from the start than pretend I built a flawless machine on the first pass.

The Actual Problem I’m Trying to Solve

Here’s the question that matters: out of every possible place I could buy a rental property, how do I quickly rule out the bad ones and spend my real time and energy only on the good ones?

Most people do this backwards. They fall for a specific house, then start justifying the numbers to themselves. I’ve done this. It’s a great way to talk yourself into a mediocre deal because you already mentally moved in.

So I’m trying to build a pipeline that works in the opposite order: start broad, get skeptical fast, and only let a deal survive if it earns its way through several rounds of me actively trying to kill it.

Right now, that pipeline has three stages.

Stage One: Is This ZIP Code Even Worth Looking At?

Before I care about any specific house, I want to know something more fundamental: is this area one where owning a rental makes sense at all?

I built a scoring engine that pulls data from a handful of sources — Census, HUD, FRED — and boils a ZIP code down to six metrics I actually care about as a landlord:

  • Population growth (are people moving here, or leaving?)
  • Unemployment (is the local job base healthy?)
  • Price-to-rent ratio (are prices in line with what rent can support, or wildly detached from it?)
  • Median income (can the local population actually afford the rents I’d need to charge?)
  • Vacancy rate (is there a glut of empty units I’d be competing against?)
  • Supply pipeline (how much new housing is already under construction or permitted nearby?)

That last one took me the longest to get right, mostly because “how much is being built near here” turns out to be a genuinely annoying question to answer with public data. I ended up pulling county-level building permit data from the Census Bureau and matching it up as best I can to individual ZIP codes. It’s not perfect. I know it’s not perfect. But it’s a meaningfully better signal than “I have a feeling about this neighborhood,” which was more or less my prior methodology.

The output of stage one is just a score and a rough read on the market. It’s not a green light to buy anything. It’s closer to deciding whether a neighborhood deserves five more minutes of my attention.

Stage Two: Now Let’s Try to Kill It

This is my favorite part, mostly because it’s the part I was worst at doing manually.

Once a ZIP code clears the first screen, I don’t move straight to a full underwriting model. Instead, I run a quick, deliberately unforgiving pass on the specific property: rough rent estimate, rough expenses, rough financing assumptions, and a gut-check cash flow number. Nothing fancy. The whole point of this stage is speed and skepticism, not precision.

I’m explicitly trying to find a reason to say no. If a property can’t survive a lazy, surface-level version of the math, it has no business surviving the detailed version. This saves me from the trap I fell into with my own properties: spending three hours building a beautiful, detailed model for a deal that a five-minute sanity check would have thrown out immediately.

Think of it as triage. A property that fails here doesn’t get a eulogy. It just doesn’t move to the next room.

Stage Three: Full Underwriting, For the Survivors Only

Only the properties that make it through both filters get the full treatment: a detailed cash flow model, sensitivity around rent and expense assumptions, and eventually — this part isn’t built yet — Monte Carlo simulation across a range of market conditions, so I can see not just “what’s the expected return” but “how bad could this realistically get, and how bad could it get in an unlucky sequence of years.” Longtime readers know I have a soft spot for that kind of analysis; I wrote about the same idea applied to a stock/bond portfolio a while back, and I think the same logic applies just as well to a single rental property.

That full underwriting step is the expensive one, in terms of both my time and the computer’s. Which is exactly why I don’t want to run it on every listing I glance at. The first two stages exist entirely to protect the third one.

Where This Actually Stands Right Now

I want to be honest about the state of things, because I think “in progress” is a more useful thing to model publicly than “finished.”

The ZIP scoring engine works, mostly, though I’m still finding edge cases — ZIP codes that straddle county lines are a special kind of headache I did not anticipate when I started this. The quick-kill screen exists but needs more real-world deals run through it before I trust its instincts. And the full underwriting stage is still mostly aspirational; right now it’s a folder full of half-finished code and a Monte Carlo module I keep meaning to properly hook up.

I’m also in the middle of moving the whole thing off my laptop and onto a little Linux box that lives in my house, partly because I like understanding my own tools end to end, and partly because I’d rather not depend on someone else’s server for something I’m going to trust with real buying decisions. That’s its own rabbit hole, and probably its own post.

None of this is a product yet. It might never be, in the sense of something anyone else uses. But it’s already changing how I think about the two properties I own, and it’s forcing me to write down assumptions I used to just carry around in my head, which is worth something on its own.

Why Bother

I could just keep doing this in a spreadsheet. Plenty of successful investors do exactly that, forever, and do fine.

But I like building things, and I like being forced to be explicit about my reasoning instead of trusting a gut feeling I can’t fully explain even to myself. If I’m going to make real decisions with real money — and eventually, real decisions on behalf of anyone else who ever looks over my shoulder — I want a process I can actually defend, one metric at a time, rather than a vibe.

I’ll keep sharing this as it develops, including the parts that don’t work, the ZIP codes that break my map projections at midnight, and whatever the quick-kill screen gets embarrassingly wrong the first few times I trust it. That feels more honest than waiting until it’s shiny.

A reminder that we’re not licensed financial or investment professionals — just sharing what we’ve learned and how we think about it as we build it. Talk to a qualified advisor before making decisions with real money on the line.

How to Actually Pay Off Your Mortgage

3 minute read

The word mortgage comes from French. It comes from the combination of mort (meaning death) and gage (meaning pledge). It’s a bit sinister, but it literally translates as pledge until death. For a 30 year mortgage, that might not be far from the truth.

We have a small 2br/2ba condo that we’ve now rented for about 10 years. I can hardly believe it’s been that long. Being the slow and steady folks we are, we’ve just steadily made our payments against the note.

When interest rates were really low in the early 2020s, I made extra payments thinking that avoiding the interest over the full life of the loan was advantageous. Keep in mind this may not have been an optimal strategy. I was excited about the idea of owning a rental unit free and clear. We could have refinanced or kept the cash as capital for future acquisitions.

We’re now in the final slog. If we can continue to plow our retained earnings back against the note instead of taking them out as profit, we should have the property paid off by the end of this year.

It’s hard to articulate just how slow this last stage really is. When I started making aggressive payments, I could see the months remaining on the note ticking lower with each passing month. The progress was visible. But now, in the final months, we’re up against less friendly math.

To be fair, nearly all of our payments go towards principal. Therefore, there’s hardly any interest left to pay. But, the real prize is to not have a required monthly payment. Here’s what our journey looked like, and my best guess as to how we’ll finish up.

Why The Last Year Feels So Different

Early in a mortgage, most of your payment is interest. That’s not a conspiracy, it’s just math: the bank is charging you a percentage of whatever you still owe, and early on you still owe basically everything. As the balance shrinks, less of the payment is interest and more of it is principal, even though the total payment (if you’re not making extra payments) never changes.

I can’t share our actual loan numbers, but I can show you the shape of it with a hypothetical. Let’s say you took out a $100,000 mortgage at 4% for 30 years. Your fixed monthly payment, principal and interest only, works out to $477.42. Here’s what the last 12 payments of that loan look like:

Payment #PrincipalInterestRemaining Balance
349$458.73$18.69$5,148.04
350$460.26$17.16$4,687.78
351$461.79$15.63$4,225.99
352$463.33$14.09$3,762.66
353$464.87$12.54$3,297.79
354$466.42$10.99$2,831.37
355$467.98$9.44$2,363.39
356$469.54$7.88$1,893.85
357$471.10$6.31$1,422.75
358$472.67$4.74$950.08
359$474.25$3.17$475.83
360$475.83$1.59$0.00

Look at that interest column. By payment 349, you’re paying $18.69 in interest on a $477 payment. By the final payment, it’s $1.59. Compare that to payment one on this same loan, where $333.42 of the $477.42 would have been interest. That’s the whole story of why the early years feel like you’re barely moving the needle and the last year feels almost silly by comparison, you’re basically just handing yourself money at that point.

This is also why my extra-payment strategy from a few years back was a mixed bag. Every dollar of extra principal I threw at the loan when it still had a big balance was doing real work, knocking out a chunk of the interest that would have accrued on it for years. A dollar of extra principal now, this close to the end, saves us maybe a few cents of interest. The math hasn’t changed direction, it’s just running out of runway to matter. I also told myself that in a low interest rate environment, paying down debt was actually a superior option to cash in a savings account.

Not About the Interest Anymore

If the interest savings are basically rounding error at this point, why keep pushing? Because the number we actually care about isn’t the interest line, it’s the “required monthly payment” line, and that one hits zero regardless of how small the interest gets. Once that note is gone, every dollar of rent is ours to keep, invest, or do whatever we want with, no note, no bank, no monthly obligation hanging over the property.

That’s a different kind of win than the interest math measures. It’s the difference between “the loan is cheap to carry” and “there is no loan.”

Where This Leaves Us

Assuming we keep redirecting the rental income the way we have been, towards mortgage payoff, we’re on pace to send that final payment before the end of the year. I’ll admit I’m looking forward to it more than the spreadsheet says I should, given how little interest is actually left on the table. But there’s something to be said for owning a thing outright, even a small 2br/2ba condo that’s spent the last decade making other people’s lives a little easier while quietly paying for itself.

Mortgage, pledge until death. We’re about to prove the etymology wrong on this one.

A reminder that we’re not licensed financial or investment professionals, just sharing what we’ve learned and how we think about it. Talk to a qualified advisor before making decisions with real money on the line.

Are Millennials Really Behind?

2 minute read

I saw a great graph on vital capitalist the other day. It looks a bit like this.

Here’s a link to the original.

A main take-away offered by the creator is that Baby Boomers control a whopping 50% of the total wealth in the US while other generations lag far behind. And, it’s true. As a generation, Boomers are extremely wealthy at this point in their journey.

The other implication is that those much maligned Millennials are so busy staring at their iPhones and buying avocado toast that they’re missing opportunities to build real wealth. Look at how pitifully small their generational net worth line is compared to the Boomers.

But, are they really so far behind? It turns out that age matters quite a lot in the race to build wealth. The youngest Boomers are 60. The oldest are 78. If you are a Millennial born in 1981, you’re turning 43 this year. If you were born in 1996, you turn 28 this year. We shouldn’t compare the assets of a 65 year old to the assets of a 25 year old.

So what if we took the exact same data but started all the generations at the same time and looked to see how well they did accumulating net worth during their lifetimes. The plot would look something like this.

Remember, this is the same data, but it’s put onto the same axis such that each generation starts the race at the same time. Now, it doesn’t look like the Boomers are the clear winners of the race. Both the Gen X’ers and the Millennials have appear to have accumulated higher net worths by the same “generational age.”

I admit, the data set is incomplete. The Distribution of Financial Assets data set only goes back so far. So, we’re doing a bit of mental extrapolation during both the Baby Boomers and Silent Generations’ respective youth.

Another criticism could be that based on my (admittedly quick) read through of the DFA description, there is not an inflation adjustment applied to this dataset. 1986 dollars are not the same as 2024 dollars.

If you want to make an inference about how much or when Gen X or the Millennials will achieve a certain wealth level, it would require a lot of extrapolation using exponential growth. For now, I’ll leave that as an exercise for the reader. But, I like the idea of the footrace being less clear cut in favor of the Boomers.

Go Fast to Go Slow

2 minute read

“Life moves pretty fast. If you don’t stop and look around once in a while, you could miss it.”
-Ferris Bueller

I haven’t posted in a while.

I have a bunch of excuses:

  • Bought a house
  • Moved
  • Rented the old townhouse
  • Started a Master’s degree
  • Worked
  • Tried to be a good Dad/partner along the way

A few of my excuses might become blog posts in the future.

We’re finishing up a road trip to Florida, and I have actual time to write. (yes, we drove from Maryland…see why I like $5/gal gas). One daughter is sound asleep. The other recently learned how to braid and is braiding everything in sight. At least it’s a quiet activity….

I’m reflecting on our whirlwind trip. Ok, I was scrolling through Mint and seeing just how much our whirlwind trip cost us. Instead of sweating the dollars, I realized this is exactly why we have worked hard, saved, and invested for years! And that’s what prompted me to put quill to parchment again.

For the record, we rented a mini mansion with two other families and filled it with laughter and joyfully squealing kiddos, lazed away a couple of afternoons bobbing around the resort river, completely throttled two Orlando area theme parks, and visited with family.

If this were Instagram, that would be the only perfectly coiffed image you would get.

But we weren’t quite so polished when our over-tired two year old raced off, red shoes a blur, through the packed theme park restaurant dodging patrons better then Rogue 5. Our first warning that something was amiss came from a staff member yelling, “we got a runner!”

Nor was I ecstatic when my little ones both turned up their noses at the tepid, slightly sulphury Florida tap water I had filled their reusable bottles with. I gritted my teeth and shelled out $8(!) for two nicely chilled plastic bottles of filtered water. But I totally poured the purchased water into their reusable bottles first…

So much of the personal finance space is full of tactics for how to get a certain number of dollars in some accounts. And, we’re not going to neglect our financial journey either. But sometimes, we miss out on the real purpose behind all that working, saving, and investing.

Yes, we’re exhausted from the trip. Yes, our wallets are lighter. Yes, we had plenty of aggravating moments. But our hearts are full.

I Happily Filled My Tank With $5.49/Gallon Gas

5 minute read

I’m currently driving across a chunk of the United States with my family in our minivan. The van has a 20+ gallon tank. I put ~14 gallons into it. At $5.49/gal, I dropped just under $70 to fill it.

Ouch.

There has to be a better option than spending a day and a half stuck in a tin can. Then again maybe some perspective is in order.

We needed to be back home with family for about 10 days. We had about 3-4 weeks to plan our trip. The nature of our visit wasn’t something that could be done virtually or simply forgone. Typically, we default to piling into our minivan and hauling across the country. This time, I thought it would be interesting to look at some alternatives to see what the time vs. money tradeoff looks like.

Our Baseline

Our trip is about 900 miles one way. Our van gets about 25 miles per gallon on the trip. A little more in the flat states. A little less in the hilly ones. 1800 miles / 25 miles per gallon means round trip we’re buying about 72 gallons of gas.

All of our fill ups have been less than $5.49/gallon, but let’s use that as our worst case. For gas alone, we’re talking about $400 of gas.

We’re pretty good about taking care of our vehicles. Therefore, I’m comfortable saying we’ll get 100,000 miles of life out of this car. 1,800 /100,000 is just under 2%. Let’s pretend it’s straight depreciation of the vehicle purchase price (~$20,000) relative to mileage. That works out to about $360 of depreciation for this trip.

With 900 miles of road to cover, we either leave in the middle of the night and do 16 grueling hours all at once or we split the trip into two days. During the early parts of the COVID-19 pandemic, we did the former. We didn’t stop for anything except to fill the gas tank and empty our bladders. It was not fun. Now, we’re a bit more willing to make a stop midway, so we’ll say 16 hours of driving + 8 hours at a motel for a total of 24 hours one way. Adding the hotel costs $140 to the round trip price.

Total cost: $900

Total time: 48 hours

Intangibles: we travel with our dog, a cooler full of healthier snacks and have little contact with others (especially important for a 2 yr old still ineligible for COVID-19 vaccination).

Flying Commercial

Instead of 13 hours of road time (it’s actually closer to 15 with young kids), we could have taken a short flight. If we catch a nonstop flight, our door to door travel is 30 mins to the airport, 1.5 hours at the airport to clear security, a 2 hour flight, 30 mins to get bags and rental car, and then 2 hours to drive to our destination. 6.5 hours total (assuming everything goes smoothly) one way. Not bad relative to the drive time in the van.

Given that we had a relatively short time to book airfare, the cheapest flights I c0uld find are about $215 per person one way. With four humans, our flight cost is 4 x $430 = $1720.

Of course, we have to do something with the dog. No, we’re not going to ship her in the cargo bay. So, it’s either boarding at a kennel for something like $55/day or at home care for closer to $80/day. Our trip was 10 days. Yikes, we’re at somewhere between $550 and $800 just for the dog. Let’s go with $550 to be conservative.

Next, we need a rental car and two car seats when we get where we are going. That’ll be $850 for a full-size car for 10 days.

Total cost: $3120

Total time: 12 hours round trip

Intangibles: way less travel time with a potentially cranky toddler, more COVID-19 exposure, more people to annoy inside of an airplane with a cranky toddler.

Train

We’ve been on plenty of trains in Japan and Europe. Before kids and COVID, we took the train into and around Washington DC. But, as much as the notion of a train excites me, I don’t usually think about it as a serious method of transportation in the United States. For this exercise, here’s the numbers:

Amtrak quoted me $227 one way and $159 return. At $386 per person round trip, taking a train is actually cheaper than the prices I saw for flights. Total travel fare would be $1,544.

We still need to take care of the dog and rent a car upon arrival. $1,544 + $550 + $850 = a total cost of $2,944.

We need 30 mins to get from home to the train station. The train ride is slated to be about 24 hours with 2 train transfers. Again, we need 30 mins for getting from the train and into a rental car. Then, it’s 2 hours to get to where we are going. Total time is about 27 hours one way or 54 hours total.

Intangibles: less rigamarole to get to/from the train than an airport, someone else drives the train, moving sleepy kids between trains at odd hours.

Private Flight

I’ve never looked into this before, but why not? We’re almost A-list! It turns out that anyone can rent a private jet. For around $15,000 (give or take a few thousand bucks), we could get our own private plane to whisk us across the country. By the way pets are allowed on domestic private planes…guess we can bring our dog with us (and save big bucks on that costly kennel fee)!

Because the private flights leave from the General Aviation part of an airport, there is far less time required to go from the car to the airplane. And let’s be honest, if we could throw down $15,000 for a plane ride, we can afford a driver to get us to the General Aviation terminal. No $8/day long term parking for us! So the time works out to 30 mins to the airplane, a 2 hour flight, 30 mins to get bags and rental car, and then 2 hours to drive to our destination. 5 hours total (assuming everything goes smoothly) one way.

Total cost: $30,000

Total time: 10 hours

Wrap Up

Here’s a scatter plot showing each of these different options to visually represent the trade off between dollars and hours.

The gist is this: we all make trade-offs about how to spend our time and/or our money. If I absolutely needed to be with my family that same day, spending $15,000 for a private flight is truly an option. Fortunately, I’ve never been forced into that position. Instead, I’m optimistic about how much time I have left on this Earth, so we traded time for dollars. $900 (even with crazy high gas prices) is way cheaper than the nearest alternative.

Besides, who says that two days jammed into a car with your family can’t be memorable and maybe even fun? One of my favorite moments from this road trip: I read about a quarter of Little House On The Prairie to my daughters while my partner drove. At the end, our 6-year old was still entranced. Our 2-year old just looked up at me with a big toothy grin and said, “More cookies, please!”

How to Manage Your Emotions While Investing in a Downturn

3 minute read

“This too shall come to pass” –ancient Persian parable

The S &P 500 closed down 20% from its peak of 4800+ over the past 5 months. Financial headlines trumpet words like “crash” “bear market”, “extreme fear”, and “volatility“. Red is the predominant color on financial news service websites. Is it time to panic sell all your equities? Should you go all in on the US Stock market?

First: Don’t Panic

OK, take a deep breath. Don’t panic. 20% drops actually happen rather regularly. The current drop happened over a period of about six months. `Here’s an image showing the distribution of S & P 500 price changes for 6 month intervals.

Histogram of 6 month market returns

The light red dashed line is at -10% or “correction” territory. The dark red dotted line represents -20% or the threshold for a “bear market.” Look how much of the distribution remains to the left of both of these lines. Neither event is uncommon. In the histogram, I also highlighted the 0% line in solid blue. Take heart doom and gloom fans: most of the distribution is to the right of that solid blue line. That means that most of the time, the market has a positive return.

Let’s look at the same data differently so we can more easily quantify how often to expect a -10% correction and a -20% bear to occur within a 6 month window. Corrections happen about 10% of the time. That 20% bear market line happens about 3% of the time. There’s a reason why people smarter than me have said that over time, “it always goes up .”

Cumulative distribution of 6 month market returns

Second: The Market Isn’t That Cheap Yet

Believe it or not, we’re not at bargain basement prices yet either based on two widely accepted measures of aggregate market value.

1) the “Buffet indicator“, which looks at a country’s total stock market’s price relative to the economic output of that country. Economic output is usually measured as Gross Domestic Product. Here’s a detailed discussion if you want some real gory stuff. While the current market conditions have improved from late 2021/ early 2022, valuations are still relatively high.

2) the Cyclically Adjusted Price to Earnings ratio (CAPE) or Shiller PE is another measure of long term value. It too is still high by historical standards despite recent sell-off. As of this writing, the Shiller PE is above 30 against a long term average of about 17.

Of course, I don’t have a crystal ball that sees into the future. However, based on measurements like these that show some good predictive power with long term stock market returns, it might make sense to make a measured response.

How to Respond to a Market Downturn

With a 20% drop, your asset allocation is likely out of balance. you can think of the market on sale and consider this an opportunity to re-balance. Sell some bonds and buy some stocks to bring your asset allocation ratio back to your goal.

Continue investing regularly or dollar cost averaging. Stay the course and try to avoid any drastic action. You’re investing for the long haul. As we’ve seen above, dips happen regularly.

If you have low enough expenses, consider investing some extra funds while prices have reduced. I would be cautious of going all in at this time though.

Stay diversified. It’s tempting to think we’re able to pick individual winners. For most investors who aren’t spending their free time reading prospectuses our scouring the headlines for information about a company, buy the entire market (or at least a big chunk of it) and ride the tide.

Disclaimer: While we have a passion for providing entertaining, informational, and possibly useful articles about personal finance, we’re just random people on the internet with no formal credentials or expertise. Talk to a licensed professional advisor if you need advice.

The Portfolio Series – Part 1: Monte Carlo Simulation

5 minute read

We’re kicking off a new, multi-part series here. We’re going to be looking at several different investment strategies using Monte Carlo Simulation techniques. Our goals with this series are to:

  • Demystify the Monte Carlo simulation technique.
  • Objectively evaluate the performance of different strategies against each other.
  • Learn.

I’m going to drop in our disclaimer right here just to make sure there is no confusion:

Disclaimer: While we have a passion for providing entertaining, informational, and possibly useful articles about personal finance, we’re just random people on the internet with no formal credentials or expertise. Talk to a licensed professional advisor if you need advice.

What Is A Monte Carlo Simulation?

Monte Carlo simulations attempt to show how a system responds through the use of repeated, random sampling of a model of that system. In observing how the system responds to a range of inputs, we can make better decisions in real life. We would like to see if we can learn about how well different investment strategies performed so we can make decisions about what to do in the future. Check out wikipedia and investopedia for some more detail on Monte Carlo Simulations.

While this post/series is not a comprehensive overview of the topic, a brief introduction is useful. Remember the “Normal” distribution from your first statistics class? If not that’s OK. My first statistics class was traumatic too. It represents a range of values/probabilities that we’re likely to see in many systems. Here is a distribution that represents the US Stock Market’s annual returns:

1000 samples of annual US stock market returns from a distribution with mean of TBD and standard deviation of TBD.

For Monte Carlo Simulation, the distribution is at the heart of everything. It is our representation of the system. The underlying distribution tells us how often we expect to see a given result. Finally, it is also fundamentally based on assuming that the general shape of the past can give us clues to how the future will look. How?

We iteratively and randomly sample points from the distribution. In our case, this provides a hypothetical sequence of returns for that asset class. If we’re simulating a 30 year retirement, we need 30 points from each asset. We’re using a distribution rather than actual historical sequences like cFireSIM. Therefore, we can simulate an infinite number of sequences. Let me be clear: that’s not a knock against cFireSIM. It’s actually one of my favorite tools and an inspiration for a lot of our work here.

What does a Monte Carlo Simulation Look Like?

Next, let’s look deeper at the first 5 points sampled from this type of distribution. We will illustrate how we can start to build up a sequence of returns. Remember, these 5 points are randomly drawn from the same distribution. Think of them as the first 5 years of a single “run” representing one potential retirement reality. Below, each panel shows a new point being randomly generated from the underlying distribution and added to the prior sequence.

Five successively chosen points from an underlying distribution.

Next, we can extend the sequence to 30 points (or any number) to represent a single retirement “run.” The next plot shows three such runs. Remember, we drew 3 sequences of 40 points from the same underlying distribution. And, the underlying distribution represents the annual performance of the US stock market. Therefore, you can think of this as three potential retirement experiences.

Three simulated “runs” of randomly generated sequences of returns.

When you make thousands of such multi-decade “runs”, you start to see the range of potential outcomes from this portfolio over time. And, that’s the foundation of our Monte Carlo simulation. We iteratively sample from the historical return data. We then simulate thousands of 20 year, 30 year, or 40 year (or more for those in the FIRE community) return sequences. Finally, let’s put the whole thing together and illustrate our 3 runs from above against a fuller population of simulation data.

In this plot, we simulated 1000 runs and then took the 10th to 90th percentile of those runs within a given year. We’re essentially eliminating some of the less likely returns from the summary. This reduced population forms the grey band in the graph. Overlaid on top of that are the three runs from above. Notice how many individual points are well outside of the grey bands. That’s important: any individual run can have some pretty extreme values (March of 2020, anyone?), but when you look at expected values they’re frequently less extreme. Are those extremes possible? Yes! But, they’re also less likely to occur.

Three 30 year simulated runs highlighted against the 10th -90th percentiles (grey band) of a 1000 run Monte Carlo Simulation

If you had two distributions, one that represents the annual performance of the US stock market, and another that represents the annual performance of the US bond market, you could start to build a model of their respective performance over time. From there, we can start to compare how well different portfolios perform…but we’ll dig into that another time. For now, let’s look at one caveat of many simulations: the shape of the underlying distribution(s).

Pitfalls of the Normal Distribution

In many systems, the normal distribution is a good fit for the underlying data. Stock market performance is not one of them. Here’s a great discussion on the topic. The key phrase is, “fat tails”. Over time, people observed that the stock market sees big movements more frequently than the normal distribution would suggest. This results in errors: differences in the model relative to historical performance. We would like our models to be as right as possible. I need to pause for the obligatory quote from legendary statistician and 20th century Renaissance Man, George Box:

“Essentially all models are wrong, but some are useful.”

George Box

Of course, we would like the models to be as right as possible, especially if we’re going to use them.

Metalogs – An Answer to the Normality Problem

Meta what?

“Metalogs”

They’re flexible distributions that more accurately reflect the underlying data than many of the classic distributions we’re used to (e.g., the Normal). Check them out here. They were invented by Tom Keelin who could be the 21st century’s Renaissance Man. By making distributions that can generate continuous samples from the underlying source data, Tom enabled us to reduce the bias in our original models. He helped us to fatten up our models’ tails when working with stock market return data (and his invention can be useful for modelling in any discipline. Have I sung his praises enough yet?).

Here’s a picture to help illustrate the differences between the actual data and two simulations. We can make 1802 annual return data points from Dr. Shiller’s dataset, called “Actuals” going forward. First, I calculated the mean/standard deviation of the Actuals and used those statistics to generate 1802 simulated returns using the Normal distribution. Then, I fit a Metalog to the original data (a 13-term metalog had the lowest standard error) and simulated 1802 more annual returns using a Metalog based on the actual data. Here’s a Box Plot (yes, the same George Box) showing how the three distributions compare.

Visually, you can see the Actual Returns and Metalog Simulation both have longer whiskers and more outliers than the Normal Simulation.

Wrap Up

That will do it for this first introduction to the topic of portfolio evaluation. It’s a fascinating problem. Inevitably, we will make mistakes along the way. I’m excited to dig into this topic and learn more about it. Hopefully, you have a better understanding of how we’re approaching this idea of portfolio evaluation. In subsequent posts, I will lay out some sample scenarios and start simulating!

Disclaimer: While we have a passion for providing entertaining, informational, and possibly useful articles about personal finance, we’re just random people on the internet with no formal credentials or expertise. Talk to a licensed professional advisor if you need advice.

How to Use Asset Allocation To Invest For Volatility

2 minute read

A worldwide recession. All time market highs.  A global contagion. All time market highs. A foreign invasion. Are all time market highs in our future?  The stock market is a wild ride. Stocks are a highly volatile asset class. They always has been. They likely always will be. So, how should one invest for volatility? How do you get to financial independence as quickly as possible while minimizing any missteps along the way?

My favorite investing strategy for volatile times (which is all the time) is pretty simple: subtract your age in years from 100.  The result is the % of your portfolio you should keep in a total stock market index fund (like VTSAX).  The balance (your age) should be in a total bond fund (like VBTLX). 

It makes taking action (or remaining inactive) amidst volatility really simple.  Is the market at all time highs? Sell some stocks and buy some bonds to rebalance and lock in your gains.  Is the market crumbling around you? Sell some bonds and buy some stocks while they’re at a discount. Aim to keep your percentages within about 5% of their targets. 

Selling At A Bottom Can Delay Financial Independence

One of the worst things an investor can do is sell at the bottom of a market correction/crash when emotions are high. Doing so can significantly delay the time to financial independence. Making an ill-timed sale turns a paper loss into a real one. Now, you need a correspondingly bigger increase to make up for the loss. Instead, invest for volatility so you never feel the emotional pressure to sell low.

Your Portfolio Adjusts For Risk As You Age

As you age, your portfolio will get more conservative. That’s not a bad thing, especially as you close in on needing to draw from the portfolio. But, the portion in stocks will still grow significantly, helping to ward off the insidious effects of inflation. And, this approach recognizes that human behavior, has a real effect on a portfolio’s performance.

A Variation

For more aggressive or risk tolerant investors, consider subtracting your age from 110 or even 120. You’re still investing for volatility! You’ll simply end up with a higher percentage of the portfolio in stocks (and likely a wilder ride). But, over the long haul, you can expect a higher total portfolio value because more of the portfolio is invested in growth assets (stocks).

Disclaimer: While we have a passion for providing entertaining, informational, and possibly useful articles about personal finance, we’re just random people on the internet with no formal credentials or expertise. Talk to a licensed professional advisor if you need advice.