The valuation that held too long
An acquisitions lead in a mid-sized industrial portfolio spent March underwriting a distribution facility outside a growing metro. The cap rate model priced against trailing twelve-month comparables: three recent sales, a vacancy rate pulled quarterly, a rent growth assumption carried forward from the prior underwriting cycle. The deal cleared committee in April. By August, the submarket's fundamentals had moved — a wave of speculative permit filings for competing product, visible in the county's building department records since the previous November, had begun converting into delivered square footage. Rents softened faster than the model's error bars allowed for. The valuation had held through a demand shift that was sitting in public permit data five months before it showed up in a rent comp.
This is not a story about a bad analyst. The model did exactly what it was built to do: it materialised a view of the market as of the date it was run, and it held that view until someone manually reran it. The permit filings existed. They were filed, timestamped, and public. They were simply not part of what the model treated as its own state.
What the model actually stored
The underwriting model, like most in real estate, stores current belief: a cap rate, a rent roll, a set of comps, a growth assumption. When new information arrives, someone updates a cell. The old cell is gone. There is no record of what the model believed in November, why it believed it, or which input changed between then and April. This is a materialised view with no underlying log — the acquisitions equivalent of a bank statement that only ever shows today's balance.
Event sourcing is the alternative discipline: store not the current number but the ordered sequence of facts that produced it, and treat the number as something you compute, on demand, by folding over that sequence. A balance is the sum of every deposit and withdrawal. A cap rate, on this model, would be a fold over every listing event, every permit filing, every rate print and every migration data release that touched the asset's catchment — recomputed whenever a new event lands, and re-derivable for any past date by replaying only the events that existed up to that date.
This is the axis on which the three generations of models differ: what they are permitted to take in, and whether they keep a record of having taken it in. A Large Language Model trains on a corpus and keeps only the weights — a materialised view with the log thrown away, unable to say when it learned something or replay itself as of a given month. A Large World Model folds sensor events into a running scene estimate, which gives it a log of sorts, but the window is short: once the scene ends, the log is discarded and only the final state survives. A Large Universe Model is the case where the log never closes and is never thrown away — listing flow, permit filings, rate curves, migration data, all still arriving, each event kept with its source and timestamp, belief always a recomputable fold over the whole running history. That is the terminal position on intake, not because it is cleverer, but because there is no fourth kind of "more" once every stream is admitted and none of it is deleted.
The case for the log
The argument for building the underwriting stack this way is straightforward. If the acquisitions lead's model had been event-sourced — every comp sale, every permit filing by jurisdiction, every Freddie Mac rate print, every county migration release appended as an immutable, timestamped, sourced event — the November permit spike would have been visible the moment it landed, because the demand-side fold would have moved without anyone rerunning anything by hand. More importantly, the deal file would carry its own history. When the committee asked in August why the April underwriting missed the shift, the answer would not be a shrug; it would be a replay, showing exactly which events were available on the pricing date and which reducer computed the growth assumption from them. When a comp is later found to be a distressed sale mislabelled as arm's-length, the system can retract that single event and recompute every valuation downstream of it, rather than requiring someone to remember which models touched that comp.
The case against archaeology
None of this is free, and the objection that matters most in this domain is the practical one.
Real estate data pipelines are already a mess of vendor feeds, county record formats that change every few years, and rate data with its own revision history. Event sourcing sounds disciplined until you try to replay a five-year-old permit stream through a schema that has been rewritten twice. Teams that try this quietly retreat to nightly snapshots and a CRUD database within eighteen months, because replay takes longer than the deal cycle it is meant to serve.
This is a fair description of what actually happens, and it should not be waved off. Permit data alone is a case study in schema drift: one county reports "units approved," another "square footage entitled," a third revises filings after the fact without versioning the revision. Rate curves get restated. Migration data from postal and tax sources arrives on different lags and gets corrected months later. An acquisitions team asked to replay four years of these streams through a reducer that has changed twice will spend more time on data archaeology than on deals.
But the retreat, where it happens, is almost never from the log itself — it is from full replay as the everyday operation. The workable version keeps the immutable event log as the record of truth and adds snapshots as a cache: a nightly materialised cap rate, refreshed continuously, that can always be checked against or rebuilt from the underlying stream if a source is later discredited. That is not an escape from event sourcing; it is cost engineering applied on top of it. The permit stream does not need to be replayed from scratch every time someone wants a valuation. It needs to have been appended honestly the first time, so that replay is possible when someone needs to know why a number is what it is.
Order, permits, and the lag
A second objection cuts closer to the specific failure. Permit filings are not a clean, single-order stream. A filing date, an approval date and a "posted to public record" date can be weeks apart and vary by jurisdiction; a county's data portal can backfill October's filings in December. There is no single true order across the counties an acquisitions team is watching, only a partial one, arriving out of sequence and subject to correction after the fact.
This matters for the fold, not just the storage. A reducer that assumes strict chronological order — "growth assumption equals the trend of filings received so far" — will get quietly the wrong answer when late-arriving filings change the shape of what "so far" meant. The honest response is not to abandon the log but to make the reducer tolerant of the disorder: track filing date and posting date as separate fields on the same event, let corrections arrive as new events rather than edits, and let the growth fold be recomputed whenever the picture as of any given date changes. That is more work than a single running average. It is also the only way the model's August self and its April self can be shown to be reasoning from the same honestly-kept record rather than two incompatible snapshots.
Provenance is not the same as being right
Keeping the log does not make the underlying belief true. A well-provenanced permit surge can be noise — filings for product that stalls in financing, entitlements that lapse. Provenance tells you which source said what and when; it does not tell you whether the source was right. What it buys is narrower and still worth having: when a source is later shown unreliable — a permit database found to double-count amendments, say — only a system that recorded which valuations depended on that stream can withdraw the affected numbers and recompute the rest without redoing every deal in the portfolio.
Where this leaves the acquisitions lead
The thesis narrows rather than resolves. Event sourcing does not make an acquisitions team prescient, and it does not make permit data honest by itself. It makes a specific failure legible and reversible: the failure of a model that held a belief past the date the evidence for revising it existed. That is worth the operational cost only where deals are large enough, and revision frequent enough, to justify carrying the log — which is most institutional acquisitions work, and not most single-asset brokerage. The Large Universe Model's claim to be the terminal position on intake stands on the same narrowed ground: it is not the promise of being right about the next submarket, only the argument that once every stream is kept, with its source and its lag intact, there is no further kind of input left to add — only more of it, arriving later, and possibly wrong.