Spring til indhold
WebIndsigter

Hvornår et design system betaler sig — og hvornår det er en mappe

I betaler for et system, når I har mere end én flade — ikke når I har købt Storybook.

Et design system er en kontrakt om tokens, ejerskab og at I ikke opfinder knappen igen. En component library uden de tre ting er en mappe.

11 minutters læsning
Stiliseret browservindue med performance-grafer — tokens og komponenter som ét system i browseren, ikke en løs galleri-mappe.

Beslutningsguide

Hvis I søger efter hvornår et design system betaler sig, eller efter en component library I kan stole på, står I typisk ét sted: to sider ligner ikke hinanden, en designer har tegnet den tredje knap, og nogen foreslår 'vi skal have et design system' som om det var et plugin. Nogen køber Storybook. Nogen kopierer shadcn og kalder det jeres. Nogen laver et Figma-bibliotek, koden aldrig læser.

Marketing-site-posterne handler om stack og SEO. Den her handler om den kontrakt, UI'et skal overholde, når mere end én person rører det. Et design system er ikke et galleri. Det er tokens I kan pege på, en ejer der må sige nej, og en regel om at en ny knap slår en gammel ihjel. Uden de tre ting har I en mappe. I har ikke et system, I kan forsvare.

TL;DR

De vigtigste pointer

  • Et design system er en kontrakt: tokens, én ejer, og at I ikke opfinder den samme knap igen.
  • En component library uden tokens er et galleri. Storybook uden beslutninger er et slideshow.
  • I har brug for et system, når I har mere end én flade, eller mere end én person der shipper UI.
  • På et MVP, der stadig finder produktet, er tre ærlige komponenter bedre end et library, I aldrig rydder op i.
  • Figma-tokens, koden ikke læser, er dekoration. Systemet lever der, browseren renderer.
  • shadcn, Polaris og 'vi kopierede Vercel' er et startkit. De bliver først jeres, når I har sagt nej til halvdelen.

Hvorfor det her overhovedet er vigtigt

Et design system, I ikke har besluttet, koster uger I ikke ser på en sprint-tavle. Hver ny side genåbner farve, spacing og 'er det her knappen?'. Designeren tegner. Udvikleren gætter. Review handler om pixels, ikke om om produktet er rigtigt. I tror I er langsomme til at bygge. I er langsomme til at blive enige om det, I allerede har bygget.

Teams køber den forkerte medicin. De ser et slide med tokens, theming og 'governance', og tegner et system-projekt oven på et site, der stadig skifter budskab hver anden uge. Eller de gør det modsatte: de har ingen kontrakt, så hver landing er et unikt sæt. Begge dele koster. Den ene i teater. Den anden i at I aldrig kan skifte en farve ét sted.

Det er også et performance- og SEO-spørgsmål, ikke kun et æstetik-spørgsmål. Tre forskellige knap-implementeringer er tre steder I kan glemme fokus, kontrast og den state, en crawler og en skærmlæser skal kunne. Et ærligt sæt komponenter er kedeligt — og det er derfor det holder. Variation, I ikke har besluttet, er den stille måde et Next.js-site bliver tungt og ulogisk på.

Vi skriver det, fordi 'design system' er blevet et køb, I tager før I har en sætning om hvad der må variere. Et ærligt setup er kedeligt: en farveskala, en type-skala, otte-punkt spacing, tre knap-varianter, og et navn der må sige nej. Uden den sætning har I Storybook. I har ikke et system, I kan skifte rebrand på.

Hvad et design system faktisk er — og hvad det ikke er

Et design system er de beslutninger, UI'et skal overholde, skrevet så både Figma og koden kan læse dem. Tokens er navngivne værdier: farve, type, spacing, radius, skygge. Komponenter er de få mønstre, I har sagt ja til. Dokumentation er den sætning, der forklarer hvornår I bruger den primære knap, og hvornår I ikke gør. Ejerskab er hvem der må tilføje en fjerde.

En component library er en mappe af komponenter. Den kan være rigtig. Den er ikke et system, før tokens og nej-retten findes. I kan have 40 komponenter og stadig opfinde den 41. I kan have fire og være færdige, hvis de fire er de eneste, I tillader på et marketing-site.

Storybook er et sted at se komponenterne. Det er nyttigt, når I har noget at vise. Det er teater, når I starter med Storybook-setup og 'addon-docs', før I har besluttet om knappen har en loading-state. Et galleri uden kontrakt er hvordan I får et pænt intern-site, produktion aldrig bruger.

Og det er ikke et theme I køber. Tailwind, shadcn, Radix, Polaris, Carbon — de er startkits og primitives. De giver jer et sprog. De giver jer ikke jeres beslutninger. 'Vi bruger shadcn' er en afhængighed. 'Vi har tre knapper, de her tokens, og den her person siger nej' er et system. Det første kan I installere en eftermiddag. Det andet kan I ikke købe.

Det der typisk går galt, når nogen siger design system

