Back to blog
May 29, 2026
Small systems, cleaner products
Small systems, cleaner products
A design system does not have to start as a grand abstraction. It can begin with a handful of decisions that repeat often enough to deserve names.
Begin with repeated decisions
If something repeats, give it a name. If it only happens once, let it stay local.
| Decision | Keep local | Extract |
|---|---|---|
| One-off page copy | Yes | No |
| Repeated route tab behavior | No | Yes |
| Sidebar primitive styling | No | Yes |
| Temporary mock list | Yes | Not yet |
Prefer product-shaped primitives
Components like route tabs and sidebar panels are valuable because they encode behavior and intent together.
type RouteTab = {
label: string
value: string
to: string
}That type is small, but it makes the component easier to trust.
Keep editing easy
The best systems make the next change feel obvious.
A tiny working agreement
- Use existing
Ui*components first. - Keep mock data close to the page until it becomes real shared data.
- Extract components when behavior repeats.
- Prefer boring names over clever names.
Systems should reduce decisions, not hide them.