SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
Balancing UX Consistency and
Developer Productivity in a
Design System
Daniel O’Connor
Hello!
1. 2013-2017: UI Engineer @ Optimizely
2. 2017: UI Developer @ Thumbtack
Hello!
1. 2013-2017: UI Engineer @
Optimizely
2. 2017: UI Developer @ Thumbtack
● ~2 UI Engineers on the design team
● 2015: Created OUI, a collection of
components in HTML/CSS
● 2016: Began creating React UI
components
● Supporting ~5 designers and 30
engineers.
Hello!
1. 2013-2017: UI Engineer @
Optimizely
2. 2017: UI Developer @ Thumbtack
● ~2 UI Developers on front-end
infrastructure team
● 2017: Created Thumbprint UI, a
collection of components in
HTML/CSS
● Present: Creating React UI
components
● Supporting ~15 designers and 100
engineers.
Learning #1
Make it easy to implement high quality UIs.
Learning #2
Design debt that makes it to production should not be seen as the fault of the
engineer that implemented it, but rather a sign that our tools failed to meet their
needs.
Balancing UX Consistency and Developer Productivity
Balancing UX Consistency and Developer Productivity
1. Programmatically encouraging design consistency
2. When consistency and productivity clash
3. Living in a component world
1. Programmatically encouraging design consistency
2. When consistency and productivity clash
3. Living in a component world
Balancing UX Consistency and Developer Productivity
Inline Styles
<button style="background: #E50000; color: #fff; font-size: 14px;">
Delete Draft
</button>
Programmatically encouraging design consistency
Atomic CSS
<button class="bg-red white f4">
Delete Draft
</button>
Programmatically encouraging design consistency
CSS Classes
<button class="btn btn--danger">
Delete Draft
</button>
.btn {
background: $color--blue;
color: $color--white;
font-size: $font-size--text;
}
.btn--danger {
background: $color--red;
}
Programmatically encouraging design consistency
Components
Programmatically encouraging design consistency
<Button theme="danger">
Delete Post
</Button>
import React from 'react';
const Button = (props) => (
<button className={`btn btn-${props.theme}`}>
{ props.children }
</button>
);
Learning #3
Reduce HTML duplication to programmatically encourage design consistency.
1. Programmatically encouraging design consistency
2. When consistency and productivity clash
3. Living in a component world
Balancing UX Consistency and Developer Productivity
When consistency and productivity clash: Button
Inline Styles
<button style="
background: #E50000;
color: #fff;
font-size: 14px;
font-weight: 700;
">
Delete Draft
</button>
When consistency and productivity clash: Button
Atomic CSS
<button class="bg-red white f4 fw7">
Delete Draft
</button>
When consistency and productivity clash: Button
CSS Classes: Update Sass
<button
class="btn btn--danger btn--bold">
Delete Draft
</button>
.btn {
background: $color--blue;
color: $color--white;
font-size: $font-size--text;
}
.btn--bold {
font-weight: 700;
}
When consistency and productivity clash: Button
CSS Classes: Utility Classes
<button
class="btn btn--danger weight--bold">
Delete Draft
</button>
.btn {
background: $color--blue;
color: $color--white;
font-size: $font-size--text;
}
When consistency and productivity clash: Button
Components
<Button
theme="danger"
isBold={true}>
Delete Post
</Button>
When consistency and productivity clash: Button
import React from 'react';
const Button = ({theme, isBold}) => (
<button
className={`
btn
btn-${theme}
${isBold && 'btn--bold'}
`}
>
{ props.children }
</button>
);
Modifying a component? Bake the code changes into the component.
Learning #4
Evolution of OUI at Optimizely
● Before OUI: Collection of Sass files, within monolith, without documentation
● OUI v1: Collection of Sass files, separate repo, versioned, great documentation
● OUI v2: Added React components with great documentation
When consistency and productivity clash: OUI
Learning #5
Write documentation but assume that no one will read it.
Learning #6
Present documentation to the right people at the right time.
Learning #7
Use your documentation as the development environment to keep it up to date.
Evolution of the Token component: Part 1
When consistency and productivity clash: Token component
Evolution of the Token component: Part 2
When consistency and productivity clash: Token component
If we wanted to redesign our Tokens...
1. Find every place we use the Token component
2. (Hope that we found all of them.)
3. Remove the previously added helper class and other one-off implementations
4. Rewrite our Token CSS to:
a. Use the new style
b. Support features that we previously implemented as one-offs
5. Visually verify every page that use a Token component
6.
When consistency and productivity clash: Token component
Evolution of the Token component: Part 3
When consistency and productivity clash: Token component
<div class="token">
<div class="token__num">1</div>
<div class="token__handle"></div>
<div class="muted">Experience for:</div>
<div class="token__text">
Added item to cart
<button class="token__close">
<svg>...</svg>
</button>
</div>
</div>
import { Token } from 'ui-library';
<Token num={1} label="Experience for">
Added item to cart
</Token>
Learning #8
One-off implementations are expensive. Optimize for long-term productivity when
possible.
1. Programmatically encouraging design consistency
2. When consistency and productivity clash
3. Living in a component world
Balancing UX Consistency and Developer Productivity
Benefit of Components
1. Productivity Improvements
2. Consistency Improvements
3. Quality Improvements
Living in a component world
Productivity Improvements
Living in a component world
<div class="token">
<div class="token__num">1</div>
<div class="token__handle"></div>
<div class="muted">Experience for:</div>
<div class="token__text">
Added item to cart
<button class="token__close">
<svg>...</svg>
</button>
</div>
</div>
import { Token } from 'ui-library';
<Token num={1} label="Experience for">
Added item to cart
</Token>
Benefit of Components
1. Productivity Improvements
2. Consistency Improvements
3. Quality Improvements
Living in a component world
Benefit of Components
1. Productivity Improvements
2. Consistency Improvements
3. Quality Improvements
Living in a component world
Danger of Components
1. Building global components too early may lead to wrong abstraction
2. Allowing developers to pass in their own classes and styles
Living in a component world
Only create global components when they are needed in two or more places.
Creating the wrong abstraction is way more costly than duplicating code.
Learning #9
Learning #10
Make it difficult—not impossible—to introduce one-offs.
Thank You!
daniel@danoc.me