Den første fejl er at starte systemet, før produktet har et ansigt. I bruger uger på tokens og 'foundations', mens H1 og tilbuddet stadig skifter. Så bygger I et library til et produkt, I ikke har. Når budskabet lander, passer komponenterne ikke, og I har et system, I skammer jer over at åbne. Tre ærlige blokke på et MVP slår et library, I aldrig tør slette.

Den anden fejl er Storybook som bevis. I kan vise 20 states. Produktion bruger tre, og de tre er kopieret ind i siderne alligevel, fordi 'det var hurtigere'. Et library, siderne ikke importerer, er et internt site. Mål systemet på om en ny landing kan samles af det, I allerede har — ikke på om docs-sitet er pænt.

Den tredje fejl er at kopiere et stort systems API og kalde det jeres. Polaris er bygget til Shopify. shadcn er bygget til at I selv tager stilling. Hvis I lader alle varianter ligge 'så vi er dækket ind', har I et katalog, ingen kender. Et lille team dør af valg. Skær væk, indtil I kan nævne komponenterne uden at åbne en mappe.

Den fjerde fejl er at lade hver side være en undtagelse. 'Den her kampagne skal ligne noget andet'. 'Footer på den side er speciel'. Efter et halvt år har I et system på papiret og et unikt site i produktion. Undtagelsen skal have en ejer og en slutdato — ligesom et feature flag. Ellers er undtagelsen blevet produktet.

Component library vs. design system — to forskellige kontrakter

Component library

En mappe I kan importere. Nyttig. Ikke en kontrakt.

  • Knapper, input, kort — kode I kan genbruge
  • Kan starte som shadcn, Radix eller jeres egne filer
  • Ingen pligt til at siderne faktisk bruger dem
  • Uden tokens og nej-ret bliver den 41. komponent 'lige denne gang'

Design system

Beslutningerne bag mappen — tokens, ejer, og hvad der må variere.

  • Navngivne tokens Figma og CSS begge kan læse
  • Få varianter, og en sætning om hvornår I bruger hvilken
  • Én person må sige nej til en ny knap
  • En ny flade samles af det, I har — undtagelser har en slutdato

Sådan starter et lille team — uden at købe et design-ops-setup

Uden den her rækkefølge får I enten et galleri eller slet ingen kontrakt.

  1. 01

    Skriv hvad der må variere — i fem linjer

    Ikke 'vores brand'. 'Én primær knap, én sekundær, én fare. Én type-skala. Spacing i otte-punkt. Ingen ny farve uden at en gammel dør.' Hvis I ikke kan sige det, er I ikke klar til et system. I er klar til tre ærlige blokke og et nej til den fjerde knap.

  2. 02

    Læg tokens ét sted, koden faktisk læser

    CSS-variabler, et lille token-objekt, eller det tema Next.js og Tailwind allerede kan pege på. Spejl navnene i Figma. Hvis designeren siger primary/500, skal udvikleren ikke gætte en hex. To sandheder er hvordan rebrandet bliver et arkæologi-projekt.

  3. 03

    Byg de få komponenter, siderne allerede gentager

    Knap, input, kort, heading, listing. Ikke et modal-system til et site uden modaler. Hver komponent har de states, I faktisk bruger — hover, fokus, disabled, fejl. Spring 'vi laver alle varianter nu' over. I kan tilføje. I kan ikke ærligt slette 30 ubrugte.

  4. 04

    Giv systemet en ejer og en nej-sætning

    Ejer er et navn, ikke 'design og frontend'. Nej-sætningen er: en ny variant kræver at en gammel dør, eller at I skriver hvorfor den her flade er undtagelsen, og hvornår undtagelsen slutter. Uden nej er library'et et forslag.

  5. 05

    Mål på næste side, ikke på docs-sitet

    Den næste landing eller den næste app-skærm skal kunne samles af det, I har. Hvis den ikke kan, mangler I en komponent — eller I har sagt ja til en undtagelse, I burde have sagt nej til. Storybook kan vente, til mappen faktisk bliver importeret.

Et design system betaler sig, når I kan skifte en farve ét sted — og sige nej til den fjerde knap uden et møde.

Next.js, marketing-site og app — samme pligt, forskellige tidspunkter

Et marketing-site i Next.js kan leve længe på et ærligt sæt: heading, sektion, kort, formular, CTA. Det er et system, selv om I ikke kalder det et. Det bliver et problem, når kampagnesider begynder at medbringe deres egne knapper, eller når WordPress-rester og den nye App Router-side ikke deler tokens. Så er det ikke 'lidt variation'. Det er to brands på ét domæne.

En app ved siden af sitet — portal, checkout, admin — er det tidspunkt, systemet typisk begynder at betale sig. To flader, to teams eller to tempoer, og uden tokens I deler, divergerer I på en måned. Her er en fælles knap og en fælles type-skala ikke pynt. Det er den eneste måde en kunde kan tro, at login og forsiden er samme firma.

Et MVP på typisk 8–14 uger skal finde produktet. Et fuldt system-projekt i den periode er hvordan I bygger et library til et UI, I skrotter. Tag tre komponenter, I tør slette. Tag tokens, hvis I allerede ved, at app og site skal ligne hinanden. Tag ikke 'design-ops', fordi et slide sagde, at rigtige teams har et system fra dag ét.

