design frontend css

Design Systems for Developers: Why You Should Care

· 3 min read

Design systems aren’t just style guides. They’re the shared language between design and code. And as someone who sits at the intersection of both, I’ve seen what happens when that language breaks down.

The problem with winging it

Every project starts the same way. You open a blank file, write a few components, pick some colors. It feels fast. It feels free. Then six weeks later you have fourteen slightly-different button variants, three font sizes that are all “almost 16px,” and spacing that feels vaguely wrong everywhere.

This isn’t a discipline problem. It’s a system problem — or rather, the lack of one.

What a design system actually is

Forget the Figma libraries and the Storybook docs for a second. At its core, a design system is just a set of decisions made once so you don’t make them again.

  • What are your spacing values? (4, 8, 12, 16, 24, 32, 48, 64)
  • What colors mean what? (not just hex codes — semantic roles)
  • How do states look? (hover, focus, disabled, loading)
  • What typographic scale do you use?

When these decisions live in code — in a tokens.css, a Tailwind config, a theme object — they become constraints that guide every future choice. Constraints feel limiting until you realize they actually make you faster.

Tailwind is a design system (sort of)

Using Tailwind CSS is already adopting a lightweight design system. The spacing scale (p-4 = 16px, p-8 = 32px), the color palette, the breakpoints — these are someone else’s considered decisions that you’re inheriting.

The trick is extending them intentionally rather than overriding them arbitrarily. Every time you write style="margin: 13px" you’re punching a hole in the system.

/* Bad: one-off values that live nowhere */
.card {
  padding: 13px 17px;
  border-radius: 7px;
}

/* Good: values from the system */
.card {
  @apply px-4 py-3 rounded-xl;
}

The token mindset

Design tokens are variables with semantic meaning. Not #5b5bd6--color-accent. Not 16px--space-md. The difference matters when you’re changing a theme or fixing contrast issues at 11pm before a demo.

In Tailwind v4, this is even cleaner:

@theme {
  --color-accent: #5b5bd6;
  --color-accent-hover: #4a4ac4;
  --font-display: 'Inter', sans-serif;
}

Now bg-accent is a real utility class tied to a named decision, not a magic number.

Start small

You don’t need a full-blown design system for a side project. You need three things:

  1. A spacing scale — pick multiples of 4, stick to them
  2. A type scale — four or five sizes max, named by role (text-body, text-heading, text-caption)
  3. A color palette — background, surface, text, accent, danger. That’s it.

Write these down somewhere in your codebase. Your future self — and anyone who works with you — will thank you.

The real payoff

The payoff isn’t a perfect system. It’s decision fatigue reduction. When the system answers “what spacing should this be?” you spend that mental energy on the actual hard parts: interaction design, performance, accessibility.

Build the system once. Let it do the boring work. Go build something interesting.

That's all for now.

Got a project in mind?
Let's build it