Somewhere around the third design system I built, I noticed the same pattern: we'd start by designing tokens to be reused, and end by quietly inventing a new layer on top of them so the team could actually ship things.
Reuse, it turns out, is a deceptive goal. It optimizes for the moment the token is created, not the months it has to survive.
Reuse vs. composition
A reusable token says: "Use this exact value everywhere." A composable token says: "Use this primitive, scoped by intent." The first feels safer. The second is what actually scales.
Compare the two:
Reusable: --color-blue-600 is your CTA. Everyone uses it. One day marketing wants a campaign accent.
Composable: --color-accent-default is your CTA, mapped to blue-600. Marketing's campaign is --color-accent-campaign. Same primitives, different intent.
Reuse pushes the conflict to the people writing components. Composition resolves it at the system layer.