Mais conteúdo relacionado

Mais procurados

UX Tools for Agile Teams – Design Mission
UX Tools for Agile Teams – Design MissionUX Tools for Agile Teams – Design Mission
UX Tools for Agile Teams – Design Mission
Marc-Oliver Gern
 

Mais procurados (20)

Initiating and Sustaining Design Systems for the Enterprise
Initiating and Sustaining Design Systems for the EnterpriseInitiating and Sustaining Design Systems for the Enterprise
Initiating and Sustaining Design Systems for the Enterprise
 
Design System Ops
Design System OpsDesign System Ops
Design System Ops
 
Building a UX Process at Salesforce that Promotes Focus and Creativity
Building a UX Process at Salesforce that Promotes Focus and CreativityBuilding a UX Process at Salesforce that Promotes Focus and Creativity
Building a UX Process at Salesforce that Promotes Focus and Creativity
 
UX in a Dual Track Agile World
UX in a Dual Track Agile WorldUX in a Dual Track Agile World
UX in a Dual Track Agile World
 
A design system. A year in review.
A design system. A year in review.A design system. A year in review.
A design system. A year in review.
 
Building a Mature Design System
Building a Mature Design SystemBuilding a Mature Design System
Building a Mature Design System
 
Breaking the mold: Lean Product Management and MVP in a Large Company
Breaking the mold: Lean Product Management and MVP in a Large CompanyBreaking the mold: Lean Product Management and MVP in a Large Company
Breaking the mold: Lean Product Management and MVP in a Large Company
 
Creating and Scaling an Enterprise Design System
Creating and Scaling an Enterprise Design SystemCreating and Scaling an Enterprise Design System
Creating and Scaling an Enterprise Design System
 
UX Research in the Agile Cycle
UX Research in the Agile CycleUX Research in the Agile Cycle
UX Research in the Agile Cycle
 
Building a Design System: A Practitioner's Case Study
Building a Design System: A Practitioner's Case StudyBuilding a Design System: A Practitioner's Case Study
Building a Design System: A Practitioner's Case Study
 
Contributing to Drupal: It's Not as Hard as it Looks
Contributing to Drupal: It's Not as Hard as it LooksContributing to Drupal: It's Not as Hard as it Looks
Contributing to Drupal: It's Not as Hard as it Looks
 
UX Tools for Agile Teams – Design Mission
UX Tools for Agile Teams – Design MissionUX Tools for Agile Teams – Design Mission
UX Tools for Agile Teams – Design Mission
 
