SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
IMPLEMENTING A DESIGN
SYSTEM FROM THE
GROUND UP
Styleguide | Component Library
Andy Dover | github.com/adover
linkedin.com/in/andrewdover
1 FRONT END
DEVELOPERIn a sea of back end and full stack developers
BRAND
STYLGUIDE
MULTIPLE INTERNAL
& EXTERNAL
REQUIREMENTS
1 x App
Styles need to be able to
compile to be compatible
with native languages
2 x Websites
One internally managed and
one externally managed
∞ Internal Apps
Multiple apps of multiple
ages using anything from
jQuery to Kendo UI
1 FRONT END
DEVELOPER"But we don't want a design system"
VALUABLE LESSON #1
Learn how to sell the value of the
design system
BURNING
PLATFORM
BURNING
DESIRE
"Append Only" Stylesheets from 18
years of different developers
500kb bundled CSS file
Complete reimplimentations of visibly
similar functionality instead of reuse
Inconsistent code
Full site regression tests required for
any code change
No coding standards
Impossible to update branding
Multiple L&Fs and styles
IE6 - 10 vendor prefixes and hacks
Sad UX people, hacking away at stuff
Quick! Easy!
Declare once, apply everywhere
Consistency
Build pipeline with full optimisation and
autoformatting
Component isolation and test suites
IDE automated coding standards
(Prettier & StyleLint)
Update branding from one file
Up front implementation
Happy UX people!
A STYLEGUIDE
WAS BORN
/ component library
VALUABLE LESSON #2
Font declarations, grids and colours
does not a design system make
"DESIGN SYSTEM,
RIGHT AHEAD!"
Page Layout Templates
Elements Reacting to Other Elements
Internationalisation
Futureproofing
Documentation Automation
Accessibility
The easy stuff is the tip of the iceberg
Font Formats
Packaging & Hosting
Build Pipelines
Platform Requirements
Enforcing Constraints
Linting
Readmes
Baseline Grids
Library Architecture
Language & Approach
SIDENOTE
BASELINES,
SPACINGS,
PRESETS,
FTW
Sort it out early and save yourself a tonne of
headaches and iterations
colors: (
background: (
...
),
heading: (
light: map-get($colors, porcelain),
dark: map-get($colors, fun-green),
),
),
borders: (
default: 1px solid map-get($colors, silver-sand),
nav: 8px solid map-get($colors, fun-green),
),
spacing: (
default: (
h: 1rem,
v: 0.75rem,
),
medium: (
h: 2rem,
v: 1.5rem,
),
large: (
h: 4rem,
v: 3rem,
),
),
VALUABLE LESSON #3
Split your design system into multiple
layers to allow optimum reuse
YO DAWG
I HEARD YOU LIKE
LAYERS...
Components
JavaScript implementations
importing styles
Sandbox
Scenario-Driven component
development environment
Guide
Documentation built from
comments and readme files
Styles
CSS styles which can be
imported and reused
Configs
Agreed base colours and
spacing multipliers
VALUABLE LESSON #4
Pick your approach, live it, breathe it,
learn how to explain it to a 5 year old
ITCSS
Settings
Configurations, Variables, Transitions,
Animations, Presets
Functions, Mixins
Resets, Theme Imports,
Shared Libraries
HTML Tags, Singular UI
Elements (Cards,
Overlays etc.)
Banners, Accordions,
Navs, Notifications,
Popups, etc
Login, Navigation
Drawer, Tabsets
Page Flows
Tools
Global Imports
Elements Atoms
Objects Molecules
Components Organisms
Templates
Atomic
AUTOMATE ALL
THE THINGS
Sandboxing
StoryBook.js
Angular Playground
Documentation
JSDoc
SassDoc
CompoDoc
Calculations or building code blocks
SASS functions
Mixins
Webpack helpers
Asset copying and packaging
Bash Scripts
NPM Packages
Pipeline Builds
Choosing which npm script to run
ntl
VALUABLE LESSON #5
Build a Proof of Concept to break
your (and your designers) great ideas
AfterBefore
500kb Bundle Size 90kb Bundle Size
300+ Line height declarations 6 Line height declarations
THANKS!

