Nolan Lawson spent years telling web developers to "use the platform." This week he flipped the question: if native dialogs, sticky CSS, and evergreen browsers are so obviously better, why do so many teams still ship another React modal and another virtual-list wrapper? https://nolanlawson.com/2026/10/03/why-dont-more-developers-use-the-platform/ https://news.ycombinator.com/item?id=49950554 The historical answer still holds. For a long time browsers lagged the ecosystem. jQuery and friends filled gaps until Internet Explorer died of old age. That muscle memory did not vanish when Chrome and Firefox started shipping monthly. Searching npm for sticky positioning still will not return a package titled "just use position sticky." Familiar tooling wins even when the browser already solved the problem. There is also a documentation gap. React and the big component libraries ship READMEs, starter kits, conference talks, and copy-paste demos. MDN got much better, but for years platform docs lived across blogs, Stack Overflow, and CSS Tricks that cheerfully pointed people back to a library. When Dragula's landing page looks more inviting than the Drag and Drop MDN page, guess which one a tired developer opens at 5pm. Lawson's more interesting claim is about joy. Building a homemade modal with absolute positioning, body scroll lock, Escape handling, and a focus trap is a nightmare if you only want a shippable dialog. It is also how a lot of people learn the platform. Before the dialog element existed, polyfills and side projects were the curriculum. Lawson himself got deep into IndexedDB through PouchDB tooling and eventually sat in W3C meetings. Gaps create experts. Closing every gap too early can starve that flywheel. The Hacker News thread was less gentle. Several long-time frontend people said web components specifically kill enthusiasm: Shadow DOM quirks, stringy templates, attribute sync pain, and a design that often needs Lit before it feels usable. Others pointed at native date pickers that cannot exclude weekdays, searchable comboboxes that still force ARIA plumbing, and dialog backdrops that do not dismiss on click without extra attributes that Safari barely supports. In that view, "use the platform" is not elegance. It is accepting half-finished widgets that product and design will reject after one review. There is a parallel Lawson draws outside the browser. On ClickHouse at work, he and a coworker both invented compression and key-value schemes for large JSON columns. The database already compressed columnar data better than either homemade path. Reading the docs and running a benchmark beat clever engineering. The same pattern shows up on iOS, game engines, and cloud consoles: juniors invent epicycles; seniors delete them after learning the layer underneath. AI coding makes the fork sharper. Optimistic take: models know platform APIs encyclopedically and can pick dialog or position sticky when the prompt asks for a light accessible page. Pessimistic take: models love duplicating helpers, inventing yet another modal, and committing the first draft. Lawson's own agent usage has shown both. Prompt discipline becomes the new "use the platform" sermon. None of this means React is a moral failure. Frameworks won for non-technical reasons too: docs, conferences, hiring pipelines, and a generation taught that touching the DOM is icky. They also won because designers want rounded date pickers that match the brand, not whatever Chrome shipped with a monospace input font years ago. Native components that look inconsistent across agents and cannot meet basic product requirements will keep losing to a 100KB library that can be restyled pixel by pixel. The useful question for a team shipping next week is narrower than ideology. Before you add another modal package, can the native dialog cover focus, Escape, and mobile without a week of polyfills? Before you reach for sticky JS, did someone put your component inside a relative container that breaks position sticky? Before you trust an agent to scaffold UI, did you tell it to prefer platform primitives and measure the bundle? If you maintain a design system tomorrow, would you ban custom dialogs when dialog is good enough — or keep owning the full JS stack because native widgets still fail the first product review?