Why I don’t always build a design system from scratch.
What I keep, what I adapt and when an existing foundation makes more sense.
A design system is useful when it helps a team make better product decisions together. Building every component from zero is not always the best place to start.
Choose a foundation with a purpose.
For GifTaTy, we used Untitled UI as a starting point. It gave us an existing component foundation that we could adapt to the product, rather than spending the early stages recreating familiar controls.
The important work was deciding what fitted our needs and what needed to change. Inputs, button behaviour, and the corner radii of controls, cards, and modals all needed attention.
Separate the core from the product.
The core contains the reusable building blocks: typography, colours, buttons, inputs, and other controls. Product patterns combine those pieces with real content and behaviour.
A gift image and a reservation status can exist as separate elements. Combined with the right controls and information, they become part of a gift detail experience. The composition should explain the product state, not simply display a collection of components.
- Adapt the core when the need is shared across the product.
- Compose product patterns from the core whenever possible.
- Check available, reserved, and split-reservation states together.
Use real states to test the system.
A clean component gallery can hide difficult decisions. A reservation timer, a changing contribution, or a disabled action brings those decisions back into view.
That is why I prefer showing the foundation inside a real product flow. It makes missing states and inconsistent behaviour easier to discuss with the team.