Contenu connexe

Similaire à Creating a CSS and JS design system from the ground up

Keynote: Building Tomorrow's Ceph - Ceph Day Frankfurt
Keynote: Building Tomorrow's Ceph - Ceph Day Frankfurt Keynote: Building Tomorrow's Ceph - Ceph Day Frankfurt
Keynote: Building Tomorrow's Ceph - Ceph Day Frankfurt Ceph Community
 
Introduction to programming world
Introduction to programming worldIntroduction to programming world
Introduction to programming worldJaskaran Singh
 
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby AppsLife Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby AppsTristan Gomez
 
Challenges In Dsl Design
Challenges In Dsl DesignChallenges In Dsl Design
Challenges In Dsl DesignSven Efftinge
 
Enterprise Data Workflows with Cascading and Windows Azure HDInsight
Enterprise Data Workflows with Cascading and Windows Azure HDInsightEnterprise Data Workflows with Cascading and Windows Azure HDInsight
Enterprise Data Workflows with Cascading and Windows Azure HDInsightPaco Nathan
 
Important work-arounds for making ASS multi-lingual
Important work-arounds for making ASS multi-lingualImportant work-arounds for making ASS multi-lingual
Important work-arounds for making ASS multi-lingualAxel Faust
 
Embarcadero's Connected Development
Embarcadero's Connected DevelopmentEmbarcadero's Connected Development
Embarcadero's Connected DevelopmentJim McKeeth
 
Nailing that Devops Interview - An Anti-guide. Nir Cohen, GigaSpaces
Nailing that Devops Interview - An Anti-guide. Nir Cohen, GigaSpacesNailing that Devops Interview - An Anti-guide. Nir Cohen, GigaSpaces
Nailing that Devops Interview - An Anti-guide. Nir Cohen, GigaSpacesDevOpsDays Tel Aviv
 
The REAL Angular Keynote
The REAL Angular KeynoteThe REAL Angular Keynote
The REAL Angular KeynoteLukas Ruebbelke
 
Android Talks #3 Android Design Best Practices - for Designers and Developers
Android Talks #3 Android Design Best Practices - for Designers and DevelopersAndroid Talks #3 Android Design Best Practices - for Designers and Developers
Android Talks #3 Android Design Best Practices - for Designers and DevelopersDenis_infinum
 
The Future of Cross-Platform is Native
The Future of Cross-Platform is NativeThe Future of Cross-Platform is Native
The Future of Cross-Platform is NativeJustin Mancinelli
 
haXe - One codebase to rule'em all
haXe - One codebase to rule'em allhaXe - One codebase to rule'em all
haXe - One codebase to rule'em allTom Crombez
 
Experiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure teamExperiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure teamBrian Benz
 
One App, Multiple Platforms
One App, Multiple PlatformsOne App, Multiple Platforms
One App, Multiple PlatformsMike Hartington
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionEelco Visser
 
Language Engineering in the Cloud
Language Engineering in the CloudLanguage Engineering in the Cloud
Language Engineering in the Cloudlennartkats
 
20080115 04 - La qualimétrie pour comprendre et appréhender les SI
20080115 04 - La qualimétrie pour comprendre et appréhender les SI20080115 04 - La qualimétrie pour comprendre et appréhender les SI
20080115 04 - La qualimétrie pour comprendre et appréhender les SILeClubQualiteLogicielle
 
Infinum Android Talks #03 - Android Design Best Practices - for Designers and...
Infinum Android Talks #03 - Android Design Best Practices - for Designers and...Infinum Android Talks #03 - Android Design Best Practices - for Designers and...
Infinum Android Talks #03 - Android Design Best Practices - for Designers and...Infinum
 
Container orchestration: the cold war - Giulio De Donato - Codemotion Rome 2017
Container orchestration: the cold war - Giulio De Donato - Codemotion Rome 2017Container orchestration: the cold war - Giulio De Donato - Codemotion Rome 2017
Container orchestration: the cold war - Giulio De Donato - Codemotion Rome 2017Codemotion
 

