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.

DecisionKeep localExtract
One-off page copyYesNo
Repeated route tab behaviorNoYes
Sidebar primitive stylingNoYes
Temporary mock listYesNot 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.