<?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 Una Kravets on Medium]]></title>
        <description><![CDATA[Stories by Una Kravets on Medium]]></description>
        <link>https://medium.com/@unakravets?source=rss-a6dfab4de95e------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*4hBjT9Qhu1ggb2qf.jpeg</url>
            <title>Stories by Una Kravets on Medium</title>
            <link>https://medium.com/@unakravets?source=rss-a6dfab4de95e------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 00:33:09 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@unakravets/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[Using Material Density on the Web]]></title>
            <link>https://medium.com/google-design/using-material-density-on-the-web-59d85f1918f0?source=rss-a6dfab4de95e------2</link>
            <guid isPermaLink="false">https://medium.com/p/59d85f1918f0</guid>
            <category><![CDATA[css]]></category>
            <category><![CDATA[material-design]]></category>
            <category><![CDATA[front-end-development]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[design-systems]]></category>
            <dc:creator><![CDATA[Una Kravets]]></dc:creator>
            <pubDate>Thu, 16 Jan 2020 17:39:20 GMT</pubDate>
            <atom:updated>2020-01-16T17:39:20.058Z</atom:updated>
            <content:encoded><![CDATA[<p><em>A hands-on guide to applying default, comfortable, and compact density to your application</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*4rTV-qTSVkUtLez2" /></figure><p>A common issue for any front-end developer is layout and spacing. How dense should your user interface be? Can a design system really account for all the different layouts in a product? Material is here to help.</p><p>The latest update to our density guidelines includes <a href="https://material.io/design/layout/applying-density.html">a new systematic approach to applying density</a> and spacing in digital products. Now, you can change the spacing of your product to suit layouts for different use cases, such as data-heavy layouts vs. a layout with a single call-to-action.</p><blockquote>Just as you use Material Theming to systematically apply color, typography, and shape to your UI, now you can systematically apply density.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*e33eLeh1rk-XiQUY" /><figcaption>Various Material themes created by adjusting color, shape, and typography.</figcaption></figure><p>Global density changes affect the spacing between all elements at a macro level. However, you can also apply bespoke density values to any individual component.</p><p>Material Design’s density scale includes three levels of density: <strong>default, comfortable, </strong>and<strong> compact.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/0*ss-rW2xSaGb9KVMe" /><figcaption>A <a href="https://material-density.glitch.me/">demo of Material’s density scale</a> in action, created by engineer <a href="https://twitter.com/abhiomkar">Abhinay Omkar</a>.</figcaption></figure><h3>The Rules of Applying Density</h3><p>Compact density can be great in data-rich applications that need to display a lot of information in a small amount of space. For example, data tables or long forms may benefit from an increase in density. This would allow more information to be seen on the page, giving the user important relational context at any given time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*FIJV0X7NZzB1IQ6b" /><figcaption><a href="https://material.io/design/layout/applying-density.html#usage">https://material.io/design/layout/applying-density.html#usage</a></figcaption></figure><p>However, an increased density display may be less useful in layouts that involve focused tasks or small user inputs. For example, date pickers need ample space for the user to be able to accurately make a selection. High density spacing can also make alerts and messages difficult to notice and read.</p><p>An increase in density can also decrease the accessibility of your UI in some cases, so make sure you’re applying density in places where user feedback is not affected. This dense calendar UI is an example of how increasing density could make it harder to use an application.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*cuYCoFI1IaPEhGz6" /><figcaption>An example of where <strong>not</strong> to use a higher density display. The increased density makes it more difficult for users to interact with the dates in this calendar.</figcaption></figure><p>It’s important to keep accessibility in mind when you’re applying density to your UI. No matter the density, all touch targets should be at least `48px` in size.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*JR1qXaMII5tbrW-M" /><figcaption>Even though density can visually decrease, it’s important for touch targets to remain at least 48px in size.</figcaption></figure><p>For the buttons in dense layouts, we’ve applied external padding so that even when they appear smaller and condensed, they still have an accessible touch target size.</p><p>It’s important to maintain a good design equilibrium in dense layouts, so when increasing component density you should also <em>decrease</em> your layout or grid density. This means that the more dense your components become, the larger your margins and gutter widths should be. This helps keep your UI legible.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*S98ELUv1B1X-1oOi" /><figcaption>Increase horizontal spacing as you decrease vertical spacing.</figcaption></figure><h3>Using Density on the Web</h3><h4>The Density Scale</h4><p>Density is defined by a scale starting at 0 for default density. The scale moves to negative numbers (-1, -2, -3) as the space between components decreases, resulting in a higher density layout. Each increment also decreases the height of a component by 4px. But it does not affect the horizontal spacing within the component. For example, in an icon button, increasing the density will not make the icon appear closer to the text.</p><p>The height or size of a component is calculated with the following formula:</p><pre>$height: $mdc-button-height + $mdc-density-interval * $density-scale<br>/// @example 36px + 4px * (-3) =&gt; 24px</pre><h4>Let’s See Some Code</h4><p>When you update to the latest version of <a href="https://github.com/material-components/material-components-web">MDC</a> (4.0.0 or greater), density is included as mixins within the components. You can apply a density of `-3` (the most dense option) to a button by applying the following code:</p><p>In your terminal, install an MDC button via :</p><pre>npm install @material/button</pre><p>In your HTML, Add the following button markup:</p><pre>&lt;button class=”mdc-button”&gt;<br>  &lt;div class=”mdc-button__ripple”&gt;&lt;/div&gt;<br>  &lt;span class=”mdc-button__label”&gt;Button&lt;/span&gt;<br>&lt;/button&gt;</pre><blockquote>Note: this markup is different than the previous version of MDC (3.0.0)</blockquote><p>In your Sass file, Import the button mixins and apply the density as a mixin to your custom button:</p><pre>@import “@material/button/mdc-button”;<br>@import “@material/button/mixins”;<br></pre><pre>.my-button {<br>  // This is where you set your density value<br>  @include mdc-button-density(-3);<br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*79lmmVNNv8EG_BXGolgxhA.gif" /><figcaption>Various density values change the vertical spacing in the button component.</figcaption></figure><p>The following components currently provide density Sass mixins:</p><ul><li><a href="https://material.io/components/web/catalog/buttons/#sass-mixins">Button</a></li><li><a href="https://material.io/components/web/catalog/input-controls/checkboxes/#sass-mixins">Checkbox</a></li><li><a href="https://material.io/components/web/catalog/chips/#sass-mixins">Chip</a></li><li><a href="https://material.io/components/web/catalog/data-tables/#sass-mixins">Data Table</a></li><li><a href="https://material.io/components/web/catalog/buttons/icon-buttons/#sass-mixins">Icon Button</a></li><li><a href="https://material.io/components/web/catalog/lists/#sass-mixins">List</a></li><li><a href="https://material.io/components/web/catalog/input-controls/radio-buttons/#sass-mixins">Radio</a></li><li><a href="https://material.io/components/web/catalog/input-controls/switches/#sass-mixins">Switch</a></li><li><a href="https://material.io/components/web/catalog/tabs/tab-bar/#sass-mixins">Tab Bar</a></li><li><a href="https://material.io/components/web/catalog/input-controls/text-field/#sass-mixins">Text Field</a></li></ul><p>We recommend customizing density using the provided density mixins rather than arbitrarily applying component height.</p><p>That’s pretty much it! You can check out the <a href="https://material.io/design/layout/applying-density.html">updated design guidance</a> for more details, but applying the density scale is a breeze with the new MDC 4.0. If you added density to your application, leave a comment below. We’d love to see it.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=59d85f1918f0" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-design/using-material-density-on-the-web-59d85f1918f0">Using Material Density on the Web</a> was originally published in <a href="https://medium.com/google-design">Google Design</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 Use Material Data Tables on the Web]]></title>
            <link>https://medium.com/google-design/how-to-use-material-data-tables-on-the-web-b12e881119a4?source=rss-a6dfab4de95e------2</link>
            <guid isPermaLink="false">https://medium.com/p/b12e881119a4</guid>
            <category><![CDATA[tools]]></category>
            <category><![CDATA[material-design]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Una Kravets]]></dc:creator>
            <pubDate>Wed, 25 Sep 2019 16:17:56 GMT</pubDate>
            <atom:updated>2019-09-25T16:49:56.043Z</atom:updated>
            <content:encoded><![CDATA[<h4>Everything you’ll need, from the web code to best practices</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9ZgPQRqq9hisyHSqUXs3Sg.png" /></figure><p>You probably already know <a href="https://material.io/">Material Design </a>— Google’s open-source design system for quickly building beautiful interfaces. But you might not know that one of Material’s most popular use cases on the web is being the “front-end of the back-end.” Oodles of Material web apps are essentially admin panels, data displays, and tools for content manipulation. In fact, this use case is so prevalent that, according to a <a href="https://material-ui.com/blog/2019-developer-survey-results/#your-product">survey by Material-UI</a> (a 3rd party open-source React implementation of Material Design) 70% of respondents said they used that product to build admin panels and dashboards.</p><p>We recently revamped Material’s <a href="https://material.io/design/components/data-tables.html">data table</a> component (<a href="https://medium.com/google-design/information-on-display-new-features-and-more-accessible-data-tables-8d4025ddcb57">read about the updates from designer Karen Ng</a>) and released the <a href="https://material.io/develop/web/components/data-tables/">web code and documentation</a> for quickly integrating this component into your own web product. Now, you can easily and instantly (after installing the component) leverage and theme data tables with some default behaviors, such as row selection, utilizing Material’s animation and design system. Here’s how:</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fmaterial-data-table%3FpreviewSize%3D100%26attributionHidden%3Dfalse%26%26previewFirst%3Dfalse%26sidebarCollapsed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fmaterial-data-table&amp;image=https%3A%2F%2Fglitch.com%2Fedit%2Fimages%2Flogos%2Fglitch%2Fsocial-card%402x.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=glitch" width="600" height="600" frameborder="0" scrolling="no"><a href="https://medium.com/media/13a4de63bbfa25d54f14fd18eec53cc3/href">https://medium.com/media/13a4de63bbfa25d54f14fd18eec53cc3/href</a></iframe><p>To get yourself a data table, you only need the following three steps:</p><ol><li>In a terminal:</li></ol><pre>// Install checkbox styles for the row selection variant<br>npm install @material/checkbox</pre><pre>// Install data table styles<br>npm install @material/data-table</pre><p>2. In your Sass file:</p><pre>// Import checkbox styles for the row selection variant<br><a href="http://twitter.com/import">@import</a> &quot;<a href="http://twitter.com/material/data-table">@material/c</a>heckbox/mdc-checkbox&quot;;</pre><pre>// Import data table styles<a href="http://twitter.com/import"><br>@import</a> &quot;<a href="http://twitter.com/material/data-table">@material/data-table</a>/mdc-data-table&quot;;</pre><p>3. In your HTML, include the correct classes in the following structure:</p><pre>&lt;div class=&quot;mdc-data-table&quot;&gt;<br>  &lt;table class=&quot;mdc-data-table__table&quot; aria-label=&quot;Dessert calories&quot;&gt;<br>    &lt;thead&gt;<br>      &lt;tr class=&quot;mdc-data-table__header-row&quot;&gt;<br>        &lt;th class=&quot;mdc-data-table__header-cell&quot; role=&quot;columnheader&quot; scope=&quot;col&quot;&gt;Dessert&lt;/th&gt;<br>        &lt;th class=&quot;mdc-data-table__header-cell&quot; role=&quot;columnheader&quot; scope=&quot;col&quot;&gt;Carbs (g)&lt;/th&gt;<br>        &lt;th class=&quot;mdc-data-table__header-cell&quot; role=&quot;columnheader&quot; scope=&quot;col&quot;&gt;Protein (g)&lt;/th&gt;<br>        &lt;th class=&quot;mdc-data-table__header-cell&quot; role=&quot;columnheader&quot; scope=&quot;col&quot;&gt;Comments&lt;/th&gt;<br>      &lt;/tr&gt;<br>    &lt;/thead&gt;<br>    &lt;tbody class=&quot;mdc-data-table__content&quot;&gt;<br>      &lt;tr class=&quot;mdc-data-table__row&quot;&gt;<br>        &lt;td class=&quot;mdc-data-table__cell&quot;&gt;Frozen yogurt&lt;/td&gt;<br>        &lt;td class=&quot;mdc-data-table__cell mdc-data-table__cell--numeric&quot;&gt;24&lt;/td&gt;<br>        &lt;td class=&quot;mdc-data-table__cell mdc-data-table__cell--numeric&quot;&gt;4.0&lt;/td&gt;<br>        &lt;td class=&quot;mdc-data-table__cell&quot;&gt;Super tasty&lt;/td&gt;<br>      &lt;/tr&gt;<br>      &lt;tr class=&quot;mdc-data-table__row&quot;&gt;<br>        &lt;td class=&quot;mdc-data-table__cell&quot;&gt;Ice cream sandwich&lt;/td&gt;<br>        &lt;td class=&quot;mdc-data-table__cell mdc-data-table__cell--numeric&quot;&gt;37&lt;/td&gt;<br>        &lt;td class=&quot;mdc-data-table__cell mdc-data-table__cell--numeric&quot;&gt;4.3&lt;/td&gt;<br>        &lt;td class=&quot;mdc-data-table__cell&quot;&gt;I like ice cream more&lt;/td&gt;<br>      &lt;/tr&gt;<br>    &lt;/tbody&gt;<br>  &lt;/table&gt;<br>&lt;/div&gt;</pre><p>If you want to include the default interaction demonstrated in this blog post, you will need to instantiate the data table in your JavaScript file. This can be built upon with your own system, and MDC-Web provides a base as a jumping-off point:</p><pre>// Import the component<br>import {MDCDataTable} from &#39;<a href="http://twitter.com/material/data-table">@material/data-table</a>&#39;;</pre><pre>// Instantiate the data table based on the `.mdc-data-table` class<br>const dataTable = new MDCDataTable(document.querySelector(&#39;.mdc-data-table&#39;));</pre><p>Material Data Tables provides basic interactions including selecting of table rows and returning an array of selected row items. The baseline functionality builds in accessibility, but if you are extending the table, please refer <a href="https://www.w3.org/TR/wai-aria-practices-1.1/#table">WAI-ARIA Authoring Practices for table</a> for ARIA recommended role, states &amp; properties required for table element.</p><p>In the example below, you can find the data table interface being used to calculate the total calories. The table is built via a web component template using JSON-based data.</p><pre>let totalCal = 0;</pre><pre>// Add &quot;row selection changed&quot; event on the data table</pre><pre>dataTableEl.addEventListener(&#39;MDCDataTable:rowSelectionChanged&#39;, (event) =&gt; {<br>  const {rowIndex, selected} = event.detail;<br>  <br>  const calories = sampleData.rows[rowIndex][CALORIES_COLUMN_INDEX];<br>  if (selected) {<br>    totalCal += calories;<br>  } else {<br>    totalCal -= calories;<br>  }<br>  <br>  ...<br>});</pre><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fruby-tilapia%3FpreviewSize%3D100%26attributionHidden%3Dfalse%26sidebarCollapsed%3Dfalse%26path%3D.gitignore%26previewFirst%3Dfalse&amp;dntp=1&amp;url=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fruby-tilapia&amp;image=https%3A%2F%2Fglitch.com%2Fedit%2Fimages%2Flogos%2Fglitch%2Fsocial-card%402x.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=glitch" width="600" height="600" frameborder="0" scrolling="no"><a href="https://medium.com/media/0d67b14a231b79728155b129b0a2143c/href">https://medium.com/media/0d67b14a231b79728155b129b0a2143c/href</a></iframe><p>You can also combine components within a table. In this example, we’re using Material chips as quick-selection shortcuts for selecting items in the table. We can combine interfaces like so, to make this possible:</p><pre>// Add &quot;chip selection&quot; event on the data table</pre><pre>dataTableEl.addEventListener(&#39;MDCChip:selection&#39;, (event) =&gt; { <br>  ...<br>}</pre><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fmaterial-data-table-with-chips%3FpreviewSize%3D100%26attributionHidden%3Dfalse%26sidebarCollapsed%3Dfalse%26path%3Dindex.scss%26previewFirst%3Dfalse&amp;dntp=1&amp;url=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fmaterial-data-table-with-chips&amp;image=https%3A%2F%2Fglitch.com%2Fedit%2Fimages%2Flogos%2Fglitch%2Fsocial-card%402x.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=glitch" width="600" height="600" frameborder="0" scrolling="no"><a href="https://medium.com/media/158c5ac7e3d8518f3742cd9d93e8d295/href">https://medium.com/media/158c5ac7e3d8518f3742cd9d93e8d295/href</a></iframe><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fmaterial-data-table-theme-switcher%3FpreviewSize%3D100%26attributionHidden%3Dfalse%26sidebarCollapsed%3Dfalse%26path%3Dreadme.md%26previewFirst%3Dfalse&amp;dntp=1&amp;url=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fmaterial-data-table-theme-switcher&amp;image=https%3A%2F%2Fglitch.com%2Fedit%2Fimages%2Flogos%2Fglitch%2Fsocial-card%402x.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=glitch" width="600" height="600" frameborder="0" scrolling="no"><a href="https://medium.com/media/907542dae9bbe76cdde252434bf10e3f/href">https://medium.com/media/907542dae9bbe76cdde252434bf10e3f/href</a></iframe><p>You can use the<a href="https://glitch.com/~material-data-table-dark"> Sass mixins as a styling API</a>, or use custom properties to apply theming with MDC-Web, and serve that theme change by using the prefers-color-scheme<a href="https://glitch.com/~material-prefers-color-scheme"> media query</a>, or provide users with<a href="https://glitch.com/~material-data-table-theme-switcher"> their own option</a> using the Material switch component, for example.</p><p>We also added the data table to the Material Theme Builder, so you can see how your global theming styles will affect this component along with the others, and how all of those styles interact.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fmaterial-theme-builder%3FpreviewSize%3D100%26attributionHidden%3Dfalse%26%26previewFirst%3Dfalse%26sidebarCollapsed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fglitch.com%2Fembed%2F%23%21%2Fembed%2Fmaterial-theme-builder&amp;image=https%3A%2F%2Fglitch.com%2Fedit%2Fimages%2Flogos%2Fglitch%2Fsocial-card%402x.png&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=glitch" width="600" height="600" frameborder="0" scrolling="no"><a href="https://medium.com/media/9cfe0fdfc7f0055b1160bc96e2f15bc0/href">https://medium.com/media/9cfe0fdfc7f0055b1160bc96e2f15bc0/href</a></iframe><p>Now that you know how to use, extend, style, and explore Material data tables on the web, go forth and experiment! Don’t forget to share your data tables down in the comments section below 👇</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b12e881119a4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/google-design/how-to-use-material-data-tables-on-the-web-b12e881119a4">How to Use Material Data Tables on the Web</a> was originally published in <a href="https://medium.com/google-design">Google Design</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Set Your Design System Up for Success]]></title>
            <link>https://modus.medium.com/set-your-design-system-up-for-success-c34eb1503e17?source=rss-a6dfab4de95e------2</link>
            <guid isPermaLink="false">https://medium.com/p/c34eb1503e17</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[craft]]></category>
            <category><![CDATA[visual-design]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[product-management]]></category>
            <dc:creator><![CDATA[Una Kravets]]></dc:creator>
            <pubDate>Mon, 01 Jul 2019 17:26:48 GMT</pubDate>
            <atom:updated>2019-07-01T17:26:48.502Z</atom:updated>
            <content:encoded><![CDATA[<h4>A design system can fail without careful forethought, diligent effort, and support</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U0DVJOWyJ54hICN5ELPJbg.jpeg" /><figcaption>Photo: Ulrike Hammerich/EyeEm/Getty Images</figcaption></figure><p>Design systems are so hot right now — and for good reason. They promote a modular approach to building a product and ensure organizational unity and stability via reusable code snippets, UI components, and utility styles. They make prototyping a breeze and provide a common language for both designers and developers.</p><p>A design system is a culmination of several individual components, which can include any or all of the following:</p><ul><li>Style guide or visual pattern library</li><li>Design tooling (Sketch library, for example)</li><li>Component library (where the components live in code)</li><li>Code usage guidelines and documentation</li><li>Design usage documentation</li><li>Voice and tone guidelines</li><li>Animation language guidelines</li></ul><p>Design systems are stand-alone (internal or external) products and have proven to be a very effective means of design-driven development. However, in order for a design system to succeed, everyone needs to get on board.</p><p>I’d like to go over a few factors that can help ensure — or hinder — the success of your design system. Some of these concepts will be more developer-focused, but most are adaptable across disciplines.</p><h3>Organizational support</h3><p>Put simply, any product, including internal products, needs support. Something as cross-functional as a design system, which is used by every vertical project team, needs support from the top and bottom levels of your organization.</p><p>Top-level support means everyone from project managers up through VPs understands the value of a design system, provides resources for its implementation, and advocates for its use company-wide. This is especially important in companies where such systems are being put in place on top of existing, crufty codebases, because it may mean some effort needs to be scheduled for refactoring work.</p><blockquote>With design systems, small incremental investments over time lead to big gains overall.</blockquote><p>Support from the bottom up means that designers and engineers of all levels support this system and feel responsibility for it. A design system is an organization’s product, and everyone should feel confident contributing to it. If your design system supports external clients as well (such as contractors), they too can become valuable teammates.</p><h3>Investment</h3><p>A design system needs support and love to grow. It also needs continuous investment of effort and resources. I like to compare this to working out.</p><p>You can work out intensely for three months and see some gains, but once you stop working out, those effects will slowly fade away. If you continue to work out, though, even if it’s less often than the initial effort, you’ll see yourself maintaining your fitness.</p><p>Similarly, if you spend three months overhauling your design system but neglect to keep it up, you’ll face the same situation. The impact will fade as the system gets out of sync with new designs and you’ll end up with disconnected bits of code and design elements that nobody is using. Your engineers and designers will stop using it as the patterns become outdated, and then you’ll find yourself dreading another round of substantial investment.</p><p>With design systems, small, incremental investments over time lead to big gains overall.</p><p>With this point, I also want to note that because of how they scale, design systems can make a considerable impact across the platform, making it extremely important to invest in things like accessibility and solid architecture from the start. You don’t want to scale a brittle system that’s not easy to use.</p><p>Take care of your design system, and keep working on it to ensure its effectiveness.</p><h3>Responsibility</h3><p>One way to do this is to have a dedicated team working on the design system, managing tickets and styling updates that trickle out to the rest of your company. With a specific team to act as owner of the design system, whether it be the design team, engineering team, or a new team made up of both designers and engineers (the best option), your company is more likely to maintain a relevant, up-to-date system that doesn’t break.</p><p>This team is responsible for a few things:</p><ul><li>Helping others get set up on the system (support)</li><li>Designing and building components (development)</li><li>Advocating for overall UI consistency and adherence (evangelism)</li><li>Creating a rollout plan and update system (product management)</li></ul><p>That’s a lot of roles, so it helps to have multiple people on this team, at least part time. One thing I’ve found to be effective is to hold office hours to help everyone get set up and to answer any questions about using the system. Having an open Slack channel also helps with this, as well as with bringing up bugs/issues/ideas and making announcements like new releases.</p><h3>Communication</h3><p>Once you have resources and a plan to invest in a design system, it’s really important that the person or team responsible acts as a bridge between design and engineering. Continuous communication is crucial here, and the way you communicate is even more important.</p><p>Remember that nobody wants to be told what to do, especially designers and developers, who are often used to a lot of autonomy. Despite how much or how little control the other stakeholders have over the process, they need to feel like they have input and feel heard.</p><blockquote>Building and maintaining a design system is surprisingly a lot of people-ops work. To get buy-in, you need to make people want to use your design system.</blockquote><p>This can be challenging, especially since ultimately, some party needs to be making a final decision on direction and execution. Because it’s a hard balance to strike, having open communication channels and being as transparent as possible as early as possible is a good start.</p><h3>Buy-in</h3><p>Good communication is also important for getting buy-in from your users (the engineers and designers), as well as from product management.</p><p>Building and maintaining a design system is surprisingly a lot of people-ops work.</p><p>To get buy-in, you need to make people want to use your design system.</p><p>Gather examples and usage wins, because showing is much more powerful than telling.</p><p>If you can, have developers use your product in a low-stakes situation where it provides clear benefits. “Hackathons” are a great place to debut your design system. Our internal hackathon at <a href="http://digitalocean.com/">DigitalOcean</a> was a perfect opportunity to:</p><ul><li>Evangelize for the design system</li><li>See what people were using the component library for and what they were struggling with (excellent user testing there)</li><li>Get user feedback afterward on how to improve it in future iterations</li><li>Let people experience the benefits of using it themselves</li></ul><p>These kinds of moments, where people explore on their own, are where you can really get people on your side and wanting to use the design system, because they can get their hands on it and draw their own conclusions (and if they don’t love it, listen to them and improve it so that they do). We don’t always get so lucky as to have this sort of instantaneous feedback from our direct users.</p><h3>Architecture</h3><p>To make sure your design system is scalable, it’s important to develop a solid architecture early on in the process. Build your design system with growth in mind. What happens if your company acquires a new product? What happens when it develops a new market segment? How can you make sure there’s room for customization and growth?</p><p>A few things we’ve found helpful, from a development standpoint, include:</p><h4>Namespacing</h4><p>Use namespacing to ensure that the system doesn’t collide with existing styles if applied to an existing codebase. This means prefixing every element in the system to indicate that it’s a part of the design system. To make sure that you don’t break parts of the existing build (which may have styled base elements), you can namespace the entire system inside of a parent class. Sass’s nested structure makes this easy.</p><p>This kind of namespacing wouldn’t be necessary per se on new projects, but it is definitely useful when integrating new and old styles.</p><h4>Semantic versioning</h4><p>I’ve used <a href="https://semver.org/">semantic versioning</a> on all of the design systems I’ve ever worked on. Semantic versioning uses a system of Major.Minor.Patch for any updates. You can then tag releases on GitHub with versioned updates and guard against someone’s app breaking unintentionally when there is an update, if they are anchored to a specific version (which they should be).</p><p>We also use this semantic versioning as a link with our design system assets (our Sketch library) to keep them in sync, with the same version number corresponding to both Sketch and code.</p><blockquote>You have to make your design system the path of least resistance, lowering the cognitive overhead of development and design, not adding to it.</blockquote><p>Our design system is served as a Node module, but it’s accessible via our CDN as a series of built assets for quick prototyping and one-off projects. For these built assets, we run a deploy script that automatically creates folders for each release, as well as a “latest” folder if someone wants the always-up-to-date version of the design system.</p><p>So, semantic versioning is what links our design system Node module assets, Sketch library assets, and statically built file assets. Providing multiple ways of consuming our design system makes adoption easier and reduces friction.</p><h3>Friction</h3><p>A while ago, I <a href="https://twitter.com/Una/status/838791890073960448">posed the question</a> of why design systems become outdated and unused, and a major conclusion I drew from the conversation was: If it’s harder for people to use than their current system, people just won’t use it.</p><p>You have to make your design system the path of least resistance, lowering the cognitive overhead of development and design, not adding to it. This is vital. A design system is intended to make development and design much more efficient, enforce a consistent style across sites, and allow everyone to worry less about small decisions like font sizes and HTML semantics. These are already sorted out for them, meaning they can focus on building the product.</p><p>But if your design system is complicated and over-engineered, they may find it frustrating to use and go back to what they know, even if it’s not the best solution. For instance, if you’re a Sass expert and you base your system on complex mixins and functions, you better hope your developers are also Sass experts, or want to be. This is often not the case, however. You need to talk to your audience and learn about how they work and how they’ll want to use your system.</p><p>Reducing friction for adoption should be a major goal of your design system rollout.</p><h3>Conclusion</h3><p>Having a design system is enormously beneficial to any product, especially as it grows. In order to have an effective system, it’s important to always keep your user in mind and garner support from your entire company. Once you have support and acceptance, this system will flourish and grow. Make sure someone is responsible for it, and make sure it’s built with a solid foundation with a plan for careful maintenance. Good luck!</p><p><em>Originally published on the</em><a href="https://24ways.org/2017/why-design-systems-fail/"><em> 24Ways blog</em></a><em>,</em> <em>modified slightly for a </em>Modus<em> audience.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c34eb1503e17" width="1" height="1" alt=""><hr><p><a href="https://modus.medium.com/set-your-design-system-up-for-success-c34eb1503e17">Set Your Design System Up for Success</a> was originally published in <a href="https://modus.medium.com/">Modus</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Rethinking Responsive Design]]></title>
            <link>https://medium.com/@unakravets/rethinking-responsive-d557ef1745bd?source=rss-a6dfab4de95e------2</link>
            <guid isPermaLink="false">https://medium.com/p/d557ef1745bd</guid>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[responsive-design]]></category>
            <category><![CDATA[virtual-reality]]></category>
            <category><![CDATA[augmented-reality]]></category>
            <dc:creator><![CDATA[Una Kravets]]></dc:creator>
            <pubDate>Sun, 06 Nov 2016 22:01:44 GMT</pubDate>
            <atom:updated>2016-11-06T23:26:39.769Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1000/1*dO6IaQtvBwOKVgVpKBQdqw.jpeg" /></figure><p>Communication is essential to human survival. It’s what allowed us to work together, build tribes, and survive the elements to pass on the genetic code. And now, with the growth of the web — the most accessible, widespread, and powerful communication tool we have today — our tribe has become global. Our ideas have merged, and the web has allowed for some incredible collaborations across borders that have continued to move us all forward.</p><p>The emergence of this communication network brought with it the emergence of the world of big data, multi-player online games, and personal blogging. You can pretty much learn anything or get anything you can imagine online today (for better or for worse). Politics aside, the technologies with which we can access the web are evolving.</p><p>From Google’s <a href="https://google.github.io/physical-web/">physical web project</a> to the (very) beginnings of <a href="http://www.gearbrain.com/gear-vr-budget-virtual-reality-headset-1716690185.html">more affordable</a> virtual reality and augmented reality systems, it’s time to take a serious look at how the web is changing, and the exciting possibilities for it in various mediums. This means really rethinking responsive design because <strong>the future of the web exists beyond screens</strong>.</p><h3>Web VR</h3><p>This an exciting time to work on the web because the platforms on which we can communicate are growing quickly. VR (virtual reality) has a really exciting future. It can change how we receive information and communicate with people around the world, making distance feel like less of an obstacle. Recently, Mark Zuckerberg <a href="https://www.youtube.com/watch?v=OyW4CBSZfL0">showed a demo</a> at Oculus Connect of what they’ve been working on lately in terms of VR chat. It’s an incredible tool for communication and story-telling, especially when applied to journalism, as it really immerses the viewer an environment to help them to absorb a story.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F0QY72R3ZDzw%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D0QY72R3ZDzw&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F0QY72R3ZDzw%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/acdf4cb16424791c3fdc5cd556d62236/href">https://medium.com/media/acdf4cb16424791c3fdc5cd556d62236/href</a></iframe><p>WebVR can create immersive experiences <a href="https://www.youtube.com/watch?v=KMdCGkgNtno">too</a>, and maybe one day, bring the ease of communication that a website provides into a 3D context. This can be great for understanding ambiance of a restaurant, or hotel, or even a design agency’s aesthetic. WebVR opens a world of possibilities in an entirely new medium in which to present information.</p><p>This is all very groundbreaking; however, what’s even more game-changing to me will occur when we finally have affordable AR (augmented reality) and can simultaneously interact with the web and the world around us. This means we can look up information while continuing to go about our day, having a seamless experience, and true ease of communication / knowledge sharing.</p><p>While there’s nothing that allows us to experiment with AR on the web just yet, experimenting with WebVR is an exciting precursor. <a href="https://aframe.io/">A-Frame</a> by Mozilla is a web framework that acts as a great kickoff to experimenting with integrating the web in a 3D context.</p><p>The more I think about virtual and augmented web, the more excited I get about the possibilities.</p><h3>The Physical Web</h3><p>Another thing I’m really excited about is the core idea behind Google’s physical web project.</p><p>The premise of the project, led by <a href="https://twitter.com/scottjenson">Scott Jenson</a>, is simple: using a URL bar as the only means of communication with the vast resources of the web is outdated. It brings the web to the physical world via beacons — these are, in their current state, little devices that can be attached to anything: movie posters, restaurants, entrances to theme parks, which send out signals inviting you to the web.</p><p>Instead of the URL bar as the initiator of an online experience, you have a physical object initiating the exchange in the real world. Getting a ping to open a URL feels much more natural than the added step of opening a browser and typing one in to reach the same outcome.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F1yaLPRgtlR0%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D1yaLPRgtlR0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F1yaLPRgtlR0%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/6a3de7c7e96aac2b401556304d87a73a/href">https://medium.com/media/6a3de7c7e96aac2b401556304d87a73a/href</a></iframe><h3>Rethinking Responsive</h3><p>What does this all mean for responsive design? It means that we need to consider the user’s experience in terms of their surroundings. How can we use new browser technology to leverage that? We now have a plethora of options. Just to name 3:</p><ul><li><strong>Geolocation</strong> (which opens up so many possibilities alone, like getting information on weather, news, events, etc.)</li><li><strong>Battery-Level Detection</strong> (meaning the developer can determine when to send decorative content like animations based on system resources)</li><li><strong>Ambient Light Queries</strong> (allow the browser to detect how dark or light the surroundings of the user are, enabling style adjustment accordingly)</li></ul><p>All of these Web APIs and future specs can be combined to give the user a truly <strong>responsive</strong> experience. Something that isn’t just responsive to the screen size of the device being used, but is <strong>responsive to the user in their current context</strong>.</p><blockquote>A user’s context, not their device, is the future of responsive design</blockquote><p>I first started thinking of responsive in this way while working at a startup called <a href="http://nvite.com/">nvite</a>. The idea was to build a product responsive to an event in terms of both physical location to and time until the event. That was nvite’s definition of a responsive experience. And it really has stuck with me because simply put, it’s the future of responsive experiences.</p><p>It’s exactly kind of thinking, combined with the emerging opportunities we’re uncovering for the web, that we need to nourish, and to consider when building products. We need to recognize that screens are ephemeral, and that making something responsive will no longer be about screens. It’ll be about experiences.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d557ef1745bd" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Sad State of Entitled Web Developers]]></title>
            <link>https://medium.com/swlh/the-sad-state-of-entitled-web-developers-e4f314764dd?source=rss-a6dfab4de95e------2</link>
            <guid isPermaLink="false">https://medium.com/p/e4f314764dd</guid>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[web-development]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Una Kravets]]></dc:creator>
            <pubDate>Tue, 12 Jan 2016 23:22:48 GMT</pubDate>
            <atom:updated>2016-01-13T10:40:07.010Z</atom:updated>
            <content:encoded><![CDATA[<p>Yesterday, I retweeted a post which criticized the currently fragmented state of web development. The post was pretty aggressive, but I agreed with some of its points re: over-engineering, and a fragile plugin/dependency model that only seems to be getting worse. I’m all for criticism — these are important conversations to have, but then someone pointed out to me a line in the post that I originally skimmed over which personally attacked an open source developer. Woah. Nope. Nope. Nope. That is NOT okay. That line quickly turned the post from a critical, though salty, expression of an opinion on the industry to a personal attack from an angry developer. I regretted sharing it immediately.</p><h4>Okay, Let’s be Real</h4><p>Things change quickly in this industry. If that’s news to you, then you must have started yesterday. Welcome to the chaos. And yes, you can call the current state of web development a bit chaotic, but that’s because there are more people than ever contributing ideas and sorting through those ideas by implementing them! Imagine that. User testing, prototyping, and iterating.</p><p>Obviously a library like <a href="https://facebook.github.io/react/">React</a> was built for a specific business need, for a <strong>huge</strong> company. What do you expect? It’s new, it’s experimental, things are going to break. It was written insularly in a company with brilliant engineers that needed to move quickly to stay ahead of their competition. And now that it’s being used by more and more people, clearly there are growing pains.</p><h4>Open Source Entitlement</h4><p>One thing that irritates me more than anything is the expectation people have to other people’s time, specifically open source project maintainers. <strong>They are not your tech support. They built a product you are using for free. You’re welcome.</strong></p><blockquote>Hey, OSS maintainers, you don’t owe anybody anything.</blockquote><p>You have a problem? Submit a Pull Request. You don’t know how to fix it? Spend some time in the codebase and learn how — or you can do what <a href="https://twitter.com/xzyfer">Michael Mifsud</a> did and learn a programming language to contribute to an open source project he loved and used. Don’t have time to do that? Cool, they don’t have time for you either.</p><h3>Sam Saccone on Twitter</h3><p>write OSS they said. travel the world they said, meet exciting people they said.</p><p>Developers are people. I don’t understand why this is so hard to remember. Think about this the next time you email someone on a weekend and get angry at a response that takes a while. Your work time might be their off time (time zones are a thing), they also have things to do.</p><blockquote>Etiquette does not end where your keyboard begins.</blockquote><h4>Criticizing Software is a Good Thing</h4><p>There is a <strong>very</strong> important line between criticizing a software and attacking the individuals who built that software. Often, “bad” software comes out of circumstance, and bad managerial decisions, and things that are out a developer’s control. Saying “IE sucks” is <strong>very</strong> different than saying “The IE team sucks.” You (probably) weren’t there. You don’t know the decision chain and history.</p><blockquote>No developer tries to build a bad product on purpose.</blockquote><p>Criticism is a good thing. Actionable criticism is even better. But personally attacking each other out of frustration is just sad. The next time you make a comment or write a blog post, ask yourself if it’s actually productive.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e4f314764dd" width="1" height="1" alt=""><hr><p><a href="https://medium.com/swlh/the-sad-state-of-entitled-web-developers-e4f314764dd">The Sad State of Entitled Web Developers</a> was originally published in <a href="https://medium.com/swlh">The Startup</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>