Slide 1

Slide 1 text

© Copyright 2024 • EightShapes LLC {Title} {Details} Show less {Label} {Label} 1 2 3 4 5 6 7 8 9 {Title} {Details} Show less {Label} {Label} {Title} {Details} Show less {Label} {Label} 16 16 Error ESDSV Alert Background color : ESDS Color Alert/Error/Background #580018 Border color : ESDS Color Alert/Error/Element #F85558 Decorative Icon Name : ESDS Icon asset / Alert-error Color : Error {Title} {Details} Show less {Label} {Label} Designing and Automating Component Specifications Nathan Curtis Into Design Systems May 2024

Slide 2

Slide 2 text

© Copyright 2024 • EightShapes LLC Fairfax, VA (near Washington, DC) Design systems nerd, ~85 since 2006 Hi, I’m Nathan

Slide 3

Slide 3 text

Coaching Projects Token taxonomy UI composability UI specs and schema Strategy and planning Process optimization Embedding as team lead Training

Slide 4

Slide 4 text

Opening July 1, 2024 Coaching Projects Token taxonomy UI composability UI specs and schema Strategy and planning Process optimization Embedding as team lead Training Coaching Projects Token taxonomy UI composability UI specs and schema Strategy and planning Process optimization Embedding as team lead Training Closing June 30, 2024 Opened 2006

Slide 5

Slide 5 text

© Copyright 2024 • EightShapes LLC Layout and spacing ESDS Card Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fixed Item spacing : 0 {Title} {Label} {Title} {Label} Content Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing : 16 Padding : 24 {Title} {Label} {Title} {Label} 16 24 24 24 24 ]-[ Direction : Horizontal Alignment : Top left Vertical resizing : Fill Horizontal resizing : Fixed Item spacing : 7 Anatomy 1 ESDS Card Border radius : 8 2 Image Depends on : ESDS Image Aspect ratio : 16:9 3 Text Depends on : ESDS Card text Description? : false Metadata? : false Surface : Light Size : Medium 4 Actions Depends on : ESDS Card actions Variant : Button Size : Medium Surface : Light 5 Container Depends on : ESDS Card container Surface : Primary light State : Initial {Title} {Label} 1 2 3 4 5 https://www.figma.com/community/plugin/1205622541257680763 EightShapes Specs Figma plugin

Slide 6

Slide 6 text

{Component name} Anatomy 1 {Layer name} Depends on : {Dependency} {Name} : {Value} {Name} : {Value} 2 {Layer name} {Name} : {Style/token} {Name} : {Style/token} {Name} : {Value} 3 {Layer name} {Name} : {Value} {Name} : {Style/token} {Name} : {Style/token} 4 {Layer name} Depends on : {Dependency} {Name} : {Value} {Name} : {Value} # # # # # # # # # # # # Properties {Variant property name} {Property value} (default) {Layer name} {Name} : {Style/token} {Name} : {Value} {Layer name} Depends on : {Dependency} {Name} : {Value} {Property value} {Layer name} {Name} : {Style/token} {Name} : {Value} {Layer name} Depends on : {Dependency} {Name} : {Value} {Property value} {Layer name} {Name} : {Style/token} {Name} : {Value} {Layer name} Depends on : {Dependency} {Name} : {Value} {Boolean property name} Property type : Boolean Default : {true/false} Associated layers : {Layer name} {Layer name} {Layer name} Layout and spacing Spacing {Layer name} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Layer name} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Name} : {Value} {Name} : {Value} 16 16 16 16 16 16 Overflow {Layer name} {Description} {Layer name} {Description} Touch targets {Layer name} {Description} 48 48 Responsive layout {Breakpoint or Device} {Description} {Breakpoint or Device} {Description} Accessi bility Screen reading For when t he mem ber is usin g a screen reader , includin g ho w elements s hould be identified , read , and in what order . ESDS Te xt input Readin g : [ESDS Form la bel ]. [Icon ] [value/ place holder ], [role ]. Example : “Cost rate , t he internal cost t hat t his person incurs on your business . Dollar 100, [role ].” Role : te xt bo x {Layer name} Readin g : { Readin g} Example : { Example} Role : { Role} Focus order ## . { Name} { Role} ## . { Name} { Role} ## . { Name} { Role} ## . { Name} { Role} # # # # # # # # # # # # Announced order ## . { Name} { Role} ## . { Name} { Role} ## . { Name} { Role} ## . { Name} { Role} # # # # # # # # # # # # Alternative te xt For any non-decorati ve ima ge and visual elements con veyed only wit h color , pro vide alternate te xt . By default , any element NOT listed belo w s hould be considered decorati ve and not include alternate te xt . Element Type Alternate te xt { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} { Element name , suc h as Call to action button} {Type , suc h as Visual element} {Alternate te xt , suc h as Button or Icon name} Component tokens {Su bsection title} Token Alias Figma style Value 00 {Value} $esds-... $esds-... { Fi gma style} {Description} 00 {Value} $esds-... $esds-... { Fi gma style} {Description} Aa {Value} $esds-... $esds-... { Fi gma style} {Description} {Value} $esds-... $esds-... { Fi gma style} {Description} {Value} $esds-... $esds-... { Fi gma style} {Description} {Value} $esds-... $esds-... { Fi gma style} {Description} {Su bsection title} Token Alias Figma style Value 00 {Value} $esds-... $esds-... { Fi gma style} 00 {Value} $esds-... $esds-... { Fi gma style} 00 {Value} $esds-... $esds-... { Fi gma style} 00 {Value} $esds-... $esds-... { Fi gma style} {Su bsection title} Token {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... {Value} $esds-... Version his Version # .# .# • New features d {DescriptionR d {DescriptionR d {Description} Enhancements d {DescriptionR d {DescriptionR d {Description} Fi xes d {DescriptionR d {DescriptionR d {Description} Version # .# .# • New features d {DescriptionR d {DescriptionR d {Description} Enhancements d {DescriptionR d {DescriptionR d {Description} Fi xes d {DescriptionR d {DescriptionR d {Description} © Copyri ght 2 024 • Ei ghtS hapes LL C UI design specification
 “Design spec” “Spec” or or , simply A document t hat descri bes ho w an interface is composed , confi gured , visually desi gned , be ha ves and more , whet her a component , pa ge or somet hin g else .

Slide 7

Slide 7 text

© Copyright 2024 • EightShapes LLC What is a specification made of? Anatomy Properties (and Modes, too) Layout and spacing Behaviors Accessibility Motion Token inventories Version history ...and more ESDSV Alert 1 Decorative Icon 2 Title 3 Icon button layout container 4 Dismiss Icon 5 Details 6 Details drawer 7 Content area 8 Action area 9 {Title} {Details} {Drawer label} {Label} {Label} 1 2 3 4 5 6 7 8 9 {Title} {Details} {Drawer label} Basic ESDSV Alert Background color : ESDS Color Alert/Basic/Background #F0F1F1 Border color : ESDS Color Alert/Basic/Element #A6ACB0 Decorative Icon Color : Secondary {Title} {Details} {Drawer label} Informational ESDSV Alert Background color : ESDS Color Alert/Info/Background #EDF0FB Border color : ESDS Color Alert/Info/Element #0E68D4 Decorative Icon Color : Info {Title} {Details} {Drawer label} Success ESDSV Alert Background color : ESDS Color Alert/Success/Background #E6FDEB Border color : ESDS Color Alert/Success/Element #097D33 Decorative Icon Color : Success {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} {Label} {Label} 8 16 16 16 16 Direction : Horizontal Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fixed Item spacing: ESDS Density item-spacing/half-x 8 Padding : ESDS Density padding/1x 16 {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} {Label} {Label} 16 16 Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/1x 16 {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} 12 12 Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/three-q uarter-x 12

Slide 8

Slide 8 text

© Copyright 2024 • EightShapes LLC People making things Developers coding the thing Designers making a Figma asset to publish Teammates composing docs Who uses a specification?

Slide 9

Slide 9 text

© Copyright 2024 • EightShapes LLC People making things Developers coding the thing Designers making a Figma asset to publish Teammates composing docs People using things Developers importing and using the code Instead, use docs or Storybook. Designers inserting a Figma asset Instead, use guideline docs like Use When. Writers authoring copy Instead, use documented guidelines. Who uses a specification?

Slide 10

Slide 10 text

© Copyright 2024 • EightShapes LLC When are specifications used? Design Specification Code Release Discovery Handoff dev to A moment of transition during which a designer delivers final work so code can proceed confidently.

Slide 11

Slide 11 text

Handoff to devteammates A moment of transition during which a so production can proceed confidently. designer delivers final work code team provisionally agrees on an API © Copyright 2024 • EightShapes LLC When are specifications used? Design Specification Figma Asset Design Docs Code Release Dev Docs Discovery

Slide 12

Slide 12 text

© Copyright 2024 • EightShapes LLC Problem Takes too long to make Specs are costly to produce manually, both in time and opportunities missed.

Slide 13

Slide 13 text

© Copyright 2024 • EightShapes LLC Problem Takes too long to make Specs are costly to produce manually, both in time and opportunities missed. Problem Sucks designers souls Most designers want to do other things, and describe this task as “soul sucking.”

Slide 14

Slide 14 text

© Copyright 2024 • EightShapes LLC Problem Takes too long to make Specs are costly to produce manually, both in time and opportunities missed. Problem Sucks designers souls Most designers want to do other things, and describe this task as “soul sucking.” Problem Quality varies Designers struggle withv x completenes† x consistenc… x precisio} x concision

