run.veric.dev

Zillow Offers iBuyer shutdown — Q3 2021

Cost: $304M Q3 2021 inventory write-down; ~$881M total program losses across Q3–Q4; ~25% workforce cut · Time-to-detect: ~6 months (price-model drift accumulated through 2021) · Root cause class: T4 (cardinality / range bounds on a forecasted value)

What happened

On November 2, 2021, Zillow shut down its Zillow Offers iBuyer business and announced it would cut roughly 25% of staff. The company took a $304M Q3 inventory write-down and a further write-down in Q4, totaling roughly $881M in losses on the program. Per Zillow's own Q3 2021 shareholder letter and CEO Rich Barton's public statement, the price-prediction model that drove offer amounts had been over-paying for homes through mid-2021 in a fast-moving market, leaving Zillow holding inventory worth less than it had paid. Barton said the firm had "determined the unpredictability in forecasting home prices far exceeds what we anticipated." A Stanford GSB analysis and a 2022 SSRN paper on the program's "volatile error rate" make the same point: the model's forecast variance was wider than the operating margin it was trusted to clear.

The pattern

A downstream business decision — "buy at price X" — was driven by a model output that had no enforced bound between (predicted price) and (any plausible safety floor like a recent comparable sale or a market-trend cap). Any pipeline where a model's point estimate is consumed as an actionable value without a declared bound on the gap between the estimate and an independently-computed fallback has this exposure. The same shape shows up in dynamic-pricing engines, ad-bid systems, dashboards driving spend decisions, and anywhere a forecasted number replaces a measured one.

How veric would catch it

veric supports range invariants on derived columns at the T4 tier. With a declared invariant — abs(predicted_offer_price - recent_comp_median) / recent_comp_median < 0.10 — the verifier would have flagged in the PR for any model change: "derived column offer.predicted_price exceeds declared range bound vs offer.comp_anchor for N% of training rows; range-bounded — VIOLATED." Honest scope: veric does not predict housing markets and would not have rescued the model itself. It would have made the absence of a circuit-breaker between the model and the wire transfer reviewable in a PR — the institutional control that was missing.

Try it: open the example below and watch the verdict change as you toggle the offending pattern on and off.

See also

Sources

Reproduce in playgroundT4 · Cardinality / control-flow in the glossary

Opens the playground pre-loaded with a model that exhibits this pattern. Toggle the offending lines to watch the verdict change.