Hvis I overvejer at skifte stack 'for at få et system', så vær ærlige: I skifter sted, beslutningen kan sidde. Et WordPress-tema med tre child-overrides er heller ikke et system. Et Next.js-site med hex'er i 20 filer er det samme rod med et andet badge. Skift stak hvis I også har andre grunde. Skift ikke fordi et kit lovede, at komponenter er gratis konsistens.

Hvad I typisk bør gøre i den situation, I står i

Venstre er det, I typisk siger. Højre er det næste skridt, vi typisk anbefaler.

  • Situation

    Vi vil have et design system, før sitet har et fast budskab

    Næste skridt

    Tre ærlige blokke og tokens I faktisk læser. Library'et venter, til I kan nævne de sider, det skal bære

  • Situation

    Vi har Storybook, og produktion kopierer alligevel markup

    Næste skridt

    Importér eller slet. Et galleri, siderne ikke bruger, er et internt site — ikke et system

  • Situation

    Figma har tokens, og Next.js har hex'er i CSS

    Næste skridt

    Én sandhed. CSS-variabler eller et token-objekt begge kan pege på. Rebrandet skal være én fil

  • Situation

    Vi har site og portal, og de ligner to firmaer

    Næste skridt

    Fælles knap, type og farve først. Det er det tidspunkt, et lille system typisk betaler sig

  • Situation

    Vi kopierede shadcn og har alle varianter 'for en sikkerheds skyld'

    Næste skridt

    Skær til det, I viser. Et startkit bliver først jeres, når I har sagt nej til halvdelen

Tjekliste før I kalder det et design system

Hvis I mangler flere af punkterne, er sætningen et slide — ikke en kontrakt.

  • Tokens har navne, og koden læser de samme navne som Figma
  • I kan nævne jeres knap-varianter uden at åbne en mappe
  • En navngiven person må sige nej til en ny komponent
  • Den næste landing kan samles af det, I har — eller undtagelsen har en slutdato
  • Storybook, hvis I har det, viser det produktion importerer — ikke et håb
  • I har ikke startet et system-projekt for at undgå at beslutte budskabet

Spørgsmål vi får igen og igen

  • Hvornår betaler et design system sig for et lille team?

    Når I har mere end én flade — site og portal, site og app — eller mere end én person der shipper UI, og I allerede ved, at I skal kunne skifte en farve ét sted. Det betaler sig ikke som et for-projekt på et MVP, der stadig finder budskabet. Tre ærlige komponenter og tokens, koden læser, slår et library I bygger til et UI, I skrotter. Tag systemet, når næste side ellers bliver en undtagelse. Tag det ikke, fordi et slide sagde 'governance'.

  • Er en component library ikke det samme som et design system?

    Nej. Library'et er mappen. Systemet er kontrakten: tokens, få varianter, og en nej-ret. I kan have et fint library og stadig opfinde knappen på hver landing. I kan have et lille system uden Storybook, hvis siderne faktisk importerer de samme tre komponenter, og Figma peger på de samme navne. Kald mappen et library, indtil I har sagt hvad der ikke må variere.

  • Skal vi bruge Storybook, shadcn eller et stort system som Polaris?

    shadcn og lignende primitives er et ærligt startkit, hvis I skærer i det. Polaris og andre store systemer er bygget til et andet firma — nyttige at læse, farlige at kopiere i fuld bredde. Storybook er rigtigt, når I har komponenter produktion bruger, og flere mennesker skal se states. Det er forkert som første commit, før I har en knap, I tør slette. Køb pipen, når læsningen er blevet et produkt. Køb den ikke for at ligne et design-ops-team.

  • Hvad gør vi, når Figma og koden allerede er skredet?

    I starter ikke med at tegne forfra. I tager de tokens, produktion faktisk renderer, giver dem navne, og tvinger Figma til at pege på dem — eller I tager Figma-navnene og retter koden, hvis designet er den sandhed, I vil holde. Én sandhed. Derefter de tre komponenter, siderne gentager. Undtagelserne får en liste og en slutdato. Et nyt 'v2 design system' ved siden af det gamle er den femte sandhed.

  • Kan vi vente med et system, til vi relancerer?

    I kan vente med galleriet. I bør ikke vente med tokens, hvis I allerede har to flader, der skal ligne hinanden efter relanceringen. En relancering uden en kontrakt er hvordan I får et pænt v1 og et rod i v2. Læg navnene, før I tegner alle sider om. Så kan relanceringen skifte værdier ét sted. Ellers er relanceringen et nyt sæt hex'er i 20 filer — igen.

Hvis næste landing kræver en ny knap, I ikke tør sige nej til

Lad os skille tokens, mappe og galleri ad.

Tre komponenter, koden faktisk læser, slår et Storybook I køber før I har et budskab.

Hvorfor vi skrev den her

Det er sådan vi tænker — og det er det vi bygger.

Vores indsigter handler om det vi rent faktisk leverer. Hvis det her ramte noget du arbejder med, så er der en konkret service der ligger tæt på.