
Latest issue
CSS Variables Won the Dark Mode Fight. JS Theme Objects Still Have a Job.
10/5/2026
In 2023, GitHub's Primer team ran into a wall that should sound familiar to anyone maintaining a design system past a certain scale: as component counts grew on a page, their CSS-in-JS solution for theming started costing real money in page-load time and SSR performance, and styl…
Recent posts
Ask five design system leads who should be allowed to submit a new component, and four of them will say "anyone, through a contribution process." Ask what happens when two teams su…
Here's a scene that plays out constantly in startup codebases. A developer needs to pass a single value — say, an active state flag — from a parent component down to a leaf. The de…
Here's the failure mode: you build a clean three-tier token system. Primitives hold raw values. Semantic tokens map intent to those primitives. Component tokens reference semantics…
Here's a scene worth sitting with. A designer needs a testimonial block for a landing page going live in 48 hours. She opens the Figma library and finds three options: Testimonial…
Here's the failure sequence, and you've probably lived it: you build a clean Card component. Compound pattern, properly decomposed — Card.Header, Card.Body, Card.Footer. Consumers…
Here's a scene worth sitting with: one developer opens a ticket, finds a piece of state that needs to travel four levels down the component tree, and reaches for React Context. Ano…
Three weeks ago I wrote about premature semantic layers — the failure mode where teams build elaborate alias hierarchies before they have enough product surface to justify them. To…
Here's the trap: you spend a sprint building a token naming system that reads like a sentence. color-action-primary-bg-hover. Clean. Grammatical. As one practitioner framing the ap…
Here's the failure mode nobody talks about until they're already in it: you start with a clean three-tier token architecture — reference, semantic, component — and six months later…
Here's a failure mode that shows up in almost every growing component library: a team adopts composition patterns to escape prop explosion, and six months later they've traded one…
Here's the failure mode I keep seeing: a team hits prop drilling pain, reaches for Context, and then six months later they're debugging mystery re-renders across half the component…
Here's the failure mode: you spend a week naming tokens correctly. color-action-primary, color-feedback-danger, color-surface-overlay. The names communicate intent. They survive a…
Here's a scene that should feel familiar: you open a codebase and search for Button. You find ButtonPrimary, ButtonSecondary, ButtonDanger, ButtonGhost, ButtonLink, ButtonSmall, Bu…
Here's the failure mode I keep seeing: a team spends two weeks debating whether a CardWithAvatar is a molecule or an organism. They update the Figma library, they update Storybook,…
Here's a failure mode that plays out on a predictable schedule, and I've watched it happen enough times to recognize the stages. A team adopts semantic token naming — color-surface…
Here's a pattern that ships in nearly every component library: a provider at the root, a useContext hook inside each component, and a clean API that hides all the wiring. It looks…
Here's a number that should give you pause: one Button component with four variants, six sizes, nine radius values, and a boolean flag produces north of four hundred valid combinat…
There's a reflex in startup codebases that goes like this: the team wraps a third-party component, the wrapper grows, someone complains it's "just extra indirection," and the next…
Here's a failure mode that plays out on a predictable schedule: a team names their primary action color coral because the brand is warm and the designer loves it. Eighteen months l…


















