research/design-systems-for-small-teams

Design Systems for Small Teams: Constraints Beat Component Libraries

Original Research • October 29, 2026 • 11 minute read

Executive Summary

A design system for a small team is a set of named design decisions, plus a few written rules, that a person can read in five minutes and apply without asking anyone.

When a small team hears “design system,” it usually pictures something built for a company with a hundred designers: a component library, a documentation site, a governance process, a person whose job is to maintain it all. Then the team concludes, reasonably, that this is not for them, and carries on making each page a little differently from the last.

That conclusion skips the useful middle. A design system for a small team can be a short list of named values and a handful of rules, written on one page and enforced by habit. This paper argues that a design system for a small team should begin as constraints: a few colors, one type scale, one spacing scale, one corner radius, and a short list of things you never do. That set removes most of the daily decisions that make a site look inconsistent, and it costs an afternoon.

Consistency comes from having fewer choices, and a small team can get there long before it needs a component library.

What does a component library actually cost?

A component library is a promise: every button, card, and form field will look and behave the same everywhere, because there is one implementation of each. The promise is real, and so is the bill. Someone has to build the components, decide their variants, document them, keep them current when the brand shifts, and teach every new contributor where they live. For a team of three, that maintenance competes directly with the work the components were meant to speed up.

There is also a quieter cost. A library invites generality. The first button gets a primary style, then a secondary, then a ghost version, then a destructive one, then a version with an icon on the left and another on the right. Each variant was a good idea at the time. A year later nobody remembers which to use.

None of this means libraries are a mistake. It means they are a response to a specific pain, namely many people building many surfaces and drifting apart, and a team that doesn’t have that pain yet is paying for a cure it doesn’t need.

What does a design system for a small team contain?

Look at any site that feels coherent and you will find that a very small number of decisions repeat everywhere. Make those decisions once, name them, and most of the visual consistency follows.

Color. Pick a background, a text color, one accent, and a muted tone for secondary text. Add a border color and one or two status colors if the product needs them. That is the whole palette. Name each color for its job (“text,” “muted,” “accent,” “border”) so that changing the look later means changing one value in one place. If the site supports light and dark modes, each name gets two values and the names do not change.

Type scale. Choose one typeface for headings and one for body, or a single family for both. Then define a short ladder of sizes, perhaps six steps, with a line height and weight for each. The point is that a page never contains a font size that isn’t on the ladder. Anyone who wants something “a bit bigger” must choose the next step up, which is usually the better answer anyway.

Spacing. Pick a base unit and a few multiples of it. Every gap, padding, and margin comes from that list. Spacing is where inconsistency hides, because a difference of three pixels is invisible in isolation and obvious in aggregate. A fixed scale makes rhythm automatic.

Radius and elevation. Decide how rounded corners are, and whether anything casts a shadow. Two radii and one shadow style cover most products. The decision matters less than making it once.

Together those four lists fit on a single screen. Expressed as CSS custom properties, they are a few dozen lines at the top of a stylesheet, and every component in the site refers to them by name.

A starting token set

Here is the whole thing as CSS custom properties. It is deliberately small. Every value has a name that describes its job, and the dark theme redefines the same names.

:root {
  /* color: named for the job, not the hue */
  --bg: #ffffff;
  --text: #1b1f24;
  --muted: #5b6470;
  --accent: #1f5fd1;
  --border: #d9dde3;

  /* type scale: base 16px, ratio 1.25 */
  --step--1: 0.8rem;
  --step-0: 1rem;
  --step-1: 1.25rem;
  --step-2: 1.563rem;
  --step-3: 1.953rem;
  --step-4: 2.441rem;

  /* spacing: 4px base unit */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-6: 1.5rem;
  --space-8: 2rem;
  --space-12: 3rem;

  /* shape */
  --radius: 8px;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #12151a;
    --text: #e8eaed;
    --muted: #9aa3ad;
    --accent: #6aa0ff;
    --border: #2a3038;
  }
}

Computing a type scale instead of guessing

A modular scale is one formula: size at step n equals base multiplied by ratio to the power n. With a base of 16 pixels and a ratio of 1.25, the steps come out as follows.

StepCalculationPixelsRem
-116 / 1.2512.80.8
016161
116 x 1.25201.25
216 x 1.25 x 1.25251.563
316 x 1.25^331.251.953
416 x 1.25^439.062.441
516 x 1.25^548.833.052

A smaller ratio gives a gentler ladder for dense, text-heavy pages. A larger ratio gives bolder contrast between headings and body. The point is not that 1.25 is correct. The point is that the sizes are derived, so nobody argues about them.

Two layers of names

As the token set grows, split it into two layers. Raw values sit at the bottom, and meaningful names sit on top of them. Components only ever touch the top layer.

  primitives            semantic tokens           components
  ------------          ---------------           ----------
  blue-600       --->   --accent          --->    button, link
  gray-900       --->   --text            --->    body, headings
  gray-200       --->   --border          --->    card, input

With this split, a rebrand changes the arrows on the left, and dark mode changes them again. The components never notice.

Why do constraints speed up decisions?

The standard objection is that constraints slow creative work. In practice the reverse happens, for a plain reason: unconstrained choices are expensive. Choosing a color from sixteen million options takes real attention. Choosing from five takes none, and the attention goes to the page’s actual problem, which is what it needs to say and in what order.

Constraints also make review cheap. When a reviewer sees a page built from the shared values, the question “does this look right?” reduces to “does the content work?” When a page uses ad hoc values, every difference has to be examined to decide whether it was deliberate. A system turns accidents into visible exceptions.

And constraints survive handoffs. A freelancer joining for two weeks, a new hire, or the founder returning to a page they last touched a year ago can all produce on-brand work by reading one short document and using the named values. Nobody has to inherit taste.

