Known Limits and Judgment Calls

Every place this work could be done differently, what our choice costs, and what would change if you chose otherwise.

Why this page exists

An assessor, a statistician or a city lawyer could read this site and find its weak spots inside twenty minutes. We would rather they read ours first.

The methods page shows how a figure is built, and which figures a script re-checks. This page is the other half. It is about the places where the method itself is a choice, and someone sensible could choose differently.

Every limit here gets the same four answers. What we chose. Why. What that choice costs. And what would change if you made the other choice. If any of the four is missing, the entry is not finished.

Mechanical · has reached the live site three times

1. There are two Elmiras

New York files city parcels under the surrounding town. The City of Elmira has about 9,500 parcels. Ask the roll for "Elmira" by name and you get thousands more on top of those, from the Town of Elmira and its special franchises. None of them pays a city tax.

Those extra parcels are suburban. They are worth more per house and taxed less. Let them in and the city looks richer, less taxed and less crowded than it is, in exactly the direction that flatters the argument this site is making.

What we chose
Every city figure is selected by the city's own six-digit code, through one shared function that every script calls.
Why
A name can match two places. A code cannot. And one function is one place to fix.
What it costs
A step that is easy to skip. Any new script has to remember to call it.
If you chose otherwise
You would be measuring a city and a suburb together and calling the answer Elmira. That is what happened three times.
Enforced, not just described. The recipes for the assessment page and the zoning page tie this rule to the line of code that does it. If either script stops calling that function, a check fails and the change cannot ship. What no check covers is a brand new script that never calls it at all.

One page opts out on purpose. Multi-year trends compares whole municipalities against each other, so the Town of Elmira appears there as its own line, labelled as the town.

Mechanical · fails silently

2. The city's code is a number and a word

Elmira's code is 070400. Read from a saved file it arrives as the number 70400, because the leading zero is dropped. Read from the state's live service it arrives as the text "070400". Compare the wrong one and nothing matches. There is no error. You get an empty table, and an empty table draws a perfectly good-looking chart with no data in it.

What we chose
One shared function converts both forms before anything is compared. The city filter raises an error when it finds nothing.
Why
An empty result is nearly always a bug. It should stop the run, not become a chart.
What it costs
Scripts fail louder and more often. That is the point, but it does mean a real "no rows" answer has to be asked for on purpose.
If you chose otherwise
You would publish a chart built from zero rows and never know. Nothing about it looks wrong.
Judgment · looks like a contradiction

3. Four answers to "what share of value is Elmira assessed at?"

Read two pages of this site and you can come away with two different numbers for the same apparent question. Both are right. They are answers to different questions, and the difference between them is worth more than any single one of them.

The measureValueWhat it actually measures
State equalization rate, 2025 56% The whole roll, every kind of property, as the state scores it.
State residential ratio, 2025 52.08% Houses only, measured by the state from its own sales study.
Our sales study, 2018–2025 63.1% The middle house, assessed value divided by the price it sold for on the day it sold. Eight years of sales pooled.
Our sales study, 2023–25 only 50.0% The same sum, on recent sales only.
Our fairness map 46.2% The same sum again, but with older sale prices restated in 2025 dollars.

The eight-year figure is the highest because it includes 2018 and 2019 sales at 2018 and 2019 prices, before the market moved. Restate those prices in 2025 dollars, or use recent sales only, and the share drops. Our recent-sales figure of 50% sits close to the state's own 52.08%, which is the check that matters: two instruments, different data, nearly the same reading.

The gap between the state's two numbers is a finding in itself. Houses are assessed at a smaller share of their value than commercial and utility property is. Anyone working out what a house is worth by dividing its assessment by 56% will guess low.

Why we do not use the roll's own market value. The assessment roll carries a "full market value" for every parcel. For Elmira it is the assessed value divided by 0.56, applied to everything. It is the equalization rate turned upside down, not a separate measurement. Checking the 56% rate against it would prove nothing, because it is the same number twice. Real sales are the only independent reading this site has.
What we chose
Each page uses the measure that answers its own question, and names which one it is in text you can see.
Why
A map of who pays more than their neighbours needs prices in one currency. A study of how the roll has drifted needs prices as they were.
What it costs
A reader who skims two pages sees two "typical" numbers and has to work out why. This page is the answer to that.
If you chose otherwise
One number sitewide would be tidier and would answer at least one page's question wrongly. Averaging them would answer none of them.

What we have not done: a formal reconciliation of the state's residential ratio against our sales median, year by year. They land close. We have not shown they must.

Judgment · the most likely challenge

4. Sorting homes by price bends the curve on its own

The assessment page sorts homes into bands by what they sold for, then reports the middle ratio in each band. The ratio is assessed value divided by sale price. So sale price sets the band a house lands in, and it is also the bottom of the sum.

A house that happened to sell cheap therefore lands in the low band and gets a high ratio, for the same reason. The curve bends before any unfairness is involved. Sorting by assessed value instead does not fix it. It tilts the error the other way, because assessed value is the top of the sum. Neither version can be read against a flat line.

