A design system is judged six months after launch, not at presentation. By then either the product still looks like the system, or it has quietly become the system plus forty exceptions nobody documented.
Tokens, not screenshots
If a colour exists in Figma as a hex value and in code as a different hex value, drift is already happening. Tokens should be defined once and consumed by both, so a spacing change propagates instead of being reimplemented from a screenshot.
Design every state, not the happy one
Systems degrade fastest at the states nobody designed. An engineer facing an undesigned empty state at 6pm will invent one, and it will not match. Loading, empty, error, partial, permission-denied and overflow states belong in the system from the start.
- Empty: first use, and after a filter returns nothing
- Loading: skeleton, spinner, or optimistic content
- Error: recoverable, unrecoverable, and offline
- Overflow: long names, long lists, long everything
- Permission: visible but disabled, or hidden entirely
Motion as values, not adjectives
'Smooth' and 'snappy' are not implementable. A duration, an easing curve and a stagger interval are. We specify motion in the same values the code will use, which removes an entire category of review-cycle argument.
Designers stay through build
The structural fix that matters most is also the simplest: the designer stays in the sprint through implementation. Fidelity does not erode through malice; it erodes through fifty small unattended decisions. Someone with the system in their head should be present for them.
A design system is not a file. It is an agreement, and agreements need someone in the room.
- Design Systems
- Process
- Tokens