Start with the product slice, not a library checklist
A startup can usually identify more design-system work than it can responsibly maintain. Colors, typography, spacing, grids, components, motion, content patterns, accessibility guidance, documentation, tooling, and governance can all become shared infrastructure. That doesn't make all of them current requirements.
First, define the part of the product where a recurring problem is visible. This product slice should be small enough to inspect but broad enough to reveal whether a decision is genuinely shared. Record the critical user flow, representative surfaces, recurring elements, supported modes and environments, current contributors, and any surface that must remain unchanged.
- User flow: Name the task a person is trying to complete, such as creating a project and inviting a collaborator.
- Representative surfaces: Select screens that expose different uses of the decision, such as a landing page, settings form, and dashboard table.
- Recurring elements: Note the roles or patterns that already appear in more than one relevant place.
- Modes and environments: Record only what the product currently supports, such as light and dark modes or web and mobile.
- Contributors and consumers: Name the designer, developer, coding agent, web builder, repository, application, or component that will read or implement the decision.
- Protected surfaces: Name places that shouldn't change during the first controlled check, such as destructive actions or an unrelated marketing page.
A product slice is an evidence boundary
A check across one dashboard flow can support a decision about that flow. It doesn't automatically establish compatibility with a mobile application, another framework, or a future product.
Readiness is observable, not a universal threshold
There is no reliable rule that a pattern becomes system-worthy on its third appearance, when a startup hires its second designer, or at a particular funding stage. Those facts may prompt a review, but they don't decide the scope on their own.
Look for several signals together. People keep making the same decision, equivalent surfaces have drifted, or another person or agent now has to interpret the choice. A correction may need to reach several consumers. A new mode or delivery platform may also make local values harder to reconcile. As the decision reaches further and becomes costlier to correct, the case for shared ownership gets stronger.
Ask what would improve if the decision became shared. If you can't name the affected consumer, expected observation, and correction owner, you don't yet have an admission case. Creating a token file or component without those answers adds another artifact to maintain but leaves control of the decision unresolved.
Use an admission register before adding anything
The admission register is the gate between a local choice and the minimum viable system. Complete one row for each proposed token group, typography rule, spacing rule, layout pattern, component contract, document, or export. A blank field is useful evidence because it shows what still needs to be decided before adoption.
Recurring problem:
Repetition evidence:
Affected flows or surfaces:
Named consumers:
Decision authority:
Deliverable:
Correction owner:
Expected observation:
Disposition: adopt | deferHere is a completed hypothetical row. It demonstrates the decision method, not a result observed in a particular startup.
Recurring problem: Muted explanatory text uses unrelated gray values.
Repetition evidence: The settings form, empty state, and dashboard table each implement the same role independently.
Affected flows or surfaces: Account setup and dashboard review.
Named consumers: Settings form, EmptyState component, dashboard table, frontend developer, coding agent.
Decision authority: Product designer approves the semantic role and intended emphasis.
Deliverable: A muted-foreground semantic role plus its project mapping and usage note.
Correction owner: Frontend lead owns mapping and removes conflicting local values.
Expected observation: Named explanatory-text consumers resolve through the approved role; the destructive-action text and marketing site remain unchanged.
Disposition: Adopt.In a small startup, one person may hold both the authority and correction-owner roles. The responsibilities are still different. One person approves what the design decision means; the other fixes the layer that fails to carry it into the product.
Inspect a real kit as a source of candidates
Once you have an admission row, compare its required deliverable with a published kit. Select only the artifacts justified by that row, then map and verify them in your own product.
Keep a deferral log with promotion triggers
Deferring an item doesn't mean rejecting it forever. It means the current evidence doesn't justify shared ownership. Record why the item stays local, who watches it, which observable event should reopen the decision, and what evidence promotion would require.
Deferred item:
Why it remains local:
Current location:
Owner:
Reconsideration trigger:
Evidence required for promotion:
Status: deferred| Why local now | Reconsideration trigger | Evidence needed | Owner | |
|---|---|---|---|---|
| Dashboard card component | Only one supported card structure exists | A second flow needs the same structure or the first card begins to fork | Named consumers, shared behavior, states, and protected surfaces | Frontend lead |
| Dark-mode token values | Dark mode is not currently supported | Dark mode enters an approved product scope | Mode requirements, representative surfaces, contrast inspection, and mapping owner | Product designer |
| Mobile spacing scale | The current product slice is web only | A supported mobile application or viewport-specific system becomes a current deliverable | Repeated spacing roles, target environments, exceptions, and consumer observations | Design owner |
| Component documentation site | One team works directly in the repository and existing guidance answers current questions | More contributors cannot identify supported states or usage rules from current artifacts | Repeated handoff failures, named readers, required documentation surfaces, and maintainer | Engineering owner |
Avoid triggers such as "when we have time" or "when the company grows." You can't inspect them. A new supported mode, another consuming product, repeated local divergence, or recurring correction work can be observed and tied to evidence.
Separate decisions, artifacts, contracts, and exceptions
A small system is easier to understand when each layer has a distinct job. Approved design decisions define intent, such as what muted text means. Portable artifacts carry selected values and rules through tokens, CSS, a Tailwind export, or DESIGN.md. Component contracts define recurring structure and supported states, while product mappings connect upstream roles to the implementation. Local exceptions record deliberate divergence in a named place.
| What it owns | Example | Evidence to inspect | Typical owner | |
|---|---|---|---|---|
| Approved decision | Semantic intent and permitted use | Muted text has lower emphasis than primary body text | Current decision record and usage rule | Product or design authority |
| Portable artifact | Transferable representation of selected decisions | DTCG tokens, CSS variables, Tailwind mapping, or DESIGN.md | Source version and generated files | Kit or design-system owner |
| Component contract | Reusable structure, variants, and states | Which button variants and states are supported | Component implementation and representative states | Component owner |
| Project mapping | How a source role reaches local consumers | Upstream muted-foreground maps to the project's runtime variable | Configuration, built artifact, and consuming code | Frontend owner |
| Local exception | A bounded, approved departure | A data visualization uses a separate contrast treatment | Exception record, reason, scope, and owner | Surface owner |
DESIGN.md can preserve intent, layout guidance, motifs, and constraints for a human or coding agent. Token exports can carry values in machine-readable forms. Neither proves that a consumer selected the correct role, preserved an exception, or rendered the intended result. Each downstream step needs its own evidence.
Ambient Sage as a bounded source-to-consumer example
Ambient Sage is a public Identity Forge kit with semantic colors, a typography system that uses Plus Jakarta Sans for body and heading roles and JetBrains Mono for technical strings, spacing and layout guidance, DESIGN.md, and implementation exports. Its published visual direction pairs warm sage surfaces with a vivid yellow accent. These source artifacts are available, but they don't prove that the kit fits an uninspected startup product.
Token specimen · real values
Ambient Sage
Live renderAmbient Sage's actual tokens — the same values its exports use.
Suppose a startup's admission register finds inconsistent semantic colors and typography across a web dashboard, while its card structures and delivery stack are still changing. The team could classify the kit candidates this way:
| Disposition | Named consumer | Owner | Required check | |
|---|---|---|---|---|
| Semantic light and dark color tokens | Adopt selected roles | Dashboard shell, forms, table, developer, coding agent | Product designer approves intent; frontend lead owns mapping | Verify role meaning, supported modes, generated artifact, and representative UI |
| Typography roles and available weights | Map | Headings, body copy, labels, technical strings | Design owner selects roles; frontend lead maps files and aliases | Confirm required families and weights are available and inspect supported content |
| Spacing scale | Map selected recurring values | Page shell, form groups, table cells | Frontend lead | Confirm repeated spacing roles before replacing local values |
| Layout guidance | Adopt only rules matching the current dashboard slice | Dashboard shell and representative states | Product designer | Compare each selected rule with current flow and responsive requirements |
| DESIGN.md | Adopt as upstream guidance with project-specific additions | Developers, coding agents, and web builders | Design-system owner maintains source; repository owner maintains local additions | Check that selected rules, exceptions, authority, and non-goals are explicit |
| Exports | Choose and map only the format used by the project | Build pipeline and runtime theme | Frontend lead | Record format and source version, inspect generated output, then inspect consumers |
| Component contracts | Defer | Future shared components | Component owner not yet assigned | Reconsider when a recurring structure has named variants, states, consumers, and ownership |
Adopt means the upstream decision is approved for the stated scope. Map means the source decision still needs an explicit project representation and owner. Defer means the artifact or layer is available but hasn't earned shared status. Don't upgrade any of those labels to compatible or accepted until the recorded observations exist.
Do not confuse intake with validation
A kit preview shows the source system. A valid export shows that an artifact was produced. A rendered screen shows one consumer under one set of conditions. Keep those observations separate. None proves whole-product quality or accessibility on its own.
Write the handoff as a source-to-consumer record
A developer, coding agent, or web builder needs enough context to preserve approved decisions and expose unresolved ones. The handoff should pin down the source, authority, selected artifacts, mapping ownership, consumers, exceptions, expectations, observations, and disposition.
Source URL: https://identityforge.io/kits/ambient-sage
Source version: Record the exported kit version or immutable identifier at intake. For this frozen example, the dossier observed the page on 2026-09-11; that date is not a kit release number.
Decision authority: Product designer approves selected semantic and typography roles.
Selected artifacts: Semantic color roles, typography roles, selected spacing values, applicable layout guidance, DESIGN.md, project-compatible export.
Project mapping owner: Frontend lead.
Named consumers: Dashboard shell, settings form, table, shared controls, developer, coding agent.
Permitted exceptions: List exact surface, reason, approver, and owner; none are implied.
Expected behavior: Selected roles reach named consumers in supported modes; protected surfaces remain unchanged.
Observed behavior: Pending until artifact and representative-UI inspection is recorded.
Disposition: Pending evidence.The source version matters because a later export may contain different values or guidance. Record an immutable version if the source provides one. Otherwise, record the retrieval date and retain the exact reviewed artifact according to your project's normal source-control policy. Don't invent a release number.
Named consumers should be specific enough to inspect. "The app" is too broad for a first check; "settings form muted text in light mode" is inspectable. The handoff can expand once the team has evidence that another consumer belongs in the shared scope.
Run one controlled acceptance check
A controlled change tests the recorded chain from one approved decision to selected consumers. It doesn't certify the whole design system. Choose a semantic decision whose intended reach and protected surfaces you can predict before making the change.
- 1
Freeze the check
Before editing anything, record the source version, selected semantic role, supported mode, representative consumers, protected surfaces, test content, current exceptions, and owner.
Decision under check: muted-foreground Representative consumers: settings help text; dashboard table metadata Protected surfaces: destructive action label; primary body copy; marketing page Test content: short label; two-line explanation; long table metadata string Expected result: named consumers change through the shared role; protected surfaces do not Initial disposition: pending - 2
Change one approved decision
Change the selected semantic role at its authoritative source. Regenerate or update only the recorded downstream artifacts through the project's established mapping path.
Change: muted-foreground source value A -> candidate value B Authority: product designer Mapping owner: frontend lead In-scope mode: light Out of scope: dark mode, component structure, copy changes - 3
Inspect artifacts before the UI
Confirm that the intended export or generated file contains the changed role and that unrelated roles haven't changed. A missing value, renamed identifier, unexpectedly broad diff, or stale output is an artifact-level failure.
Inspect: source record; selected export; project mapping; built output Pass: intended role and value are traceable at each recorded layer Fail: role is missing, renamed without approval, stale, duplicated, or accompanied by unexplained changes - 4
Inspect representative consumers and protected surfaces
Render the recorded mode and content. Check whether each named consumer uses the changed role, whether local overrides mask it, and whether protected surfaces remain stable. Record what you see instead of changing the expectation after the fact.
Settings help text: expected changed; observed ______ Dashboard metadata: expected changed; observed ______ Destructive label: expected unchanged; observed ______ Primary body: expected unchanged; observed ______ Marketing page: expected unchanged; observed ______ - 5
Choose a bounded disposition
Accept only the tested change when expectations and observations match. Revise when the decision is sound but a mapping, artifact, consumer, or exception needs correction. Block when authority is unclear, the change reaches protected surfaces, evidence is missing, or the intended consumers can't be traced.
Disposition: accept | revise | block Evidence attached: Mismatch owner: Required correction: Retest scope: What this result does not prove:
| Expected observation | Inspection criterion | Failure condition | Result | |
|---|---|---|---|---|
| Settings help text | Uses the updated muted-foreground role | Inspect mapped value and rendered short and two-line content | Literal or local value masks the role, or emphasis no longer matches the approved intent | Record accept, revise, or block |
| Dashboard table metadata | Uses the same updated role | Inspect the mapped role with the long metadata fixture | Consumer remains stale, truncation hides the review target, or another role changes unexpectedly | Record accept, revise, or block |
| Destructive action label | Remains unchanged | Compare built artifact and rendered control before and after | Protected role or control changes | Block |
| Primary body copy | Remains unchanged | Inspect representative body text | Body role aliases to the changed value without approval | Block or revise the mapping |
| Marketing page | Remains unchanged because it is outside this product slice | Inspect its relevant artifact and representative render if it shares the pipeline | The change crosses the recorded scope without an approved mapping | Block |
A passing result supports one claim: under the recorded source version, mode, content, and consumers, this semantic decision propagated as expected, and the inspected protected surfaces remained stable. It doesn't prove that every token is correct, every component follows the system, users prefer the change, or the product meets an accessibility standard.
Expand only when the evidence changes
After accepting the first decision, return to the admission and deferral records. Promote another item only after its trigger occurs and the required evidence becomes available. That might mean adding a component contract once a structure has repeated variants and states, introducing dark-mode mappings when dark mode becomes supported, or expanding documentation when new contributors repeatedly encounter the same ambiguity.
Maintenance is part of the minimum. Every admitted decision needs an authority, every mapping needs a correction owner, and every exception needs a bounded scope. If nobody owns an artifact after adoption, apparent reuse can conceal stale or conflicting decisions.
Choose one recurring product problem today and complete a single admission-register row. If you can't fill in the authority, correction owner, expected observation, and disposition, keep the decision local and record the evidence that would make you reconsider it.
Sources
- Minimum Viable Design System: Supports starting with current design and development problems, adding only useful system work, and validating additions continuously through real use.
- A lean approach to design systems: Describes a lean startup design system as a small set of standards, components, guidance, documentation, and version control, rather than an enterprise-scale program.
- When Does a Startup Need a Design System? The Honest Answer: Provides startup-stage context and identifies repetition and additional contributors as signals for considering shared design-system work.
- Ambient Sage Design Kit: Documents the public Ambient Sage kit, including its visual direction, semantic colors, typography choices, spacing and layout guidance, and implementation-oriented contents.
- Identity Forge: Documents Identity Forge design-kit delivery, including semantic tokens, typography, spacing, layout guidance, DESIGN.md, and implementation exports for agents and builders.
- How to generate a DESIGN.md (and what it is): Explains that DESIGN.md carries design intent, usage rules, component treatments, motifs, and explicit constraints while remaining distinct from executable token artifacts.