I built a 50-year NYC housing simulator. Here's what I learned (mostly not what the simulator said).
I spent a couple days (and Claude spent ~20 sessions) building YIMBY NYC — a simulation where 10,000 “agents” of varied incomes bid on NYC apartments, move to minimize commute, have kids and look for places with more space, lose jobs, double up with friends, sometimes leave the city when they can’t take it anymore.
Go to kaighn.com/yimby and hit play to advance month by month from 2020 to 2070. Toggle policies in the left nav — remove parking minimums, upzone the Bronx, levy a land value tax, mandate 100% affordable housing on every new project, abolish CEQR — and watch what happens.
A note on confidence before we start
This is a one-person project that ran for a few days. Where I am on the methodology spectrum, borrowing Alejandro’s framing from a friend chat:
- I have no idea what my AIs did.
- I (+ AIs) did roughly X to establish methodology. I tentatively stand behind the qualitative directions. I would be embarrassed if someone found an obvious invalidating bug. ← I’m here.
- Methods adhere to canonical sources, reviewed by people who weren’t me.
So: don’t take the magnitudes literally. Don’t cite this in housing-policy debates. The model is a thinking aid, not an oracle. Where I have reasonable confidence is in qualitative ordinal claims — “X is worse than Y”, “policies that share property Z perform worse than ones without it.” The cardinal numbers (e.g. “2.8 million units built”) are made up by an engine I wrote in a few days.
What I want to share is what I learned by building it, not what the simulator “proved.” The construction process itself was the education — committing causal beliefs to code forces you to face which ones contradict.
How the thing works (briefly)
The simulator opens in January 2020 with 10,000 households scattered across 55 NYC neighborhoods. Each is an agent with an income, household size, age, work location, savings, and a tolerance for commute. Each month — each “tick” — they ask the same question: am I in the right place?
Some shop around. Some renew. New arrivals come, retirees leave. Available units go up for auction: market-rate clears at the marginal-bid price; rent-stabilized units get screened by income with noise (which causes “Yuppie Fishbowl” — wealthy tenants capturing cheap regulated apartments). Developers run a pro forma each month and decide whether to break ground.
The mechanism that drove most of the model’s interesting behavior is the Stone-Geary “subsistence cliff”:
Drag the income slider down. Notice the discontinuity. Below the cliff, the agent doesn’t merely shrug and accept a worse deal — the unit is infeasible. They cannot live there because food, transit, and utilities aren’t substitutable for housing. They search elsewhere, or they flee. This is why low-income flight in housing crises looks like a regime change, not a gradual response curve.
A handful of other mechanisms matter a lot for results (I’ll defend these below): the endowment effect locking in rent-stabilized tenants, land cost capitalization eating upzoning windfalls, search friction (you only see a few units a month), and the auction mechanic itself. These are the load-bearing pieces. The model has a lot of other features (gentrification, blight, demolition, capital flight, life events) which add color but don’t drive the headline policy ordering.
Before continuing, one piece of context: every policy in 2020 NYC is a reaction to the unintended consequences of the previous one. The simulator’s in-game history tab walks through 180 years of this. It’s relevant because the simulator can’t pretend 2020 is a blank slate — it has to start with the layered policy state we actually inherited:
180 years of NYC housing policy
From the simulatorEvery reform created the conditions for the next crisis. Tenement overcrowding → zoning → Moses → ULURP → NIMBYs → housing shortage → COYHO.
The Tenement Era
1840s–1900sThe Birth of Zoning
1916–1961Crisis & Rent Stabilization
1963–1979Koch, Co-ops & Deregulation
1980s–1990sBloomberg Rezonings
2002–2013De Blasio & the Housing Crisis
2014–2021The YIMBY Era
2022–PresentEvery generation faces the same cycle: crisis → regulation → unintended consequences → new crisis. Tenement overcrowding led to zoning. Zoning enabled Robert Moses's clearance. Moses's destruction created community review (ULURP). ULURP empowered NIMBYs. NIMBY obstruction caused the housing shortage. The shortage drove COYHO. Can supply-side reform break the cycle?
What I learned
I came in as YIMBY. I left as YIMBY+vouchers.
My priors before building: just build more. Upzone aggressively, eliminate parking and CEQR and prevailing wage requirements, let the market do its thing. Rent control bad, supply-side good.
The simulator agrees with this partially. The best-performing scenario in my dataset — every supply-side reform I could think of, all turned on — produces the lowest rents (about $1,700/mo real in 2070) and the most housing built. But it leaves roughly a million households unhoused, and the discrepancy is structural: 50 years isn’t long enough to undo 50 years of accumulated under-building.
What genuinely updated my view was running Section 8 vouchers. I expected modest individual benefit and significant market distortion. What I observed in the model was the opposite: voucher recipients exit homelessness, stay in the city, reach stable rent burdens — and the side-effect (a small demand-side rent inflation in voucher-accepting neighborhoods) is much smaller than I’d assumed. Roughly 0.5% rent inflation per placement, against a huge anti-homelessness benefit.
Then compare to rent control:
Universal rent control in the simulator is catastrophic. The endowment effect locks tenants into apartments that no longer fit them (empty-nesters keep 3BRs, families squeeze into studios). Construction collapses because the cap rate inversion kills profitability. Most of the city flees. The remaining tenants are technically rent-protected but the city as a functioning entity is gone.
The contrast struck me: vouchers and RC are both demand-side interventions aimed at the same problem (low-income tenants can’t afford market rents). But vouchers route around the price signal while RC breaks it. Routing around is much better.
I then read more — Edward Glaeser, Rebecca Diamond, Joe Gyourko, the Moving to Opportunity studies — and the housing-econ consensus broadly says exactly this. Vouchers outperform rent control on basically every metric. The simulator was reproducing what the empirical literature already established. That was a reassuring outcome: a model built from first principles, recovering a result that working housing economists had derived empirically.
So my current position is something like: strong supply-side reform, with a land value tax to prevent landowner capture, with vouchers as the demand-side complement. Rent control narrow and means-tested if at all. This is more “left-YIMBY” or “abundance-with-redistribution” than my original pure-supply position.
The supply side is real but partially captured
The thing the YIMBY discourse mostly skips: when zoning lets you build twice as much on a lot, the lot becomes worth roughly twice as much. In my model, landowners capture ~75% of the marginal value from upzoning. Developers absorb most of the rest as higher land acquisition costs. Renters see small reductions, slowly.
The fix isn’t to oppose upzoning — it’s to upzone and tax the windfall. Toggle the LVT checkbox above; the distribution shifts dramatically. Without LVT, YIMBY is partly a transfer to current landowners. With LVT, the surplus flows to renters and the public.
I think this is the biggest unforced error in the current YIMBY movement: fighting for upzoning without fighting for the tax that captures its gains.
Combinations beat single policies, by a wide margin
Here are the ten most informative scenarios from my run:
The pattern that holds across every run: individual reforms (parking elimination alone, ADUs alone, LVT alone, even FAR 20 upzoning alone) all underperform combinations. They only matter when stacked. This is unintuitive politically — it’s much easier to advocate for one named bill than for fifteen. But the structural finding is robust to most of the parameters I tweaked. Housing is a multi-equation problem.
The flip side: pure rent control and 100% mandatory affordable mandates are catastrophic in the model. Both shut down construction by inverting the developer’s pro forma, and the city hollows out.
Three takeaways that updated me
-
Time is the scarce input, not money or political will. Construction has hard physical limits — labor capacity, 36-month delivery, interest rate cycles that pause projects. Every year of delay compounds. The single most important thing about COYHO isn’t its policies, it’s that it passed in 2024 instead of 2034.
-
“Build more” understates the difficulty by ~10×. The full sentence is: build more and tax the land windfall and train construction labor and maintain political legitimacy through 30 years of cranes and sustain it across multiple recessions. Any one of those failing kills most of the gain.
-
Demand-side complements are not substitutes for supply. Vouchers, eviction protection, public housing — they extend the survival horizon while construction does its slow thing. None of them work as a primary policy. All of them help when stacked under a supply-side primary.
Defending the methodology, briefly
The mechanisms I treat as load-bearing are all well-established in housing/urban economics:
- Stone-Geary utility with subsistence floor — this is the cliff
- Diamond-Mortensen-Pissarides search friction (2010 Nobel) — agents see ~5 units/month, not the full market
- Alonso-Muth-Mills bid-rent for the commute-vs-rent tradeoff
- Rosen-Roback spatial equilibrium for departure to other metros
- Thaler’s endowment effect for rent-control lock-in
- Real options theory for developer behavior under interest-rate volatility
- Land value capitalization for upzoning capture (Henry George’s framework, modernized)
The implementations are documented in SIMULATION.md, step by step. Gemini critiqued the model six separate times, posing as a housing economist looking for biases; each round produced ~10-15 concrete patches. The current grading function, the equity-via-collapse guard, the land capitalization mechanic, the voucher inflation effect — all came out of that critique loop.
The things I’d want a real housing economist to check before I’d raise my confidence one notch: the parameter calibration (most numbers are eyeballed, not estimated), the labor-capacity constraint shape, and whether the auction mechanic accurately models how NYC rent-stabilized units actually get allocated. If you’re that economist and you want to break this, the source is at github.com/KaighnKevlin/yimby.
Try it. Disagree with it. Tell me what’s wrong.
The simulator is at kaighn.com/yimby. Hit play, toggle some policies, watch the city evolve. The grading system maps three sub-scores to a 0-100 composite — but honestly the letter grades are arbitrary and you should ignore them in favor of the underlying metrics (rent in 2025$, households housed, units built, fraction fled).
The thing I’m most confident in after this whole exercise is the smallest possible claim: housing is a multi-equation problem. No single policy fixes it. The honest answer to “what should we do” is most of them, in the right order, sustained for 30+ years. Which is to say: we should start.