<?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[Stories by Dave House on Medium]]></title>
        <description><![CDATA[Stories by Dave House on Medium]]></description>
        <link>https://medium.com/@iknowdavehouse?source=rss-3b43b4930e3b------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*Fp0M-eHHhOgO8EPm.jpg</url>
            <title>Stories by Dave House on Medium</title>
            <link>https://medium.com/@iknowdavehouse?source=rss-3b43b4930e3b------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 02:25:33 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@iknowdavehouse/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Lies, damned lies, and design system adoption statistics]]></title>
            <link>https://iknowdavehouse.medium.com/lies-damned-lies-and-design-system-adoption-statistics-11c1ce357bde?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/11c1ce357bde</guid>
            <category><![CDATA[design-systems]]></category>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Fri, 05 Dec 2025 10:56:23 GMT</pubDate>
            <atom:updated>2025-12-05T10:56:23.503Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="Actor Marlee Matlin playing pollster Joey Lucas in the West Wing episode “Lies, damned lies, and statistics”. The photo capterues her blowing a raspberry." src="https://cdn-images-1.medium.com/max/1024/1*utETXSoy9kM9uVrD44u7uw.png" /><figcaption>Marlee Matlin playing pollster Joey Lucas in the West Wing episode “Lies, damned lies, and statistics”</figcaption></figure><blockquote>“Lies, damned lies, and statistics” is a phrase describing the persuasive power of statistics to bolster weak arguments.</blockquote><p>Adoption statistics, when used as a blunt instrument are often a bad measure of design system success. Those of us that work on design systems know this, but often the people around us don’t.</p><p>On every system I’ve worked on we’ve been asked for a single adoption metric that represents how well we are doing. Conceptually, this makes total sense. The kind of reporting an org is used to are generally more tangible…number of sign ups, number of daily active users, number of transactions, number of training courses run, you get the idea.</p><p>But design systems, being extremely complex beasts and adoption being one of the most nuanced metrics you could track, we often result to providing numbers that mean nothing to us as a team. They are just for reporting up the line.</p><p>The trouble is, once you’ve been doing this a few years you are going to hit 100% and the people around you are going to ask — if we’re at 100% why does it feel like we aren’t?</p><h3>Adoption is not binary</h3><p>To track an adoption there needs to be a clear and universally accepted understanding of what adoption means in the context of design systems. Or at least for your design system, in your organisation.</p><h4>Tiered adoption</h4><p>Every design system has a tiered model of adoption.</p><p>By this we mean, some teams:</p><ul><li>Can use the code, design and guidance, other teams may only be able to use the design, other teams may only be able to use the guidance</li><li>Are not supported by the primary target output of the system. For example, using a different tech stack to what’s provided centrally</li><li>May be predominantly using design tokens and not components because they are styling an existing application or third party SaaS</li><li>May use the system simply as a reference point for design direction</li></ul><p>At best, only direct adoption of things like components can really be tracked. When we put an over emphasis on this, it can lead to a situation where the team builds stuff that can be directly measured and not what is most useful.</p><p>While website analytics were a useful measure of guidance adoption, as documentation moves to an “in the moment” approach, through APIs being consumed by plugins or agents this will increase the amount of touch points to track for documentation only tier too.</p><h4>Bad adoption</h4><p>Adoption alone is not always something to celebrate. Teams that technically use the design system may use it so badly that capturing this as a positive does not feel ethically correct.</p><p>No form of adoption tracking can truly determine how well the system has been used, only what and by how much.</p><p>Examples of bad adoption may be:</p><ul><li>Using every component in the system that they can, but fundamentally going against the associated guidance. This is when teams think about the system as a UI library only</li><li>Using components in an inaccessible way — for example deciding their form inputs don’t need labels so leaving the property blank</li><li>Overriding components — If someone overrides a design system component they can theoretically do anything to it and it would still appear on any analytics platform that they were using the system</li></ul><p>Can you really include bad adoption in your metrics if it doesn&#39;t lead to the desired customer experience?</p><h4>Lack of organisational data on potential consumers</h4><p>For a team to understand adoption they need to be able to understand two things as a minimum.</p><p><em>How much their thing is being used</em> and the<em> potential opportunity for use</em>.</p><p>The adoption metric, which is often requested as a percent requires some knowledge of what 100% is.</p><p>As is stands:</p><ul><li>Most big organisations don’t know how many journeys or applications they have. If you work in an organisation small enough to know this, then you probably don’t have any issues tracking adoption, you can just look</li><li>We often don’t know how many teams we have that are making things that could consume the system — this could be because they are either not doing any frontend or design work or because they don’t use the same tech stack</li><li>On the Figma side, the teams data can be easily skewed by a single designer and Figma teams do not always map to real teams due to potential misalignments with the workspace, team, project boundary we need to work in</li></ul><p>The only way teams in this position have been able track adoption is relative to itself. For example, more usage than last year, more teams than last year.</p><p>I will state this again, if you have no way to determine the potential users of the design system then you cannot provide the kind of adoption metric you’re likely being asked for.</p><h4>Historic adoption</h4><p>The design system exists on a timeline, by that I mean it’s an evolving thing. If it’s been around a while you may have hundreds of releases under your belt.</p><p>Adoption cannot simply be about “using the design system”, surely it needs to be “using a recent version of the design system”?</p><p>If we were to ask our teams if they use the design system, the majority will confidently say they do.</p><p>However, what I’ve seen in reality is:</p><ul><li>Using versions of the system that are anything from 1–7 years out of date</li><li>Basing their own design system on top of the central one taken from a certain point in time</li><li>Not keeping up to date with brand changes because they are too big to deal with</li></ul><p>Where do you draw the line so you don’t include past adopters in your current stats?</p><h4>Level of adoption</h4><p>How much adoption is enough to really call something adoption?</p><p>Does a team need to use 5 components?</p><p>Do they need to use 1 token?</p><p>Do they simply need to have the design system npm package as a dependency in their app?</p><p>This line is something that teams are going to have to decide for themselves. But you need to ask the question and you need to have an opinion on it.</p><p>Is it fair to track adoption because someone has used a token to the same degree as 40 components, 5 patterns and followed the guidance?</p><p>If you don’t think so, what is the minimum amount of usage before you can call something adoption and how might you track that?</p><h4>Adoption by discipline</h4><p>Many disciplines use the design system, each one uses it in either a direct or indirect way.</p><p>For example:</p><ul><li>Designer adoption may be through Figma usage and website visits</li><li>Content adoption may be through guidance and website visits</li><li>Engineering adoption may be through component tracking during a build process</li><li>PO adoption may be through guidance informing acceptance criteria</li></ul><p>Some of the most meaningful change from using the design system does not come through the trackable parts.</p><p>Content design adoption is rarely trackable, yet has some of the biggest impact of any system for customers. How can you make sure you don’t over emphasise the importance of UI in your adoption metrics?</p><h3>In summary</h3><p>We cannot provide an indication of design system adoption unless we can decide:</p><ul><li>What we track and where</li><li>How we report direct and indirect adoption</li><li>What minimum adoption means</li><li>If the quality of adoption matters</li><li>How up to date teams need to be</li></ul><h3>What is actually valuable?</h3><p>Many Design System teams have fallen into the “Adoption trap” in the last decade, not by their own choice.</p><p>While it is good to have an idea of how many teams or how much of the real estate is using a design system I do not believe organisations always have an adoption problem.</p><p>What they more likely have is:</p><ul><li>Compatibility / Interoperability problems — Teams that can’t use it</li><li>Quality problems — Teams that use it badly</li><li>Maintenance problems — Teams that never update it</li><li>Legacy problems — Teams that are stuck in legacy tech that will take years to resolve</li></ul><p>Many of these things are either beyond the direct control of the design system team or are not things that can really be tracked with traditional analytics.</p><h3>Focusing on outcomes</h3><p>Adoption tracking can be seen as focusing on output over outcomes. It puts the emphasis on quantity of use and encourages the team to focus on output driven tasks like, providing more things.</p><p>It is often used to justify the team&#39;s existence over anything valuable to customers. This as we know, is something that can come back to bite you later.</p><p>Rather than this, many teams have moved on to measuring things like:</p><ul><li>Sentiment towards the system</li><li>Case studies on how long something took to rebrand when a team was using the system, reduction in lines of code or time to market</li><li>Increase in customer sentiment or reduction in complaints</li><li>Scoring better in quality audits or internal assessments</li></ul><p>Some of these things cannot be accredited directly to the system, but the system plays into the overall outcome for customers.</p><p>This after all is what really matters.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=11c1ce357bde" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Freedom within a framework.]]></title>
            <link>https://iknowdavehouse.medium.com/freedom-within-a-framework-1e9446f713fa?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/1e9446f713fa</guid>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Mon, 15 Sep 2025 16:44:49 GMT</pubDate>
            <atom:updated>2025-09-15T16:44:49.302Z</atom:updated>
            <content:encoded><![CDATA[<h2>Freedom within a framework. We do not strut… ever</h2><figure><img alt="Portrait of Leo McGarry from the HBO political drama The West Wing" src="https://cdn-images-1.medium.com/max/375/1*PCQQwJ8GbWgpTdTWZKSs9A@2x.jpeg" /><figcaption>Leo McGarry from The West Wing</figcaption></figure><p>The term <em>“freedom within a framework”</em> has been used in the context of design systems for as long as I can remember. Usually in response to some kind of misguided comment about creativity.</p><p>But what if we really dug in to what freedom in a framework really means to both you and your consumers.</p><p>When I think about freedom within a framework my mind goes to thinking about other human relationships such as marriage, partnerships or larger societal frameworks like laws and constitutions.</p><h3>Are design systems like a marriage or a rule of law?</h3><p>When I think about marriage, partnerships or indeed any type of committed relationship, there are rules that are entered into and agreed upon by all parties.</p><p>Different relationships may have different rules, but the people in them understand where the boundaries are, because societal norms aside, they co-created them.</p><p>In contrast, the laws of the land are assigned to us. Simply by being born we are automatically enrolled into a framework of rules and processes that we are told we must follow consciously and unconsciously throughout our lives.</p><h4>Bad relationships</h4><p>While some relationships have the mutual, co-created boundaries other people may be in situations where the dynamics are imbalanced.</p><p>At one end of the spectrum this can be down to differences in personality but at the other end this can mean controlling, manipulative behaviour from one party or the other.</p><h4>Breaking the law… breaking the law</h4><p>While we’re born into the frameworks of law and order, governed locally, nationally and in some instances internationally, we all break the law a little bit.</p><p>Even the guy who likes all the local police Facebook posts occasionally rides his bike on the pavement.</p><p>In contrast there are people that simply do not want to adhere to the imposed <em>“laws of the land”</em>.</p><p>This is not so much a linear spectrum, it can include both behaviour that many people would agree is unacceptable in any type of societal framework (that also happens to be criminal in the eyes of the law).</p><p>On the other side of this, there are groups of people that intentionally opt out of expected societal norms and live in self governing communities where the community itself defines the rules in which it lives.</p><p>These communities, while self governing, have constant reminders that they are still part of a wider society when something happens that forces the two worlds to collide.</p><p>There is always a balance of boundaries at play here, people generally know how far they can push something before it becomes too big to ignore.</p><p>This balance is often the difference between being left alone or having your doors kicked in.</p><h3>What type of freedom within a framework does your design system offer?</h3><p>Is your design system a balanced co-designed agreement that all parties enter into or is it a one sided controlling relationship?</p><p>Is your design system a set of laws that everyone is expected to follow without question? Will you police what people do and punish them when they don’t adhere to the rules they had no part in forming?</p><p>Does your organisation have other design systems popping up that follow a different philosophical approach to your central one?</p><p>These questions will help provoke a conversation you’re likely not having.</p><p>On the whole, what I see is a conflict. Design System teams believe they have a mutually agreed upon relationship with their consumers, while the consumers themselves can feel like they’ve been opted in to a new set of rules from their first day of employment.</p><p>If the consumers of the system feel that way, just like in society, there will be those that mostly follow the rules, those that intentionally break the rules and those that want to make their own rules.</p><p>While we work in a standards space, there is likely always going to be an element of <em>“this is the way we do things around here” </em>baked into your work, it’s kinda the point.</p><p>But what we must focus on is our conduct. To quote one of my favourite moments from the West Wing, Leo McGarry states:</p><p><em>“Now, we have laws, and they are difficult and they have to be enforced and it’s right that they’re enforced. But we do not strut…ever”</em></p><p>The essence of this quote hits deep. When we have to enforce design system standards we must do so without arrogance, without self-aggrandising. Simply, we must not make it about us.</p><p>Let’s all try and have more of a relationship where everyone involved knows what they’re signing up for. Have deeper conversations with consumers and most of all, stay humble and let the anarchy in every now and again.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1e9446f713fa" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Are your Figma Design System analytics high as a kite?]]></title>
            <link>https://iknowdavehouse.medium.com/are-your-figma-design-system-analytics-high-as-a-kite-c5b1440a112b?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/c5b1440a112b</guid>
            <category><![CDATA[figma]]></category>
            <category><![CDATA[design-systems]]></category>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Tue, 18 Mar 2025 09:15:38 GMT</pubDate>
            <atom:updated>2025-03-18T09:15:38.146Z</atom:updated>
            <content:encoded><![CDATA[<p>Figma recently released a very welcome update to analytics, you can now get analytics data for styles and variables.</p><p>I was pretty excited about this. Reporting on token usage – whatever your flavour, fills a big old gap in reporting this side of the system.</p><h3>Woah, we’re token millionaires</h3><p>I was pretty blown away by the numbers of inserts and instances of styles and variables. The numbers were much bigger than I thought they would be – at times in the millions, but hey, this is the first time I’m seeing this data. Maybe this is normal.</p><h3>Hang on</h3><p>I noticed one of our variable libraries had usage in the hundreds of thousands and used by about 80 teams. Great!</p><p>Well, this library isn’t published to anyone. The variables in this file are used to build components that are distributed, but the variables themselves aren’t.</p><h3>Dog with a bone</h3><p>This began a 3 week long investigation. When I say 3 weeks, 5 minutes a day for 3 weeks.</p><p>I can’t ever let this kinda stuff go, I have to find out.</p><p>I really do apologise to Figma support for my daily emails. I’ll buy you all a coffee one day.</p><h3>The question(s)</h3><p><em>How can a library that isn’t published be recording inserts?</em></p><p><em>Can we trust the variable and style numbers?</em></p><p>As there is no way consumers can use this library directly, it had to be through interacting with the components that use them.</p><h3>The process</h3><p>To test this I had to set up multiple new Figma teams. One to author a couple of components and a few variables and a couple of other usage teams, suffixed with the date of the test.</p><p>I named everything in a way that would be easy to isolate.</p><p>Component A uses variables suffixed with “a” and not surprisingly Component B uses variables suffixed with “b”.</p><p>In the usage teams I inserted each component and ran a few tests.</p><p>For example, In one team I duplicated each component 3 times. In another I duplicated the components and detached a variable, clicked a variable, typed 99 bottles of beer into a variable. Any combination you can think of I tested it.</p><p>Because analytics only refreshes every day, any action I took I had to wait until the next morning to see the results…</p><p><em>It turns out variable analytics seemingly takes 3 days to come through when components are 1 day. This meant I ruined my first 3 days of tests and had to start over.</em></p><p>In the background I was still speaking to support and Figma experts to get some thoughts and insights.</p><h3>The theories to disprove</h3><p>For the last round of testing I decided to predict the results. I recorded the exact actions I made to Component A and Component B so given a few scenarios I could predict exactly what the analytics would read 3 days later. Sure enough, one of the predictions was bang on.</p><h3>The results</h3><p>So the answer to all of this is about what I am calling <em>passive </em>inserts. I called them that because the consumer doesn’t know they’ve inserted them. It’s simply happened <em>to</em> them.</p><p>This is of course the opposite to an <em>active</em> insert – where a consumer has inserted a variable by choice.</p><p>Drum roll please…</p><p>If a component that contains variables is detached, each variable that’s used counts as an insert, <em>every</em> time it’s duplicated.</p><p>Is that all I hear you ask? Well think about how many variables a component might contain? 8, 16, 24, 48?</p><p>Even if you have low detach rates these numbers can sky rocket.</p><p>If a single component that has 24 variables is detached and duplicated just 5 times (maybe deployment screens at 5 breakpoints) then that’s 120 inserts just from one basic component.</p><p>I have estimated this is causing hundreds of thousands of <em>passive</em> inserts across libraries, even if the detach data is below 1%.</p><p>So in answer to my other question – <em>Can we trust the variable and style numbers?</em> The answer is no, not really, not yet.</p><p>The problem is a <em>passive</em> inserts are not an insert, it cannot count towards a story of positive usage because it’s coming from the negative action of detaching.</p><p>It makes total sense that these variables would be captured by instances, they become real instances in use at the point of detaching. They were just never inserted.</p><h3>Capturing the data</h3><p>For now, we’re capturing all of the raw data anyway. But we have decided to report on only 5% of variable and style usage.</p><p>Unless we can determine <em>active</em> inserts from <em>passive</em> inserts then I would be worried about presenting insert numbers to anyone.</p><p>What has been fantastic is to see the instances data. This is going to be a really useful set of insights to have.</p><p>If we want to change that text colour, it’s good to know it’s currently in use in over a million places!</p><p>I’m hoping that we’ll be able to differentiate this usage in the future and make variable and style numbers a bigger part of our design system reporting.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c5b1440a112b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Definition layers within semantic tokens]]></title>
            <link>https://iknowdavehouse.medium.com/definition-layers-within-semantic-tokens-e3194af91e21?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/e3194af91e21</guid>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Thu, 06 Feb 2025 10:40:40 GMT</pubDate>
            <atom:updated>2025-02-06T10:40:40.027Z</atom:updated>
            <content:encoded><![CDATA[<h4>We can describe objects in different levels of detail, can we apply this thinking to design tokens?</h4><p>The design system community get really amped up when discussing tokens. Sometimes it feels like questioning someone’s token structure is like questioning their entire belief system.</p><p>I get it, someone once (<em>potentially correctly</em>) criticised my overuse of <em>“default”</em> and our relationship hasn’t been the same since.</p><p>Have a nice life Alan.</p><p>There’s loads of blogs, threads or posts that suggest reducing the amount of tokens you have as the ultimate goal.</p><p>Other articles demand you have enough tokens to retain granular control of everything you’re ever going to need to potentially change, seemingly until the end of time.</p><p>Well, I think there is space for both, even in the the same system.</p><h3>Layers of definition</h3><p>Semantic tokens, put simply, are assigning meaning to a value. A semantic token is describing what it’s used for, not what the value is.</p><p>But any description can be generic or specific.</p><p>If I ask someone to describe an object on the shelf in my room they may say <em>“a brown book”</em>.</p><p>If I ask someone to describe the book they would say <em>“it’s an old copy of Brave New World by Aldous Huxley”</em>.</p><p>If I ask a vintage book store to look at it they may say <em>“it’s a first US edition of Brave New World by Aldous Huxley with significant wear and discolouration to the spine”</em>.</p><p>How much specificity there is in a description depends on both:</p><ul><li>the level of expertise someone has</li><li>how much the object needs to be described in context</li></ul><p>If I paint a picture of my room, the book becomes part of a larger context. The only information I need about this object is that it’s <em>“a brown book”</em>.</p><p>If I paint a picture with the book as the central subject, then I really do need to get into every specific detail.</p><h3>How does that apply to tokens?</h3><p>I think a lot of us that work in this space try and retain a single level of magnification when structuring tokens. Loosely speaking, things like text, border, icons will have a similar amount of tokens in them and they’ll follow the same conventions.</p><p>What if our semantic token layer was more like a vari-focal lens?</p><p>What if we can mix the ultra specific with the ultra generic?</p><h4>Action tokens</h4><p>The system I currently work on has a semantic action palette which has almost component level fidelity.</p><p>By that I mean we have specified a token for every element of an action <em>(background, border, foreground, focus-ring etc)</em> in every state <em>(default, hover, pressed, focus, focus-visible, disabled)</em>.</p><p>If one brand needs to change the border of a secondary button focus state, no problem — we’ve got a token for that. 140 of them actually — half of you just fainted, the other half said <em>“only 140?”.</em></p><p>These action tokens feed the obvious components, like all variants of Buttons and Links. On top of that they style the interactive parts of Accordions, Tabs, Tooltips etc too. Pretty much anything that uses an html button or &lt;a&gt; under the hood. It’s more efficient than component level tokens for us.</p><p>Where this approach falls down is when someone just wants <em>“the damn action colour”</em>.</p><p>In Figma, because you can’t use a link component inline, or assign colour to a text style, a consuming designer has to find the very specific token that styles the default link, in order to simulate a link within content. In our case this is color-action-foreground-tertiary-default.</p><p>Shut up about <em>default</em> Alan.</p><p>We know this is annoying and encourages people to just use the colour picker in a fit of rage.</p><p>In other systems I’ve seen a contrasting approach. Actions described in an ultra generic, much simpler way like color-background-actionor color-text-actionwhich can be used all over the place.</p><p>This approach is useful for user comprehension — they are just much easier to find and understand. On top of that, they can reduce the repetition of assigning the same value to multiple states or elements.</p><p>For example if your backgrounds and borders, default, hover, active, focus states all use the same colour it can be tedious to create a handful of tokens where one could be used.</p><p>However, to me these tokens have the semantic emphasis in the wrong place. The primary semantic importance is action, not text or background. We’re not applying action semantics to text, we’re styling the foreground or background of a semantic element like a &lt;button&gt; or &lt;a&gt; .</p><p>I find this approach also leads to components containing a mix of semantic tokens categories that don’t effectively describe how to assemble the UI.</p><p>How often have you seen something like this? Where the action text colour can’t actually be combined with the action background colour and another token has to be used in place:</p><pre>.button {<br>  background-color: var(--color-background-action);<br>  color: var(--color-text-inverse);<br>}</pre><h3>Can we have it all?</h3><p>Because we already have the detailed usage tokens I wanted to get some of the benefit of the generic approach too.</p><p>Perhaps to help build components in one brand that defy the rules applied to all the others, perhaps to just aid fast and loose choices in unstructured design phases or even to just have a token that indeed was <em>“the damn action colour”.</em></p><p>I’ve tried a couple of different routes.</p><h4>Global layer</h4><p>We have a global layer of tokens, well it’s so global it lives just outside the central system as it’s own thing. Perhaps we should call it it the Stratospheric layer… anyway, the tokens recorded in this layer are the absolutely undeniable sources of truth for <strong>any</strong> consuming library.</p><p>This layer does not go into any level of detail or specificity. It contains the pre-system named brand colours and fundamental UI decisions that would be true of <strong>any</strong> platform. These may include colour of default text and the colour of the default action. It would never include states, because states are a platform level concern.</p><p>To serve our needs we could simply expose color_action token at the highest level to feed both our default (ALAN!) action states and be available to serve the needs of some custom elements directly.</p><h4>Generic layer</h4><p>This approach is much like the global layer but the token is treated as both a sibling and a parent of the specific action tokens within the same library.</p><p>This might be useful if you have some extra needs for action colours, for example two colours of link that are platform specific — one an accent colour and one say, the colour of body text.</p><p>Here I’ve created some generic use action tokens before we get into the detailed ones. No doubt some of you are thinking this is just standard practice for us, but these types of tokens are often for internal use only, and not actually exposed to consumers.</p><pre>{<br>   &quot;color&quot;:{<br>      &quot;action&quot;:{<br>         ==== GENERIC LAYER ====<br>         &quot;accent&quot;:&quot;value&quot;,<br>         &quot;subdued&quot;:&quot;value&quot;,<br>         <br>         ==== SPECIFIC LAYER ===<br>         &quot;background&quot;:{<br>            &quot;primary&quot;:{<br>               &quot;default&quot;:&quot;{color.action.accent}&quot;,<br>               &quot;hover&quot;:&quot;value&quot;,<br>               &quot;focus&quot;:&quot;value&quot;,<br>               &quot;pressed&quot;:&quot;value&quot;,<br>               &quot;disabled&quot;:&quot;value&quot;<br>            },<br>            &quot;secondary&quot;:{<br>               &quot;default&quot;:&quot;value&quot;,<br>               &quot;hover&quot;:&quot;value&quot;,<br>               &quot;focus&quot;:&quot;value&quot;,<br>               &quot;pressed&quot;:&quot;value&quot;,<br>               &quot;disabled&quot;:&quot;value&quot;<br>            },<br>            &quot;tertiary&quot;:{<br>               &quot;default&quot;:&quot;value&quot;,<br>               &quot;hover&quot;:&quot;value&quot;,<br>               &quot;focus&quot;:&quot;value&quot;,<br>               &quot;pressed&quot;:&quot;value&quot;,<br>               &quot;disabled&quot;:&quot;value&quot;<br>            }<br>         },<br>         &quot;border&quot;:{<br>            &quot;primary&quot;:{<br>               &quot;default&quot;:&quot;{color.action.accent}&quot;,<br>               &quot;hover&quot;:&quot;value&quot;,<br>               &quot;focus&quot;:&quot;value&quot;,<br>               &quot;pressed&quot;:&quot;value&quot;,<br>               &quot;disabled&quot;:&quot;value&quot;<br>            }<br> etc etc etc etc<br>         }<br>      }<br>   }<br>}</pre><p>Both of these approaches give us and our consumers a generic or specific token to use when needed. But what about the other benefit, when most of the states have the same value?</p><h4>Common suffix</h4><p>When most of the states have the same value it can feel tedious and unnecessary to include them all.</p><p>Hey we’ve all used “default” <em>— Alan for the last time…</em> for more than just the default state before right?</p><pre>.button, .button:hover, .button:focus {<br>  background-color: var(--action-background-primary-default);<br>}</pre><p>Well it’s just a bit of a lie isn’t it? Token people hate lies!</p><p>Just because they use the same value doesn’t mean they should all use the default token, default means default state not any state I want to look like default. I’m getting tired of this Alan.</p><p>But the intent here is valid, it removes duplicate CSS declarations that aren’t necessary to produce the same output.</p><p>While this adds even more tokens I’ve toyed with specifying some state tokens with an additional common suffix. It could be used as an alias for the other relevant states — or not.</p><p>For example:</p><pre>{<br>   &quot;color&quot;:{<br>      &quot;action&quot;:{<br>         &quot;background&quot;:{<br>            &quot;primary&quot;:{<br>               &quot;common&quot;:&quot;value&quot;,<br>               &quot;default&quot;:&quot;{color.action.background.primary.common}&quot;,<br>               &quot;hover&quot;:&quot;{color.action.background.primary.common}&quot;,<br>               &quot;focus&quot;:&quot;{color.action.background.primary.common}&quot;,<br>               &quot;pressed&quot;:&quot;{color.action.background.primary.common}&quot;,<br>               &quot;disabled&quot;:&quot;value&quot;<br>            }<br>         }<br>      }<br>   }<br>}</pre><pre>.button, .button:hover, .button:focus {<br>  background-color: var(--action-background-primary-common);<br>}</pre><p>While it does add yet another token, it allows the consuming CSS or indeed Figma design to just use one value and just not lie about it. There can be no confusion if someone meant to use default for all states or they just forgot.</p><p>If it works, maybe we may consider excluding the specific tokens from the build for certain things. If you need to have the granular access later down the line, then the token structure already exist to make those kind of changes immediately.</p><h3>What next</h3><p>Remember the goal here was to consider side by side optional levels of specificity like a vari-focal lens.</p><p>Sure, someone may use a more generic token incorrectly because they are not a token expert. But it’s better than using a colour picker or source value.</p><p>Someone may use a generic token because they are effectively painting a picture of the room, the element doesn’t require that level of specificity for their use case.</p><p>Well, what I actually expect next is about 10,000 comments on this article.</p><p>Token people like commenting.</p><p>I have only blocked Alan.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e3194af91e21" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Design System Dream Team]]></title>
            <link>https://iknowdavehouse.medium.com/the-design-system-dream-team-ebf169b97149?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/ebf169b97149</guid>
            <category><![CDATA[design-systems]]></category>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Sat, 01 Feb 2025 09:12:08 GMT</pubDate>
            <atom:updated>2025-02-01T09:13:23.051Z</atom:updated>
            <content:encoded><![CDATA[<p>Working on a design system can feel like you’re jumping between multiple products continuously. Switching contexts between theoretical, practical, micro and macro, many times in the same day. You can be working on a token naming conventions, org wide design governance models, answering support requests and triaging screen reader bugs all before lunch.</p><p>To me, it‘s felt like everyone is juggling 3 different full time roles, but deprioritising two thirds of the work. Our backlogs are full of essential things we know we’ll never get to.</p><p>You could argue this is true of any product or service but with Design Systems and their multiple, competing stakeholders, it feels like there is a minimum expected output that is always significantly greater than the capacity of the team.</p><p>While this is partly due to a misunderstanding of the work, I believe this is primarily due to people, stakeholders, users or otherwise placing higher importance on the parts of the system that will help them or their area the most. Designers aren’t too fussed about minimising breaking changes. The last thing the Development Lead wants to hear about is a UI refresh. You end up in a unique position where almost everyone thinks you’re not doing enough.</p><h3>What would a team that could be enough look like?</h3><p>Rather than thinking about what a team make up might be in terms of traditional job titles, I was wondering what it would look like if you designed a team around the activities that could benefit from full time attention.</p><p>This idea breaks the Design System team up into 4 smaller squads and some cross cutting roles.</p><ul><li><strong>Delivery squad</strong></li><li><strong>Documentation squad</strong></li><li><strong>Discovery squad</strong></li><li><strong>Community squad</strong></li><li><strong>Cross-cutting roles</strong></li></ul><figure><img alt="An example of breaking up a design system team into activity based squads such as Delivery, Discovery, Documentation and Community." src="https://cdn-images-1.medium.com/max/1024/1*n0HZ8w_vvuu3AzGti5qzrg.png" /><figcaption>An example of breaking up a design system team into activity based squads</figcaption></figure><h3>Delivery squad</h3><p>This squad is responsible for the delivery and maintenance of the “live” system. This squad contains 4 roles:</p><ul><li><strong>Library maintainer</strong><em> (UI Designer)</em></li><li><strong>Library maintainer</strong> <em>(Frontend Developer)</em></li><li><strong>Token design and management</strong><em> (UI Designer)</em></li><li><strong>Token design and management</strong><em> (Frontend Developer)</em></li></ul><p>The library maintainers are responsible for:</p><ul><li>Continuous improvement of the performance and features of the design system</li><li>Investigate and implement new technical solutions. For example, how we might use new features of tooling</li><li>Manage and fix bugs</li></ul><p>The token design and management roles are responsible for:</p><ul><li>Tokenisation of design, structure and naming conventions</li><li>Management and distribution of tokens</li><li>Management of token tooling across platforms</li></ul><p>The delivery team are collectively responsible for:</p><ul><li>Multi-brand implementations of components</li><li>Quality assurance</li><li>Release process management</li><li>Versioning and breaking change support</li></ul><p>This team is technical, it’s less concerned about the “why” of the system and more about the quality and efficiency of the output.</p><p>It may seem like a stretch to consider Tokens or Library Maintenance to be a full time job but ask yourself, how much time do you spend on it now? What does it stop you doing? What does not having someone working on this specifically mean for the overall health of your system?</p><h3>Documentation squad</h3><p>Small but essential, the docs squad maintain the front door to the system and ensure users of the system can find what they need.</p><p>This squad contains 2 roles:</p><ul><li><strong>Documentation writer</strong> <em>(Content designer / Tech writer)</em></li><li><strong>Documentation developer</strong> <em>(Frontend Developer)</em></li></ul><p>The documentation writer is responsible for:</p><ul><li>Usage and technical guidance for the documentation website</li><li>README content in repos</li><li>Content governance, for example A-Z of terms</li></ul><p>The documentation developer’s activities may include:</p><ul><li>Maintenance of the documentation website</li><li>Creating and managing technical examples</li><li>Management of design system hosting requirements</li></ul><p>Collectively they will also make continuous improvements to guidance through active research and feedback from the design system users.</p><h3>Discovery squad</h3><p>The discovery squad is made up of 3 roles:</p><ul><li><strong>Component and Pattern Design</strong> <em>(Interaction Designer)</em></li><li><strong>Component and Pattern Design</strong> <em>(Content Designer)</em></li><li><strong>Component and Pattern Design</strong> <em>(Frontend Developer)</em></li></ul><p>The discovery squad will focus on activities like:</p><ul><li>Creation of new components and patterns in a single brand</li><li>Scope, name and API of components</li><li>Working with contributors of new components and patterns</li><li>Auditing existing component usage and documenting needs</li><li>Creating component blueprints</li><li>Creating prototypes and templates</li><li>Testing and Research</li></ul><p>The discovery squad is less concerned about the delivery side of the system and more focused on the how and why of the contents. Should something exist? What should it do? What stance do we have on this?</p><h3>Community squad</h3><p>The community squad is more of a group of individual roles rather than people that work directly together. It includes:</p><ul><li><strong>Community Manager</strong></li><li><strong>Service Designer</strong></li><li><strong>Service Support</strong></li></ul><p>The Community Manager will spend their time:</p><ul><li>Being the point of contact for teams</li><li>Looking out for adoption opportunities</li><li>Actively looking for contribution candidates</li><li>Recording community requests and feedback</li><li>Fostering active community channels and spaces</li><li>Organising events</li><li>Running drop in sessions and workshops</li></ul><p>The Service Designer will aim to:</p><ul><li>Understand and record the multiple ways the organisation delivers products</li><li>Understand blockers to adoption</li><li>Design governance flows and processes</li><li>Define component and pattern lifecycle and statuses</li><li>Define the Design System eco-system and boundaries</li></ul><p>Service Support will have one of the most important roles in the team:</p><ul><li>Answering and directing support queries</li><li>Helping users get up and running</li><li>Giving design and development advice</li><li>Creating bug tickets</li><li>Recording user feature requests and enhancements</li></ul><h3>Cross cutting roles</h3><p>On top of the specific sub-squads there are some roles that need to either be across everything, or will not need to be full time in one sub-squad.</p><ul><li>Design System Lead(s) <em>(Product Manager / Design Lead / Head of)</em></li><li>Delivery Manager <em>(Scrum master etc)</em></li><li>Brand &amp; Design Language Expert <em>(Graphic / Digital Brand Designer)</em></li><li>Accessibility Expert <em>(A11y focused hybrid design / developer)</em></li><li>User and Customer Research <em>(User Researcher)</em></li></ul><p>The Design System Lead will:</p><ul><li>Set the overall vision for the Design System</li><li>Define high level priorities and initiatives</li><li>Create and balance the team roadmap</li><li>Be the primary point of contact for the business</li><li>Provide guidance and mentorship to the team</li></ul><p>The Delivery manager will:</p><ul><li>Run team ceremonies</li><li>Manage team workflow and output</li><li>Assist with organisational blockers</li><li>Keep an eye on team health and availability</li></ul><p>The Brand &amp; Design Language expert activities will include:</p><ul><li>Being the liaison with brand team</li><li>Develop the Digital Design Language for each brand. This will be zoomed out, no component design.</li><li>Define core system styles (Colour, Typography, Layout etc)</li><li>Asset creation, management and distribution</li><li>Creation of Digital brand guidelines (wider scope than the Design System)</li></ul><p>The Accessibility SME will work with all members of the team on:</p><ul><li>Creation of new Components &amp; Patterns</li><li>Bug triage and fixes</li><li>Quality assurance</li><li>Create A11y acceptance criteria and testing requirements for team activity</li><li>Liaise with internal users on Accessibility issues relating to the Design System</li></ul><h3>The Design System Reality Team</h3><p>It’s unlikely your team will have headcount for 17 roles. That’s why this is a dream team, not a reality team.</p><p>While some of the more well known systems that many of us may aspire to have 25+ people working on them, I believe the average is more like 3–5.</p><p>From my experience, I have come to the conclusion that any Design System team, whether it’s 3 people or 30 is expected to deliver everything I have described above and more. While some areas of focus may be seen as a one time thing, much of this work is actually continuous.</p><p>Of course, each organisation will be different and each stage the system goes through will be different:</p><p>You may not need 2 people working specifically on tokens if you only manage 1 brand and 1 platform, but 5 brands and 3 platforms?</p><p>You may not need to separate groups of people creating new things vs maintaining the existing. However, why do so many teams struggle to go back and improve existing components, keep the libraries and guidance up to date, successfully add new things and shepherd contributions through? Usually the most immediate concern wins — and that is often dealing with bugs.</p><p>Of course, you don’t need 15–20 people to have a design system team. If you have 3 people, maybe your focus should be 100% on maintaining a core UI kit and nothing else. If you have 6 people, maybe you can take on your own custom guidance website or accept a couple of external contributions every quarter.</p><p>But consider all of the activities thast could be full time roles and be realistic about what you can and can’t achieve with the team you have. When we try and do it all, we spread ourselves so thin that the work we do, however brilliant, goes largely unnoticed.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ebf169b97149" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Creating Personal Design Principles]]></title>
            <link>https://iknowdavehouse.medium.com/creating-personal-design-principles-4778d7728110?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/4778d7728110</guid>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Fri, 24 Jan 2025 15:47:06 GMT</pubDate>
            <atom:updated>2025-01-24T18:36:12.483Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s a challenging moment in tech to say the least. One minute you might be in an organisation that you believe shares your values (or at least doesn’t fundamentally conflict with them), the next, it could have changed overnight.</p><p>The recent behaviour of the billionaire boys club to fall in line with the orange one, creating an immediate end to dedicated DEI and Accessibility work in both the US government and a growing list of big tech has created a new line in the sand.</p><p>Design Principles are not a new thing, a lot of organisations have them. When done right, they really do help guide people to make good decisions.</p><p>One thing I decided to do this week was to take a moment to record what I stand for and how I approach the work I do.</p><p>I’m going to use these as a way of explaining who I am as a designer and what drives me to make the decisions I do.</p><p>I hope to use my own Design Principles to compare against organisations I interact with, understand where they align and where they don’t.</p><p>My Design Principles are:</p><ul><li>Don’t waste peoples time</li><li>Don’t leave people out</li><li>Content first, always</li><li>Know the cost of growth</li><li>Be the voice of the user</li></ul><p>What are yours?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4778d7728110" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Two design system mental models that bump heads.]]></title>
            <link>https://iknowdavehouse.medium.com/two-design-system-mental-models-that-bump-heads-7450c282412c?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/7450c282412c</guid>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Sat, 18 Jan 2025 14:05:20 GMT</pubDate>
            <atom:updated>2025-01-19T08:52:01.924Z</atom:updated>
            <content:encoded><![CDATA[<p>This is something that pops up so frequently you may not have actually noticed it.</p><p>I’m talking about two ways of thinking about design systems that can create entirely different ways of working, standards, practices and lead to different outcomes.</p><p>I’ve had these ideas simmering for long enough that I have reduced this idea to two fundamental directions:</p><p>A) <strong>Help lots of teams make <em>one</em> cohesive thing</strong></p><p>B) <strong>Help lots of teams make multiple things <em>appear as one</em> cohesive thing</strong></p><p>I know what you’re thinking…</p><figure><img alt="A meme from “The Office” with the caption “they’re the same picture”" src="https://cdn-images-1.medium.com/max/540/1*QmwDnG1aZLFsmmp4xd4HFg.jpeg" /></figure><h3>Help lots of teams make one cohesive thing</h3><p>This model supports a product or “<em>the</em> codebase” (singular).</p><p>This could be a native app, small company or start up with one (or single digit) primary target output.</p><p>This type of system is about working in the same way and using the same source material when making decisions. Everyone has access to everything. It’s a tighter, more controlled environment.</p><p>The system will be have a high coverage representation of the product and may even include things like un-templated “screens” or “pages”.</p><p>Contribution and changes will be easier because everyone can see the entire landscape of the product from within the system and decisions can be made quickly.</p><p>Versioning may have a tighter relationship with the product roadmap. For example, Design System v.2.0.0 might be paired with a particular release of an application, almost like apple having a new UI kit every time iOS updates.</p><p>This model will undoubtedly give you the most cohesive and visually aligned experience, but in part that it is because it is <em>already</em> one thing.</p><p>This type of system is usually design-led or has a design only deliverable because <em>“the codebase”</em> is the product itself.</p><p>Because of the needs of this type of model to have high coverage, there is usually a mixture of high and low quality solutions documented that may not scale well outside the target they are originally made for.</p><h3>Help lots of teams make multiple things <em>appear as one</em> cohesive thing</h3><p>This model supports an organisation with multiple disconnected applications.</p><p>The primary intent of this model is to help the wider ecosystem create the illusion of one experience for a user or customer. The chances are, if you work for a big company or organisation with lots of different offerings this will be one of the main objectives of the design system.</p><p>The system will likely have lower coverage of components with a higher emphasis on foundational product agnostic content. It will have more guidance on how to create common components, patterns and content the right way and a more modular or abstracted approach to component scope and properties.</p><p>It’s likely to have a greater return on investment because it has a greater number of potential consumers.</p><p>Contribution will be harder and stricter, because the design system will have limited visibility of the complete product landscape. Each contribution will need to go through vital rounds of research and testing before it can be raised up to potentially replace what been used by tens, hundreds or thousands of separate applications.</p><p>Versioning may have no direct relationship to the product roadmap at all, just a relationship to itself. The design system and product may only sync up versions for a new “era” of system — something like an inevitable rebrand (see the excellent <a href="https://measured.co/blog/scotts-law-of-rebrands">Scott’s law of rebrands</a>).</p><p>This type of system will have have a greater emphasis on the developer output — such as a <em>insert-languge-here</em> package. In this model, “the codebase” is the design system that gets consumed and becomes a dependency of product applications. The design deliverable in this case is to make sure the developer package is well represented in design tooling.</p><p>This model will have a high emphasis on backwards compatibility because at any one time products could be consuming any version of the design system ever released.</p><p>What might be surprising to some, the main product may not always need to directly consume (or need — shock I know) a design system. As mentioned at the start, this type of design system’s entire reason for existing could be for making the wider ecosystem feel like the main product. This allows the main product to change and adapt as needed and the design system’s job is to roll the relevant changes out to everyone else.</p><p>A great example of this was the GOV.UK Design System. When I was at GDS (quite a while ago now — I imagine things have changed a bit), the initial intent of the design system was not to create a design system for the GOV.UK website. It was to create a design system for the hundreds or thousands of product teams in multiple agencies make services that looked and behaved like GOV.UK. To give users a unified experience across an incredibly wide ecosystem.</p><p>This is just an attempt to recognise the reason both of these models exist.</p><p>When people say things about <em>“aligning with code”</em> ask yourself <em>“what code?” — </em>If it’s the product code, that’s entirely different from the code in a design system created package.</p><p>When people talk about “<em>coverage”</em>, coverage of what? Sure a product based system could and should have 80–100% coverage. But a central system used by hundreds of apps may intentionally not actually want or need to cover more than 30% of what’s out there.</p><p>Have a clear picture of what you’re making the system for and recognise how different approaches and ultimately create different outputs.</p><h3>Dog fooding</h3><p>As your organisation matures the scope of your design system may change. When you start to use a design system intended for the eco system on your main product, or try and roll out your product system to everyone else these concepts will indeed, bump heads.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7450c282412c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Behavioural consistency is the bigger win for design systems]]></title>
            <link>https://iknowdavehouse.medium.com/behavioural-consistency-is-the-bigger-win-for-design-systems-9cfc4ca3e7f8?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/9cfc4ca3e7f8</guid>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Wed, 04 Dec 2024 09:44:25 GMT</pubDate>
            <atom:updated>2024-12-04T09:44:25.353Z</atom:updated>
            <content:encoded><![CDATA[<p>I often get met with confused frustration when I say this in a room of designers, but I believe the absolute biggest win for design system consistency is behavioural, not visual. It’s where we offer the most value to customers.</p><p>When I say behavioural, I am bundling a few things together.</p><p>On a component level:</p><ul><li>Semantic structure</li><li>Technical UI implementation</li><li>Accessibility</li><li>Hierarchical variations</li></ul><p>On a system wide level:</p><ul><li>Approach to form validation and error handling</li><li>Focus handling</li><li>Patterns for common interactions</li></ul><p>You get the gist. Anything that affects how an end user interacts with the thing.</p><h3>Oh Buttons, not more buttons</h3><p>Looking at these Buttons, with the source Design System button on the left which one do you think Is following the Design System more closely A or B?</p><figure><img alt="3 buttons. The first is a bright blue button with slightly rounded corners. The second which is labelled A is dark blue, with fully rounded corners and a lighter font weight. The third labelled B looks exactly like the first Button." src="https://cdn-images-1.medium.com/max/1024/1*KIIzbuhGmR2SZmwy1H31vA.png" /><figcaption>What’s closer to the Design System A or B?</figcaption></figure><p>Of course it’s a trick question, I’ve given you no indication of anything but visual but you know I’m going to choose A right? Otherwise why am I writing this blog?</p><p>Let me give you a little more non-visual information.</p><h4><strong>Button A — Behind the curtain</strong></h4><ul><li>Uses the correct html &lt;button&gt;element</li><li>Has a border — <em>yep your button should have a border even if it’s the same colour as the background</em></li><li>Has a focus state with over 3:1 contrast</li><li>Has the same hierarchical emphasis as the source button</li><li>Doesn’t meet the visual design language</li></ul><h4>Button B — Behind the curtain</h4><ul><li>Is a f’in &lt;div&gt; mate</li><li>Has no border — <em>It’s solid, why does it need a border?</em></li><li>Has removed the “ugly focus ring” with outline: none;</li><li>Looks the same as the design system — what a win!</li></ul><h3>The effect on real people</h3><p>The effect on customers or end users of these two buttons is dramatic, one is usable but looks off brand. The other looks right but is a pile of steaming poo and a genuine blocker for a lot of people to use.</p><p>It’s literally no competition.</p><h3>Changing perceptions of being “on brand”</h3><p>Still, on the brink of 2025 “using the design system” is synonymous with <em>just</em> making something look on brand. In many organisations when they can’t use the full system (both in design and code — hey it happens, even if you’re in a technical monoculture hellscape) you still hear about “using the design system to skin this UI” or “We’ll update the CSS to match the guidelines”.</p><p>Well guess what, the Design System is the structure, the Design System is the behaviour. The Design System is the guidance. That’s like, the main thing we do.</p><p>I don’t know about you, but I’d prefer someone “used the code only” or “used the design system to change the underlying structure of the experience” than simply camouflage bad implementations with visually <em>almost</em> correct UI.</p><p>But of course, it is absolutely no debate that visual cohesion would be very nice too ;) — This of course goes without saying, despite the fact I just said it.</p><p>So much of Design System design is the stuff you do before any theming is applied.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9cfc4ca3e7f8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A mode too far.]]></title>
            <link>https://iknowdavehouse.medium.com/a-mode-too-far-28eaa822df65?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/28eaa822df65</guid>
            <category><![CDATA[figma]]></category>
            <category><![CDATA[design-systems]]></category>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Fri, 22 Nov 2024 09:29:09 GMT</pubDate>
            <atom:updated>2024-11-22T11:40:50.587Z</atom:updated>
            <content:encoded><![CDATA[<h3>A mode too far. Problems using Figma variable modes for multiple brands.</h3><p>Firstly, I really like Figma as a tool. I don’t need to explain the impact it’s had or how dominant it’s become. You already know that.</p><p>With the popularity, the expectations on Figma are absolutely huge, I do not envy them one bit.</p><p>I can’t speak for the jobbing product designer but from a Design System perspective, the role of producer and consumer feel like they have somewhat reversed lately. We used to see Figma drops and think about what possibilities they could open up for us. Now we are so often just waiting and hoping for what we see as essential features and fixes – we’re the ones at the back shouting for “more boring stuff please”. We have such high expectations of features we need, we are often left underwhelmed when they actually arrive.</p><p>The Design System team I work with test everything out. The days after a feature is released we jump into Figma and see what we can do with it — is it going to solve that problem we’ve had for the last year…or not?</p><p>While lots of teams run with everything straight away, and I do envy that a little bit, 80% of the time we choose to do nothing. Are we just stuck in our ways? Are we the luddites in this scenario? Am I the Gareth Southgate of Design System Library Management? Maybe, but more often than not it’s because the release we’ve been waiting for hasn’t materialised in the way we’d hoped.</p><p>Our Design System consumers require a certain amount of stability and predictability to be confident in us, we are not willing to risk this to use the latest features if we don’t believe they work how they should.</p><p>Figma variables were obviously the most highly desired feature of systems teams for such a long time that this expectation was absolutely through the roof. Arguably the variables solution we got works very well for people doing product design work, it is arguably not quite there for enterprise scale library maintenance.</p><p>While we’ve had quite a few issues with variables and modes (we use them but we still don’t directly publish them to consumers because of these concerns) the focus of this blog is why we haven’t used variable modes to create a single multi-brand library. I know it’s totally <em>possible</em>, but it is it actually practical?</p><h3>Overview</h3><p>The <strong>key areas</strong> of concern were:</p><ul><li>Design System change management process and quality assurance</li><li>The inability to control the release of NDA projects, such as acquisitions</li><li>The inability to work on and control the release of rebrands</li></ul><p>I’m going to focus on these key areas of concern, but the <strong>secondary</strong> concerns were:</p><ul><li>Scope of existing components may need to change to reduce performance issues of larger single brand libraries</li><li>Performance impact of multi-mode in prototypes</li><li>Complexity. The libraries are not just for visual designers or UI experts</li><li>All existing “evergreen” Figma projects would need to be rebuilt from scratch</li><li>Per-brand analytics reports are not possible</li><li>Some components (usually ones with branded assets) require multiple brand variants anyway</li></ul><h3>Design System Management</h3><p>Figma recommended a multi-library approach for different layers of a system. For example, creating separate libraries for:</p><ul><li>Variables</li><li>Assets</li><li>Styles</li><li>Components</li><li>Patterns</li></ul><p>Each library has a very specific remit, and each consuming library has a dependency on one or more of the libraries below it.</p><p>Simply put, a change to a foundational element such as a variable or style will need to cascade up through all consuming libraries.</p><p>It’s unclear if this is still the recommendation, but it would appear that having variables in their own file(s) is considered good practice.</p><h3>Staging a style change</h3><p>The only way to ensure we can roll out a style change in a stable fashion is to stage that change in the consuming libraries before it’s released.</p><p>This is good practice to ensure you don’t release a change that doesn’t work as expected or causes design system libraries to be out of sync with each other. Not to mention there’s sometimes actual changes that need to be made because of the style update that can’t be done in the gap between releasing libraries.</p><p>This QA process has proved to be essential. In the entire time our teams Figma Libraries have existed, we have not had a single issue reported regarding issues from library updates and we’re proud of that.</p><h3>The staging process</h3><p>How we manage this currently is based on the practical limitations of Figma and the relationship between related libraries. It is far from ideal but it works.</p><p>Staging a style change looks something like this:</p><ul><li>Make a change in Styles (Branch)</li><li>Duplicate the Styles (Branch) as a new file and publish to the team only</li><li>Swap library in Components (Branch) to the Styles (Branch) copy</li><li>Duplicate Components (Branch) with swapped library as a new file and publish to the team</li><li>Create Patterns (Branch) and swap library to the Components (Branch) and Style (Branch) copies</li></ul><p>Releasing that change looks like this:</p><ul><li>Merge Styles (Branch) into Styles (Main)</li><li>Release Styles (Main)</li><li>Swap library in Components (Branch) from copy to (Main) and accept changes</li><li>Merge Components (Branch) into Components (Main)</li><li>Release Components (Main)</li><li>Swap Patterns (Branch) back to Components (Main) and Styles (Main) and accept changes</li><li>Merge Patterns (Branch) into main</li><li>Delete Styles (Branch) copy and Components (Branch) copy</li></ul><p>Sounds fun huh? This is the “easy version”, in reality you need to loop over this many times.</p><p>If only there was a way to publish branches to team while keeping main public. Or the idea of grouping libraries as a dependent set that can all be staged for release together.</p><h3>Using variables in this staging process</h3><p>Variables, whether in (Branch) or a (New mode) cannot be tested in Styles (Main), Components (Main) or Patterns (Main) because:</p><ul><li>Figma does not allow you to swap variables</li><li>We are not confident in third party Swap Variables plugins after reviewing their documentation. We felt those we reviewed may be too dangerous to introduce into our libraries — after all libraries are major assets of design infrastructure in an organisation</li><li>Variables created in a new mode will be published to any user of the system — they can only be tested “in the open”</li><li>Variable modes cannot be independently published (e.g. Mode A to all, Mode B to team), wow that would probably solve everything!</li></ul><p>Simply put, we cannot have any confidence in how variable changes would affect consuming libraries because we cannot test any changes to variables before they are released to everyone. The first time we see them in components is after they’ve been published.</p><p>In our opinion, this approach cannot meet our internal standards for quality assurance of the system.</p><h3>The inability to control the release of NDA projects and brand changes</h3><p>Because of the practical limitations outlined above, all of the below would need to happen “in the open” and be available to anyone with access to the Figma libraries:</p><ul><li>Any rebrands or UI changes to existing brands</li><li>Any modes being created for unannounced acquisitions</li><li>Any additional modes (e.g. dark mode, high contrast, low contrast)</li></ul><p>We would not be able to release a new brand on a specific date or stop people within the organisation being aware of the rebrand as it’s happening.</p><p>This is not about being overly protective of the changes, this is about not releasing in-progress, confusing or contradictory work when it’s not ready to be consumed.</p><p>The only way to handle these changes in private would be to create an entire duplicate set of libraries. When they’re done we’d either ask all users to switch all of their files when it was ready or remake all the changes manually in the main file.</p><p>This has some serious practical challenges for users of the system. Historically, it’s only something we do for major brand changes and only for the individual brand that’s been changed. The solution for everything cannot be to make a new library.</p><p>Manually re-creating the changes in the main library after designing and testing in a duplicate set will always be prone to errors. The <em>actual</em> release candidate will have never been tested. It’s likely that fatigue, memory and pace will introduce issues in the released version that didn’t exist in the duplicate.</p><p>Because a single library approach covers all brands, a major change to any one brand will be a major change to every brand.</p><p>In summary, with a multi-library set, it is almost impossible to test out new variables before you release them. This is simply not good enough for us to be confident in the quality of the libraries that are being released.</p><p>Last week, Figma released what I thought would be a bit of a silver bullet for some of this, the ability to copy and paste variables between files. I’ve had this blog in my drafts for almost a year and I thought I was going to be able to delete parts of it. That release however does not solve this problem, hence why you’re reading this now. <strong>EDIT:</strong> This issue was resolved the same day as posting this. Yes!</p><p>I don’t want to pile on to Figma for stuff like this, I know that library maintainers are not actually their primary audience and they’ve got a lot of features to ship. Almost all of us work on or have worked on products where we know important features are not prioritised. It’s just the way digital products work.</p><p>But when you do become the only possible tool to use for this type of work in a large organisation, and that organisation depends on libraries, this link in the chain is incredibly important.</p><h3>So what about using modes for single brand libraries?</h3><p>Having modes for contextual and theme adjustments for one brand seems a lot less problematic.</p><p>Things like:</p><ul><li>Dark mode</li><li>Breakpoints</li><li>Alternate layout contexts</li><li>Regional or Language differences</li><li>Sub theme e.g. minor audience based modification of the brand</li></ul><p>When I think about what Figma released modes for, I think it was for this stuff.</p><p>While using and releasing modes still has all the practical workflow problems, working in a single brand library means there will be more privacy for rebrands and less impact for consumers of existing single brand libraries.</p><p>A change to one brand, is not a change to all. Nobody sees anything they shouldn’t see. Nobody uses anything before it’s ready to be used. It is still near impossible to quality assure the output — but there is simply a lot less at stake.</p><p>Maybe the idea of adding multi-brand into the mix was perhaps, a mode too far? Or is it simply that the tooling is just not quite ready for it?</p><h3>Acknowledgements</h3><p>I am painfully aware that Figma modes for multi-brand is a closer representation of theming in code.</p><p>Different organisation shapes and sizes will have a different view of what is or isn’t acceptable. For some, the positives may outweigh the negatives.</p><p>Using modes is no doubt quicker and less maintenance for a library team–The counter to that is that the burden should be on us, not our consumers.</p><p>I’m not suggesting modes won’t be the way to go for this in the future, I just don’t think it’s ready right now.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=28eaa822df65" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Documentation driven design]]></title>
            <link>https://iknowdavehouse.medium.com/documentation-driven-design-b5054ac0339f?source=rss-3b43b4930e3b------2</link>
            <guid isPermaLink="false">https://medium.com/p/b5054ac0339f</guid>
            <category><![CDATA[content-design]]></category>
            <category><![CDATA[design-systems]]></category>
            <category><![CDATA[documentation]]></category>
            <dc:creator><![CDATA[Dave House]]></dc:creator>
            <pubDate>Mon, 14 Oct 2024 16:08:25 GMT</pubDate>
            <atom:updated>2024-10-14T16:08:25.679Z</atom:updated>
            <content:encoded><![CDATA[<p>While at <a href="https://zeroheight.com/events/converge/home/">Converge ‘24</a> conference, <em>Designs Systems WTF</em> recorded a live episode of their podcast about AI.</p><p>Michelle and Luke discussed their changing views on AI creating documentation for Design System components.</p><p>During the recording, Luke mentioned that Scott Riley had changed their mind, or at least given them a crisis of confidence about using AI for this.</p><p>From memory, this was largely in recognition that the actual process of writing the documentation is in itself a useful act and a vital step in the process.</p><p>This rang true with me, the last component that made its way into the design system I work on used the documentation process to define the scope of the component, before we made it.</p><h4>Lightbulb moment</h4><p>I’ve worked with a lot of developers and test engineers over the years, my brain went ping, this is not a million miles away from the idea of Test Driven Development (TDD).</p><p>BrowserStack summarise TDD as “<em>a software development practice that focuses on creating unit test cases before developing the actual code</em>”.</p><p>This process has a lot of benefits, one of which being that the process of writing the tests actually helps define in more rigid terms what the code is supposed to do and helps highlight any gaps in the design early on.</p><p>The process has a secondary benefit, you don’t have all your tests to write at the end – a stage which is often missed by tight deadlines, sometimes even ignored.</p><h4>What’s that got to do with Design System docs Dave?</h4><p>The crossover with documentation in design systems now seems quite obvious.</p><p>You are likely already following a design approach that focuses on specs, scope and draft APIs before you put cursor to artboard.</p><p>Why not write the actual guidance before you start designing visually?</p><p>We could call this <strong>Documentation Driven Design (DDD)</strong>.</p><p>Writing your documentation first will help:</p><ul><li>Define the scope and intent of the thing you want to make</li><li>Expose multiple use cases and contexts you may not have considered otherwise</li><li>Work with all disciplines within the team on something before anyone starts making anything</li></ul><p>I believe the benefits of this approach will mean:</p><ul><li>Design and Development build to the long form guidance – meaning less chance for misalignment</li><li>The team is forced into the context of how they will explain the decisions they’re making to the consumers of the system</li><li>The guidance can be published or researched with before a design or coded component even exists. This gets valuable information out there sooner</li></ul><p>If we go back to the original topic of the use of AI in Design Systems perhaps DDD would actually be the ultimate prompt for generating useable designs that actually met your requirements.</p><p>While I’ve been encouraging this kind of process without really realising it, next time we create something new I might try formalising Documentation Driven Design.</p><p>How about you?</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b5054ac0339f" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>