Virtualize Without Breaking the Product

Decide what you would build from the brief alone. Everything below it is available, but the exercise stops working if you open it first.

The brief you were given

A 20,000-row grid with inline editing must become usable. Implement virtualization and keep every existing behaviour working.

The trap — the wrong fix that looks right

Rendering a large overscan — several hundred rows above and below — because it eliminates the blank flashes during fast scrolling and makes find-in-page work "well enough" for nearby rows. The window is now large enough that the per-row cost is back: every style invalidation traverses hundreds of rows, memory climbs, and the scroll performance the change was made for degrades on the devices that needed it most. Worse, find-in-page now works sometimes, which is harder for users than never — it finds the match that happens to be within the overscan and reports "not found" for one that is fifty rows further down.