Design Systems Framework: Raison d’être

Mission Statement

To make building, maintaining and distributing your design-system simpler.

The Problem

Design systems, help us efficiently apply and distribute our design opinions throughout our products. This efficiency helps us create user experiences that are more consistent across products, which lends to opportunities for cohesive interoperability. (Bitbucket and Jira for example or MacOS and iOS)

A substantial amount of effort in setting up design-systems is spent implementing and (usually) repeating functionality around:

- Accessibility standards
- Interaction and state management
- Platform dependent best practices
- Compositional API

These are often times the same or very similar across most design-systems.

Design Systems as a composition

The conventional way of looking at a design-system is a library of Components, associated documentation and patterns. However we can also think of them as a composition of design / thematic options over encapsulated functionality.

ds = f(t)

Our hypothesis is that by providing building blocks that represent f , we empower design-system authors to focus more of their energy on the bespoke aspects of their design-system, and not on the boiler-plate.

Shared tooling and not just components

Best practices around building and maintaining design systems don’t just extend to the creation of components, but also to things like:

  • Build processes
  • Versioning and Publishing workflows
  • Documentation artifacts - website - technical documentation (prop-types, tokens etc) - conceptual documentation - usage documentation (upgrade guides, how-too) - live examples - code snippets
  • Documentation best practices
  • Development environments

The aim of DSF is not just to make building your components easier, but also building and maintaining your design-system. This means providing:

  • Build tooling and guidelines
  • Documentation tooling and guidelines
  • Components
  • Utilities for building components
  • Versioning and Publishing tools.

Not every design system should be built in the same way, but where possible we want to empower design-system authors by sharing tools that make building design-systems simpler and faster.

Design Systems Framework Patterns

RenderProps

Components API

Styles API

Working on Design Systems Framework inside another project

To iterate on DSF while working on another project without having to publish DSF after every change, you can use link-monorepos-badly.

Make sure you've done an install in DSF and your project.

# From your clone of the DSF repo
yarn
cd ../another-project
# If you're using Yarn Workspaces in your project
yarn
# If you're using Bolt in your project
bolt

Install link-monorepos-badly globally

yarn global add link-monorepos-badly

Now you can use link-monorepos-badly to link packages into your project

link-monorepos-badly link ../design-system

When you're done linking, you can unlink and reinstall the packages

link-monorepos-badly unlink ../design-system
# If you're using Yarn Workspaces in your project
yarn
# If you're using Bolt in your project
bolt

Once a new release of DSF has happened, you can upgrade all the DSF packages with the upgrade command

link-monorepos-badly upgrade ../design-system
# If you're using Yarn Workspaces in your project
yarn
# If you're using Bolt in your project
bolt