Building a design system for a team of one
Design systems get talked about as a big-team luxury — something you earn once you have a dozen engineers stepping on each other’s components. But the truth I keep running into is the opposite: a small, deliberate system pays off fastest when you’re the only person on the project.
When you’re working alone, the design system isn’t there to keep a team aligned. It’s there to keep you aligned with the decisions you already made three weeks ago, so you stop relitigating spacing and color on every new screen.
Start with tokens, not components
The mistake I made for years was starting with components — a button, a card, an input — and only later noticing my spacing and color were quietly drifting. Now I start one level down, with tokens: a small set of named values for color, spacing, type, and radius.
It doesn’t need to be elaborate. A handful of spacing steps, a type scale with five or six sizes, a semantic color palette with clear names like surface, border, and text-muted. The point isn’t completeness. The point is that every later decision references a token instead of a magic number.
export const tokens = {
space: { xs: '0.25rem', sm: '0.5rem', md: '1rem', lg: '2rem' },
radius: { sm: '0.375rem', md: '0.75rem', full: '9999px' },
color: {
surface: 'var(--color-white)',
border: 'var(--color-zinc-200)',
textMuted: 'var(--color-zinc-500)',
},
}
Let the components emerge
Once the tokens exist, components almost write themselves — and more importantly, they stay consistent without any effort on my part. A button is just padding tokens, a radius token, and a color token wearing a trench coat. When a client asks to “make everything a little more compact,” I change two spacing values instead of hunting through forty files.
Keep it boring on purpose
The best thing a solo design system can be is boring. No clever abstractions, no premature theming engine, nothing that needs a README to operate. Every bit of cleverness is a tax you pay later, usually at the least convenient moment.
I’d rather have a system I can hold entirely in my head than one that’s technically impressive and practically untouchable. The whole reason it exists is to let me move faster — the moment it slows me down, it’s failed at its only job.