Similaire à Creating a CSS and JS design system from the ground up (20)

Keynote: Building Tomorrow's Ceph - Ceph Day Frankfurt
Keynote: Building Tomorrow's Ceph - Ceph Day Frankfurt Keynote: Building Tomorrow's Ceph - Ceph Day Frankfurt
Keynote: Building Tomorrow's Ceph - Ceph Day Frankfurt
 
Introduction to programming world
Introduction to programming worldIntroduction to programming world
Introduction to programming world
 
Life Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby AppsLife Beyond Rails: Creating Cross Platform Ruby Apps
Life Beyond Rails: Creating Cross Platform Ruby Apps
 
Flutter
FlutterFlutter
Flutter
 
Challenges In Dsl Design
Challenges In Dsl DesignChallenges In Dsl Design
Challenges In Dsl Design
 
Enterprise Data Workflows with Cascading and Windows Azure HDInsight
Enterprise Data Workflows with Cascading and Windows Azure HDInsightEnterprise Data Workflows with Cascading and Windows Azure HDInsight
Enterprise Data Workflows with Cascading and Windows Azure HDInsight
 
Important work-arounds for making ASS multi-lingual
Important work-arounds for making ASS multi-lingualImportant work-arounds for making ASS multi-lingual
Important work-arounds for making ASS multi-lingual
 
Embarcadero's Connected Development
Embarcadero's Connected DevelopmentEmbarcadero's Connected Development
Embarcadero's Connected Development
 
Nailing that Devops Interview - An Anti-guide. Nir Cohen, GigaSpaces
Nailing that Devops Interview - An Anti-guide. Nir Cohen, GigaSpacesNailing that Devops Interview - An Anti-guide. Nir Cohen, GigaSpaces
Nailing that Devops Interview - An Anti-guide. Nir Cohen, GigaSpaces
 
The REAL Angular Keynote
The REAL Angular KeynoteThe REAL Angular Keynote
The REAL Angular Keynote
 
Android Talks #3 Android Design Best Practices - for Designers and Developers
Android Talks #3 Android Design Best Practices - for Designers and DevelopersAndroid Talks #3 Android Design Best Practices - for Designers and Developers
Android Talks #3 Android Design Best Practices - for Designers and Developers
 
The Future of Cross-Platform is Native
The Future of Cross-Platform is NativeThe Future of Cross-Platform is Native
The Future of Cross-Platform is Native
 
haXe - One codebase to rule'em all
haXe - One codebase to rule'em allhaXe - One codebase to rule'em all
haXe - One codebase to rule'em all
 
Experiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure teamExperiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure team
 
One App, Multiple Platforms
One App, Multiple PlatformsOne App, Multiple Platforms
One App, Multiple Platforms
 
Compiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler ConstructionCompiler Construction | Lecture 17 | Beyond Compiler Construction
Compiler Construction | Lecture 17 | Beyond Compiler Construction
 
Language Engineering in the Cloud
Language Engineering in the CloudLanguage Engineering in the Cloud
Language Engineering in the Cloud
 
20080115 04 - La qualimétrie pour comprendre et appréhender les SI
20080115 04 - La qualimétrie pour comprendre et appréhender les SI20080115 04 - La qualimétrie pour comprendre et appréhender les SI
20080115 04 - La qualimétrie pour comprendre et appréhender les SI
 
Infinum Android Talks #03 - Android Design Best Practices - for Designers and...
Infinum Android Talks #03 - Android Design Best Practices - for Designers and...Infinum Android Talks #03 - Android Design Best Practices - for Designers and...
Infinum Android Talks #03 - Android Design Best Practices - for Designers and...
 
Container orchestration: the cold war - Giulio De Donato - Codemotion Rome 2017
Container orchestration: the cold war - Giulio De Donato - Codemotion Rome 2017Container orchestration: the cold war - Giulio De Donato - Codemotion Rome 2017
Container orchestration: the cold war - Giulio De Donato - Codemotion Rome 2017
 

Dernier

ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...Christina Lin
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Intelisync
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 

Dernier (20)

ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
ODSC - Batch to Stream workshop - integration of Apache Spark, Cassandra, Pos...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 

