Thibault Mahé
"I build design systems
for startups and larger companies."
Patch + patch + patch + patch + ...
A set of interconnected patterns and shared practices coherently organized to meet a specific strategy
Entropy always "infects" a static styleguide
A "zombie styleguide" (Jina Bolton) is an
"abandoned" styleguide, half-living half-dead.
A design system is a process that constantly takes control over the growth of the entropy
"A system is an interconnected set of elements that is coherently organized in a way that achieves something."
Donella Meadows
A system is made of:
The digestive system
From Jesse James Garrett
"Elements of the User Experience"
From Jesse James Garrett
"Elements of the User Experience"
"A Design System isn’t a Project.
It’s a Product, Serving Products."
Nathan Curtis
Screenshot from Alex Osterwalder's
"Value Proposition Design"
"A system is an interconnected set of elements that is coherently organized in a way that achieves something."
Donella Meadows
Screenshot from Brad Frost's "Atomic Design"
Screenshot from Stephen Kieran & James Timberlake's "Refabricating ARCHITECTURE"
Screenshot from Marcin Treder's article
"Design Systems Are a Language. Product Is a Conversation"
Screenshot from Brad Frost's "Atomic Design"
Why using metaphors?
"An interface inventory is a comprehensive collection of the bits and pieces that make up your interface."
Brad Frost
The screenshot approach from Brad Frost
The paper and scissors approach from Charlotte Jackson
Assets and design "basis" are often still
managed locally and not at the system scale.
www.lightningdesignsystem.com
"Design tokens are the visual design atoms of the design system — specifically, they are named entities that store visual design attributes. We use them in place of hard-coded values [...] in order to maintain a scalable and consistent visual system for UI development."
– Salesforce
Design tokens are...
visual design attributes...
...aiming for:
What can I do?
Every design system offers options.
Options are visual identity properties.
# Colors options# ---------------------blue-base: '#2b7de8'blue-deep: '#38bfea'blue-dark: '#3239e8'grey10: '#262729'grey20: '#313131'grey30: '#4d4d4d'grey40: '#888'grey50: '#aeaeae'grey60: '#ccc'grey70: '#eaeaea'grey80: '#f4f4f4'
What can I do?
Every design system offers options.
Options are visual identity properties.
# Colors options# ---------------------blue-base: '#2b7de8'blue-deep: '#38bfea'blue-dark: '#3239e8'grey10: '#262729'grey20: '#313131'grey30: '#4d4d4d'grey40: '#888'grey50: '#aeaeae'grey60: '#ccc'grey70: '#eaeaea'grey80: '#f4f4f4'
What choice do I make?
Design systems submit decisions.
Decisions are options applied to contexts.
# Colors decisions# ---------------# globalprimary-color: $blue-basetext-color: $grey30body-background: $white# objectsnavbar-link-text-color: $whiteheadband-color: $blue-basehr-color: $grey40
// Design specifications// ----------------------.c-button { display: inline-block; font-size: $button-font-size-default; padding: $space-m; color: $text-color; background-color: $white; border-radius: $button-border-radius-default;}.c-button--primary { background-color: $primary-color; color: $white;}
At the root of the files system
Legible & editable
by anyone
# Typographyfont-family: base: 'Lato, Helvetica' heading: 'Montserrat, Helvetica'font-size: xs: 8px s: 16px m: 20px l: 28px xl: 32px xxl: 40pxfont-weight: light: 300 regular: 400 medium: 500 bold: 700
Opened to everyone to foster
collaboration and maintainability
Tokens are compiled with a task runner
// Compile Design tokens// -----------------------gulp.task('build-token', function() { return gulp.src([paths.designTokens.files]) // transform tokens from yaml into json .pipe(yaml()) // store json .pipe(gulp.dest(paths.designTokens.jsonOutputFolder)) // transform tokens from json into scss .pipe(jsonSass({ delim: '-', })) // store to output folder .pipe(gulp.dest(paths.designTokens.outputFolder));});
Json output
{ "font-family": { "base":"Lato, Helvetica", "heading":"Montserrat, Helvetica" }, "font-size": { "xs":"8px", "s":"16px", "m":"20px", "l":"28px", "xl":"32px", "xxl":"40px" }, "font-weight": { "light":300, "regular":400, "medium":500, "bold":700 }}
Sass output
$font-family-base: Lato, Helvetica;$font-family-heading: Montserrat, Helvetica;$font-size-xs: 8px;$font-size-s: 16px;$font-size-m: 20px;$font-size-l: 28px;$font-size-xl: 32px;$font-size-xxl: 40px;$font-weight-light: 300;$font-weight-regular: 400;$font-weight-medium: 500;$font-weight-bold: 700;
How the Comet design system present its option tokens.
Can our "decision" tokens match our actual decision approach?
"Object-oriented CSS"
// Button definition// ----------------------.c-button { display: inline-block; font-size: $font-size-m; padding: $space-m; color: $text-color; background-color: $white; border-radius: $border-radius-base; &--primary { background-color: $primary-color; color: $white; }}
"Functional CSS"
// "Pure" CSS classes// ----------------------.u-bg-white { background: $white; }.u-bg-grey { background: $grey; }.u-bg-primary { background: $color-primary; }.u-bg-secondary { background: $color-secondary; }.u-white { color: $white; }.u-grey { color: $grey4;}.u-primary { color: $brand-primary; }.u-secondary { color: $brand-secondary; }.u-tertiary { color: $brand-tertiary; }.u-inline-center { text-align: center; }.u-inline-right { text-align: right; }.u-inline-left { text-align: left; }
Classes could be compiled from tokens
// Compile Utility tokens// ----------------------gulp.task('build-utilities', function() { return gulp.src(paths.designUtilities.files) // transform tokens from yaml into json .pipe(yaml()) // store json .pipe(gulp.dest(paths.designUtilities.jsonOutputFolder)) // transform tokens from json into scss .pipe(jsonSassUtilities()) // store to output folder .pipe(gulp.dest(paths.designTokens.outputFolder));});
Input
position: relative: relativebackground-color: bg-blue: *blue bg-green: *green
Output
.u-relative{ position: relative; }.u-bg-blue{ background-color: $blue; }.u-bg-green{ background-color: $green; }
"Start with why" Simon Sinek
Lego Star Wars chased by Zombie, by hoeynairda via Flickr
Lego zombie, by hoeynairda via Flickr
Wake up sunshine, by Foolish Lego via Flickr
Zombies!, by Michael Doak, via Flickr
Hazardous, by Kyle Hardisty, via Flickr
Apocalypse Commando, by Ma₪go, via Flickr
"I build design systems
for startups and larger companies."
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |