Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Engineering Design Systems (360iDev)

Engineering Design Systems (360iDev)

Many companies are coming to realize the many benefits that design systems bring. A good design system (and its accompanying set of engineered components) can improve design quality and consistency and provide significant reduction in production times for both design and development teams. But how do you engineer the components depicted in the design system? In this talk we will learn how to consume design files and then engineer our own mini design system beginning with the foundations of color, spacing, and typography. We will use our foundations to create a few simple elements, and then we will assemble those into a card component, form fields, and finally a form. Along the way we will consider accessibility through the lens of dark mode, increased color contrast, landscape support, Dynamic Type, and bold text support.

Mark Pospesel

August 28, 2022
Tweet

More Decks by Mark Pospesel

Other Decks in Technology

Transcript

  1. YML.co 3 A design and technology agency that exports Silicon

    Valley to the world. We’re YML To us it is a mindset rooted in velocity, innovation and experimentation.
  2. Overview Slack: #sunday-engineering-design-sytems • Introduction • Final Product • Design

    Systems (general) • Base Design System • Starter Project • Open-Source frameworks • Start building
  3. Plus Slack: #sunday-engineering-design-sytems • Foundations: Color, Spacing, Images, Typography •

    Elements: Button, Input, Text • Components: Form Field Our building blocks
  4. Accessibility Features Slack: #sunday-engineering-design-sytems • Dynamic Type • Accessibility Bold

    Text • Dark Mode • Increased Contrast Mode • Landscape Support • Breakpoints (Time permitting)
  5. Base Design System Search for Base in Figma Community (

    fi gma.com) Slack: #sunday-engineering-design-sytems (The full URL is in the Slack channel)
  6. Starter Project github.com/mpospese/DSTutorial • Swift Package: DSKit • Open Source

    dependencies (more on these in a moment) • YCoreUI • YMatterType • UIKit Application • With 2 placeholder view controllers for Card and Form • Every step has its own branch
  7. Q: Why include scroll view helpers? A: When you build

    for accessibility, everything is a scroll view!
  8. Open Source: YMatterType github.com/yml-org/YMatterType • Typography • Extensions for registering

    custom fonts • UI elements that support Typography • Button • Label • TextField • TextView
  9. Step 1: Colors in_progress/step_1 • De fi ne Colors •

    Unit test WCAG 2.0 contrast for more color pairings (test failure) • Use new DSKit framework colors in DSTutorial app
  10. Step 3: Images in_progress/step_3 • Add enum to load images

    from Asset catalog • Unit tests to con fi rm image load
  11. Step 6: Typography.Heading in_progress/step_6 • Add Typography.Heading • XCTestCase subclass

    to register/unregister fonts on setUp/tearDown • Unit tests
  12. Step 9: Heading in_progress/step_9 • Add Heading Element • Expand

    XCTestCase subclass with helpers for comparing typography & color • Unit tests
  13. Step 1: More Typography sizes stretch/step_1 • Add Typography.Label.Large &

    Small • Add Typography.Paragraph.Large • Unit tests
  14. Step 4: Breakpoint unit tests stretch/step_4 • Add stubs to

    be able to change current Breakpoint • Unit tests for Typography+Breakpoint
  15. Step 5: Label/Paragraph + Size stretch/step_5 • Add Large/Medium/Small variants

    of Text/Label & Text/Paragraph • Unit tests • (This could have been earlier. Not dependent upon breakpoints.)
  16. Step 6: Button/Input + Size stretch/step_6 • Adjust DSButton &

    DSTextField to update insets • Add Large/Medium/Small variants of Button & Input • Unit tests
  17. Step 7: Label/Paragraph + Breakpoint stretch/step_7 • Add size-adjusting Breakpoint

    subclasses of DSLabel & DSParagraph • Add XCTestCase subclass for adjusting breakpoints on UI elements • Unit tests
  18. Step 8: Button/Input + Breakpoint stretch/step_8 • Add size-adjusting Breakpoint

    subclasses of DSButton & DSTextField • Update BreakpointElementTestCase to use generics • Unit tests
  19. Engineering Design Systems 28 August 2022 • Mark Pospesel •

    @mpospese • Feedback appreciated! • Repos: • github.com/mpospese/DSTutorial • github.com/yml-org/YCoreUI • github.com/yml-org/YMatterType