Integrating Design and Development in Your Workflow
Integrating Design and Development in Your WorkflowIntegrating Design and Development in Your Workflow
Integrating Design and Development in Your Workflow
 
Sum of the Parts Speaker Series - Experience Engineering and UX
Sum of the Parts Speaker Series - Experience Engineering and UXSum of the Parts Speaker Series - Experience Engineering and UX
Sum of the Parts Speaker Series - Experience Engineering and UX
 
UXPin: State of the Union Product Keynote by Marcin Treder
UXPin: State of the Union Product Keynote by Marcin TrederUXPin: State of the Union Product Keynote by Marcin Treder
UXPin: State of the Union Product Keynote by Marcin Treder
 
I'll gladly pay you Tuesday for a hamburger today: Managing UX Debt
I'll gladly pay you Tuesday for a hamburger today: Managing UX DebtI'll gladly pay you Tuesday for a hamburger today: Managing UX Debt
I'll gladly pay you Tuesday for a hamburger today: Managing UX Debt
 
UX Process - Mariana García
UX Process - Mariana GarcíaUX Process - Mariana García
UX Process - Mariana García
 
Becoming A User Advocate
Becoming A User AdvocateBecoming A User Advocate
Becoming A User Advocate
 
GHA Lean UX presentation
GHA Lean UX presentationGHA Lean UX presentation
GHA Lean UX presentation
 
Evolving your Design System: People, Product, and Process
Evolving your Design System: People, Product, and ProcessEvolving your Design System: People, Product, and Process
Evolving your Design System: People, Product, and Process
 

Semelhante a Balancing UX Consistency and Developer Productivity in a Design System

Venkatesh- Resume
Venkatesh- ResumeVenkatesh- Resume
Venkatesh- Resume
venkat u
 

Semelhante a Balancing UX Consistency and Developer Productivity in a Design System (20)

Better User Experience with .NET
Better User Experience with .NETBetter User Experience with .NET
Better User Experience with .NET
 