Slide 15

Slide 15 text

© Copyright 2024 • EightShapes LLC OPPORTUNITY We make powerful things in Figma

Slide 16

Slide 16 text

© Copyright 2024 • EightShapes LLC OPPORTUNITY We make powerful things in Figma OPPORTUNITY Figma API exposes the decisions

Slide 17

Slide 17 text

© Copyright 2024 • EightShapes LLC OPPORTUNITY We make powerful things in Figma OPPORTUNITY Figma API exposes the decisions OPPORTUNITY Spec are predictable

Slide 18

Slide 18 text

© Copyright 2024 • EightShapes LLC A Figma plugin that automates production of detailed Anatomy, Properties, Modes and Layout and Spacing specifications

Slide 19

Slide 19 text

© Copyright 2024 • EightShapes LLC Demo EightShapes Specs

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Anatomy {Title} {Details} Show less {Label} {Label} 1 2 3 4 5 6 7 8 9 10 11 12 EightShapes Alert 1 Width: ESDS Sizing / platform/iOS default width (343) Border weight: 2 Decorative Icon 2 Depends on: ESDS-V Icon Name: Size: 20x20 ]-[ 3 ]-[ 4 ]-[ 5 Title 6 Text style: Heading/5 Icon button layout container 7 Height: ESDS Sizing / icon/small (16) Width: ESDS Sizing / icon/small (16) Dismiss Icon 8 Depends on: ESDS-V Icon Name: Size: 16x16 Color: Primary Details 9 Text style: Body/Small Details drawer 10 Depends on: ESDSV Details drawer State: Open Content area 11 Depends on: .Slot Action area 12 Depends on: ESDSV Alert actions Actions: Button + Link

Slide 22

Slide 22 text

Properties Type {Title} {Details} Show less {Label} {Label} Basic EightShapes Alert Background color: ESDS Color / Alert/Basic/Background (#F0F1F1) Border color: ESDS Color / Alert/Basic/Element (#A6ACB0) Decorative Icon Color: Secondary {Title} {Details} Show less {Label} {Label} Informational EightShapes Alert Background color: ESDS Color / Alert/Info/Background (#EDF0FB) Border color: ESDS Color / Alert/Info/Element (#0E68D4) Decorative Icon Color: Info {Title} {Details} Success EightShapes Alert Background color: ESDS Color / Alert/Success/Background (#E6FDEB) Border color: ESDS Color / Alert/Success/Element (#097D33) Decorative Icon

Slide 23

Slide 23 text

Modes ESDS Space {Title} {Details} Show less {Label} {Label} Cozy EightShapes Alert Item spacing: ESDS Space / item-spacing/half-x (8) Padding: ESDS Space / padding/1x (16) ]-[ Item spacing: ESDS Space / item-spacing/1x (16) ]-[ Item spacing: ESDS Space / item-spacing/three-quarter-x (12) ]-[ Item spacing: ESDS Space / item-spacing/one-and-a-half-x (24) {Title} {Details} Show less {Label} {Label} Comfortable EightShapes Alert Item spacing: ESDS Space / item-spacing/half-x (10) Padding: ESDS Space / padding/1x (20) ]-[ Item spacing: ESDS Space / item-spacing/1x (20) ]-[ Item spacing: ESDS Space / item-spacing/three-quarter-x (15) ]-[ Item spacing: ESDS Space / item-spacing/one-and-a-half-x (30) {Title} {Details} Show less {Label} {Label} Compact EightShapes Alert Item spacing: ESDS Space / item-spacing/half-x (6) Padding: ESDS Space / padding/1x (12) ]-[ Item spacing: ESDS Space / item-spacing/1x (12) ]-[ Item spacing: ESDS Space / item-spacing/three-quarter-x (9) ]-[ Item spacing: ESDS Space / item-spacing/one-and-a-half-x (18) ESDS Color {Title} {Details} Show less {Label} {Label} Light Title Text color: ESDS Color / Text/Primary (#0E1114) EightShapes Alert Background color: ESDS Color / Alert/Basic/Background (#F0F1F1) Border color: ESDS Color / Alert/Basic/Element (#A6ACB0) Details Text color: ESDS Color / Text/Primary (#0E1114) {Title} {Details} Show less {Label} {Label} Dark Title Text color: ESDS Color / Text/Primary (#FFFFFF) EightShapes Alert Background color: ESDS Color / Alert/Basic/Background (#0E1114) Border color: ESDS Color / Alert/Basic/Element (#666E74) Details Text color: ESDS Color / Text/Primary (#FFFFFF) ESDS Shape {Title} {Details} Show less {Label} {Label} Subtle round EightShapes Alert Border radius: ESDS Shape / border radius/module (4) {Title} {Details} Show less {Label} {Label} Round EightShapes Alert Border radius: ESDS Shape / border radius/module (16) {Title} {Details} Show less {Label} {Label} Squared EightShapes Alert Border radius: ESDS Shape / border radius/module (0)

Slide 24

Slide 24 text

Layout and spacing Type: Basic {Title} {Details} Show less {Label} {Label} 8 16 16 16 16 EightShapes Alert Direction: Horizontal Alignment: Top left Vertical resizing: Hug Horizontal resizing: Fixed Item spacing: ESDS Space / item-spacing/half-x (8) Padding: ESDS Space / padding/1x (16) {Title} {Details} Show less {Label} {Label} {Title} {Details} Show less {Label} {Label} 16 16 ]-[ Direction: Vertical Alignment: Top left Vertical resizing: Hug Horizontal resizing: Fill Item spacing: ESDS Space / item-spacing/1x (16) {Title} {Details} Show less {Label} {Label} {Title} {Details} Show less 12 12 ]-[ Direction: Vertical Alignment: Top left Vertical resizing: Hug Horizontal resizing: Fill Item spacing: ESDS Space / item-spacing/three-quarter-x (12) {Title} {Details} Show less {Title} 24 ]-[ Direction: Horizontal Alignment: Top right Vertical resizing: Hug Horizontal resizing: Fill Item spacing: ESDS Space / item-spacing/one-and-a-half-x (24)

Slide 25

Slide 25 text

Anatomy Title Sub-title 1 2 3 4 Lightning Page Header 1 Width: 600 Border color: Foundation/Gray/Neutral-80 (#C9C9C9) Border weight: 1 Border radius: 4 Standard Icons / A / account 2 Depends on: Standard Icons / A / account Title 3 Text color: Text / Default (#181818) Text style: 06 - Page Title / Default Sub-title 4 Text color: #000000 Text style: 03 - Body/Default Title App Name Label 5 6 App Name 5 Text color: #000000 Text style: 03 - Body/Default Button 6 Depends on: Button Type: Neutral State: Default Icon: None Page Name Sub-Title Label Label Label Label Label Title 7 8 9 10 11 12 13 14 15 16 17 18 Page Name 7 Text color: #000000 Text style: 03 - Body/Default Sub-Title 8 Text color: #000000 Text style: 03 - Body/Default _Item 9 Depends on: _Item Type: Base Text State: Default Position: Left _Item 10 Depends on: _Item Type: Icon State: Default Position: Right Button Icon 11 Depends on: Button Icon Type: Bordered Size: More State: Default Button Icon 12 Depends on: Button Icon Type: Bordered Size: More State: Default Button Icon (Stateful) 13 Depends on: Button Icon (Stateful) State: Default Selected: No Button Icon (Stateful) 14 Depends on: Button Icon (Stateful) State: Default Selected: No _Item 15 Depends on: _Item Type: Icon State: Default Position: Left _Item 16 Depends on: _Item Type: Icon State: Default Position: Right Title 17 Text color: Text / Default (#181818) Text style: 06 - Page Title / Default Utility Icons / D / down 18 Depends on: Utility Icons / D / down Record Name Title Label Label Label Label Label Label Label Label Label Label Label Label 19 20 21 22 23 24 25 26 27 28 29 Card 19 Depends on: Card Header: False Footer: False Header 20 Height: 72 Width: 600 Background color: Foundation/Gray/Neutral-95 (#F3F3F3) Border color: Foundation/Gray/Neutral-80 (#C9C9C9) Border weight: 1 Top left radius: 4 Top right radius: 4 Standard Icons / A / account 21 Depends on: Standard Icons / A / account Record Name 22 Text color: #000000 Text style: 03 - Body/Default Title 23 Text color: Text / Default (#181818) Text style: 06 - Page Title / Default Button 24 Depends on: Button Type: Neutral State: Default Icon: Left Button Group 25 Height: 32 _Item 26 Depends on: _Item Type: Base Text State: Default Position: Left

Slide 26

Slide 26 text

Lightning Button Anatomy Label 1 2 Lightning Button 1 Height: 32 Border radius: 4 Label 2 Text align: Center Text style: 03 - Body/Default Label 3 Icon 3 Depends on: Utility Icons / F / fallback Properties Type : Brand by State Label Default Lightning Button Background color: Foundation/Blue/Blue-50 (#0176D3) Stroke alignment : Center Label Text color: Foundation/Gray/Neutral-100 (#FFFFFF) Label Hover Lightning Button Background color: Foundation/Blue/Blue-30 (#014486) Stroke alignment : Center Label Text color: Foundation/Gray/Neutral-100 (#FFFFFF) Label Focus Lightning Button Background color: Foundation/Blue/Blue-30 (#014486) Drop shadow: 01 - Button / Focus (0px 0px 3px 0px #0070D2) Stroke alignment : Center Label Text color: Foundation/Gray/Neutral-100 (#FFFFFF) Label Disabled Lightning Button Background color: Foundation/Gray/Neutral-65 (#A0A0A0) Stroke alignment : Center Label Text color: Foundation/Gray/Neutral-100 (#FFFFFF) Type : Brand Outline by State Label Default Lightning Button Border color: Foundation/Blue/Blue-50 (#0176D3) Background color: Foundation/Gray/Neutral-100 (#FFFFFF) Stroke alignment : Inside Border weight: 1 Label Text color: Foundation/Blue/Blue-50 (#0176D3) Label Hover Lightning Button Background color: Foundation/Gray/Neutral-95 (#F3F3F3) Border color: Foundation/Blue/Blue-50 (#0176D3) Stroke alignment : Inside Border weight: 1 Label Text color: Vibrant / Cloud Blue / 40 (#05628A) Label Focus Lightning Button Background color: Foundation/Gray/Neutral-95 (#F3F3F3) Border color: Foundation/Blue/Blue-50 (#0176D3) Drop shadow: 01 - Button / Focus (0px 0px 3px 0px #0070D2) Stroke alignment : Inside Border weight: 1 Label Text color: Vibrant / Cloud Blue / 40 (#05628A) Label Disabled Lightning Button Background color: Foundation/Gray/Neutral-100 (#FFFFFF) Border color: Foundation/Gray/Neutral-80 (#C9C9C9) Border weight: 1 Label Text color: Foundation/Gray/Neutral-90 (#E5E5E5) Type : Destructive by State Label Label Label Label

Slide 27

Slide 27 text

© Copyright 2024 • EightShapes LLC Plugin user benefits BENEFIT Production is effortless Spec cost --> zero 
 BENEFIT Less time on specs --> More time for other stuff! More opportunities 
 BENEFIT Collaborators spend less time inspecting art Less inspection 
 BENEFIT Less mistakes, less missed attributes Higher quality 


Slide 28

Slide 28 text

© Copyright 2024 • EightShapes LLC Maker benefits OUTCOME Learning the API lifted 
 my Figma expertise Figma knowledge 
 OUTCOME I learned Typescript and improved other skills Coding, again 
 OUTCOME I’m nowhere close to replacing my day job Revenue 
 OUTCOME I really love making things to solve problems. Most of the time, at least. Joy 


Slide 29

Slide 29 text

© Copyright 2024 • EightShapes LLC What doesn’t the plugin do?

Slide 30

Slide 30 text

© Copyright 2024 • EightShapes LLC Backlog Custom formats of spec spacing Space transformation (16 -> 4X) Inventory of detected variables/tokens Token alias chains (from semantic to primitive to value) https://github.com/orgs/EightShapes/projects/3/views/2

Slide 31

Slide 31 text

Motion Section Heading {Animation Name} {Description} Start {Name} : {Style/token} {Name} : {Value} {Name} : {Value} End {Name} : {Style/token} {Name} : {Value} {Name} : {Value} Timing {Name} : {Value} {Name} : {Value} {Name} : {Value} Start {Name} : {Style/token} {Name} : {Value} {Name} : {Value} End {Name} : {Style/token} {Name} : {Value} {Name} : {Value} Timing {Name} : {Value} {Name} : {Value} {Name} : {Value} Some art goes in here {Heading} {Description} Accessibility Screen reading For when the member is using a screen reader, including how elements should be identified, read, and in what order. ESDS Text input Reading : [ESDS Form label]. [Icon] [value/ placeholder], [role]. Example : “Cost rate, the internal cost that this person incurs on your business. Dollar 100, [role].” Role : text box {Layer name} Reading : {Reading} Example : {Example} Role : {Role} Focus order ##. {Name} {Role} ##. {Name} {Role} ##. {Name} {Role} ##. {Name} {Role} # # # # # # # # # # # # No Motion or Behaviors sections Low Figma feature usage, low demand No Accessibility section Higher demand, no Figma support and it’s hard

Slide 32

Slide 32 text

© Copyright 2024 • EightShapes LLC Accessibility https://stephaniewalter.design/blog/a-designers-guide-to-documenting-accessibility-user-interactions/

Slide 33

Slide 33 text

© Copyright 2024 • EightShapes LLC Accessibility

Slide 34

Slide 34 text

© Copyright 2024 • EightShapes LLC Doesn’t Dev Mode already
 “automate” specs?

Slide 35

Slide 35 text

© Copyright 2024 • EightShapes LLC Specs Plugin ≠ Dev Mode

Slide 36

Slide 36 text

© Copyright 2024 • EightShapes LLC Specs plugin Explore decisions to code a new feature Review annotated designs Dev mode Explore decisions to code a new feature Review annotated designs Live connection of asset and inspection Transform an asset into copiable code Expose developer documentation Inspect design side-by-side in code editor Streamline workflows by integrating tools $25–35/mo per dev mode user Free ($8/mo for Pro) per maker

Slide 37

Slide 37 text

© Copyright 2024 • EightShapes LLC Inspecting designs is a treasure hunt, without a treasure map.

Slide 38

Slide 38 text

© Copyright 2024 • EightShapes LLC Specs map organized design decisions. That is the treasure. No hunting needed.

Slide 39

Slide 39 text

© Copyright 2024 • EightShapes LLC Marking artwork is time consuming. Designers miss things too...

Slide 40

Slide 40 text

© Copyright 2024 • EightShapes LLC Marking should be effortless, organized and meticulously complete.

Slide 41

Slide 41 text

© Copyright 2024 • EightShapes LLC So, how do collaborators react?
 They all use the plugin, right?

Slide 42

Slide 42 text

© Copyright 2024 • EightShapes LLC

Slide 43

Slide 43 text

© Copyright 2024 • EightShapes LLC Demo Verizon Design System’s Video Player specs

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

© Copyright 2024 • EightShapes LLC Figma asset Specification ESDS Card Contained? Custom areas None Action(s)? Container Surface Light primary State Initial Image Aspect ratio 16:9 Text Size Medium Metadata? Description? Actions Variant Button Size Medium ESDS Card Anatomy ESDS Card 1 Width : 375 Border radius : 8 ESDS Image 2 Depends on : ESDS Image Aspect ratio : 16:9 ESDS Card text 3 Depends on : ESDS Card text Metadata? : true Description? : true Surf ace : Light Siz e : Medium ESDS Card actions 4 Depends on : ESDS Card actions V ariant : Button Siz e : Medium Surf ace : Light ESDS Card container 5 Depends on : ESDS Card container Surf ace : P rim ary l ight State : I nitial { M e t a d a t a } {T itl e} { Description} { Lab el} 1 2 3 4 5 L ayou t and spacing Content Direction : V ertical Al ignm ent : T op l ef t V ertical resiz ing : H ug H oriz ontal resiz ing : F ill I tem spacing: 16 P adding : 24 { M e t a d a t a } {T itl e} { Description} { Lab el} { M e t a d a t a } {T itl e} { Description} { Lab el} 16 24 24 24 24 ]-[ Direction : H oriz ontal Al ignm ent : T op l ef t What system teamm ates use What adopting designers use { M e t a d a t a } {T itl e} { Description} { Lab el}

Slide 46

Slide 46 text

© Copyright 2024 • EightShapes LLC How does automation impact process and align people?

Slide 47

Slide 47 text

(Updates in orange) © Copyright 2024 • EightShapes LLC Using automated specs after handoff Design Specification Figma Asset Design Docs Code Release Dev Docs Discovery Handoff Alignment Visual QA

Slide 48

Slide 48 text

© Copyright 2024 • EightShapes LLC 4 5 3 2 1 https://mui.com/material-ui/api/text-field/ Figma asset Code

Slide 49

Slide 49 text

© Copyright 2024 • EightShapes LLC Aligning Figma assets to code API Anatomy 1 Width : 220 Input 2 Label 3 Text style : input/label Content 4 Min height : 24 Min width : 24 5 Depends on : Icon Instance : Size : Medium Type : SVG Icon Value 6 Text style : input/value Placeholder 7 Text color : palette text/disabled #000000, 38% Text style : input/value 8 Depends on : Icon Instance : Size : Medium Type : SVG Icon Underline 9 Stroke alignment : Center 10 Depends on : Disabled : Enabled Label Value Placehol der H elp er t ext 1 2 3 4 5 6 7 8 9 1 0 Properties State : Enabled by Variant Label Value Standard Input B order radius : 0 Label Text color : palette text/secondary #000000, 6 0% Underline B order color : palette _ components/input/standard/enabledB order #000000, 42% B order weight : 1 Label Value Filled Content B ackground color : palette _ components/input/f illed/enabledF ill #000000, 6 % Label Text color : palette text/secondary #000000, 6 0% Value Text color : palette text/primary #000000, 87 % Underline B order color : palette _ components/input/standard/enabledB order #000000, 42% B order weight : 1 Value Label O utlined Input B order color : palette _ components/input/outlined/enabledB order #000000, 23% B order weight : 1 B order radius : shape borderR adius 4 Value Text color : palette text/primary #000000, 87 % State : Hov ered by Variant Label Value Standard Input B order radius : 0 Label Text color : palette text/secondary #000000, 6 0% Underline B order color : palette _ components/input/standard/hoverB order #000000 Label Value Filled Content B ackground color : palette _ components/input/f illed/hoverF ill #000000, 9 % Underline B order color : palette _ components/input/standard/hoverB order #000000 B order weight : 2 Value Label O utlined Input B order color : palette _ components/input/outlined/hoverB order #000000 B order weight : 1 B order radius : shape borderR adius 4 Label Text color : palette text/secondary #000000, 6 0% State : Disabled by Variant Label Value Standard Input B order radius : 0 Label Text color : palette text/disabled #000000, 38% Value Text color : palette text/disabled #000000, 38% Underline B order color : palette _ components/input/standard/enabledB order #000000, 42% B order weight : 1 Label Value Filled Label Text color : palette text/disabled #000000, 38% Value Text color : palette text/disabled #000000, 38% Value Label O utlined Input B order color : palette _ components/input/outlined/enabledB order #000000, 23% B order weight : 1 B order radius : shape borderR adius 4 Value Text color : palette text/disabled #000000, 38% Label Text color : palette text/disabled #000000, 38% State : Error by Variant Label Value Standard Input B order radius : 0 Label Label Value Filled Label Text color : palette error/main #D32F 2F Underline Value Label O utlined Input B order color : palette error/main #D32F 2F B order weight : 1 B order radius : shape borderR adius 4 Modes palette Label Value Light Label Text color : palette text/secondary #000000, 6 0% Value Text color : palette text/primary #000000, 87 % Underline B order color : palette _ components/input/standard/enabledB order #000000, 42% Label Value Dark Label Text color : palette text/secondary #FFFFFF , 7 0% Value Text color : palette text/primary #FFFFFF Underline B order color : palette _ components/input/standard/enabledB order #FFFFFF , 42% Layout and spacing Label Value Placehol der H elp er t ext Value Placehol der Content Direction : Horizontal Alignment : Middle lef t Vertical resizing : Hug Horizontal resizing : F ill Label Value Placehol der H elp er t ext 8 Adorn. Start Container Direction : Horizontal Alignment : Middle lef t Vertical resizing : Hug Horizontal resizing : Hug Padding right: 8 Label Value Placehol der H elp er t ext Adorn. End Container Direction : Horizontal Alignment : Middle lef t Vertical resizing : Hug Horizontal resizing : Hug FIG MA As s e t Material UI f or F igma (and MUI X) (Community) Is merging disabled and error (in code, boolean properties) with states like hov ered and enabled ok? Nathan Curtis Is palette the term in the code API that developers use to swap light v dark? Nathan Curtis

Slide 50

Slide 50 text

When Figma asset and code don’t agree © Copyright 2024 • EightShapes LLC Figma Material UI for Figma (and MUI X) (Community) Code https://mui.com/material-ui/react-text-field/ Layout and spacing Label Value Placehol der Helper text 8 Adorn. Start Container Direction : Horizontal Alignment : Middle left Vertical resizing : Hug Horizontal resizing : Hug Padding right: 8 Label Value Placehol der Helper text Adorn. End Container Direction : Horizontal Alignment : Middle left Vertical resizing : Hug Horizontal resizing : Hug Label Value

Slide 51

Slide 51 text

Assuring visual precision in Figma assets © Copyright 2024 • EightShapes LLC Properties Type {Title} {Details} {Drawer label} Basic ESDSV Alert Background color : ESDS Palette Neutral/88 #DEE0E1 Border color : ESDS Palette Neutral/43 #666E74 Decorative Icon Color : Secondary Informational ESDSV Alert Background color : ESDS Color Alert/Info/Background #EDF0FB Border color : ESDS Color Alert/Info/Element #0E68D4 Decorative Icon

Slide 52

Slide 52 text

Design review (Updates in orange) © Copyright 2024 • EightShapes LLC Using automated specs before handoff Specification Figma Asset Design Docs Code Release Dev Docs Discovery Handoff Alignment Visual QA Exploration Design

Slide 53

Slide 53 text

Opportunity Design feedback Problem Solution Designers spend considerable time laying out alternatives and describing detailed design decisions. Run plugin on emerging artwork, paste output into Figjam for critique © Copyright 2024 • EightShapes LLC

Slide 54

Slide 54 text

© Copyright 2024 • EightShapes LLC What if specs change?

Slide 55

Slide 55 text

© Copyright 2024 • EightShapes LLC What changed?

Slide 56

Slide 56 text

Describe change Include a well written, consistently formatted version history © Copyright 2024 • EightShapes LLC Version history April 24, 2024 i Added dismissible property, layout and spacing and X icon butto• i Updated Basic Type color variables from generic values to new Alert / Basic semantic variables

Slide 57

Slide 57 text

Mark what changed, how it changed Add outside strokes to highlight added, updated, and removed sections and content © Copyright 2024 • EightShapes LLC

Slide 58

Slide 58 text

Version history April 24, 2024 P Added dismissible property, layout and spacing and X icon butto@ P Updated Basic Type color variables from generic values to new Alert / Basic semantic variables View Updates Link to branch with highlighted changes © Copyright 2024 • EightShapes LLC

Slide 59

Slide 59 text

Remove highlights in main branch using selection colors © Copyright 2024 • EightShapes LLC

Slide 60

Slide 60 text

Leave main branch clean without change annotations © Copyright 2024 • EightShapes LLC ESDSV Alert Anatomy {Title} {Details} {Drawer label} {Label} {Label} 1 2 3 4 5 6 7 8 ESDSV Alert 1 Width : ESDS Sizing platform/iOS default width 343 Border weight : 2 Decorative Icon 2 Depends on : ESDSV Icon Name : Size : 20x20 Title 3 Text style : Heading/5 Dismiss Icon 4 Depends on : ESDSV Icon Name : Size : 16x16 Color : Primary Details 5 Text style : Body/Small Details drawer 6 Depends on : ESDSV Details drawer State : Open Content area 7 Depends on : .Slot Action area 8 Depends on : ESDSV Alert actions Actions : Button + Link Properties Type {Title} {Details} {Drawer label} Basic ESDSV Alert Background color : ESDS Palette Neutral/94 #F0F1F1 Background color : ESDS Color Alert/Basic/Background #F0F1F1 Border color : ESDS Palette Neutral/67 #A6ACB0 Border color : ESDS Color Alert/Basic/Element #A6ACB0 Decorative Icon Color : Secondary {Title} {Details} {Drawer label} Informational ESDSV Alert Background color : ESDS Color Alert/Info/Background #EDF0FB Border color : ESDS Color Alert/Info/Element #0E68D4 Decorative Icon Color : Info {Title} {Details} {Drawer label} Success ESDSV Alert Background color : ESDS Color Alert/Success/Background #E6FDEB Border color : ESDS Color Alert/Success/Element #097D33 Decorative Icon Color : Success {Title} {Details} {Drawer label} Error ESDSV Alert Background color : ESDS Color Alert/Error/Background #FCF0EF Border color : ESDS Color Alert/Error/Element #D90936 Decorative Icon Color : Error {Title} {Details} {Drawer label} Warning ESDSV Alert Background color : ESDS Color Alert/Warning/Background #FCEFDA Border color : ESDS Color Alert/Warning/Element #785F07 Decorative Icon Color : Warning Dismissable {Title} {Details} {Drawer label} Property type : Boolean Default : false Associated layers : Dismiss Icon Details drawer {Title} {Details} {Drawer label} Property type : Boolean Default : true Associated layers : Details drawer Action area {Title} {Details} {Drawer label} {Label} {Label} Property type : Boolean Default : false Associated layers : Action area Content area {Title} {Details} {Drawer label} Property type : Boolean Default : false Associated layers : Content area Details? {Title} {Details} {Drawer label} Property type : Boolean Default : true Associated layers : Details Layout and spacing {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} {Label} {Label} 8 16 16 16 16 ESDSV Alert Direction : Horizontal Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fixed Item spacing: ESDS Density item-spacing/half-x 8 Padding : ESDS Density padding/1x 16 {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} {Label} {Label} 16 16 ]-[ Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/1x 16 {Title} {Details} {Drawer label} {Label} {Label} {Title} {Details} {Drawer label} 12 12 ]-[ Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/three-quarter-x 12 {Title} {Details} {Drawer label} {Label} {Label} {Title} 24 ]-[ Direction : Horizontal Alignment : Top right Vertical resizing : Hug Horizontal resizing : Fill Item spacing: ESDS Density item-spacing/one-and-a-half-x 24 Modes ESDS Density {Title} {Details} {Drawer label} Cozy ESDSV Alert Item spacing: ESDS Density item-spacing/half-x 8 Padding : ESDS Density padding/1x 16 ]-[ Item spacing: ESDS Density item-spacing/1x 16 ]-[ Item spacing: ESDS Density item-spacing/three-quarter-x 12 ]-[ Item spacing: ESDS Density item-spacing/one-and-a-half-x 24 {Title} {Details} {Drawer label} Comfortable ESDSV Alert Item spacing: ESDS Density item-spacing/half-x 10 Padding : ESDS Density padding/1x 20 ]-[ Item spacing: ESDS Density item-spacing/1x 20 ]-[ Item spacing: ESDS Density item-spacing/three-quarter-x 15 ]-[ Item spacing: ESDS Density item-spacing/one-and-a-half-x 30 {Title} {Details} {Drawer label} Compact ESDSV Alert Item spacing: ESDS Density item-spacing/half-x 6 Padding : ESDS Density padding/1x 12 ]-[ Item spacing: ESDS Density item-spacing/1x 12 ]-[ Item spacing: ESDS Density item-spacing/three-quarter-x 9 ]-[ Item spacing: ESDS Density item-spacing/one-and-a-half-x 18 ESDS Color {Title} {Details} {Drawer label} Light Title Text color : ESDS Color Text/Primary #0E1114 Details Text color : ESDS Color Text/Primary #0E1114 {Title} {Details} {Drawer label} Dark Title Text color : ESDS Color Text/Primary #FFFFFF Details Text color : ESDS Color Text/Primary #FFFFFF ESDS Shape {Title} {Details} {Drawer label} Subtle round ESDSV Alert Border radius : ESDS Shape border radius/module 4 {Title} {Details} {Drawer label} Round ESDSV Alert Border radius : ESDS Shape border radius/module 16 {Title} {Details} {Drawer label} Squared ESDSV Alert Border radius : ESDS Shape border radius/module 0 Version history April 24, 2024 ) Added dismissible property, layout and spacing and X icon butto ) U pdated Basic Type color v ariables from generic v alues to new Alert / Basic semantic v ariables View U pdates

Slide 61

Slide 61 text

© Copyright 2024 • EightShapes LLC Is automation for everybody?

Slide 62

Slide 62 text

© Copyright 2023 • EightShapes LLC Specs plugin Figma asset quality Poor Poor Spec output quality Automation depends on quality

Slide 63

Slide 63 text

© Copyright 2023 • EightShapes LLC {Label} {Title} {Description} {Label} {Label} 16 24 24 24 24 8 4 8 16 Card Item spacing / Margin Padding Elements How layout is spec’ed, traditionally

Slide 64

Slide 64 text

© Copyright 2023 • EightShapes LLC {Label} {Title} {Description} {Label} {Label} 16 24 24 24 24 8 4 8 16 Card How layout works, hierarchically { M e ta data } {Title} {Description} { M e ta data } {Title} 4 {label} {label} 8 8 8 12 12 {Label} {Label} {Label} {Label} 16 {Label} {Title} {Description} {Label} {Label} {Label} {Title} {Description} {Label} {Label} { M e ta data } {Title} {Description} { M e ta data } {Title} {Description} 8 {Label} {Title} {Description} {Label} {Label} {Label} {Title} {Description} {Label} {Label} 16 24 24 24 24

Slide 65

Slide 65 text

© Copyright 2023 • EightShapes LLC “How strong are your skills in laying out custom solutions using Figma autolayout?” Very poor I’m OK Very strong 1 2 3 4 5 What designers said

Slide 66

Slide 66 text

© Copyright 2023 • EightShapes LLC “How strong are your skills in laying out custom solutions using Figma autolayout?” Very poor I’m OK How designers performed Very strong 1 2 3 4 5 What designers said

Slide 67

Slide 67 text

© Copyright 2023 • EightShapes LLC Self assessed skill Look up “Dunning-Kruger Effect” Actual skill VERY STRONG VERY POOR VERY POOR VERY STRONG Group 1 Stronger, humbler Group 2 Less strong, sometimes overconfident Self-assessed AutoLayout skills

Slide 68

Slide 68 text

© Copyright 2023 • EightShapes LLC Using automation to share ideas As scratchpad to shared ideas Produced via EightShapes Specs Produced manually As formal addition consistent with in-house spec format Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text 8 Frame 38 Direction : Vertical Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fixed Item spacing: 8 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label 12 Frame 40 Direction : Horizontal Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: 12 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Value Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text 12 Frame 39 Direction : Horizontal Alignment : Top left Vertical resizing : Hug Horizontal resizing : Fill Item spacing: 12 {Label text} Lorem ipsum dolor sit amet, consectetur adipiscing elit Value {Error text} Mauris ultrices quis lorem nec iaculis. Aliquam faucibus laoreet leo vitae commodo. {Helper text} Duis aliquam, erat ac varius efficitur, erat urna malesuada nibh, ut dapibus lacus eros quis dolor. Nulla luctus tempor magna at pulvinar. Phasellus hendrerit laoreet ante, ac commodo sapien ultrices ac. Nunc bibendum risus vestibulum consequat tempor. 2 1 2X Bottom 1 Container: L Columns 2 Container: [ Direction {Label text} Lorem ipsum dolor sita, consectetur adipiscing elit Value {Error text} Mauris ultrices quis lorem nec iaculis. Aliquam faucibus laoreet leo vitae commodo. {Helper text} Duis aliquam, erat ac varius efficitur, erat urna malesuada nibh, ut dapibus lacus eros quis dolor. Nulla luctus tempor magna at pulvinar. Phasellus hendrerit 2 1 3X Right 1 Container: L Columns 2 Container: [ Direction

Slide 69

Slide 69 text

© Copyright 2024 • EightShapes LLC So, are you expecting me to code the layer structure exactly as you’ve spec’ed it? Because... no.” — Me or any reasonable developer coping with constraints of frameworks, systems, and platforms Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text 8 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label 12 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text 12 Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Label Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Helper text Value Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text Error text 4

Slide 70

Slide 70 text

© Copyright 2024 • EightShapes LLC What are “specs,” really?

Slide 71

Slide 71 text

© Copyright 2024 • EightShapes LLC (Automated) Specs are disposable. Like all waste on the path to digital experiences people use, I revel in that disposability.

Slide 72

Slide 72 text

© Copyright 2024 • EightShapes LLC Specs are communication. Automation bends more designers to sharing more technical ideas more clearly and quickly. That’s the plugin’s mission

Slide 73

Slide 73 text

© Copyright 2024 • EightShapes LLC Use your specs and tools to... Communicate design intent Communicate technical concepts and alternatives Assure quality Communicate and record change over time Prescribe the only way to code everything

Slide 74

Slide 74 text

© Copyright 2024 • EightShapes LLC medium.com/@nathanacurtis Architecting Operating

Slide 75

Slide 75 text

© Copyright 2024 • EightShapes LLC Upcoming workshops Design tokens and UI component architecture Hosted by Smashing Workshops Token taxonomy Token naming Anatomy Configuration Composition and layout Specifications Process Process from design to code Planning generations Team models Planning initiatives Objectives Measurement Support Communications Vision & mission https://smashingconf.com/online-workshops/ Hosted by Into Design Systems https://ti.to/into-design-systems/workshop Design system planning and process Architecting Operating June 6–7 and 13–14, 2024 June 10-11, 2024

Slide 76

Slide 76 text

© Copyright 2024 • EightShapes LLC Thanks!