This is the single most likely thing for a specialist to challenge, so the page does not leave it as a caveat. It measures it. The script finds homes that sold twice within three years — 510 pairs. How far apart those two prices sit says how much one sale price strays from what a house is really worth. It then simulates a city with that much randomness and no unfairness at all, and runs the same method on it. That imaginary fair city still produces a gap of 1.271×. The observed gap is 2.573×. What the page publishes is the difference: about 2.0×.

What we chose
Publish the corrected gap, and show the raw one beside it so you can see what was taken out.
Why
Part of the raw gap was our own doing. Claiming it would be claiming our method as a finding.
What it costs
The correction rests on 510 repeat sales, and a house that sells twice in three years is not a typical house. A different noise estimate moves the answer.
If you chose otherwise
Publishing 2.573× overstates it. Binning on assessed value understates it. Both are defensible and both are worse.
The headline does not rest on the bands alone. The same page reports three standard measures that need no bands at all: a coefficient of dispersion of 47.9, a price-related differential of 1.276, and a price-related bias of −0.572. All three fail the assessment industry's own limits. The state's own figures for Elmira land in the same place from its own data.
Judgment · two vintages in one picture

5. The 3D maps use parcel shapes from 2021

The value-per-acre maps put two things together: parcel outlines from the county's published map layer, dated September 2021, and assessments from the 2025 roll. A parcel that has been split, merged or built on since 2021 is drawn on its old outline, or is missing from the picture.

The join is good but not complete. The county-wide map draws 38,409 parcels; the city map draws 9,476, against roughly 9,500 city parcels on the roll. So almost every city parcel is there. Value per acre for any one of them is only as good as its recorded shape.

What we chose
Use the newest parcel layer the county publishes, and say which year it is from.
Why
It is the only county-wide parcel geometry available to the public. We will not redraw property lines ourselves.
What it costs
Four years of splits and new building are invisible. A recently divided lot can show the wrong value per acre.
If you chose otherwise
You would need current geometry the county has not published. The alternative is not a better map, it is no map.

The pattern these maps show is about downtown blocks against big suburban sites, and a lot line moving a few feet does not change it. Do not read a single bar as an audited figure for that one property.


6. Figures we have withdrawn
Published, then found wrong, then pulled. They are listed here because a retraction nobody can find is not a retraction.
Retired — the county-wide assessment gap

Eleven towns pooled into one curve

The first version of the assessment study used 6,491 sales from the whole county. It reported a headline gap of 72%, band ratios of 1.361 and 0.790, and a gap multiple of 1.72×. Those figures are withdrawn and no longer appear anywhere as current.

An assessment ratio only means something inside one assessing unit, because each one sets its own level. Chemung County has eleven, running from about 1% to 100%. Pooling them measured the differences between town rolls and read them as unfairness within Elmira. It was wrong. The city-only rebuild replaced it.

Now blocked in both directions. A scan looks for each of those retired numbers across every page of the site, and across the project's own README. It allows them only where the surrounding text is correcting the record, as this one is. It runs on every change. A stale city sale count of 1,699 is on the same list; the correct count is 1,689.
Retired — the assessed-to-market curve

Three scripts, three different answers

Turning an assessment into an estimated market value needs a curve. Three separate scripts each declared their own, and all three were wrong. The reassessment page's earlier scenario was built on top of that. It also mixed two market estimates in one argument. It grew the tax base using the state's equalization rate, while its worked example used sales. Both could not hold. The rate figures that scenario produced are withdrawn.

One model now produces one curve. It writes that curve to a file every page reads, and a check refuses any script that declares its own again. The rebuilt page also fits the model 500 times on resampled data, which puts a range around each figure. It then refits it 18 more ways, to check that no single choice is holding the answer up.

Retired — two pages

A metric that flattered the wrong parcels, and a map that could not vary

The old Strong Towns page measured value per front foot. It made big-box parcels look productive, which was the opposite of the page's point, so the page was retired in July 2026 and now redirects to value per acre. The parts that did hold up moved with it.

The first fair-share map coloured each parcel by a number worked out from its assessed value alone. Both halves of the sum came from the same figure, so every parcel with the same assessment got the same colour whatever it was worth. It is superseded by the sales-based map, which compares each home against the price it actually fetched. The old file is still in the repository and is no longer linked from anywhere.

Corrections are published, not quietly patched. The update log on the Data & Sources page records what changed and when, including the changes that embarrass us.

7. What this site does not claim
Several of these are arguments the evidence here would half-support. That is exactly why they are worth writing down.
The most argumentative page on this site is Why It Matters. It draws conclusions the data pages deliberately stop short of, and it should be read that way.

And this page

Every figure quoted here is quoted from the page that works it out, and each of those is linked above. This page derives nothing of its own. Like most of the site, nothing re-checks the sentences on it, so read it the same way: correct when written, sourced, and unwatched since.

Found a limit we have not named? That is the most useful thing you can send us. Tell us and it goes on this page, with your correction, whether or not we agree with what it implies.