JUST SOME OF THE INFINITE FLAVORS OF BUTTON MARKUP
<button> <button class=”btn”> <button class=”button”> <button class=”slds-button”> <button class=”button-green”> <button class=”green-button”> <button data-style=”btn-green”> <button class=”btn btn—green”> <button class=”c-button c-button—primary”> <button class=”f6 link dim ph3 pv2 mb2 dib”> <button class=”bg-green hover:bg-green-dark”> <button style=”background: green; color: white;”>
Slide 17
Slide 18
Slide 19
Slide 20
Slide 21
Slide 22
Slide 23
Slide 24
Slide 25
Slide 26
Slide 27
Slide 28
TECH BENEFITS OF DESIGN SYSTEMS ๏ Reduce technical debt - less frontend spaghetti code ๏ Faster production - less time coding common UI components and more time building real features and products ๏ Higher-quality production - bake in and enforce frontend best practices; teams can focus on iterating and improving rather than reinvention ๏ Reduce QA efforts - centralize certain QA tasks ๏ Potentially adopt new technologies faster - a design system can help make adding additional frameworks/technology more manageable ๏ Useful reference - an essential resource and hub for development best practices ๏ Future-friendly foundation - modify, extend, & improve upon over time
vendor info
fashion merchandising
media center
e-commerce
video editor hr app
homepage
store lookup
point of sale partnership microsite
look book inventory manager
fashion design
chat
company blog
careers
Slide 47
media center
video editor
store lookup
inventory manager
look book
point of sale
hr app
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 48
media center
video editor
store lookup
inventory manager
look book
point of sale
hr app
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 49
hr app
inventory manager
video editor
store lookup
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 50
store lookup
inventory manager
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
video editor
look book
point of sale
products
Slide 51
inventory manager
video editor
store lookup
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 52
inventory manager
video editor
store lookup
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 53
video editor
store lookup
inventory manager
point of sale
look book
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 54
video editor
store lookup
inventory manager
point of sale
look book
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 55
Slide 56
video editor
store lookup
inventory manager
point of sale
look book design system
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 57
video editor
store lookup
inventory manager
point of sale
look book
pilot project dev
design system
design system
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Like television pilots help test audience reactions to a series concept without investing significant resources to create the whole thing, application pilots are a good foundation for ensuring your design system’s design and code are battle-tested. –Dan Mall
Slide 60
Slide 61
CRITERIA FOR CHOOSING PILOT PROJECTS ๏ Potential for common components & patterns - Does this pilot have many components and patterns that can be reused elsewhere?
๏ Scope - Is this work accomplishable in our pilot timeframe of [3–X weeks]? ๏ Technical feasibility & independence - How simple is the technical implementation? Is a large refactor or migration required?
๏ Available champion - Will someone working on this product be a good guinea pig, see it through, and then celebrate/evangelize (and even contribute back to) the design system?
๏ Marketing potential - Will this work excite others to use the design system?
video editor
store lookup
inventory manager
point of sale
look book
pilot project dev
design system
design system
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 79
frontend workshop
pilot project & component dev
design system
design system
inventory manager
video editor
store lookup
look book look book ui
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
Slide 80
HOW ARE WE GOING TO CODE THIS?
Slide 81
JUST SOME OF THE INFINITE FLAVORS OF BUTTON MARKUP
<button> <button class=”btn”> <button class=”button”> <button class=”slds-button”> <button class=”button-green”> <button class=”green-button”> <button data-style=”btn-green”> <button class=”btn btn—green”> <button class=”c-button c-button—primary”> <button class=”f6 link dim ph3 pv2 mb2 dib”> <button class=”bg-green hover:bg-green-dark”> <button style=”background: green; color: white;”>
Slide 82
A DESIGN SYSTEM’S CODEBASE NEEDS TO BE CONSISTENT AND COHESIVE
vendor info
fashion merchandising
media center
e-commerce
video editor hr app
homepage
store lookup
point of sale partnership microsite
look book inventory manager
fashion design
chat
company blog
careers
Slide 101
ONE TYPE OF CSS NAMING (THAT HAS WORKED PRETTY DANG WELL FOR ME OVER THE YEARS)
.cn-c-btn—secondary { }
Slide 102
GLOBAL NAMESPACE
.cn-
Slide 103
CLASS PREFIXES
.c- for UI components .l- for layout-related styles .u- for utility classes .is- and .has- for state-based classes .js- for JavaScript-specific classes
Slide 104
BEM-STYLE SYNTAX
.cn-c-btn {} /* btn is Block / .cn-c-btn__icon {} / __icon is Element / .cn-c-btn—secondary {} / —secondary is Modifier */
The Design System informs our Product Design. Our Product Design informs the Design System. -Jina Anne
https://medium.com/salesforce-ux/the-salesforce-team-model-for-scaling-a-design-system-d89c2a2d404b
frontend workshop
pilot project & component dev
design system
design system
video editor video editor ui
store store lookup lookup ui
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
inventory inventory manager manager ui
Slide 115
Slide 116
Slide 117
THE DESIGN SYSTEM CODE MUST BE INTUITIVE FOR DEVELOPERS USING IT
HERO COMPONENT
<Hero imgSrc=”https://placeholder.com/1200x650” imgAlt=”Hero Alt Txt” title=”Hero Title” description=”This is the hero description” />
Slide 127
Slide 128
ADD CALL TO ACTION TO HERO COMPONENT
<Hero imgSrc=”https://placeholder.com/1200x650” imgAlt=”Hero Alt Txt” title=”Hero Title” description=”This is the hero description” cta=”Call to action” />
Slide 129
Slide 130
ADD ANOTHER CALL TO ACTION TO HERO COMPONENT
<Hero imgSrc=”https://placeholder.com/1200x650” imgAlt=”Hero Alt Txt” title=”Hero Title” description=”This is the hero description” cta=”Primary call to action” secondaryCta=”Secondary call to action” />
Slide 131
Slide 132
MAKING THE HERO MORE COMPOSABLE return ( <div className=”c-hero”> <img className=”c-hero__img” src={imgSrc} alt={imgAlt} /> <div className=”c-hero__body”> <h2 className=”c-hero__title”>{title}</h2> <p className=”c-hero__description”>{description}</p> <div className=”c-hero__children”> {children} </div> </div> </div> );
Slide 133
MAKE THE HERO MORE COMPOSABLE return ( <div className=”c-hero”> <img className=”c-hero__img” src={imgSrc} alt={imgAlt} /> <div className=”c-hero__body”> <h2 className=”c-hero__title”>{title}</h2> <p className=”c-hero__description”>{description}</p> <div className=”c-hero__children”>
{children}
);
</div> </div> </div>
put stuff here
Slide 134
box to put stuff
Slide 135
HERO COMPONENT WITH CHILDREN
<Hero> <InlineForm /> </Hero>
Slide 136
HERO COMPONENT WITH CHILDREN
<Hero> <Button /> </Hero>
Slide 137
HERO COMPONENT WITH CHILDREN
<Hero> <WhateverYouWant /> </Hero>
A LABEL NEEDS A FOR ATTRIBUTE
<label for=”first-name”>First Name</label> <input type=”text” id=”first-name” />
Slide 144
Slide 145
ADDING FIELD INSTRUCTIONS WITHOUT ARIA-DESCRIBEDBY
<label for=”password”>Choose a password</label> <input type=”password” id=”password” /> <p>Your password must be at least 8 characters long</p>
Slide 146
Slide 147
ADDING ARIA-DESCRIBEDBY TO A FIELD
<label for=”password”>Choose a password</label> <input type=”password” id=”password” aria-describedby=”instructions” /> <p id=”instructions”>Your password must be at least 8 characters long</p>
IMPLEMENTING A TEXT FIELD COMPONENT
<TextField label=”Last Name” id=”last-name” ariaDescribedBy=”last-name-instructions” instructions=”Please provide your family name” />
Slide 150
IMPLEMENTING A TEXT FIELD COMPONENT WITHOUT ID ATTRIBUTES
<TextField label=”Last Name” instructions=”Please provide your family name” />
Slide 151
AUTOMATICALLY ASSIGNING UNIQUE IDS IF THEY AREN’T EXPLICITLY DEFINED
<label for=”qPbdivDEiH”>Last Name</label> <input type=”text” id=”qPbdivDEiH” aria-describedby=”0LvdKMfqA” /> <p id=”0LvdKMfqA”>Please provide your family name</p>
Slide 152
YOU CAN’T SCREW IT UP!* *You can probably still screw it up if you try really hard.
Slide 153
Slide 154
WHAT DOES IT MEAN TO LAUNCH A DESIGN SYSTEM?
Slide 155
A design system isn’t a project with an end, it’s the origin story of a living and evolving product that’ll serve other products. -Nathan Curtis https://medium.com/eightshapes-llc/a-design-system-isn-t-a-project-it-s-a-product-serving-products-74dcfffef935#.4umtnfxsx
Slide 156
SPECTRUM OF INTEGRATION
least integrated
static
frontend reference code
consumable components
most integrated
Slide 157
SPECTRUM OF INTEGRATION
least integrated
static
frontend reference code
consumable components
most integrated
Slide 158
comp
production
Slide 159
SPECTRUM OF INTEGRATION
least integrated
static
frontend reference code
consumable components
most integrated
Slide 160
https://v2.designsystem.digital.gov/
Slide 161
30,000 FREAKING WEBSITES
Slide 162
Slide 163
SPECTRUM OF INTEGRATION
least integrated
static
frontend reference code
consumable components
most integrated
npm publish
frontend workshop
pilot project & component dev
design system
design system
inventory manager
video editor
store lookup
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
inventory manager
video editor
store lookup
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
npm install npm publish
frontend workshop
pilot project & component dev
design system
design system
products
Slide 172
INSTALLING YOUR DESIGN SYSTEM
npm install your-design-system
Slide 173
IMPORTING A DESIGN SYSTEM COMPONENT
import Button from your-design-system/Button
Slide 174
IMPLEMENTING A DESIGN SYSTEM COMPONENT
<Button text=”Book Room” variant=”primary” />
Slide 175
Slide 176
BIG MENTAL SHIFT ALERT:
FROM “LET’S BUILD A WEBSITE” TO “LET’S MAINTAIN A PRODUCT WHICH OTHER PRODUCTS USE AS A DEPENDENCY.”
Slide 177
VERSIONING
Slide 178
https://semver.org/
Slide 179
v0.1.0
Slide 180
v0.1.0 Fix bugs or optimize existing features without breaking changes
patch
Slide 181
v0.1.0 minor
Add new features or deprecate features without breaking changes
Slide 182
v0.1.0 major
Breaking changes, such as box model styles, color revisions, public API, markup, icons, fonts
Slide 183
v0.30.0
Slide 184
v0.30.1
Slide 185
v0.30.2
Slide 186
v0.31.0
Slide 187
v1.0.0
🎉
Slide 188
A 1.0.0 designation comes with commitment. Freewheeling days of unstable early foundations are behind you. –Nathan Curtis https://medium.com/eightshapes-llc/versioning-design-systems-48cceb5ace4d
Slide 189
v1.1.0
Slide 190
UPDATING TO THE LATEST VERSION OF THE DESIGN SYSTEM
npm update your-design-system
frontend workshop
pilot project & component dev
design system
design system
video editor video editor ui
store store lookup lookup ui
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
inventory inventory manager manager ui
Slide 194
frontend workshop
pilot project & component dev
react-flavored design system
design system
video editor video editor ui
store store lookup lookup ui
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
inventory inventory manager manager ui
Slide 195
frontend workshop
pilot project & component dev
design system
design system
video editor video editor ui
store store lookup lookup ui
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
inventory inventory manager manager ui
Slide 196
frontend workshop
pilot project & component dev
design newreact twig hotness system
tech-agnostic
tech-specific
video editor video editor ui
store store lookup lookup ui
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
products
inventory inventory manager manager ui
Slide 197
video editor video editor ui
store store lookup lookup ui
inventory inventory manager manager ui
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
react
frontend workshop
design system
twig
new hotness
pilot project & component dev
tech-agnostic
tech-specific
products
Slide 198
What happens when the new hotness isn’t the new hotness anymore?
Slide 199
Slide 200
video editor video editor ui
store store lookup lookup ui
inventory inventory manager manager ui
look book
point of sale
company blog
partnership microsite
vendor info
fashion design
fashion merchandising
homepage
e-commerce
careers
chat
react
frontend workshop
design system
twig
new hotness
pilot project & component dev
tech-agnostic
tech-specific
products
Slide 201
iOS
iOS app 1
iOS app 2
video video editor editor
store store lookup lookup
look book
point of sale
company blog
partnership microsite
vendor info
fashion fashion design design
fashion fashion merchandisin merchandis
homepage homepage
e-commerce
careers
chat
inventory inventory manager manager
react
frontend workshop
design system
twig
g
new hotness pilot project & component dev
tech-agnostic
tech-specific
products
iOS
iOS app 1
iOS app 2
video video editor editor
store store lookup lookup
look book
point of sale
company blog
partnership microsite
vendor info
fashion fashion design design
fashion fashion merchandisin merchandis
homepage homepage
e-commerce
careers
chat
inventory inventory manager manager
react
frontend workshop
design system
twig
g
new hotness pilot project & component dev
tech-agnostic
tech-specific
products
Slide 222
Slide 223
TAKEAWAYS ๏ Your design system must live in the technologies your products use ๏ Look at your product roadmaps for design system pilot project opportunities ๏ Establish code conventions and use tooling & process to enforce them ๏ Build your design system and pilot project UI screens in a frontend workshop environment ๏ Bake best practices into reusable components & make them as rigid or flexible as you need them to be
๏ Use semantic versioning to manage ongoing design system product work ๏ Use design tokens to feed common design properties into different platforms