The GE Design System and thoughts about craft at scale (David Cronin at Enter...
The GE Design System and thoughts about craft at scale (David Cronin at Enter...The GE Design System and thoughts about craft at scale (David Cronin at Enter...
The GE Design System and thoughts about craft at scale (David Cronin at Enter...
 
Using Tailwind Shadow: An Easy Guide to Custom Shadows - Blogs
Using Tailwind Shadow: An Easy Guide to Custom Shadows - BlogsUsing Tailwind Shadow: An Easy Guide to Custom Shadows - Blogs
Using Tailwind Shadow: An Easy Guide to Custom Shadows - Blogs
 
Use Tailwind Select for Easy and Reliable Dropdowns - Blogs
Use Tailwind Select for Easy and Reliable Dropdowns - BlogsUse Tailwind Select for Easy and Reliable Dropdowns - Blogs
Use Tailwind Select for Easy and Reliable Dropdowns - Blogs
 
VS Code and Modern Development Environment Preview
VS Code and Modern Development Environment PreviewVS Code and Modern Development Environment Preview
VS Code and Modern Development Environment Preview
 
Reusable ui components
Reusable ui componentsReusable ui components
Reusable ui components
 
04 objective-c session 4
04  objective-c session 404  objective-c session 4
04 objective-c session 4
 
Delivering Quality Software with Continuous Integration
Delivering Quality Software with Continuous IntegrationDelivering Quality Software with Continuous Integration
Delivering Quality Software with Continuous Integration
 
Neha
NehaNeha
Neha
 
ASP DOT NET
ASP DOT NETASP DOT NET
ASP DOT NET
 
The GE Design System and thoughts about craft at scale
The GE Design System and thoughts about craft at scaleThe GE Design System and thoughts about craft at scale
The GE Design System and thoughts about craft at scale
 
Venkatesh- Resume
Venkatesh- ResumeVenkatesh- Resume
Venkatesh- Resume
 
Office Add-ins community call-March 2019
Office Add-ins community call-March 2019Office Add-ins community call-March 2019
Office Add-ins community call-March 2019
 
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch TutorialMongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
 
Building a living style guide in CSS
Building a living style guide in CSSBuilding a living style guide in CSS
Building a living style guide in CSS
 
MongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch TutorialMongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch Tutorial
 
Successfully Implement Responsive Design Behavior with Adobe Experience Manager
Successfully Implement Responsive Design Behavior with Adobe Experience ManagerSuccessfully Implement Responsive Design Behavior with Adobe Experience Manager
Successfully Implement Responsive Design Behavior with Adobe Experience Manager
 
Carlo Bonamico, Sonia Pini - So you want to build your (Angular) Component Li...
Carlo Bonamico, Sonia Pini - So you want to build your (Angular) Component Li...Carlo Bonamico, Sonia Pini - So you want to build your (Angular) Component Li...
Carlo Bonamico, Sonia Pini - So you want to build your (Angular) Component Li...
 
Build Your Own Angular Component Library
Build Your Own Angular Component LibraryBuild Your Own Angular Component Library
Build Your Own Angular Component Library
 
Build Time Hacking
Build Time HackingBuild Time Hacking
Build Time Hacking
 

Mais de uxpin

Mais de uxpin (20)

Creating and maintaining a design system for 130 teams - Bethany Sonefeld
Creating and maintaining a design system for 130 teams - Bethany SonefeldCreating and maintaining a design system for 130 teams - Bethany Sonefeld
Creating and maintaining a design system for 130 teams - Bethany Sonefeld
 
Principles & ux_systems
Principles & ux_systemsPrinciples & ux_systems
Principles & ux_systems
 
Principles & ux_systems
Principles & ux_systemsPrinciples & ux_systems
Principles & ux_systems
 
Should Designers?
Should Designers?Should Designers?
Should Designers?
 
From the designers laptop to the users
From the designers laptop to the usersFrom the designers laptop to the users
From the designers laptop to the users
 
Accessibility in Design Systems by Allison Shaw
Accessibility in Design Systems by Allison ShawAccessibility in Design Systems by Allison Shaw
Accessibility in Design Systems by Allison Shaw
 
Sonefeld creating and maintaining a design system for 130 teams
Sonefeld creating and maintaining a design system for 130 teamsSonefeld creating and maintaining a design system for 130 teams
Sonefeld creating and maintaining a design system for 130 teams
 
Consistency vs. Flexibility in Design Systems: A GE Case Study by Ken Skistimas
Consistency vs. Flexibility in Design Systems: A GE Case Study by Ken SkistimasConsistency vs. Flexibility in Design Systems: A GE Case Study by Ken Skistimas
Consistency vs. Flexibility in Design Systems: A GE Case Study by Ken Skistimas
 
Developing UX ROI in Enterprise Land: An ADP Case Study
Developing UX ROI in Enterprise Land: An ADP Case StudyDeveloping UX ROI in Enterprise Land: An ADP Case Study
Developing UX ROI in Enterprise Land: An ADP Case Study
 
Three's a Party: How Trifectas Help Product, Engineering, and Design Work Tog...
Three's a Party: How Trifectas Help Product, Engineering, and Design Work Tog...Three's a Party: How Trifectas Help Product, Engineering, and Design Work Tog...
Three's a Party: How Trifectas Help Product, Engineering, and Design Work Tog...
 
Automating Design Processes for Teams: An IDEO Case Study
Automating Design Processes for Teams: An IDEO Case StudyAutomating Design Processes for Teams: An IDEO Case Study
Automating Design Processes for Teams: An IDEO Case Study
 
Calculating the ROI of UX with Standard Financial Models
Calculating the ROI of UX with Standard Financial ModelsCalculating the ROI of UX with Standard Financial Models
Calculating the ROI of UX with Standard Financial Models
 
From 6 to 126 in 4 Years: The Story Behind Atlassian Design
From 6 to 126 in 4 Years: The Story Behind Atlassian DesignFrom 6 to 126 in 4 Years: The Story Behind Atlassian Design
From 6 to 126 in 4 Years: The Story Behind Atlassian Design
 
Design Systems First: Everyday Practices for a Scaleable Design Process
Design Systems First: Everyday Practices for a Scaleable Design ProcessDesign Systems First: Everyday Practices for a Scaleable Design Process
Design Systems First: Everyday Practices for a Scaleable Design Process
 
Designing Multi-Device Experiences
Designing Multi-Device ExperiencesDesigning Multi-Device Experiences
Designing Multi-Device Experiences
 
Creating Consistent Experiences With Design Principles
Creating Consistent Experiences With Design PrinciplesCreating Consistent Experiences With Design Principles
Creating Consistent Experiences With Design Principles
 
Participatory Design: Bringing Users Into Your UX Process
Participatory Design: Bringing Users Into Your UX ProcessParticipatory Design: Bringing Users Into Your UX Process
Participatory Design: Bringing Users Into Your UX Process
 
Great UX in an Agile World
Great UX in an Agile WorldGreat UX in an Agile World
Great UX in an Agile World
 
Collaborative Product Discovery at Fjord: A Case Study
Collaborative Product Discovery at Fjord: A Case StudyCollaborative Product Discovery at Fjord: A Case Study
Collaborative Product Discovery at Fjord: A Case Study
 
Agile and Design Thinking at IBM
Agile and Design Thinking at IBMAgile and Design Thinking at IBM
Agile and Design Thinking at IBM
 

Último

Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman MuscatAbortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion pills in Kuwait Cytotec pills in Kuwait
 
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
gajnagarg
 
Minimalist Orange Portfolio by Slidesgo.pptx
Minimalist Orange Portfolio by Slidesgo.pptxMinimalist Orange Portfolio by Slidesgo.pptx
Minimalist Orange Portfolio by Slidesgo.pptx
balqisyamutia
 
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
yhavx
 
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
gajnagarg
 
怎样办理莫纳什大学毕业证(Monash毕业证书)成绩单留信认证
怎样办理莫纳什大学毕业证(Monash毕业证书)成绩单留信认证怎样办理莫纳什大学毕业证(Monash毕业证书)成绩单留信认证
怎样办理莫纳什大学毕业证(Monash毕业证书)成绩单留信认证
ehyxf
 
Madhyamgram \ (Genuine) Escort Service Kolkata | Service-oriented sexy call g...
Madhyamgram \ (Genuine) Escort Service Kolkata | Service-oriented sexy call g...Madhyamgram \ (Genuine) Escort Service Kolkata | Service-oriented sexy call g...
Madhyamgram \ (Genuine) Escort Service Kolkata | Service-oriented sexy call g...
HyderabadDolls
 
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
eeanqy
 
Design-System - FinTech - Isadora Agency
Design-System - FinTech - Isadora AgencyDesign-System - FinTech - Isadora Agency
Design-System - FinTech - Isadora Agency
Isadora Agency
 
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
gajnagarg
 

Último (20)

Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman MuscatAbortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
Abortion Pills in Oman (+918133066128) Cytotec clinic buy Oman Muscat
 
Furniture & Joinery Details_Designs.pptx
Furniture & Joinery Details_Designs.pptxFurniture & Joinery Details_Designs.pptx
Furniture & Joinery Details_Designs.pptx
 
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
Top profile Call Girls In fatehgarh [ 7014168258 ] Call Me For Genuine Models...
 
Minimalist Orange Portfolio by Slidesgo.pptx
Minimalist Orange Portfolio by Slidesgo.pptxMinimalist Orange Portfolio by Slidesgo.pptx
Minimalist Orange Portfolio by Slidesgo.pptx
 
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
一比一原版(ANU毕业证书)澳大利亚国立大学毕业证原件一模一样
 
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
Top profile Call Girls In Mysore [ 7014168258 ] Call Me For Genuine Models We...
 
How to Create a Productive Workspace Trends and Tips.pdf
How to Create a Productive Workspace Trends and Tips.pdfHow to Create a Productive Workspace Trends and Tips.pdf
How to Create a Productive Workspace Trends and Tips.pdf
 
Essential UI/UX Design Principles: A Comprehensive Guide
Essential UI/UX Design Principles: A Comprehensive GuideEssential UI/UX Design Principles: A Comprehensive Guide
Essential UI/UX Design Principles: A Comprehensive Guide
 
怎样办理莫纳什大学毕业证(Monash毕业证书)成绩单留信认证
怎样办理莫纳什大学毕业证(Monash毕业证书)成绩单留信认证怎样办理莫纳什大学毕业证(Monash毕业证书)成绩单留信认证
怎样办理莫纳什大学毕业证(Monash毕业证书)成绩单留信认证
 
Mohanlalganj ! Call Girls in Lucknow - 450+ Call Girl Cash Payment 9548273370...
Mohanlalganj ! Call Girls in Lucknow - 450+ Call Girl Cash Payment 9548273370...Mohanlalganj ! Call Girls in Lucknow - 450+ Call Girl Cash Payment 9548273370...
Mohanlalganj ! Call Girls in Lucknow - 450+ Call Girl Cash Payment 9548273370...
 
Madhyamgram \ (Genuine) Escort Service Kolkata | Service-oriented sexy call g...
Madhyamgram \ (Genuine) Escort Service Kolkata | Service-oriented sexy call g...Madhyamgram \ (Genuine) Escort Service Kolkata | Service-oriented sexy call g...
Madhyamgram \ (Genuine) Escort Service Kolkata | Service-oriented sexy call g...
 
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
怎样办理巴斯大学毕业证(Bath毕业证书)成绩单留信认证
 
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
Abortion pills in Riyadh +966572737505 <> buy cytotec <> unwanted kit Saudi A...
 
Design-System - FinTech - Isadora Agency
Design-System - FinTech - Isadora AgencyDesign-System - FinTech - Isadora Agency
Design-System - FinTech - Isadora Agency
 
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
Top profile Call Girls In eluru [ 7014168258 ] Call Me For Genuine Models We ...
 
Q4-W4-SCIENCE-5 power point presentation
Q4-W4-SCIENCE-5 power point presentationQ4-W4-SCIENCE-5 power point presentation
Q4-W4-SCIENCE-5 power point presentation
 
The hottest UI and UX Design Trends 2024
The hottest UI and UX Design Trends 2024The hottest UI and UX Design Trends 2024
The hottest UI and UX Design Trends 2024
 
LANDSCAPE ARCHITECTURE PORTFOLIO - MAREK MITACEK
LANDSCAPE ARCHITECTURE PORTFOLIO - MAREK MITACEKLANDSCAPE ARCHITECTURE PORTFOLIO - MAREK MITACEK
LANDSCAPE ARCHITECTURE PORTFOLIO - MAREK MITACEK
 
Hackathon evaluation template_latest_uploadpdf
Hackathon evaluation template_latest_uploadpdfHackathon evaluation template_latest_uploadpdf
Hackathon evaluation template_latest_uploadpdf
 
Pondicherry Escorts Service Girl ^ 9332606886, WhatsApp Anytime Pondicherry
Pondicherry Escorts Service Girl ^ 9332606886, WhatsApp Anytime PondicherryPondicherry Escorts Service Girl ^ 9332606886, WhatsApp Anytime Pondicherry
Pondicherry Escorts Service Girl ^ 9332606886, WhatsApp Anytime Pondicherry
 

Balancing UX Consistency and Developer Productivity in a Design System

  • 1. Balancing UX Consistency and Developer Productivity in a Design System Daniel O’Connor
  • 2. Hello! 1. 2013-2017: UI Engineer @ Optimizely 2. 2017: UI Developer @ Thumbtack
  • 3. Hello! 1. 2013-2017: UI Engineer @ Optimizely 2. 2017: UI Developer @ Thumbtack ● ~2 UI Engineers on the design team ● 2015: Created OUI, a collection of components in HTML/CSS ● 2016: Began creating React UI components ● Supporting ~5 designers and 30 engineers.
  • 4. Hello! 1. 2013-2017: UI Engineer @ Optimizely 2. 2017: UI Developer @ Thumbtack ● ~2 UI Developers on front-end infrastructure team ● 2017: Created Thumbprint UI, a collection of components in HTML/CSS ● Present: Creating React UI components ● Supporting ~15 designers and 100 engineers.
  • 5. Learning #1 Make it easy to implement high quality UIs.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13. Learning #2 Design debt that makes it to production should not be seen as the fault of the engineer that implemented it, but rather a sign that our tools failed to meet their needs.
  • 14. Balancing UX Consistency and Developer Productivity
  • 15. Balancing UX Consistency and Developer Productivity 1. Programmatically encouraging design consistency 2. When consistency and productivity clash 3. Living in a component world
  • 16. 1. Programmatically encouraging design consistency 2. When consistency and productivity clash 3. Living in a component world Balancing UX Consistency and Developer Productivity
  • 17.
  • 18. Inline Styles <button style="background: #E50000; color: #fff; font-size: 14px;"> Delete Draft </button> Programmatically encouraging design consistency
  • 19. Atomic CSS <button class="bg-red white f4"> Delete Draft </button> Programmatically encouraging design consistency
  • 20.
  • 21.
  • 22. CSS Classes <button class="btn btn--danger"> Delete Draft </button> .btn { background: $color--blue; color: $color--white; font-size: $font-size--text; } .btn--danger { background: $color--red; } Programmatically encouraging design consistency
  • 23.
  • 24.
  • 25. Components Programmatically encouraging design consistency <Button theme="danger"> Delete Post </Button> import React from 'react'; const Button = (props) => ( <button className={`btn btn-${props.theme}`}> { props.children } </button> );
  • 26. Learning #3 Reduce HTML duplication to programmatically encourage design consistency.
  • 27. 1. Programmatically encouraging design consistency 2. When consistency and productivity clash 3. Living in a component world Balancing UX Consistency and Developer Productivity
  • 28. When consistency and productivity clash: Button
  • 29. Inline Styles <button style=" background: #E50000; color: #fff; font-size: 14px; font-weight: 700; "> Delete Draft </button> When consistency and productivity clash: Button
  • 30. Atomic CSS <button class="bg-red white f4 fw7"> Delete Draft </button> When consistency and productivity clash: Button
  • 31. CSS Classes: Update Sass <button class="btn btn--danger btn--bold"> Delete Draft </button> .btn { background: $color--blue; color: $color--white; font-size: $font-size--text; } .btn--bold { font-weight: 700; } When consistency and productivity clash: Button
  • 32. CSS Classes: Utility Classes <button class="btn btn--danger weight--bold"> Delete Draft </button> .btn { background: $color--blue; color: $color--white; font-size: $font-size--text; } When consistency and productivity clash: Button
  • 33. Components <Button theme="danger" isBold={true}> Delete Post </Button> When consistency and productivity clash: Button import React from 'react'; const Button = ({theme, isBold}) => ( <button className={` btn btn-${theme} ${isBold && 'btn--bold'} `} > { props.children } </button> );
  • 34. Modifying a component? Bake the code changes into the component. Learning #4
  • 35. Evolution of OUI at Optimizely ● Before OUI: Collection of Sass files, within monolith, without documentation ● OUI v1: Collection of Sass files, separate repo, versioned, great documentation ● OUI v2: Added React components with great documentation When consistency and productivity clash: OUI
  • 36. Learning #5 Write documentation but assume that no one will read it.
  • 37. Learning #6 Present documentation to the right people at the right time.
  • 38. Learning #7 Use your documentation as the development environment to keep it up to date.
  • 39. Evolution of the Token component: Part 1 When consistency and productivity clash: Token component
  • 40. Evolution of the Token component: Part 2 When consistency and productivity clash: Token component
  • 41. If we wanted to redesign our Tokens... 1. Find every place we use the Token component 2. (Hope that we found all of them.) 3. Remove the previously added helper class and other one-off implementations 4. Rewrite our Token CSS to: a. Use the new style b. Support features that we previously implemented as one-offs 5. Visually verify every page that use a Token component 6. When consistency and productivity clash: Token component
  • 42. Evolution of the Token component: Part 3 When consistency and productivity clash: Token component <div class="token"> <div class="token__num">1</div> <div class="token__handle"></div> <div class="muted">Experience for:</div> <div class="token__text"> Added item to cart <button class="token__close"> <svg>...</svg> </button> </div> </div> import { Token } from 'ui-library'; <Token num={1} label="Experience for"> Added item to cart </Token>
  • 43. Learning #8 One-off implementations are expensive. Optimize for long-term productivity when possible.
  • 44. 1. Programmatically encouraging design consistency 2. When consistency and productivity clash 3. Living in a component world Balancing UX Consistency and Developer Productivity
  • 45. Benefit of Components 1. Productivity Improvements 2. Consistency Improvements 3. Quality Improvements Living in a component world
  • 46. Productivity Improvements Living in a component world <div class="token"> <div class="token__num">1</div> <div class="token__handle"></div> <div class="muted">Experience for:</div> <div class="token__text"> Added item to cart <button class="token__close"> <svg>...</svg> </button> </div> </div> import { Token } from 'ui-library'; <Token num={1} label="Experience for"> Added item to cart </Token>
  • 47.
  • 48.
  • 49.
  • 50. Benefit of Components 1. Productivity Improvements 2. Consistency Improvements 3. Quality Improvements Living in a component world
  • 51. Benefit of Components 1. Productivity Improvements 2. Consistency Improvements 3. Quality Improvements Living in a component world
  • 52.
  • 53. Danger of Components 1. Building global components too early may lead to wrong abstraction 2. Allowing developers to pass in their own classes and styles Living in a component world
  • 54. Only create global components when they are needed in two or more places. Creating the wrong abstraction is way more costly than duplicating code. Learning #9
  • 55. Learning #10 Make it difficult—not impossible—to introduce one-offs.
  • 56.
  • 57.