A design system is a set of decisions you stop having to make.

What to write down

Documentation is where small systems usually fail, in one of two directions: nothing is written, or a sprawling document is written once and never updated. The workable middle is a single page that a person can read in five minutes.

That page needs four things. First, the named values themselves: the colors with their jobs, the type ladder, the spacing steps, the radii. Second, a short list of rules, written as plain sentences: accent color is for actions only; body text never goes below a certain size; one primary button per screen; images get the standard radius. Third, a short list of patterns you reuse, each described in a line or two, such as how a card is built or how a form field and its error message sit together. Fourth, a sentence explaining how to change the system, even if the answer is “tell the person who owns the stylesheet.”

Keep this page next to the code, in the same repository, so it moves with the work. A style guide that lives in a separate tool is a style guide that will drift.

The rules matter more than the values. Anyone can look up a hex code, but a rule such as “never place text over a photograph without an overlay” encodes a lesson someone already paid for, and it is the part that keeps the next page from repeating the mistake.

When does a small team need components?

At some point a team does need components, and the signs are fairly clear. The same pattern is being rebuilt by hand for the third or fourth time. Two people have shipped slightly different versions of the same element. A change to the brand requires hunting through many files. A new contributor asks where the real version of something lives and nobody can say.

When those signs show up, extract components from patterns that already exist. Do not design them in advance. Because the tokens are already named and the rules already written, the extraction is mostly mechanical: the pattern you documented becomes the component, and its variants are the ones you actually used, not the ones someone imagined. This is the same discipline we describe in our argument for boring web architecture: add a piece when the pain is real and can be named, and not before.

A useful test for any proposed component is whether you can write its rule in one sentence. If “use this for every call to action, with one per screen” is the whole description, it is ready to be code. If the description needs three paragraphs and exceptions, the pattern has not settled yet.

Which level of system fits? A decision table

LevelWhat it isEffort to maintainFits when
Ad hocEach page styled as neededNone, until the drift hurtsOne page, one person, short life
Tokens and rulesNamed values, one page of rules, in the repositoryMinutes per changeSmall team, a few surfaces, any lifetime
Component libraryShared, documented components with variantsA recurring chunk of someone’s timeMany contributors, many surfaces, repeated patterns
Full design systemLibrary, documentation site, governance, ownerA dedicated roleAn organization with many teams

Most small teams belong in the second row, and the best of them know exactly which signs would push them into the third.

A worked example (illustrative)

Take a hypothetical three-person garden design studio with a marketing site, a quote form and a small client portal. They have never written anything down, and the stylesheet contains eleven shades of green, nine font sizes and margins of every value from 10 to 37 pixels.

An afternoon of reasoning goes like this. First, list the greens, notice that three are used for actions and the rest are accidents, and name one --accent. Second, list the font sizes in use and snap each to the nearest step on the ladder above; two disappear because they are within a pixel of a step. Third, replace stray margins with the nearest multiple of the spacing unit, and review the pages that visibly change. Fourth, write five rules: accent is for actions only; one primary button per screen; images get the standard radius; body text never drops below step 0; never put text on a photo without an overlay.

The result is not a new look. It is the old look with the accidents removed, and that is usually enough for visitors to feel that the site got more professional without being able to say why.

On our own projects we keep the tokens in the same repository as the pages, which are built as static Astro output. Because the system is just named CSS values, it needs no separate tooling and nothing to deploy.

A short starting checklist

If you have no system today, an afternoon is enough to begin.

  1. List every color currently in the stylesheet, then reduce it to a named handful.
  2. Collapse the font sizes in use to a ladder of about six steps.
  3. Choose a spacing unit and replace stray values with multiples of it.
  4. Pick one corner radius and one shadow, or decide on none.
  5. Write the one-page document, and commit it beside the code.

Conclusion

A short list of named values and a few written rules deliver most of what a component library promises, at a fraction of the weight, and they leave room to grow. Start with the constraints, write them where the code lives, and let the components emerge from the patterns you find yourself repeating. When the system does need to become bigger, it will already know what it is made of.

Frequently asked questions

What is a design system for a small team?

It is a short list of named design decisions and a few written rules, kept on one page beside the code. Typically that means a handful of named colors, one type scale, one spacing scale, one corner radius, and rules such as one primary button per screen. It removes everyday choices so pages stay consistent.

Does a small team need a component library?

Not at first. A component library costs ongoing effort to build, document and maintain. Most small teams get the majority of the benefit from named tokens and written rules. Extract components when the same pattern has been rebuilt three or four times, two people have shipped different versions of it, or brand changes mean hunting through many files.

What are design tokens?

Design tokens are named values for design decisions, such as a text color, a spacing step or a corner radius. In CSS they are custom properties defined once at the top of a stylesheet. Components refer to the names, so changing the look later means changing one value in one place.

How do you build a type scale?

Pick a base size and a ratio, then multiply repeatedly. For example, a base of 16 pixels with a ratio of 1.25 gives steps of about 12.8, 16, 20, 25, 31.25, 39 and 49 pixels. Choose the steps you need, usually about six, and never use a size that is not on the ladder.

How long does it take to set up a design system?

The starting version takes an afternoon: reduce the colors in use to a named handful, collapse font sizes into about six steps, pick a spacing unit and one radius, then write a one-page document and commit it next to the code. It grows from there as patterns repeat.

When should a small team grow its design system?

Grow it when the pain is specific and visible: the same pattern rebuilt by hand several times, different versions of one element in circulation, brand changes that require editing many files, or new contributors who cannot find the real version of something. Extract components from patterns that already exist.

More from Research

← All research