Creating a CSS and JS design system from the ground up

  • 1. IMPLEMENTING A DESIGN SYSTEM FROM THE GROUND UP Styleguide | Component Library Andy Dover | github.com/adover linkedin.com/in/andrewdover
  • 2. 1 FRONT END DEVELOPERIn a sea of back end and full stack developers
  • 3.
  • 4.
  • 6. MULTIPLE INTERNAL & EXTERNAL REQUIREMENTS 1 x App Styles need to be able to compile to be compatible with native languages 2 x Websites One internally managed and one externally managed ∞ Internal Apps Multiple apps of multiple ages using anything from jQuery to Kendo UI
  • 7. 1 FRONT END DEVELOPER"But we don't want a design system"
  • 8. VALUABLE LESSON #1 Learn how to sell the value of the design system
  • 9. BURNING PLATFORM BURNING DESIRE "Append Only" Stylesheets from 18 years of different developers 500kb bundled CSS file Complete reimplimentations of visibly similar functionality instead of reuse Inconsistent code Full site regression tests required for any code change No coding standards Impossible to update branding Multiple L&Fs and styles IE6 - 10 vendor prefixes and hacks Sad UX people, hacking away at stuff Quick! Easy! Declare once, apply everywhere Consistency Build pipeline with full optimisation and autoformatting Component isolation and test suites IDE automated coding standards (Prettier & StyleLint) Update branding from one file Up front implementation Happy UX people!
  • 10. A STYLEGUIDE WAS BORN / component library
  • 11. VALUABLE LESSON #2 Font declarations, grids and colours does not a design system make
  • 12. "DESIGN SYSTEM, RIGHT AHEAD!" Page Layout Templates Elements Reacting to Other Elements Internationalisation Futureproofing Documentation Automation Accessibility The easy stuff is the tip of the iceberg Font Formats Packaging & Hosting Build Pipelines Platform Requirements Enforcing Constraints Linting Readmes Baseline Grids Library Architecture Language & Approach
  • 14. BASELINES, SPACINGS, PRESETS, FTW Sort it out early and save yourself a tonne of headaches and iterations colors: ( background: ( ... ), heading: ( light: map-get($colors, porcelain), dark: map-get($colors, fun-green), ), ), borders: ( default: 1px solid map-get($colors, silver-sand), nav: 8px solid map-get($colors, fun-green), ), spacing: ( default: ( h: 1rem, v: 0.75rem, ), medium: ( h: 2rem, v: 1.5rem, ), large: ( h: 4rem, v: 3rem, ), ),
  • 15. VALUABLE LESSON #3 Split your design system into multiple layers to allow optimum reuse
  • 16. YO DAWG I HEARD YOU LIKE LAYERS... Components JavaScript implementations importing styles Sandbox Scenario-Driven component development environment Guide Documentation built from comments and readme files Styles CSS styles which can be imported and reused Configs Agreed base colours and spacing multipliers
  • 17. VALUABLE LESSON #4 Pick your approach, live it, breathe it, learn how to explain it to a 5 year old
  • 18.
  • 19. ITCSS Settings Configurations, Variables, Transitions, Animations, Presets Functions, Mixins Resets, Theme Imports, Shared Libraries HTML Tags, Singular UI Elements (Cards, Overlays etc.) Banners, Accordions, Navs, Notifications, Popups, etc Login, Navigation Drawer, Tabsets Page Flows Tools Global Imports Elements Atoms Objects Molecules Components Organisms Templates Atomic
  • 20. AUTOMATE ALL THE THINGS Sandboxing StoryBook.js Angular Playground Documentation JSDoc SassDoc CompoDoc Calculations or building code blocks SASS functions Mixins Webpack helpers Asset copying and packaging Bash Scripts NPM Packages Pipeline Builds Choosing which npm script to run ntl
  • 21. VALUABLE LESSON #5 Build a Proof of Concept to break your (and your designers) great ideas
  • 22. AfterBefore 500kb Bundle Size 90kb Bundle Size 300+ Line height declarations 6 Line height declarations