<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Tap to Dismiss - Medium]]></title>
        <description><![CDATA[Sweating the details so you don’t have to - Medium]]></description>
        <link>https://medium.com/tap-to-dismiss?source=rss----a327c6e6959---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Tap to Dismiss - Medium</title>
            <link>https://medium.com/tap-to-dismiss?source=rss----a327c6e6959---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 03 May 2026 06:55:20 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/tap-to-dismiss" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Typography Foundations: Building With a Learner’s Mindset]]></title>
            <link>https://medium.com/tap-to-dismiss/typography-foundations-building-with-a-learners-mindset-86c31b997d17?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/86c31b997d17</guid>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[fonts]]></category>
            <category><![CDATA[rebranding]]></category>
            <category><![CDATA[typography]]></category>
            <dc:creator><![CDATA[Namika Varma-Chang]]></dc:creator>
            <pubDate>Thu, 30 Apr 2026 18:20:25 GMT</pubDate>
            <atom:updated>2026-04-30T18:20:23.452Z</atom:updated>
            <content:encoded><![CDATA[<p><em>How to navigate a year-long typography rebrand with curiosity</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mV1-FIgTL3zGbI18bdpq7Q.png" /><figcaption><em>As a part of the 2025 Rebrand, Lyft worked with Koto and NaN to create a new font called Rebel Sans, to express the brand’s values and create visual clarity.</em></figcaption></figure><h3>Learning Led the Way</h3><p>When I was asked to lead the design system’s typography workstream for Lyft’s latest rebrand, I knew I was stepping into a highly complex initiative that would require both deep learning and strong cross-functional alignment.</p><p>Eight years into product design, I understood hierarchy, accessibility, and how to build a solid type ramp. But this workstream wasn’t just about selecting sizes and weights. This meant partnering with brand and agency teams to help shape a new typeface from the ground up — one that would express Lyft’s evolving identity while also creating a more cohesive, legible, and scalable experience across every surface we design for. My role often meant bridging brand ambition with product reality, ensuring creative decisions could translate into an accessible, scalable system that designers and engineers could confidently implement.</p><p>Needless to say, imposter syndrome showed up right on cue. It was the kind of assignment that makes you acutely aware of the edges of your knowledge. Would I be able to hold my own in conversations with typographers? What could I meaningfully contribute? And, if I’m being honest, what exactly <em>was</em> kerning?</p><p>But instead of shrinking back, I leaned in. Because if there’s one thing I’ve learned, especially now, in the age of AI, it’s that the most valuable skill isn’t knowing everything. It’s knowing how to learn fast, ask better questions, and navigate ambiguity with intention.</p><p>“Focus on being a 10x learner, not a 10x doer.” When Zevi Arnovitz, PM at Meta, said this on the <a href="https://youtu.be/1em64iUFt3U?si=mlvAbxH-Z3Z5GSfA">Lenny Podcast</a>, I had to pause and replay it. In one sentence, he captured something I’d been circling for years. This mindset has quietly shaped how I move through my career. Feeling out of my depth doesn’t scare me, it excites me. When I’m staring at a new problem space, I’ve learned to recognize the signal: a growth spurt is coming.</p><p>And in this case, that growth started with a simple exercise: mapping every typography question I had and turning uncertainty into a learning roadmap. In this article, I’ll share that typography learning roadmap, outlining the key areas that helped me move from surface-level knowledge to systems-level understanding, for anyone looking for a structured way to deepen their typography practice.</p><h3>Blank slate to action plan</h3><p>When I need to go deep on something new, I start with what I’ve learned works best: asking questions.</p><p>I opened a FigJam and held a brainstorm with me, myself and AI. The only rule? Write down every single question I had about typography. No filtering. No judging. No prioritizing. For typography this looked like:</p><ul><li><em>What are variable fonts?</em></li><li><em>What is the history of letterforms?</em></li><li><em>Is accessibility really just about font size, or are there deeper metrics that determine legibility?</em></li></ul><p>But I recommend this approach for literally any big topic you feel imposter syndrome about.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iqrV4wqentnHZkbwxRQgfA.png" /><figcaption><em>My starting point: a FigJam brainstorm where I captured every typography question I had.</em></figcaption></figure><p>As a systems designer, my instinct is always to zoom out and see the whole landscape. I wanted to surface the <em>unknown unknowns</em> — the gaps I couldn’t yet articulate but could feel.</p><p>So I timeboxed it. One week. Because without constraints, curiosity can spiral forever. Every time a typography question surfaced, I captured it. I gave myself permission to stay in inquiry mode and deferred solving anything.</p><p>Then something shifted.</p><p>The task felt less daunting. The ambiguity became structured. Patterns started to emerge; clusters of technical questions, philosophical questions about taste and brand expression, operational questions about scalability.</p><p>By the end of the week, I didn’t have answers. But I had something more powerful: a learning roadmap.</p><h3>The Learning Roadmap</h3><p>Now that my questions were organized into themes, I could begin researching without trying to boil the ocean.</p><p>What started as scattered curiosity had crystallized into a focused learning agenda. The questions naturally clustered into three areas: foundations, systems, and implementation.</p><h3>Foundations: understanding typography itself</h3><p>Before you can redesign a typography system, you need to understand how type works both historically and structurally.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7hVXd5rvuyrzGDOTfgoECw.jpeg" /><figcaption><em>Part of the growing stack of books that helped me learn the foundations of typography.</em></figcaption></figure><p><strong>The history of type</strong><br>Understanding how typography evolved helps ensure a new typeface feels intentional and aligned with the brand’s voice.</p><p><strong>The anatomy of letterforms</strong><br>Knowing the structural parts of type allows designers to evaluate legibility, get playful with forms and collaborate more effectively with typographers.</p><p><strong>Accessibility beyond font size</strong><br>Legibility depends on more than size — factors like contrast, weight, spacing, and x-height all impact readability.</p><p><strong>Competitive landscape analysis</strong><br>Studying how other companies use typography reveals patterns, differentiation opportunities, and potential pitfalls.</p><h3>Systems: designing typography at scale</h3><p>A rebrand isn’t just about choosing a font — it’s about creating a system that works consistently across products and platforms.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/540/1*aTz8oaXchmOxKtC8T9wcnQ.gif" /><figcaption><em>Figma’s Variable Fonts Guide provides a great high-level introduction to how variable fonts work</em><strong><em>. </em></strong><em>Image source: Figma.</em><a href="https://www.figma.com/typography/variable-fonts/"><em> https://www.figma.com/typography/variable-fonts/</em></a></figcaption></figure><p><strong>Variable fonts and their capabilities</strong><br>Variable fonts enable more flexible, responsive typography while reducing performance costs across platforms.</p><p><strong>Typography scales and systems</strong><br>A rebrand requires a cohesive type scale that maintains hierarchy and rhythm across products and surfaces.</p><p><strong>Platform considerations — dynamic type and responsive typography<br></strong>Typography must adapt across devices and platforms while supporting accessibility features like Dynamic Type.</p><h3>Implementation: bringing the system to life</h3><p>Even the best typography system only succeeds if it can be implemented smoothly across design and engineering.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A1O1JbjWp8U0GbF3n2H58g.png" /><figcaption><em>Introducing typography optimizations required thoughtful style remapping across both Figma and code so the new system could roll out with minimal disruption to existing products.</em></figcaption></figure><p><strong>Rebrand migration strategy — from Figma libraries to production code</strong><br>A new typography system must translate cleanly from design tools to code through tokens, documentation, and rollout planning.</p><h3>The Impact</h3><p>All of that structured curiosity paid off.</p><p>The typography system we developed launched across multiple products and platforms, reaching millions of users. Along the way, we reduced style inconsistencies, streamlined implementation between design and engineering, and built a scalable foundation for the brand’s next chapter.</p><p>This article is the first in a series where I’ll go deep on each of the above themes — the technical rabbit holes, the stakeholder negotiations, and the messy realities of migrating typography across platforms and products.</p><p>Did you know early printers used standardized type sizes to create hierarchy long before modern typography scales existed?<strong> </strong>Up next in this series: <em>The History of Type</em>, where I explore how typography’s past shapes the systems we build today.</p><p><em>Special thanks to Runi Goswami, David Cox, and Justin Gabbard for their time, thoughtful feedback, and editorial support on this article.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=86c31b997d17" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/typography-foundations-building-with-a-learners-mindset-86c31b997d17">Typography Foundations: Building With a Learner’s Mindset</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Embracing the process: Learning to slow down to deliver clarity]]></title>
            <link>https://medium.com/tap-to-dismiss/embracing-the-process-learning-to-slow-down-to-deliver-clarity-0c61666da6e9?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/0c61666da6e9</guid>
            <category><![CDATA[components]]></category>
            <category><![CDATA[validation]]></category>
            <category><![CDATA[systems-thinking]]></category>
            <category><![CDATA[design-process]]></category>
            <category><![CDATA[design-systems]]></category>
            <dc:creator><![CDATA[Namika Varma-Chang]]></dc:creator>
            <pubDate>Tue, 23 Jul 2024 20:04:50 GMT</pubDate>
            <atom:updated>2024-07-23T20:12:42.107Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/proxy/1*CJ3dAsvOFZbefBX1X3Uzcw.png" /><figcaption>When a new component is deployed we announce it on the Lyft Product Language homepage.</figcaption></figure><p>I’m new to the design system’s team at Lyft. After 6 years of working as a feature designer, I decided to make the jump to design systems and I couldn’t have picked a better design system to learn from.</p><p>At my last gig, I built out a component library, but I did so as a side project unsupported by leadership and with few engineering resources. Sound familiar? In a world where most designers have to advocate just to spend some time componentizing, I feel very lucky to be at an organization with a mature design system. Our design system, Lyft Product Language (LPL), has org-wide buy-in, a fully stacked team (complete with designers, a design program manager and engineers), thorough documentation and meticulous processes.</p><p>Coming from the world of urgent product deadlines, I was accustomed to pushing through the design process at lightning speed. However, my time at Lyft has taught me that design systems and product teams have distinct rhythms. The design system should maintain its focus on delivering high-quality work without being pressured by fast-paced timelines, while product development should continue its momentum without being held back by the design system’s schedule. At Lyft, balancing these two areas is essential to achieving harmony.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vtqGioSkH9bf6_BfaBSm2A.png" /><figcaption>Design systems move slow to ensure consistency so that product teams can move fast.</figcaption></figure><p>For my first LPL project, I was tasked with building a validation message component. Validation messages provide clear and actionable feedback to users, help them understand the context and implications of their actions, and guide them towards resolving any issues or errors. They are typically paired with input components like form fields, but can also be used by non-input components where applicable. It was a relatively simple project, chosen to help me familiarize myself with our distinct end-to-end process.</p><p>Although it took some time to wrap my head around spending weeks investigating a small component like a validation message, the LPL process with its many checks and balances allowed me to slow down and ensure that nothing critical was overlooked during the design process. The highly collaborative nature of everything we do facilitated open discussion and review of everything I designed, maintaining the integrity of the system.</p><h3>The LPL Project Process</h3><h4>Step 1: Project Brief</h4><p>Every project begins with a detailed project brief, created collaboratively across the design systems team and any other relevant stakeholders.</p><blockquote>Since this was my first project, the project brief had already been written. Initially, the validation message component was named “sentiment message.” There was existing documentation using “sentiment messaging” as a term, and some components, like text fields, had their validation messages labeled as “sentiment” in both Figma and web. However, the project brief revealed confusion about the scope of this component. Would it be user-initiated or system-initiated? Could it address empty states? What exactly did “sentiment” mean?</blockquote><h4>Step 2: Audit</h4><p>Once a project is green-lit and prioritized on our roadmap, we kick off a crowdsourced audit by sending a call out in our Slack channels across the organization.</p><blockquote>During the audit, it became even more clear that the broad nature of the term “sentiment” caused confusion. The expectations of what problems this component could solve were painted with a broad brush because its name lacked specificity. We were trying to solve for too many use cases, thus adding complexity to our discussions on how to design the component.</blockquote><blockquote>In this stage, I conducted a competitive analysis, investigated our current naming conventions, and crowdsourced an audit of use cases across the organization.This led us to uncover that while this component had already been built in iOS and web, they each had unique names. Moreover, in Android, they did not have a standalone component built at all.</blockquote><blockquote>Naming a component might seem simple, but if not thought through, it can cause confusion, inconsistencies, and difficulties in maintaining clear documentation. Now was the perfect time to get alignment across platforms not only on what we called the component but also on the specific use cases it solved for.</blockquote><h4>Step 3: Project Kickoff</h4><p>We utilize one of our biweekly review time slots to hold a kickoff meeting, ensuring the working group is aligned with next steps across both design and engineering.</p><blockquote>During the project kickoff, I presented my findings from the audit. With a broad name like “sentiment message” it was not clear whether or not things like help text should be included in the component. By making the name more descriptive we would be able to change the understanding of this component from one that simply conveys sentiment to one that conveys sentiment in response to a user’s actions. During this meeting, the working group agreed to rename the component. Applying systems thinking early on made our component simpler to scope and build. We now knew that we would be removing help text and empty states from the scope of this component. Moving forward, this component would be called “validation message.”</blockquote><h4>Step 4: Design</h4><p>In the design phase, we work on solving the root of the problem, designing solutions that meet our quality standards. This phase includes multiple reviews with the entire working group and feasibility reviews within the design systems team.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TVPabALoE4Ptw4Qh_BU7tg.png" /><figcaption>Systems thinking: understanding interconnections for holistic solutions.</figcaption></figure><p>Systems thinking allows us to identify root causes, feedback loops, leverage points, and unintended consequences. Due to the emphasis on alignment early in the LPL process, I could apply systems thinking at the outset of the project, thereby avoiding potential confusion among system users<em>.</em></p><blockquote>During the design phase, I used systems thinking to consider all different use cases for validation messages. While the component itself is relatively simple, the ways in which it can be applied and the vast number of other components it needs to be nested within can cause complications.</blockquote><blockquote>I had to contemplate things like content design (in-product style) or spacing all while considering the nuances between platforms. For example, due to the more complex use cases we needed to address for our web products, I established that we should have the mobile component max out at two lines while the web component would allow for three.</blockquote><blockquote>When you have a component that is used by so many other components, flexibility is key. This is why I landed on removing all padding from the component, allowing for any spacing required to be built into any parent components as needed.</blockquote><h3>Step 5: Design Documentation</h3><p>We draft design documentation in Google Docs, which may include technical specifications not covered in design reviews. The document is shared in a designated Slack channel for internal review. If comments aren’t resolved asynchronously, we schedule a review meeting. Once approved, we publish it on the LPL site.</p><blockquote>Once all edits had been finalized, I wrote our documentation in Markdown. Writing in Markdown via VS Code and using Github were all relatively new to me. So this part of my journey involved asking a lot of questions and doing a lot of Google searches. It’s not rocket science, but it definitely helps to have educational resources at your fingertips. At Lyft, there is hands-on training with Markdown that really helped set me up for success. But it also helped to have a <a href="https://www.freecodecamp.org/news/markdown-cheat-sheet/">Markdown 101 cheat sheet</a> at the ready!</blockquote><h3>Step 6: Design Handoff</h3><p>The design phase ends with an engineering kickoff, where the designer reviews the documentation, interactions, and Figma library with the engineers.</p><blockquote>Creating the actual component in Figma was relatively simple. However, integrating it into other components like text fields, text areas, and dropdowns presented some challenges. This was especially true for the web, with its many different input field types.</blockquote><blockquote>Design system components have a large impact across other designs, providing opportunities to solve unique problems. This led me to learn new tips and tricks in my tooling and optimize my design workflow.</blockquote><blockquote>The first challenge was replacing all existing messages in the input fields with the new validation message component. Selecting each layer was a daunting and tedious task. Collaborating with Figma super users on the design systems team boosted my efficiency. For example, I learned that holding Shift while clicking into a layer in Figma highlights all similar layers, making them easier to select.</blockquote><blockquote>After swapping out the old components for the new one, I realized that in many instances, the new component retained the name of the older component. I reached out to our resident Figma expert, Mordechai Hammer, and learned about Figma’s built-in renaming functionality. Selecting all the layers and hitting Command + R made the process much simpler.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*G_fePPYa7IFmELCIKR_x9g.png" /><figcaption>Figma short-cuts will increase your efficiency.</figcaption></figure><h4>Step 7: Sendoff</h4><p>We review the final product with the project working group and ensure all loose ends are tied up or handed off.</p><blockquote>During this phase, we QA’d the built components and it was a pretty smooth process thanks to all the work and collaboration the working group had done leading up to this point.</blockquote><h4>Step 8: Inform</h4><p>Finally, we send out communications to all relevant stakeholders to inform them of what to expect. The documentation site updates are also deployed.</p><blockquote>In order to inform our users of this new component, I posted an announcement on the homepage of the LPL website, put out a communication on our Slack channel (being sure to highlight any breaking changes) and presented about the component at our monthly All Hands Design meeting.</blockquote><h3>Final Thoughts</h3><p>Following this meticulous process was immensely beneficial. Not only did this process ensure that there was consistent adoption of validation messages across product teams, but designing for LPL has helped me unlearn moving too fast, flex my systems thinking muscles, and optimize my workflow. Reflecting on my journey so far, I am genuinely amazed at how much I’ve learned in such a short time, and I am eager to continue uncovering new insights and skills.</p><p>Have you contributed to a design system before? If so, I’d love to hear about your biggest learnings and the challenges you faced along the way.</p><p><em>This article was also posted in </em><a href="https://design.lyft.com/embracing-the-process-learning-to-slow-down-to-deliver-clarity-3ddc4c81d0f2"><em>Lyft Design+</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0c61666da6e9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/embracing-the-process-learning-to-slow-down-to-deliver-clarity-0c61666da6e9">Embracing the process: Learning to slow down to deliver clarity</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Scaling Design: Building Lyft’s plug-and-play payment system]]></title>
            <link>https://medium.com/tap-to-dismiss/scaling-design-building-lyfts-plug-and-play-payment-system-bc3eb6f64003?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/bc3eb6f64003</guid>
            <category><![CDATA[lyft]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[product-design]]></category>
            <category><![CDATA[payments]]></category>
            <dc:creator><![CDATA[Runi Goswami]]></dc:creator>
            <pubDate>Mon, 06 Mar 2023 20:40:03 GMT</pubDate>
            <atom:updated>2023-03-06T20:40:03.628Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*vM3cyqXgcAPCa9wg.png" /><figcaption>Illustration by David Wu</figcaption></figure><p>Nothing erodes customer trust faster than a broken payment experience — it needs to work <em>every time. </em>So designing a system of payment components is understandably daunting, requiring a seamless user experience, integration with existing systems, and impenetrable security. Here, we’ll explore aspects of creating a centralized payment system, best practices, and pitfalls to avoid.</p><p>In late 2021, our Pay Team at Lyft set out to build a new payment system. We wanted any product team — no matter their payments expertise — to quickly, elegantly, and securely build payment solutions for any use case. Before this, teams independently figured out how to build payments and integrate them with our complex backend. Each team designed, built, and maintained payments according to different requirements. Around this time, our company expanded our product offerings, so multiple teams needed to spin up new payment experiences quickly — something that wasn’t possible with our previous landscape of disparate payment experiences.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*OHpPtQxNvp46nJVd.png" /><figcaption>Our previous payment landscape created scalability issues, design inconsistencies, and lots of tech debt.</figcaption></figure><p>Creating a centralized payment system and making it extensible for use cases across Lyft promised many benefits, like scalability, unified user experience, faster development, and stronger security — but how?</p><h3>Start with systems thinking</h3><p>Building a payment system helps if you already have a centralized design system. It can be a huge initial investment to create a payment system, and may be fruitless if you lack the process or resources to maintain it. Even if you don’t already have a design system (or your design system doesn’t currently have a lot of adoption) — prioritize usability and sustainability over an exhaustive component set.</p><p>For us, this meant asking strategic questions early on like:</p><ul><li><em>What are the most valuable (i.e. most commonly reused) components or patterns?</em></li><li><em>What are the guiding design principles that govern every payment experience at Lyft?</em></li></ul><p>Answering these questions helped us sequence and prioritize the requisite work for this project. Rather than build over-engineered, Frankenstein amalgamations of custom components, we leveraged existing design system patterns like List Items and Dropdowns and composed them into payment components, designed with our payment models in mind.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Z78mfD19ljw-fy_O.png" /><figcaption>Our payment components are specialized, yet also built on top of our existing design system components.</figcaption></figure><p>We also asked ourselves tactical questions like:</p><ul><li><em>Who will maintain these components long term (i.e. Pay Team or Design Systems Team)?</em></li><li><em>Where and how can teams get support for using the payment system?</em></li><li><em>What makes the cut for the initial set? What happens if/when teams need more components than the initial set?</em></li></ul><p>Building new things is fun, maintaining them long term — not so much. Clearly defining what long-term maintenance means helped keep our scope clearly defined. A strong partnership also sets up our system up to live on even as products or team members come and go.</p><h3>Radically prioritize</h3><p>So you’ve decided to build a system — what next? To build a system that replaced legacy and custom flows, we needed to identify the most common use cases and patterns, or in other words — audit. In all, it took two months to complete an exhaustive audit of our payment experiences, ranging from every “add credit card” flow to the most esoteric payment authorization failure screens. At the end we had <em>A Beautiful Mind</em>-esque visual map we called our Pay Source of Truth.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*g4P2qMiSwzJi0tR0.png" /><figcaption>We identified recurring use cases, categorized them, and added them to our short list of components.</figcaption></figure><p>Systematizing components from an audit is an exercise in taxonomy. It means dissecting screenshots, grouping like elements, naming them, and then creating a short list of components. For us, while some repeating patterns like checkouts and receipts were easy to classify, others weren’t — like variable pricing and deferred payments.</p><p>Once you’ve audited, it can be tempting to solve for every use case and replace all your patterns 1:1 with a system solution. This can be a north star goal but don’t make the mistake of conflating an audit with project scope. Instead — radically prioritize what pieces of the audit go into your system.</p><p>Our Design Systems team prioritizes using a rough formula:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*g64H8hkIioLeuJ8q.png" /></figure><p>Evaluating and prioritize each pattern/component through multiple lenses:</p><ul><li><em>How many times is this pattern/component used? How many teams use it? How visible is it to users? (Demand)</em></li><li><em>How much time or effort can we save other teams by systematizing this pattern/component? (Cost Saved)</em></li><li><em>What impact will this pattern/component have on the team/users/business with code quality, UI consistency, accessibility, reduced support cost, higher conversion?(Quality Increase)</em></li><li><em>Are one or more teams currently working or planning to work on a feature that could use this component/pattern? (Incentives &amp; Deadlines)</em></li></ul><h3>Define your governing principles</h3><p>For all your prioritized use cases, create governing principles. This helps all team members quickly understand the non-negotiable qualities that all payment components must have. For us, these principles were:</p><ol><li><em>Transparency &amp; trust</em></li><li><em>Control &amp; flexibility</em></li><li><em>Context</em></li></ol><p>These principles (as well as other shared values we developed) provide team members with the right context and empathy when building payments.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*pE5PgVIuvR0SkqzK.png" /><figcaption>Use your principles to help guide your team in making key design &amp; product decisions.</figcaption></figure><h3>Meet your system users where they are</h3><p>To maximize the chance your system will actually be used by others in your organization, build your system into their existing workflows and tools. Determine the tools and processes that make up your system, and make deliberate decisions about where they’ll live, be maintained, and grow.</p><p>Since we built our payment system on top of our existing design system, we used the same tools — like Figma Libraries, our internal documentation site, and our design systems Slack channel. Regardless if you have design system or not, consider factors like:</p><ul><li><em>What tools do designers &amp; engineers already use? Where can you house a shared library of components and its documentation?</em></li><li><em>How will you collect feedback from product teams, answer their questions, and gather new ideas?</em></li><li><em>How will you maintain your components, fix bugs, and communicate updates to the teams already using your system?</em></li><li><em>How will you expand your system with new patterns, components, and capabilities?</em></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*JTjvQoEV3cYJPMtZ.png" /><figcaption>Two examples of documentation (one for patterns, one for components) from our internal design systems site.</figcaption></figure><h3>Work with partners along the way</h3><p>Don’t make the mistake of building your system in a silo. Instead, find partners <em>as you create</em> your system. We approached designers from five teams (each with an active payments use case), and asked them to <a href="https://medium.com/tap-to-dismiss/enhancing-figma-resources-a01f224be9bd">beta test our components</a> to make sure they worked in Figma.</p><p>But to <em>really</em> ensure your system works, test it in an actual live use case. One of our partner teams and their designer, Eunice, was ready to take this step. Her team committed to designing, building, and launching multiple new products in 2022 using our payment system.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1-1Ls8JMFAmyztne.png" /></figure><p>By starting with a smaller set of partners, you can align incentives, meaning:</p><ul><li>We ensured our components were <em>actually</em> usable before making it more widely available.</li><li>We demonstrated our system was scalable for multiple use cases (helpful for getting leadership/stakeholder buy-in).</li><li>Partner teams launched their products in accelerated timelines.</li></ul><h3>Closing thoughts</h3><p>While daunting at first, we launched our payment system in 2022 in conjunction with multiple key product launches. In fact, our payment system not only enabled but also accelerated these launches. Since then, we’ve seen incredible adoption. Designers from 13 teams have inserted our components into Figma over 10,000 times, and our components have been integrated into nearly 10 shipped products.</p><p>What worked for us may not work for everyone (each organization is unique), but we hope this sparks a conversation around the systems you build for your organization. Do you have questions about payment systems? Does your organization use one? Leave us a comment below!</p><p><em>This article was written by </em><a href="https://medium.com/@davidjwu"><em>David Wu</em></a><em> and </em><a href="https://medium.com/@loonyruni"><em>Runi Goswami</em></a><em>, two members of Lyft’s Design Team. You can read more articles from Lyft Design </em><a href="https://design.lyft.com/"><em>here</em></a><em>.</em></p><p><em>Huge thanks to the nearly 30 current and former team members who have been involved in this project in special ways. Interested in joining our team? Check out our </em><a href="https://www.lyft.com/careers#openings"><em>open roles</em></a><em>!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bc3eb6f64003" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/scaling-design-building-lyfts-plug-and-play-payment-system-bc3eb6f64003">Scaling Design: Building Lyft’s plug-and-play payment system</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Enhancing Figma Resources]]></title>
            <link>https://medium.com/tap-to-dismiss/enhancing-figma-resources-a01f224be9bd?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/a01f224be9bd</guid>
            <category><![CDATA[product-design]]></category>
            <category><![CDATA[user-research]]></category>
            <category><![CDATA[figma]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[components]]></category>
            <dc:creator><![CDATA[Jeremy Dizon]]></dc:creator>
            <pubDate>Fri, 02 Sep 2022 15:01:31 GMT</pubDate>
            <atom:updated>2022-09-02T15:02:25.090Z</atom:updated>
            <content:encoded><![CDATA[<p>As design programs like Figma release new features, existing design system resources quickly become outdated. Yes, the existing components are still <em>usable</em> but they’re just not as flexible for system users or as efficient for library maintainers as they could be with the new bells and whistles. So designers increasingly detach components — our total monthly component detachments have nearly doubled over the past year. In fact, in our most recent systems survey, 29% of designers believed their product had designs that push the boundaries [of the system]. Tellingly, only 14% of engineers believed the same. Without incorporating the latest features, we inadvertently widen the gap between designers and engineers.</p><p>Unfortunately, from a design systems perspective, incorporating these new features isn’t as easy as it appears because they may result in breaking changes to the current component set or require system users to learn a whole new workflow.</p><p>At the end of the day, we must ask ourselves:</p><blockquote>Will these enhancements add value to system users?”</blockquote><p>And if the answer is yes, and there are breaking changes, the next important question we must ask should be,</p><blockquote>“Is the effort to incorporate these enhancements worth it?”</blockquote><figure><img alt="Header image with block of text on the left and cropped phone screens on the right." src="https://cdn-images-1.medium.com/max/1024/1*OySDMX6WKqSYukUtTBmKDQ.png" /></figure><p>At the beginning of 2022, I led the project to enhance the Lyft Product Language (LPL) Native component library. In this blog post, I walk through the strategy we used, the reason behind incorporating lightweight user research, and some key learnings from this 6-month long project.</p><h3>Our strategy</h3><p>As I alluded to in the introduction, incorporating the new Figma features to the current LPL components resulted in breaking changes. But, we theorized that fully incorporating <a href="https://help.figma.com/hc/en-us/articles/360040451373-Create-dynamic-designs-with-auto-layout">Auto-Layout</a> and the <a href="https://help.figma.com/hc/en-us/articles/360056440594-Create-and-use-variants">Variants</a> features into our components would ultimately decrease component detachment rates by making them more flexible and therefore usable across all product features. Paraphrasing <a href="https://twitter.com/taptodismiss">Linzi Berry</a>:</p><blockquote>‘The juice <strong>IS</strong> worth the squeeze’</blockquote><p>Given breaking changes were inevitable, we set out to <em>minimize disruptions</em> and avoid forcing system users to update their components all at once. I realized the best strategy was to essentially <strong>create a new version of each component</strong> within the existing library. Users would automatically have access to the new components without losing access to their existing components — empowering each designer to make the decision to migrate for themselves initially. This approach was also key when thinking through how to user test each enhanced component (stay tuned).</p><figure><img alt="Two sets of Toggle button components on the same page; existing ones to the left and enhanced ones to the right." src="https://cdn-images-1.medium.com/max/1024/1*UZTsO60Yd7-4KWttgYbieQ.png" /><figcaption>New components placed to the right of the original component</figcaption></figure><p>Because we knew that system users use the Asset panel to search for components, I prefixed each enhanced component with <strong>[LPL Beta]</strong> to distinguish them from the existing <strong>[LPL] </strong>components.</p><figure><img alt="Gif of Figma’s Asset panel and typing “LPL Beta” into the search bar." src="https://cdn-images-1.medium.com/max/213/1*wrnW29bq80zM0w8ASWFfPQ.gif" /><figcaption>Searching for “LPL Beta” components within the Asset panel</figcaption></figure><p>And once all the components are enhanced, the phased migration plan would include:</p><ul><li>Communicating with product teams to plan for this work on their team roadmaps (at least a quarter in advance)</li><li>Creating tutorials and screen recordings to guide product designers how to migrate to the enhanced components</li><li>Renaming the existing components to <strong>[Legacy] </strong>and updating the enhanced components to use our standard <strong>[LPL]</strong> labeling</li><li>Setting the deadline to migrate all necessary Figma files which will also be the date the <strong>[Legacy] </strong>components will be archived, and,</li><li>Scheduling workshops where the design systems team and product designers perform the migration together <em>(picture Apple’s Genius Bar)</em></li></ul><h3>The enhancements</h3><p>Applying the new Figma features gave us a chance to re-architect our system components that admittedly still had structural holdovers from our old Sketch library. Let’s use a particularly gnarly component — the mighty List Item — as an example. This component hadn’t been touched since its creation over 3 years ago due to its almost infinitely reconfigurable permutations and its ubiquity in our products (510,000 instances to date)! We knew that if we changed the structure, Figma would default all 500k+ component instances to the original component’s content. So naturally, I tackled enhancing this component first.</p><figure><img alt="A list item component broken up into 3 areas, Start, Middle, and End. The left version displays the order for left to right languages and the right version displays the order for right to left languages." src="https://cdn-images-1.medium.com/max/1024/1*e7gv0OjKm87GumZkhjzQEg.png" /><figcaption>List item component consists of 3 areas: Start, Middle, and End</figcaption></figure><p>For context, the LPL List item consists of 3 areas: Start, Middle, and End which allows system users to swap to different elements. For example, within the Start area, the Drive Default size component supports either an icon, selection control (like a checkmark or radio button), and an avatar image. Similarly, the Middle and End areas have their own supported elements. That’s a whole lot of variations!</p><figure><img alt="All the options that a List item’s Start area can have based on the size of the component." src="https://cdn-images-1.medium.com/max/1024/1*Uo6SEFejJ-PUPrR6K_eByw.png" /><figcaption>Internal elements supported for the Start area</figcaption></figure><p>To help cut the number of variations down, I first simplified the “Internal elements” by applying the Variants feature which allowed me to <a href="https://help.figma.com/hc/en-us/articles/360056440594-Create-and-use-variants">group and organize similar components into a single container</a>, like all the Start area elements. Now, the icon, checkmark, radio button, and avatar image elements are grouped together in a “Start” variant. I did the same for the End area elements, labeling that variant “End”.</p><p>For the Middle area that supported the required component content, I applied the Auto-Layout feature which allowed my content block to <a href="https://help.figma.com/hc/en-us/articles/360040451373-Create-dynamic-designs-with-auto-layout">grow to fill or shrink to fit, and reflow as their contents change</a>. Now, when system users hide a subtitle layer or copy-pastes in very long content, the content block resizes and wraps to a second or third line accordingly. Plus, by applying the Variants feature, the “Middle” internal elements went from 12 swappable options to only 2!</p><figure><img alt="All the Start, Middle, and End options displayed in a single frame when utilizing Auto-Layout and the Variants features in Figma." src="https://cdn-images-1.medium.com/max/1024/1*4pLDBK4lit55jC7lZxqHSA.png" /><figcaption>Supported internal elements after applying the Auto-Layout and Variants features (top row: Focus size, bottom row: Drive size</figcaption></figure><p>This was the strategy I used to enhance the rest of the Native components, finding opportunities to group elements and components as Variants as well as apply Auto-Layout for those components with variable content.</p><h4>The Plot Thickens</h4><p>During the project, Figma actually <a href="https://www.figma.com/blog/config-2022-thinking-big-and-acting-with-urgency/">launched</a> a few new features including <a href="https://help.figma.com/hc/en-us/articles/5579474826519-Create-and-use-component-properties">Component properties</a>. {Sarcastic tone} Thanks a lot, Figma! Just kidding.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FiIq8FLt1hUY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DiIq8FLt1hUY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FiIq8FLt1hUY%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/332e1607c8bd645c669fad19170a7af2/href">https://medium.com/media/332e1607c8bd645c669fad19170a7af2/href</a></iframe><p>This new feature gave systems maintainers the option to apply these properties to components with a parent-child relationships:</p><ul><li><a href="https://help.figma.com/hc/en-us/articles/5579474826519-Create-and-use-component-properties#h_01G2Q5GF4407ZTN7K8FHM2JREZ">Variant properties</a> ↗️</li><li><a href="https://help.figma.com/hc/en-us/articles/5579474826519-Create-and-use-component-properties#h_01G2Q5FYN2ADEDQ3ZSB1KKY8Z0">Instance swap properties</a> ↗️</li><li><a href="https://help.figma.com/hc/en-us/articles/5579474826519-Create-and-use-component-properties#h_01G2Q5G3FV0EQP9RZFZG7GVWEG">Text properties</a> ↗️</li><li><a href="https://help.figma.com/hc/en-us/articles/5579474826519-Create-and-use-component-properties#h_01G2Q5GA6DEB604H2E5H5C5TA4">Boolean properties</a> ↗️</li></ul><p>Though super powerful, I didn’t immediately add this to the project’s scope. But it did justify the need for the design systems team to plan for enhancement work on our project roadmap.</p><h3>User research</h3><p>Even before this project began, I knew I wanted to find a way to get feedback from design system users. Design systems mostly play the reactive game and so this was an opportunity to incorporate actual user testing right from the start to help speed up the feedback loop for the enhanced components.</p><p>To set the tone with system users, I leveraged them to create a prioritized list of components to enhance. I first placed each component in a group based on similar functionality (ie Button, Circular button, Icon button, and Text button were placed in the Button group while Inline message card, Toast, and Tooltip were placed in the Messaging group). I then created a Slack post where they could vote on which component groups should be enhanced first.</p><figure><img alt="Message posted in Slack with component groups listed from 1 to 9." src="https://cdn-images-1.medium.com/max/1024/1*HJK_xBFYqkQvuQKisJTssw.png" /><figcaption>Slack survey to help decide which component groups should be enhanced first</figcaption></figure><p>To be honest, the component group I thought users would choose first didn’t align with the actual results. Right off the bat, user feedback proved valuable! From here, I set my project roadmap and began strategizing the LPL Beta Tester program.</p><blockquote>What’s the LPL Beta Tester program?</blockquote><p>I’m glad you asked! I wrangled at least 1 product designer from each feature team to join together to systematically test each component within a component group. Within the project roadmap, I set up testing weeks for each component group and provided all the necessary artifacts to make it easy to stress test enhanced components either asynchronously or during testing workshops scheduled during that week. Among the artifacts, I created robust testing instructions, a Figma file playground to perform the testing, and a Google Drive folder for those async testing users to place their screen recordings of their testing. Let’s dive into each artifact together.</p><figure><img alt="Message posted to Slack outlining the LPL Beta testing program." src="https://cdn-images-1.medium.com/max/1024/1*FKPIGyMNq9g5-3UxvX07Jg.png" /><figcaption>Slack message to kickoff the LPL Beta Testers program</figcaption></figure><h4>Testing instructions</h4><p>For each component within a component group, for example, the Button component, I provided step-by-step instructions to fully test both the functionality and flexibility of the enhanced version. The first obvious test was ensuring beta testers could effectively find the <strong>[LPL Beta] Button</strong> component within their daily workflow, which is why I provided a link to where it was located in the main library file as well as give them the option to use the Figma Asset panel search.</p><figure><img alt="3 Google doc screenshots layered on top of each other, displaying instructions how to test the enhanced Button component." src="https://cdn-images-1.medium.com/max/1024/1*h9M5ToHAI7MUt34vFQgktw.png" /><figcaption>Testing instructions to test the enhanced Button component</figcaption></figure><p>Next, the instructions asked beta testers to perform specific tasks to test the flexibility of the enhanced Button component by using the Design panel to swap to different button types as well as replace the label content. I also included a screenshot of what the testing results should be for those visual learners like me.</p><p>Finally, to complete the <strong>[LPL Beta] Button </strong>component testing, I posed questions for beta testers to answer to help focus the feedback I was looking for.</p><h4>Figma playground file</h4><p>To help consolidate all the beta tester’s work, I created a playground file with different pages broken out for each component of a component group. Taking our Button component group example, the playground file consisted of 5 pages with specific testing instructions copied over from the testing instructions gDoc.</p><figure><img alt="One page within the Figma playground file displaying the testing instructions on the left and testing area on the right." src="https://cdn-images-1.medium.com/max/1024/1*tpIoxwB4t2HANXK3uV4LZA.png" /><figcaption>Each component had a page in the Figma playground file for beta testers to test them</figcaption></figure><h4>Async testing recordings</h4><p>I didn’t want beta testers to feel obligated to attend a testing workshop during testing week, so I provided a Google Drive folder link within the testing instructions for those who prefer to test asynchronously to save their screen recording to. All I asked async beta testers to do was talk through their process as they screen recorded, allowing me to observe their experience testing the enhanced components and understand their thought process.</p><h3>What we learned</h3><p>This project allowed the design systems team to not only make our current component set more flexible to accommodate the various use cases across product teams but also really connect with our users. The LPL Beta Tester program was a true gauge to get a sense if product designers would:</p><ol><li>Find early component usability testing valuable</li><li>Understand the systems maintenance process and the effort involved</li><li>Want to collaborate with design systems more often</li></ol><p>Halfway through the project, I asked for specific feedback from LPL Beta Testers about the program and got some interesting thoughts. A beta tester said,</p><blockquote>“I joined into the testing process late, during the List component week; however, <strong>the materials that Jeremy prepared made onboarding extremely easy and straightforward</strong>. The testing instructions and Figma files he provided were very comprehensive, so it was clear how to test the component regardless of the testing format (workshop-style or async). <strong>The thoughtfulness and craft that Jeremy put into the testing materials definitely stood out to me.</strong>”</blockquote><p>I even got a really nice tidbit from a design systems teammate as well,</p><blockquote>“<strong>When I had to fill-in for Jeremy as the host of one of the testing sessions, it was so easy</strong> because everything was explained in detail in the instructions <strong>and I was able to answer beta tester questions just by referencing the doc.</strong>”</blockquote><p>Countless beta testers commented they hoped for more testing opportunities in the future as well which helped validate the extra effort involved to create a testing program for a project that traditionally only involves the design systems team. But the appetite from product designers to support lightweight user testing really opens up the door to get them more involved with other design systems projects moving forward.</p><figure><img alt="A page displaying the LPL Beta Tester participant badge at the top and the beta tester’s name and role below." src="https://cdn-images-1.medium.com/max/1024/1*In-x9UOz4Ju80aGSXYVzSw.png" /><figcaption>Props to all the LPL Beta testers for going on this 3-month journey with us</figcaption></figure><h3>Education opportunities</h3><p>Any kind of change to the existing libraries will not only require communicating to users what changed but also a way for them to understand the impact of those changes. Whenever Figma releases any new feature, they also provide a Playground file that clearly breaks down the feature to help users feel comfortable. For this project, I planned to reuse the testing scenarios within the Testing instructions and playground files I set up to help showcase the flexibility and efficiency of the enhanced components. But I didn’t want to just share the LPL Beta testing resources and call it a day. I planned to create short videos and gifs to dynamically show their value all while providing further education about those powerful Figma features like Auto-Layout and Variants:</p><figure><img alt="A gif displaying an Auto-Layout demo on the left and Variants demo on the right." src="https://cdn-images-1.medium.com/max/1024/1*WZNoUwhUJBGtsO3Z1ibmvQ.gif" /><figcaption>More flexible components that utilize Figma’s Auto-Layout and Variants features</figcaption></figure><p>In addition to these videos and gifs, I planned to host a Figma lab or lunch and learn session to give users the opportunity to learn and ask questions in a more casual environment. This also would provide a good baseline on which educational method resonated with users the most so the design systems team can utilize that data for future projects.</p><p>In conclusion, this project broke ground to not only get product designers involved in the systems maintenance and enhancement nature of design systems but also helped benchmark the level of effort it takes to incorporate the latest and greatest Figma features. With this project, prioritizing Figma enhancements on our roadmap becomes more important to continue providing usable components that allow the flexibility to support product designers in their current projects as well as future ones.</p><p><em>To continue the discussion on how to update components when there are breaking changes, check out this amazing </em><a href="https://uxdesign.cc/how-to-safely-upgrade-and-deprecate-components-in-figma-4ca837f6a356"><em>article</em></a><em>.</em></p><p><em>This article was written by a former Lyft product designer, </em><a href="https://www.jeremydizon.com"><em>Jeremy Dizon</em></a><em>, who is now a member of the Design Systems team at Disney Streaming, and </em><a href="https://medium.com/@loonyruni"><em>Runi Goswami</em></a><em>, a design systems manager at Lyft. Please subscribe!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a01f224be9bd" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/enhancing-figma-resources-a01f224be9bd">Enhancing Figma Resources</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[​​The Guideline Gap]]></title>
            <link>https://medium.com/tap-to-dismiss/the-guideline-gap-d7549d28f1ec?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/d7549d28f1ec</guid>
            <category><![CDATA[guidelines]]></category>
            <category><![CDATA[production-design]]></category>
            <category><![CDATA[qa]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[accessbility]]></category>
            <dc:creator><![CDATA[Linzi Berry]]></dc:creator>
            <pubDate>Mon, 01 Nov 2021 15:17:53 GMT</pubDate>
            <atom:updated>2021-11-01T15:17:52.216Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to shorten the bug iteration loop &amp; repair relationships</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QO9QFBGIKhoeFucpYSJmiw.png" /></figure><p>As creators of guidelines, our Design Systems team is compelled to follow them. Not just ours — WCAG, HIG, Material Design, Android Auto… the list goes on &amp; on. This is expected, table stakes, for our team because it has been and continues to be a huge selling point for our system. “Use Lyft Product Language and get guideline adherence for free!” But what does that actually mean when that isn’t the expectation of feature teams?</p><p>When feature designers follow guidelines, especially ones around inclusivity, they are seen as compassionate, empathetic — going above &amp; beyond — vs meeting expectations. So many don’t. Not because they don’t care, but because it hasn’t been prioritized and they don’t have the time, so the responsibility to adhere to the guideline falls on someone else. Therein lies the guideline gap: what is prescribed versus what is enforced organizationally.</p><blockquote>By not holding designers accountable internally, we open ourselves up to external consequences. Designers avoid facing the consequence because engineering protects them — and the gap between the two disciplines widens.</blockquote><p>After chatting with other Design Systems’ teams we realized that this pain point is shared by many. In the end it comes down to the fine line between what is suggested vs mandatory and how you ultimately educate and enforce those rules.</p><h3>Common UX guidelines</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Y1Wlr45HB4sY8_tD08reMA.png" /></figure><p>Similar to many companies, Lyft has a variety of guidelines that its employees are expected to follow to varying degrees. Our main guidelines include:</p><ul><li><strong>Quality Principles</strong> — Lyft leadership’s definition of quality.</li><li><a href="https://www.w3.org/TR/WCAG21/"><strong>WCAG 2.1</strong></a> — Web Content Accessibility Guidelines (WCAG) 2.1 defines how to make Web content accessible to people with disabilities that can often improve usability for users in general.</li><li><a href="https://www.uxmatters.com/mt/archives/2019/02/supporting-localization.php"><strong>Localization</strong></a> — Defines how to adapt products to ensure they’re culturally appropriate — familiar languages and environments.</li><li><strong>Road Safety Guidelines</strong> — Pulls from <a href="https://developers.google.com/cars/design">Android Auto</a> &amp; the <a href="https://www.nhtsa.gov/sites/nhtsa.gov/files/documents/812360_humanfactorsdesignguidance.pdf">Human Factors Design Guidance for Driver-Vehicle Interfaces</a> — both define how to design for driving.</li><li><strong>Brand Guidelines</strong> — Defines how the Lyft brand manifests across our marketing and products including our mission, vision, platform, voice, tone, logo, colors, illustration and iconography styles, and motion.</li><li><strong>Content Guidelines</strong> — Building off of the more high level brand guidelines, we have additional more detailed guidelines for UX writing, illustration, and iconography.</li></ul><h3><strong>Education &amp; enforcement over time</strong></h3><p>In a perfect world, feature designers &amp; engineers know, understand, and create with guidelines in mind. There is no need for guidelines checks throughout the product / feature creation process.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*py_VPIezzbUh3X9Jt2f1KA.png" /></figure><p>Unfortunately we don’t live in a perfect world and guidelines require a considerable amount of reading and comprehension in order to effectively put them into practice. When guidelines aren’t outlined as requirements to launch by leadership, it’s difficult for feature designers and engineers to prioritize the time it takes to learn. Especially if there are no consequences for not adhering to them.</p><p>This is where design systems usually step in. Lyft’s Design Systems team created an internal tool, Lyft Product Language (LPL), to make the guidelines easier to follow. Foundational elements and components follow the guidelines, so feature designers and engineers get a large amount of adherence for free. In our most recent survey, 98% of designers and engineers agree that LPL has delivered on efficiency and consistency.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N_7-p4IcQAI-H1siVgwB9Q.png" /></figure><p>However, it is a common misconception that by using the system that you have followed all of the guidelines. Not all guidelines can be encapsulated by the design system &amp; need to be defined or documented within the feature itself.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3-PQVrfnyTTWs0xu6hdDRA.png" /><figcaption><em>For the sake of clarity, for the rest of the post I won’t show it in this chaotic way.</em></figcaption></figure><p>But not everyone followed LPL and, in turn, did not follow the guidelines. Design Systems made following LPL mandatory using linters — a bold choice. This decision, whether or not we knew the weight of it at the time, turned these guidelines into policies. They were no longer general recommendations, they were mandatory and had consequences. Teams couldn’t launch unless they complied.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3LONF6Qf_Y2W4tJkDFXADw.png" /></figure><p>The foundational elements that are enforced (color, typography, and iconography) through linters have a high usage rate. LPL components are used the majority of time, and we have seen an uptick over the past year with folks using them all the time. We continue to see engineers receiving designs that could be LPL eligible but not adhering. The top action engineers do when receiving these is pushing back to design to use LPL (or just using LPL and not telling design).</p><p>It is also worth noting that there are many guidelines that are not linted as part of LPL.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_o9g40kcS0qCyi0UHBNe6A.png" /><figcaption><em>LPL Linter can’t catch everything. Last time with the chaos picture, I promise.</em></figcaption></figure><h3><strong>The guideline iteration loop</strong></h3><p>This has created tension between the two disciplines. Here is a real example that happens frequently:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*H8kzX8x5GveI8Yuy-ppL0w.png" /><figcaption><em>Designer tells the engineer, “Here are the designs! Sorry, I didn’t have time to spec them.” at handoff.</em></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qxrSDFgV-_E3i_8w_pEffg.png" /><figcaption><em>Engineer thinks aloud, “I had to hack LPL a bit to make this how the designer wanted…” when submitting the PR.</em></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UYtkLmTGnBaxniikfsH2Vw.png" /><figcaption><em>The linter reports to the engineer, “Follow LPL! Hacks break guidelines.”</em></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EdK-lVjGRiUzlxC0ZFqHRw.png" /><figcaption><em>Engineer tells the designer, “LPL won’t let me do these designs — can you redo it using LPL?”</em></figcaption></figure><p>By the time this information gets back to the designer <strong>(IF it gets back to the designer)</strong>, they’ve moved onto a new project. It usually falls on the Design Systems team to assist the engineer in fixing the issue. Captured in this narrative as well is the misbelief that LPL, the design system, created the rule vs something that the team should be following outside of LPL. This creates tension between the Design Systems’ team and the feature team — we have a <a href="https://medium.com/tap-to-dismiss/distributed-ownership-8f82352b9cbb">separate solution for this</a>.</p><h3><strong>Closing the gap</strong></h3><p>Design Systems and various task forces have attempted to make quality appear mandatory to designers through onboarding, classes, handoff checklists, and Figma plugins (like LPL Lint) to shorten the iteration loop and repair the relationship. We know that this can continue to be improved because we have surveyed low guideline adherence percentages. So what now?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cril1e0e9_HN7RXSt7bq_A.png" /></figure><h4><strong>Education</strong></h4><p>Set clear expectations through a mandatory education program on our various guidelines. Using programs like Docebo or Deque University allows for managers to be notified who has completed the training or not. This also requires managers to prioritize the time it takes to complete the course.</p><h4><strong>Process</strong></h4><p>Have a defined design process that includes handoff expectations. Every designer is expected to go through the handoff checklist, which hopefully will become second nature over time, and requiring use of the Figma linter will result in less lint checks at the end of engineering. Managers and PMs are responsible for checking-in on if these tasks are completed and protecting the designer’s time to do them.</p><h4><strong>Support</strong></h4><p>Hire design guideline specialists with QA capabilities. Designers who are extremely well-versed in guidelines who can provide guidance &amp; spec’d designs on a request basis. They can take on the QA work when designers don’t have enough time and can educate them when they don’t have the expertise for a comprehensive handoff.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QO9QFBGIKhoeFucpYSJmiw.png" /></figure><h3><strong>Last thoughts</strong></h3><p>If this problem space is interesting to you, <a href="https://boards.greenhouse.io/lyft/jobs/5543869002?gh_jid=5543869002">we’re hiring for this role now!</a> We’d love to work with you on how to further refine this thinking.</p><p>What are other teams doing to close this gap? Where have you had success and failure? What did you learn?</p><p><em>I’m Linzi Berry, currently design systems &amp; illustration senior manager at Lyft. I sweat the details so you don’t have to. Please subscribe!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d7549d28f1ec" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/the-guideline-gap-d7549d28f1ec">​​The Guideline Gap</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Typography for Data]]></title>
            <link>https://medium.com/tap-to-dismiss/typography-for-data-c760e73367e0?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/c760e73367e0</guid>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[lyft]]></category>
            <category><![CDATA[design-thinking]]></category>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[design-process]]></category>
            <dc:creator><![CDATA[Michael Yom]]></dc:creator>
            <pubDate>Tue, 07 Sep 2021 15:01:27 GMT</pubDate>
            <atom:updated>2021-09-15T13:16:56.157Z</atom:updated>
            <content:encoded><![CDATA[<p><a href="https://medium.com/tap-to-dismiss/how-to-systematize-internal-products-43817ef3580f"><strong>How to Systematize Internal Products</strong></a>:<strong> </strong>Part 2</p><figure><img alt="Various data in graphs and charts" src="https://cdn-images-1.medium.com/max/1024/1*AnE-_3gOuAOisT_IfC1BNw.jpeg" /><figcaption>All the data | Photo by <a href="https://www.pexels.com/@anna-nekrashevich">Anna N</a></figcaption></figure><p>Text makes up a large majority of the content in internal, operational products. Between the many labels, values, and other helpful information crammed into charts, graphs, column lists, and the like, text serves many functions and takes many forms. So when we <a href="https://medium.com/tap-to-dismiss/growing-and-shrinking-pains-13bf66ee6083">updated our spacing and layout system</a> for internal products, we knew we would also have to tackle our typography.</p><h3>The lay of the land</h3><p>We have 4 core typography styles in our design system which help our consumer products keep it simple, stupid (K.I.S.S.): Headline, Title, Subtitle, and Body styles.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6pN5W3i5mQeiNjBAVmx4gw.png" /><figcaption>Core Typography set</figcaption></figure><p>In most of our consumer-facing contexts (largely mobile), designers only really need to combine a few of these styles per screen to deliver a simple, consistent, and purposeful experience for users.</p><p>But when you put together a multi(verse)-zone layout with site-wide navigation, in-page navigation, a data table with pagination, corresponding filters, and a side panel for additional details, you begin to ask yourself if more (Loki) variants would be helpful. We found that to be the case while assessing the (mis)use of our type styles across the 75+ operational products at Lyft.</p><p>Designers would find themselves using <strong><em>semantically improper styles</em></strong> simply to get the right size or weight in the right place.</p><figure><img alt="Smilling Baby in an Oversize Denim Jacket" src="https://cdn-images-1.medium.com/max/1024/1*P-De7oF9ojhZzBcbCCUIqQ.jpeg" /><figcaption>That… fits well! | Photo by <a href="https://www.pexels.com/@katie">Katie E</a></figcaption></figure><p>To get a more holistic and detailed understanding of designers’ needs, we looked at responses from a survey with 15 operational/internal tools designers to gather thoughts on what aspects of the typography attribute needed to change in order to support their products:</p><blockquote>Operational products need to fit in a more dense space, like tables, charts, and graphs. Need smaller components and text that can be suitable in a limited space.</blockquote><blockquote>Size of some fonts is too large to work nicely in all cases.</blockquote><blockquote>For typography we want smaller type sets and open-source friendly font families.</blockquote><blockquote>Need monospace font for numbers in a table or column list, to enable easy scanning and comparison of digits vertically.</blockquote><p>Across the board, we heard that our Core Typography styles and guidelines did not accommodate all the operational typography use cases. Thus sprung forth the TVA (Type Variance Authority) — with the mission to not only prune the biggest offenders but also to find the variants needed to support typography for data content.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*X63sG4JNEjJs7vBI8BgP8Q.png" /><figcaption>Pruning type styles</figcaption></figure><h3>Purpose-driven typography</h3><p>Before jumping straight to new type styles, we partnered with designers from 10 operational products to collect key screens and organize distinct typographic use cases into an audit table. We determined categorical groupings of type properties or patterns (along the y-axis) by asking the question:</p><blockquote><em>As a designer placing this piece of text on the interface, what purpose or functional role does it play in the experience?</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uvkqnW8oxiO5df3pzqvuCw.png" /><figcaption>Audit table for current type usage</figcaption></figure><p>Perusing these use cases across the key screens, we saw that designers needed clarity and guidance on styling text within:</p><ol><li><strong>Section headings</strong> — text headings for sections or groups of UI</li><li><strong>Label:Value pairs</strong> — the text combination for displaying data</li><li><strong>Interactive elements </strong>— any actions or controls that include text</li><li><strong>Visual indicators</strong> — any other UI that includes text and provides information rather than interaction</li><li><strong>Code</strong> — text that represents code content</li></ol><p>We also assessed other stylistic and formatting variants such as usage of secondary shades of color, text weights, all caps, monospace numbers, and more.</p><p>As we identified these functional roles of type, we documented the overarching problems with the current type styles and uncovered the need for (1) further guidance on using the core type styles and (2) additional styles to support data text.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Kd0tMECEQA6eA_lW1LdeKg.png" /><figcaption>Documenting the current problem with type usage for data content</figcaption></figure><h3>Data text styles</h3><p>What kinds of data text do we need to account for?</p><p>Looking at two-column layouts, data tables, forms, and other data viz contexts, we found that label text and value text are the most prevalent type of content (pun intended) on a given operational product page. While label text simply acts as a title for data values, value text can take shape as basic text, alphanumeric characters, static vs. dynamic numbers, dates/times, currency, and more. We also need to consider that value text often lives within structured layouts such as tables — that’s where monospace numbers and text alignment for tabular data comes in. Lastly, our products need to display code snippet text in some contexts.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WRu-_VHegt1uBIR5d-LZGg.png" /><figcaption>Different forms of data text</figcaption></figure><p>With all these unique use cases and only 4 core type styles to work with, it’s no wonder that we see that every product or even a section of a given page is styled so differently. Size? Weight? All caps? Shades of gray? The permutations are endless.</p><p>To address this, we decided to add a new set of data type styles and usage guidelines for Labels, Values, Monospace values, and Code. These aren’t intended to replace the existing core type styles but to add another layer of functional typography to the system, equipping designers to present text data content more purposefully, consistently, and confidently.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Wsd0U65F3xF4PA731Z-qKQ.png" /><figcaption>New Data Typography set</figcaption></figure><p>Deciding on the sizes/weights was pretty straightforward; <em>the hard part was actually determining that these type styles serve a semantically unique purpose</em>. Rather than arbitrarily dictating (we practice <a href="https://medium.com/tap-to-dismiss/art-of-diplomacy-2ad1e2cac795">the art of diplomacy</a>!) what we think would work, we identified designers’ most commonly used sizes/weights, stress tested with our key operational product partners, and added to the type ramp accordingly.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_NxI0MDAFxk7jUFZsqSlrQ.png" /><figcaption>Label:Value pairs in action</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dGKq9WZFunPoA7vutpus6w.png" /><figcaption>Value Monospace to align tabular data</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1_oWfxTIRer67b-IR1PpXw.png" /><figcaption>A monospaced system font to represent Code text</figcaption></figure><h3>Supporting smaller sizes</h3><p>Another common finding across our operational products was the need for smaller heading sizes for additional levels of information and data. So we added two more!</p><p>Our Headline styles play the role of heading up entire sections or groups of content. Not to be confused with our Title styles, Headlines are crucial for users on screen readers to navigate through headings and sections on a given page. Title text usually sits at a level lower in the IA to label primary content.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_zsMFgcPVsxQJJudN1Qu3A.png" /><figcaption>Headlines vs. Titles</figcaption></figure><h3>When less is not more</h3><p>As systems thinkers, we want our partner teams to create experiences with the right tools for the right time. We all like to say that “less is more,” but when is less not more?</p><h4>When the lack of choices obscures purpose.</h4><p><em>This story is part of Lyft Product Language’s series on </em><a href="https://medium.com/tap-to-dismiss/how-to-systematize-internal-products-43817ef3580f"><em>How to Systematize Internal Products</em></a><em>.</em></p><p><em>Up next: Russian Nesting Figma Libraries (coming soon)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c760e73367e0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/typography-for-data-c760e73367e0">Typography for Data</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[User-centered Design System Resources]]></title>
            <link>https://medium.com/tap-to-dismiss/user-centered-design-system-resources-2df958d90749?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/2df958d90749</guid>
            <category><![CDATA[lyft]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[designops]]></category>
            <category><![CDATA[figma]]></category>
            <category><![CDATA[ux]]></category>
            <dc:creator><![CDATA[Runi Goswami]]></dc:creator>
            <pubDate>Mon, 09 Aug 2021 17:57:25 GMT</pubDate>
            <atom:updated>2021-10-11T19:28:40.583Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to go beyond asset libraries and build systems <em>for people.</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FZh1ScbKUaMSy-CC8Xl-vQ.png" /></figure><p><em>Update: Check out our talk at Figma’s Schema conference</em></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FPqm8LkB44gU%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPqm8LkB44gU&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FPqm8LkB44gU%2Fhqdefault.jpg&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/19a8d56d8d120ed2ac53317c0ea25fbc/href">https://medium.com/media/19a8d56d8d120ed2ac53317c0ea25fbc/href</a></iframe><p>Design systems often start as a way for product organizations to increase their efficiency, consistency, and velocity. Organizations invest a lot of time and resources upfront into creating shared component libraries to bind design and engineering together. Typically, these resources live in both design tools and code and serve as two sides of the same coin: supporting the end-to-end product development process and ensuring designs can be implemented efficiently.</p><p>But, while a lot can be solved through these assets, even the most robust component libraries can sometimes feel like they’re not delivering on their potential value. Collectively, we have worked on 9 Design Systems at companies ranging in size from early-stage startups to massive enterprises. Across the board, we’ve learned the hard way that asset libraries are necessary but not sufficient.</p><p>For example, when we worked at companies which lacked documentation, we spent all day answering context-related questions and providing recommendations on how and when to use specific components over others. Similarly, when we worked on teams that neglected incorporating systems thinking into onboarding, we observed “brain drain” as senior systems designers and engineers left the company and took their institutional knowledge with them.</p><blockquote>Like any other product, a design system is only as useful as it is usable.</blockquote><p>Here we’ll talk about all the different resources (design libraries included!) that have helped the <strong>Lyft Product Language (LPL</strong>) get used by 97% of product teams at Lyft — enabling system users (designers, engineers, product managers, etc.) to build products and features at scale with Lyft quality standards embedded every step of the way.</p><h3>Onboarding</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A7y5n6nrktXYHhMF7DIiiA.png" /></figure><p>Systems thinking starts during Week 1 at Lyft. Shortly after newly hired designers and engineers learn about Lyft’s culture and get their tech environments set up, they take Mobile and/or Web system onboarding labs (mini design/engineering projects overseen by onboarding mentors). These labs help new hires learn:</p><ul><li>What assets and resources live in the system</li><li>How to use existing system assets (and how to adapt them)</li><li>How to communicate and collaborate with cross functional team members</li><li>Where to get help</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iWixqDYWDBGv6VT1yZUtCQ.png" /><figcaption>Design and engineering system onboarding labs</figcaption></figure><p>By incorporating system citizenship basics into onboarding, we help new hires ramp up more quickly and contribute more effectively in their first few weeks. Just like the system, the onboarding labs are living documents. When system processes evolve, so do our labs. This way, institutional knowledge isn’t concentrated within a small group of people but rather distributed across the entire organization.</p><h3>Libraries &amp; Tooling</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XX_lbYh8EvBZodckn7iq0Q.png" /></figure><p>LPL is a multi-platform system with design and engineering asset libraries for iOS, Android, and Web products. While some components may have platform-specific differences, across the board we strive to make our libraries <a href="https://medium.com/tap-to-dismiss/a-system-built-on-parity-d779271a0b2d">platform agnostic</a> and as easy to use as possible.</p><h4>Design Libraries</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*D6D4ZxHHJQQtfbFD" /><figcaption>Figma is the source of truth for product designers at Lyft</figcaption></figure><p>LPL’s design libraries started as sticker sheets in Sketch where designers could view all the system components within a single file and copy/paste components into mockups. When we migrated our libraries to Figma in early 2020, we took the opportunity to up-level our libraries and incorporate features that Figma offers — like making it easy for designers to search and discover components in the Assets panel.Consistently naming and ordering component properties and variants</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2EtRY5aMmQOt9-0f6TEMLg.gif" /><figcaption>Designers can search for specific components across all enabled libraries within the Asset panel</figcaption></figure><p>We make sure our Figma libraries are easy to use for engineering partners as well by clearly communicating what components are part of the system in the attribute panel. When engineers look at designs that have been handed off, they can see “<strong>[LPL] Core UI — [Platform]; [Component name]</strong>” on all our system components.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*h7FRtBwxg9Yzxin0" /><figcaption>The Toast component with designated keywords</figcaption></figure><p>We additionally help the engineering handoff process by incorporating redlines into our libraries. All component sticker sheets include component instances with Spacers overlaid on top of them as a quick way to communicate layout values between component elements.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*KoprG5DkR6cvDsDr" /><figcaption>Spacing redlines for Toast</figcaption></figure><h4>Design Tooling</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A2PUS_I5B3BHC46sP4IgSw.png" /><figcaption>Private Figma Plugins</figcaption></figure><p>Our 2 internal Figma plugins (LPL Lint &amp; LPL Dark Mode Switcher) are the icing on the cake for Figma Design System usability. LPL Lint checks selected frames in mockups to see if they’re using LPL color, typography, and elevation attributes. This linter is a lifesaver for design to engineering handoff and QA. Meanwhile, the LPL Dark Mode Switcher does exactly what you might suspect — it switches all the colors in selected frames from Light to Dark mode (and back) using our Figma Dark Mode Color Library. Now that Lyft Rider and Drive apps both support dark mode, this plugin helps designers quickly check mockups to see if visual hierarchy remains consistent at all times of day.</p><h4>Engineering Libraries</h4><p>In our engineering libraries, we make it easy for engineers to use LPL components out of the box. Each component has platform-specific technical documentation that covers:</p><ul><li>How to implement the component</li><li>Component customization options including common variants and use cases</li><li>Necessary logic that handles text wrapping and truncation</li><li>State definitions and interaction details</li><li>Accessibility definitions</li><li>Live demos</li><li><em>And more</em></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*6ubtIPj-iyu1IyUC" /><figcaption>Web Toast usage examples</figcaption></figure><p>Equipped with the component code and technical documentation specific to that component, engineers are able to build at a much faster pace. And by using these design system components, they promote consistency and a high standard of quality across the products they build.</p><h3>Documentation</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hgYN3I5m3-NskLUVdKk3NA.png" /></figure><p>Let’s say your team has a well constructed component library in Figma, those components have corresponding iOS, Android, and React components, and every new designer and engineer knows how to use those libraries. If you stopped here, your products would be in great shape: you’d see improvements in product consistency, feature velocity, and design-engineering handoffs. However, it would not be long until you started getting unanswered questions like:</p><ul><li>“When should I use component variation X instead of variation Y?”</li><li>“Why does this component look/behave like this? I think I need something different.”</li><li>“How does my engineering partner implement this into our feature?”</li></ul><h4>“Where do I learn about the system?”</h4><p>Enter: the documentation site. This centralized resource helps system users gain context, understand when to use certain component variants over others, and learn from other designers and engineers. We split our documentation into usage guidelines and technical implementation details to help all users at every stage of the product process.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zw0Fei-MyEXv3Tn1VAyOHA.png" /><figcaption>Lyft’s internal documentation website</figcaption></figure><p>Whenever we add a new component to our libraries or update an existing component, we also update the documentation site so decisions don’t get lost. Anecdotally, we’ve found that just like that old adage — if you really want to master something, teach it –</p><blockquote>If you really want to create a good component, write documentation for it.</blockquote><p>In our docs, we include examples of the component <em>in situ</em> and we connect the dots between all the different use cases. In fact, the majority of the time it takes to add a new component to the system is spent writing guidelines for it.</p><h4>“Which component should I use?”</h4><p>On most design system component pages, we include a decision tree at the top, like a <a href="https://en.wikipedia.org/wiki/Choose_Your_Own_Adventure">Choose Your Own Adventure</a> book. Like in the Toast component example below, the decision trees ask simple “Yes” or “No” questions to help system users narrow options down within a type of component or between related components. Decision trees help system users:</p><ul><li>Understand how and when to use components</li><li>Discover related components that might better fit their use case that they might not have previously considered</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Ng4hRIQ9P5lKxnIT" /><figcaption>Toast component decision tree</figcaption></figure><p>We also make recommendations on how to use and apply components and provide additional information on:</p><ul><li>The anatomy of the component</li><li>Different variants of the component (if applicable)</li><li>How the component interacts on the screen</li><li>How the component appears on different platforms</li><li>Motion details (if applicable)</li><li><em>And more.</em></li></ul><h3>Processes</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1mWcICY4aOzMfnrLfY-8GA.png" /></figure><p>It’s hard to maintain a system over time especially as team members come and go and as more people contribute to the system. Our design system team processes are like a meta-system — a way for us to ensure each new or updated part of the system is held to the same, high, standards. Truthfully, our processes could be their own separate article (coming soon)! To narrow the scope a little here, we’ll highlight some of the artifacts that come out of our processes.</p><p>Every change to our libraries and documentation goes through the same process. We start by writing a project brief detailing:</p><ul><li>High level problems &amp; project goals</li><li>Key design &amp; engineering contributors and stakeholders</li><li>Success metrics</li><li>Potential challenges</li><li>What’s in scope and out of scope</li><li>Rough milestones</li></ul><p>We share project briefs with stakeholders in kickoff meetings to align on scopes and timelines. From there, we audit the system and iteratively design a solution. Each new design exploration is documented in an ongoing presentation deck and reviewed in ad-hoc meetings with stakeholders. Finally, we synthesize guidelines around content, style, states, accessibility, interaction behavior, and other design decisions into a written document and/or a new Figma component.</p><h4>Artifacts</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D5nlFnZJU01s1klUFBEmLQ.png" /><figcaption>System design artifact templates</figcaption></figure><p>Each system design artifact (brief, audit, review deck, documentation, component) has a standard template so it’s easy for us to take the same level of care with every new component or contribution. The final artifacts get reviewed asynchronously by as many people as possible before getting published to our libraries and documentation site and shared out.</p><h4>Comms</h4><p>Along the way, we craft careful comms to make sure system users aren’t caught off guard by the changes we make. Depending on the impact of the changes, we’ll choose to alert people in All Hands presentations, emails, Slack messages, or some combination of the above. We try to keep our messaging concise, bulleted, and spread apart so folks don’t learn to ignore us over time.</p><p>All this might seem like overkill. We certainly get a lot of feedback from system users telling us that our stringent processes are a barrier to entry to them contributing to the system. On average, each new addition to the system takes a little over a month start to finish. We like to think that what we lack in velocity we make up for in quality but please let us know in the comments if your team has found a way to maximize both.</p><h3>Support</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OyrxIPZF6bOnr2jIlnEEnQ.png" /></figure><p>While we try our best to make our documents and libraries as usable as possible, we need to remember:</p><ul><li>Not all people are systems people</li><li>No system is perfect</li><li>There is <em>a lot</em> of stuff in the system</li><li>Often the easiest way to get answers about the system is to just ask the people who build it.</li></ul><p>We consider ourselves the glue between feature teams. We discourage people from working in silos by enabling conversations between teams and promoting cross-collaborative patterns and recommendations. And on occasion, we evolve the system through component contributions (stay tuned on this future post).</p><p>For all these reasons and more, we make sure there are multiple ways for system users to get the help they need from us. Our Slack channel is the easiest way to get in touch with our team and ask both design and technical questions. We try to respond within a couple of hours during ET/PT working days. If users want some in-person time with us to get feedback on work or to ask more open-ended questions, we hold weekly office hours by appointment only to ensure the right team members are there to support. For bugs and feature requests, we have a shortcut link to ticket templates in our project management software. If all else fails, emails (and maybe carrier pigeons or three-eyed ravens) will also work!</p><p>We know it can be hard to ask questions — especially in a public Slack channel with literally hundreds of people in it. When someone asks a LPL question, regardless of their attitude, we try to respond with gratitude and thank them for reaching out. <em>We’re just appreciative that ya’ll are using the system! </em>We also research our answers before responding, cite our own sources, and double check with other team members if we’re still not sure so we don’t confuse people with contradictory guidance. All of this is captured in our Support Playbook. No really, we have documentation on how to support our users — don’t you? At the end of the day, if no one uses what we create, then we won’t exist.</p><h3>All together now!</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7dXLVUTEn_aRGu5oDxvaSw.png" /></figure><p>All of these resources provide our partners with the tools and context they need to work as efficiently as possible together. We learned early on that it was important to take a user-centered approach to our system resources in order to consistently deliver value to Lyft designers and engineers. We not only strive for our users to be aware of the system and to efficiently use it in their daily work but also work tirelessly to ensure it provides value. In our most recent (June 2021) design system engagement survey we found:</p><ul><li>91% of participants are aware of LPL</li><li>98% of participants agree LPL provides value, with 80% who strongly agree</li><li>97% of participants have read at least one form of LPL documentation</li></ul><p>What works for one organization may not work for another. Every organization is unique and there is no one size fits all when it comes to building a successful design system. But the hope is that our discussion helps start or further conversations around the resources that you provide for your design system. What does your organization include in your design system resources? Leave a comment below!</p><p><em>This article was written by </em><a href="https://twitter.com/maedawip"><em>Evan Maeda</em></a><em>, </em><a href="https://twitter.com/thinmatt"><em>Matthew Spiel</em></a><em>, </em><a href="https://www.notion.so/ba69fffa95484fb185620180eded254f#2fc708d7059f48798d73f680c25e3c99"><em>Jeremy Dizon</em></a><em>, </em><a href="https://medium.com/@loonyruni"><em>Runi Goswami</em></a><em>, and </em><a href="https://medium.com/@myomelette"><em>Michael Yom </em></a><em>— 2 former and 3 current members of Lyft’s Design System team. Interested in joining the Lyft design systems team? Check out our </em><a href="https://www.lyft.com/careers#openings"><em>openings</em></a><em>; we’d be happy to chat!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2df958d90749" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/user-centered-design-system-resources-2df958d90749">User-centered Design System Resources</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Growing (and Shrinking) Pains]]></title>
            <link>https://medium.com/tap-to-dismiss/growing-and-shrinking-pains-13bf66ee6083?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/13bf66ee6083</guid>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[design-thinking]]></category>
            <category><![CDATA[visual-design]]></category>
            <category><![CDATA[design-process]]></category>
            <dc:creator><![CDATA[Runi Goswami]]></dc:creator>
            <pubDate>Mon, 12 Jul 2021 15:17:36 GMT</pubDate>
            <atom:updated>2021-09-09T13:47:16.001Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to fix a broken spacing system</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*eNUo7UKTSKe-WkKn" /></figure><p>A recurring refrain in our conversations with operational product designers was that all our design system components were just too darn big for internal tools. Many of these tools feature full screen data tables and charts. In these information-dense contexts, it’s important to make as much content visible on the screen as possible so users can easily scan, parse, and compare information. Unfortunately, when operational product teams tried to fit our existing components into these contexts, they looked gigantic and out of place.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Jps3oSzMf_yE-Dl1" /><figcaption>Components for giants</figcaption></figure><p>At first glance, it seemed we needed to considerably shrink down our components to work well for operational products — but how small could we go while still maintaining <a href="https://www.w3.org/WAI/WCAG22/Understanding/pointer-target-spacing.html">WCAG AA target size standards</a>?</p><h3>Space research</h3><p>Accessibility is a <a href="https://medium.com/tap-to-dismiss/distributed-ownership-8f82352b9cbb">Lyft-wide quality standard</a> and is therefore non-negotiable in our design system. Previously, our internal products largely flew under the radar of this standard because there weren’t many centralized resources or guidelines for them to follow. Unsurprisingly when we brought up the <a href="https://www.w3.org/WAI/WCAG21/Understanding/target-size.html">44px minimum pointer target size</a> in initial meetings with operations teams, it was a big sticking point and a likely deal breaker.</p><p>Rather than press the issue further, we did more research. Externally, we looked at how other companies handled the same problems. These articles in particular greatly elucidated the problem:</p><ul><li><a href="https://medium.com/eightshapes-llc/space-in-design-systems-188bcbae0d62">Space in Design Systems</a> and <a href="https://medium.com/eightshapes-llc/size-in-design-systems-64f234aec519">Size in Design Systems</a> both by Nathan Curtis</li><li><a href="https://medium.com/google-design/using-material-density-on-the-web-59d85f1918f0">Using Material Density on the Web</a> by Una Kravets.</li></ul><p>Internally meanwhile, we audited our existing web components to see if our current approach to sizing and spacing could be extensible to operational products.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*R7gXuECPgCzkfcdB" /><figcaption>Representative rows from the audit table</figcaption></figure><p>We learned that while we had “Default” and “Compact” sizes of most of our components, those names didn’t consistently correspond to component vertical heights, content sizes (i.e. text and icon sizes), horizontal and vertical padding, or component shapes (i.e. border radius). Several components lacked two sizes entirely and others had different names for their “Default” and “Compact” versions. The component sets had grown piecemeal — a side effect of an oversight in our process.</p><blockquote>When we add new components to our libraries, we audit their usage across different product experiences to standardize their sizes. We don’t often evaluate all our components as a set, so over time, “Default” and “Compact” came to mean slightly different things in different contexts.</blockquote><p>Before our research, we <em>assumed</em> the crux of the problem was that operational products needed smaller components but that these components would have to be inherently pointer target inaccessible. Through our audit, however, we realized that we had never before approached sizing, spacing, and density holistically. So what we <em>really</em> needed were clear and consistent rules around how to apply density in both consumer and operational products.</p><h3>Defining Density</h3><p>Density is an overloaded term and usually refers to screen density or the literal pixel resolution of displays. While internal product teams universally asked for more dense components for dense interfaces, they weren’t talking about pixel resolutions. We discovered through our research that there are 3 dimensions that make a screen feel more or less compact. These dimensions comprise visual density, or the set of spatial relationships within and between visual elements on a screen, including:</p><ul><li>Content size (i.e. type scale, icon scale)</li><li>Container padding and shape — the space within a container</li><li>Layout — the space between screen elements</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*r3wnvJfid3MAjjrO" /><figcaption>The 3 dimensions of Visual Density</figcaption></figure><p>It seemed like once we defined density, everything else started falling into place. For one thing, our “Default” and “Compact” sizes could now also be defined and standardized. We set standard values for our internal padding, content scales, spacing, and container shapes in terms of our base 8px grid. We also standardized the typography styles we use within operational products (article coming soon)! These decisions had the happy side effect of greatly simplifying our decision making process for adding new components to the library.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Pyt31CsZ5XklSGd6x6ctKg.png" /><figcaption>Uniform visual density for all components</figcaption></figure><p>Roughly speaking, consumer web products could use Default components while operational web products could use Compact components. But we also called out specific exceptions and provided more granular guidelines for how to mix different densities within the same screen on our documentation site.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*t7rwy93h6Qv9Ua4R" /></figure><p>Finally, we realized that the third density dimension, layout, was the key to unlock an accessible, visually dense, interface. With our minimum content sizes and visual height requirements, as long as there is at least 6px between each UI element, we can ensure pointer target accessibility for even the tightest of layouts. We just define the interactive area of each component to extend slightly past its visual area and ensure the interactive areas don’t overlap with our component layout requirements. To make it extra easy, we created accessibility helper components in Figma to visually show designers the minimum accessible pointer target area for each interactive UI element.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1VvUYEdlxSDaO4wy" /><figcaption>Accessible interactive target cheat sheet</figcaption></figure><h3>5 easy steps to fix your system spacing</h3><p>Our path to spatial clarity has been meandering — fixing spacing in an existing, mature, design system is a messy business. For example, we learned the importance of publishing size changes in bulk rather than individually when system users started noticing that some of their components grew or shrank out of alignment with components we hadn’t “fixed” yet (whoops)! We also learned that only design systems enthusiasts get really jazzed about attribute updates while everyone likes shiny new components, so we started crafting our comms differently to reflect that.</p><p>If you are attempting to adapt your system to work for a new visual density or if your system suffers from inconsistent sizing and spacing like ours did, we hope this distillation of our work can help:</p><ol><li>Audit your system components, decide how many different visual densities you need, and name them.</li><li>For each density, define values for content size, container padding and shape, and layout spacing in terms of your base pixel grid (bonus: involve system users in the decision making process)!</li><li>Apply standardized visual density names and values to all existing components (this is the bulk of the work and may take months and an airtight communications strategy to complete — but it is worth it).</li><li>Create new components so each component has a version for each visual density.</li><li>Publish visual density changes in bulk to your libraries to reinforce the fact that this is a holistic, attribute-level, change.</li></ol><p>Whatever your system spacing journey looks like, and however messy your audit table gets — know that accessible, information-dense, interfaces are possible!</p><p><em>This story is part of Lyft Product Language’s series on </em><a href="https://medium.com/tap-to-dismiss/how-to-systematize-internal-products-43817ef3580f"><em>How to Systematize Internal Products</em></a><em>.</em></p><p><em>Up next: </em><a href="https://medium.com/tap-to-dismiss/typography-for-data-c760e73367e0"><em>Typography for Data Products</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=13bf66ee6083" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/growing-and-shrinking-pains-13bf66ee6083">Growing (and Shrinking) Pains</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Systematize Internal Products]]></title>
            <link>https://medium.com/tap-to-dismiss/how-to-systematize-internal-products-43817ef3580f?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/43817ef3580f</guid>
            <category><![CDATA[design-process]]></category>
            <category><![CDATA[ux]]></category>
            <category><![CDATA[design-thinking]]></category>
            <category><![CDATA[lyft]]></category>
            <category><![CDATA[design-systems]]></category>
            <dc:creator><![CDATA[Runi Goswami]]></dc:creator>
            <pubDate>Mon, 12 Jul 2021 15:16:36 GMT</pubDate>
            <atom:updated>2021-09-09T13:46:12.022Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zyHW4CowOMLEdv4kj96fpw.png" /></figure><p>We designed the Lyft Product Language mobile first. All of our design system attributes and components were crafted with small screens, unreliable internet connections, and touch inputs in mind. When we later expanded the system to support Consumer Web products on Desktop devices, we seemingly realized the promise of a mobile first design strategy. Screen designs grew elegantly across different surfaces and our core attributes and components largely stayed the same across platforms. But, like many design systems teams, we drew the line at Operational/Internal Web products.</p><p>Over time, Lyft’s suite of internal, operational, tools grew to over 75 — built and maintained by multiple teams of designers and engineers. These internal product teams were largely left to their own devices with no centralized resources and guidelines. As a result, the quality and consistency of these products suffered. In several cases, backend engineers created entirely new products without any designs, designers, or even frontend engineers at all.</p><blockquote>70 products ended up being built on top of other systems like Material UI and 8 teams started their own systems — resulting in lots of duplicative work and disparate styles.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QroAR0KrUfZCfexi" /><figcaption>So many data tables</figcaption></figure><p>Over 6 months, we interviewed and surveyed designers and engineers across these product teams to understand pain points and inform our approach to systematizing ops products. We learned that screen designs and components are usually designed with just one product in mind and then adapted with patchwork solutions when new use cases come up. We also heard that due to time pressures and resource constraints, designers rarely have time to do accessibility checks, define all component states, or write documentation for new features. Understandably, we’ve ended up solving for similar interface constraints and data display use cases in pretty different ways across this fragmented product landscape.</p><p>In this series, we’ll cover how we approached reconciling these differences systematically and how we expanded a mature design system to support a whole new suite of products, users, and use cases.</p><p><a href="https://medium.com/tap-to-dismiss/growing-and-shrinking-pains-13bf66ee6083">Part 1: Growing (and Shrinking) Pains — Holistic spacing and visual density</a> <br><a href="https://medium.com/tap-to-dismiss/typography-for-data-c760e73367e0">Part 2: Typography for Data</a><em><br>Part 3: Russian Nesting Figma Libraries (coming soon) <br>Part 4: Building Blocks (coming soon)<br>Part 5: System Citizenship — Adoption, Contribution, and Migration (coming soon)</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=43817ef3580f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/how-to-systematize-internal-products-43817ef3580f">How to Systematize Internal Products</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A better segmented control]]></title>
            <link>https://medium.com/tap-to-dismiss/a-better-segmented-control-9e662de2ef57?source=rss----a327c6e6959---4</link>
            <guid isPermaLink="false">https://medium.com/p/9e662de2ef57</guid>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[growth-mindset]]></category>
            <category><![CDATA[material-design]]></category>
            <category><![CDATA[design-process]]></category>
            <category><![CDATA[design-thinking]]></category>
            <dc:creator><![CDATA[Runi Goswami]]></dc:creator>
            <pubDate>Tue, 18 May 2021 15:09:16 GMT</pubDate>
            <atom:updated>2021-05-18T15:09:16.083Z</atom:updated>
            <content:encoded><![CDATA[<h4>How we embraced a growth mindset and ended up with a more robust ecosystem of selection patterns</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QfVUQJ3dPNIqVECXN9hDoQ.png" /><figcaption>Old segmented control does not spark joy</figcaption></figure><p>A few years ago, we built a segmented control component for the Lyft Product Language (LPL) design system. You may have read <a href="https://medium.com/tap-to-dismiss/select-to-proceed-996d19c8a7a4">our guide</a> to designing and using selection controls. However, when we recently looked at our component adoption and usage metrics, we found very few teams actually used our segmented control when building products and features 😔.</p><p>Our rule of thumb is that at least two products or features need to use a component for it to belong in the system. Product and feature-specific components live in their own, child libraries which inherit attributes from LPL. Segmented control was dangerously close to getting booted from the system. Luckily, we decided to take a closer look at the root of the problem — and ended up improving our entire ecosystem of selection controls. Here is that story.</p><h3>Problem definition</h3><p>We started from first principles and asked <em>“what the heck is a segmented control anyway?”</em> <a href="https://developer.apple.com/design/human-interface-guidelines/ios/controls/segmented-controls/">Apple</a> says they’re a “linear set of two or more segments, each of which functions as a mutually exclusive button.” They think it’s ok to use segmented controls to navigate between different views. <a href="https://material.io/components/buttons#toggle-button">Google</a> disagrees about using segmented controls for navigation <em>and</em> says it’s ok to select multiple segments sometimes — unlike Apple. Google also doesn’t think segmented controls are <a href="https://material.io/archive/guidelines/components/selection-controls.html">selection controls</a> at all 😐.</p><p>When designing an <a href="https://www.oreilly.com/library/view/designing-for-the/9781491971468/ch05.html">interusable</a> design system with rules that apply across iOS, Android, and Web interfaces, contradictory platform guidelines like these make it tricky to know which conventions will be the most familiar to users across all devices.</p><p>When we first built our segmented control component in LPL, we didn’t necessarily consider this convention confusion. We optimized for internal consistency — choosing to match the visual style of our pill-like toggle buttons.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4xFgDtxL9_nhYsLsLiBbFA.png" /><figcaption>Previous selection controls</figcaption></figure><p>In theory, we thought it might be likely for toggle buttons and segmented controls to appear frequently in the same contexts since they were functionally analogous to checkboxes and radio buttons. In practice, however, feature designers and engineers took matters into their own hands and created all sorts of permutations of custom segmented controls. When we audited our products, we found 14 distinct segmented control components across 10 different products. Obviously, our existing component didn’t meet the needs of our system users. We didn’t need to remove segmented control from the system, we needed a better segmented control.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TyETGsw81skeqIcfvfEdAw.png" /><figcaption>A different segmented control for every occasion</figcaption></figure><p>Upon closer inspection, we saw the custom permutations differed from the system segmented control in one of two ways:</p><ol><li>Stylistic differences: Controls with different selection and background colors, container shapes, and/or text styles from the existing component.</li><li>Semantic differences: Controls used for navigation or filtering content (like Apple allows) instead of selection as intended.</li></ol><h3>Tackling one problem at a time</h3><p>The first bucket of stylistic discrepancies was relatively straightforward to address. We redesigned the control to be less similar to its pill-like cousin, toggle button, and more similar to our visually lightweight input fields instead.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0asnDP1PNNFTn23Jj5hIwg.png" /><figcaption>New, lightweight, segmented control styles</figcaption></figure><p>One of the big reasons product and feature teams created their own components was because ours wasn’t flexible enough to adapt to a wide variety of use cases. So we also introduced 3 new stylistic variants of the component:</p><ul><li><strong>Text with detail text</strong> — for when the extra information helps users better understand the options and make decisions</li><li><strong>Icon</strong> — only for when there is enough context for each icon option to convey meaning and not when short text would suffice.</li><li><strong>Primary text</strong> — for when the segmented control is the only or primary action on the screen.</li></ul><p>To close the loop and encourage adoption, we replaced the custom components in all of the screens we collected during our audit and showed off the new variants <em>in situ</em>. Just like it’s better to use real copy and data over auto-generated Lorem Ipsum, we found it more effective to use real screen designs to stress test our component.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9xTkMf_R3WTBlZCG1FPXCA.png" /><figcaption>Variants in situ</figcaption></figure><p>For the semantic discrepancies, meanwhile, we looked across other systems… and found more discrepancies 🤦‍♀️. For starters, there is no consensus on what to name this pattern. In addition to segmented control, we’ve seen it called a button group, toggle buttons, radio bar, or content switch in different systems. And for each new name, there is a slightly different usage guideline. Turns out, this isn’t just a platform convention problem, it’s a meta-problem across all design systems. It’s no wonder that we saw so many different custom implementations of it across our feature teams!</p><p>Needless to say, tackling inter-system consistency problems was well beyond the scope of this project. So instead, we focused on making our own system as clear and internally consistent as possible. We created a new component in the system (Tabs!) to handle the filtering and navigation use cases and we updated our decision trees along with component definitions to make the new distinction clear. To further reinforce the semantic difference between segmented controls and tabs, we made the selection states, container shapes, and motion guidelines different between the two.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mxyJh84PtDK-qTwxxPegew.png" /><figcaption>Clear and internally consistent differences</figcaption></figure><p>Our previous definition for segmented control borrowed heavily from <a href="https://developer.apple.com/design/human-interface-guidelines/ios/controls/segmented-controls/">Apple’s</a> which literally states <em>what</em> the component is. But the “<em>what”</em> doesn’t help designers make decisions. Now, we emphasize the “<em>why”</em> and the “<em>how”:</em></p><blockquote>Segmented controls allow users to make a single selection from a set of 2–5 options, as a common alternative to radio buttons and dropdown menus. They clearly present all available options to users and are easy to use on mobile devices. <br>• Use them over other selection controls to reduce cognitive load.<br>• Do not use them to filter or navigate content (use Tabs instead).</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*X3iZ5B0n3AnV39lGIVbUIw.png" /><figcaption>Selection control ecosystem flow chart aka pure insanity</figcaption></figure><h3>Tying up loose ends</h3><p>Updating documentation is one thing, but we still needed to make it as easy as possible for designers to use the updated system component. We wanted to avoid triggering potential breaking changes by simply swapping symbols in Figma. Instead, we phased out the old component as suggested by <a href="https://medium.com/onfido-tech/how-to-deprecate-old-components-in-figma-design-systems-7978ea8e045e">Onfido’s great article</a> on deprecating components in Figma design systems. For us, that meant:</p><ol><li>Renaming the page with the old component.</li><li>Moving the page with the old component to the “Deprecated Dungeon” section of our library.</li><li>Adding a super obvious visual overlay to all variants of the old component, complete with a ghost emoji 👻 as voted upon by our design team.</li></ol><p>With the old component relegated, we could finally consider this problem solved.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/910/0*slH8ddfeQIKyDYYS" /><figcaption>Banished, but never forgotten</figcaption></figure><p>As long as there is a central system, there will be teams that deviate from it. So often as systems stewards, we seek to reduce and reign in those deviations. In this case, we could have chosen to remove segmented control from LPL because it wasn’t being used. Yet, when we examined <em>why</em> so many teams were choosing to build custom components over using the system component, we ended up with a more varied, more robust, more usable, and better defined ecosystem of selection patterns. As for the meta-problem, if your team calls this component something else or thinks about its usage differently than we do, let’s chat about it!</p><p><em>This article was written by the extremely talented Runi Goswami — a product designer on the Lyft Design Systems team. Please subscribe!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9e662de2ef57" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tap-to-dismiss/a-better-segmented-control-9e662de2ef57">A better segmented control</a> was originally published in <a href="https://medium.com/tap-to-dismiss">Tap to Dismiss</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>