<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Laura Žumbakytė</title>
    <description>The latest articles on DEV Community by Laura Žumbakytė (@desinni).</description>
    <link>https://dev.to/desinni</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1003056%2F0bfda638-832b-49eb-8c8c-696d851363cb.jpg</url>
      <title>DEV Community: Laura Žumbakytė</title>
      <link>https://dev.to/desinni</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/desinni"/>
    <language>en</language>
    <item>
      <title>Deep dive into the Design System @ CGTrader</title>
      <dc:creator>Laura Žumbakytė</dc:creator>
      <pubDate>Thu, 02 Feb 2023 13:20:47 +0000</pubDate>
      <link>https://dev.to/desinni/deep-dive-into-the-design-system-cgtrader-2mb1</link>
      <guid>https://dev.to/desinni/deep-dive-into-the-design-system-cgtrader-2mb1</guid>
      <description>&lt;p&gt;Previously I wrote about the challenges we faced while working on the design system, and you can find that article on my profile. In this article, I will go deeper into some technical approaches we took and the technologies we used.&lt;/p&gt;

&lt;h2&gt;
  
  
  👉 Storybook
&lt;/h2&gt;

&lt;p&gt;We used &lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt; to develop and test our components. It is an excellent tool for developing UI components in isolation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Atomic design structure
&lt;/h3&gt;

&lt;p&gt;We chose to use &lt;a href="https://atomicdesign.bradfrost.com/table-of-contents/" rel="noopener noreferrer"&gt;atomic design&lt;/a&gt; methodology for our components. That means that we started with the smallest components and built them up to more complex ones. The beauty of this approach is that anytime you need to update your button atoms across the site, you can just update that one atom, and that update can then be applied to the rest of your design system.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;By 2013, Brad Frost officially coined the term "atomic design".&lt;/p&gt;

&lt;p&gt;Brad understood that when you build a website from the ground up, from the atoms, to the molecules, to the organisms,&lt;br&gt;
and eventually, the templates and pages, you are afforded maximum flexibility. You are able to maintain cohesion in&lt;br&gt;
code and visual design while also still maintaining the modularity to quickly extend your components to various sections of the website.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here is the structure of our Storybook:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Primitives&lt;/strong&gt; - the smallest things, like &lt;em&gt;Colors &amp;amp; Effects&lt;/em&gt;, &lt;em&gt;Typography&lt;/em&gt;, &lt;em&gt;Icons&lt;/em&gt;, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elements (Atoms)&lt;/strong&gt; - the smallest components, like &lt;em&gt;Buttons&lt;/em&gt;, &lt;em&gt;Inputs&lt;/em&gt;, &lt;em&gt;Tags&lt;/em&gt;, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Components (Molecules)&lt;/strong&gt; - more complex components made of several atoms, like &lt;em&gt;Cards&lt;/em&gt;, &lt;em&gt;Search&lt;/em&gt;, &lt;em&gt;Dropzone&lt;/em&gt;, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utils&lt;/strong&gt; - utility functions, like &lt;em&gt;pluralize&lt;/em&gt;, &lt;em&gt;useBreakpoint&lt;/em&gt;, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Miscellaneous&lt;/strong&gt; - all the components we already had in the UI library but not in the new Design System. Those components should be updated or removed at some point, if they are not used in the Design System.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  MDX documentation
&lt;/h3&gt;

&lt;p&gt;We used &lt;a href="https://storybook.js.org/docs/react/writing-docs/mdx" rel="noopener noreferrer"&gt;MDX&lt;/a&gt; to write documentation for our components. That allowed us to write our documentation in Markdown but also use React components in it.&lt;/p&gt;

&lt;p&gt;A cool feature of these docs is that props are automatically listed from the component's &lt;code&gt;propTypes&lt;/code&gt;. This way, you don't have to write them down manually, and you can be sure that they are always up to date. Also, they are interactive, so you can change them and see how the component changes. 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bqcoz76jxoplylsrc8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bqcoz76jxoplylsrc8c.png" alt="Avatar docs page" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can even go a step further with your documentation and add comments before each prop, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
  The avatar's size.
*/&lt;/span&gt;
&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;oneOf&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;small&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;large&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will show up in the docs as a description for the prop. We didn't use this feature a lot, but it's an excellent option&lt;br&gt;
to have if you need to add more details to your docs.&lt;/p&gt;

&lt;p&gt;What we did use was the &lt;a href="https://storybook.js.org/docs/react/writing-docs/mdx#customizing-argtypes-with-mdx" rel="noopener noreferrer"&gt;argTypes&lt;/a&gt; option, which allows you to customize the props table. For example, we used it to split the props into categories and add custom controls for some of them. Here's a code snippet of how we did it for the &lt;code&gt;Avatar&lt;/code&gt; component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Meta&lt;/span&gt;
  &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Elements/Avatar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="nx"&gt;component&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Avatar&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;argTypes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Style&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Style&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;control&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;select&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;colorsListArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;
  &lt;span class="p"&gt;}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  👉 Figma
&lt;/h2&gt;

&lt;p&gt;We used &lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;Figma&lt;/a&gt; to design our components. We had separate files for our components, where we could see all their variations, how they looked, and how they behaved.&lt;/p&gt;

&lt;p&gt;Here is an example of a &lt;code&gt;Toggle&lt;/code&gt; component in Figma, where you can see all the different variations of its size, width, and styles:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6ehzbpy3uvtyhd63mle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv6ehzbpy3uvtyhd63mle.png" alt="Toggle component docs on Figma" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everything listed like this made it easier for the developers to see all the variations they had to create.&lt;/p&gt;

&lt;h2&gt;
  
  
  👉 Prop naming
&lt;/h2&gt;

&lt;p&gt;We used the same naming for our props in the code as in Figma. Because docs were created on Figma first, developers just had to copy the names from there and use them in the code.&lt;/p&gt;

&lt;p&gt;For example, if we had a &lt;code&gt;Tab&lt;/code&gt; component with a &lt;code&gt;leadIcon&lt;/code&gt; property, we would name the prop the same in code and Figma.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7sq0chp1wmh3758fhf8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7sq0chp1wmh3758fhf8.png" alt="Prop naming example" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having the same (or as close as possible) naming made it easier for developers and designers to communicate and understand each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  👉 Utility classes
&lt;/h2&gt;

&lt;p&gt;We have created some utility classes that we could use for easier styling. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.cgt-text-caption&lt;/code&gt; - for text with &lt;code&gt;caption&lt;/code&gt; style&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.cgt-text--align-center&lt;/code&gt; - for centering text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.cgt-heading-#{$size}&lt;/code&gt; - for headings, where &lt;code&gt;#{$size}&lt;/code&gt; is a size variable from our design system (e.g., &lt;code&gt;h1&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.cgt-color-#{$color}&lt;/code&gt; - for setting text color, where &lt;code&gt;#{$color}&lt;/code&gt; is a color variable from our design system (e.g., &lt;code&gt;brand-primary-100&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.cgt-back-color-#{$color}&lt;/code&gt; - for setting the background color, where &lt;code&gt;#{$color}&lt;/code&gt; is a color variable from our design system (e.g., &lt;code&gt;white-100&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  👉 className prop for custom styling
&lt;/h2&gt;

&lt;p&gt;In an ideal world, we would have all the styling in our design system, but sometimes we needed to add custom styling - it was just unavoidable in how our product was built. For that reason, we added a &lt;code&gt;className&lt;/code&gt; prop to all our components so that developers could easily add custom styling. It was never made for major styling changes but only for minor tweaks or better positioning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result 🎉
&lt;/h2&gt;

&lt;p&gt;Even though I see some room for improvement, I'm happy with the result. What we achieved with limited time and resources is amazing and for the "first version" of our design system, I think it's pretty good.&lt;/p&gt;

&lt;p&gt;We have a consistent and accessible product that benefits our designers and developers. Having a unified look and feel across the whole product is important, so I'm happy that we have built a design system that will help us achieve that.&lt;/p&gt;

&lt;p&gt;Thank you for reading, and I hope you learned something new today! For more updates, you can follow me on &lt;a href="https://twitter.com/desinni" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>crypto</category>
      <category>airdrops</category>
      <category>offers</category>
    </item>
    <item>
      <title>Building a Design System: Lessons Learned</title>
      <dc:creator>Laura Žumbakytė</dc:creator>
      <pubDate>Fri, 06 Jan 2023 15:55:09 +0000</pubDate>
      <link>https://dev.to/desinni/building-a-design-system-lessons-learned-403e</link>
      <guid>https://dev.to/desinni/building-a-design-system-lessons-learned-403e</guid>
      <description>&lt;h2&gt;
  
  
  Challenge accepted 💪
&lt;/h2&gt;

&lt;p&gt;This code seems familiar to you? Does it feel like with every new feature, you have to create a new, slightly different variation of the same component? Does it make you feel like you are repeating yourself and digging yourself into a hole?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.card--big&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.card--more-rounded&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;32px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.card--biggest&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;32px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you answered yes to any of these questions, you are not alone. We have been there too. 🙋‍♀️&lt;/p&gt;

&lt;p&gt;At the company, we didn't have a design system. We had some reusable components that developers were putting in our UI library because they thought they could be reusable, but there were no official documentation or design guidelines. The Design System is a collection of reusable components, design patterns, and guidelines. It is a perfect tool for creating consistent and accessible products. And we were missing that.&lt;/p&gt;

&lt;p&gt;After the company hired new designers, one started working on the guidelines and documentation for the design system. So the design part started moving, but the development side was not started yet - it needed a leader. That's where I came in - I was offered to take that role.&lt;/p&gt;

&lt;p&gt;I knew it would be a challenge, but I accepted it.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, what were the challenges? 🤷‍♀️
&lt;/h2&gt;

&lt;p&gt;Here are some of the general challenges we faced while working on the design system:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Project had no structure
&lt;/h3&gt;

&lt;p&gt;It was a brand-new project, so we had no structure or a plan of attack in advance. I had to think of meetings we would need, how to create and manage tasks, invite and onboard developers, etc. So the start of the project was a bit slow and rocky.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Low priority of this &lt;em&gt;side project&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Building a design system was not a priority for the company. As we do not have 1000s of developers, we couldn't just drop everything, separate some developers from their teams, and start working on the design system. So we struggled a bit with not having dedicated time to work on it. It was just a &lt;em&gt;side project&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Lack of time and human power
&lt;/h3&gt;

&lt;p&gt;As I mentioned, we didn't have enough developers to work on the project full-time as a dedicated team only for the design system. If there were some tasks with higher priority in the teams, we had to drop the design system and work on those tasks. So the workflow was not always smooth - some weeks we were delivering more, others we were not.&lt;/p&gt;

&lt;p&gt;Because this was more like a &lt;em&gt;side project&lt;/em&gt;, not all developers were interested in working on it. So we had to find people who were interested and motivated.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. No previous experience
&lt;/h3&gt;

&lt;p&gt;On top of all the previous challenges, I had no experience in either building a design system or leading a team of developers!&lt;br&gt;
So I had to learn a lot of new things, and I had to learn them on the go.&lt;/p&gt;

&lt;p&gt;I tried searching for some resources online - I wanted to read about the challenges that other people faced and how they solved them, so I wouldn't make the same mistakes, but I couldn't find many articles about this topic that would be useful for me.&lt;br&gt;
So I decided to write my own blog post about my experience. I hope it will be useful for someone else. ✨&lt;/p&gt;

&lt;h2&gt;
  
  
  Things I learned and other random tips 🤓
&lt;/h2&gt;

&lt;p&gt;Having to face all these challenges, I learned a lot of new things, and I want to share them with you as well as some other practices that I found helpful.&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 Have meetings with developers and designers
&lt;/h3&gt;

&lt;p&gt;These are the meeting that we had with the team:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;With developers&lt;/strong&gt; - what worked for us was having a regular weekly meeting with developers to discuss what we did last week, what the blockers are, answer any other questions, and pick up new tasks for this week.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;With designers&lt;/strong&gt; - I also had a weekly meeting with designers to discuss progress or other questions. After a while, we didn't need it anymore, but it was beneficial at the start of the project when we were still figuring out what we needed to do and how to do it.&lt;br&gt;
In this meeting, we were discussing things like what components we need to create next by priorities, what approach we should take to naming props, etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;With the whole team&lt;/strong&gt; - later, we also started having a meeting with the entire team - developers and designers - where we could resolve any questions from both sides. The first few times, it was helpful, but later we canceled it as we didn't have many questions to discuss. In this meeting we had a quick demo by our designers about Figma and how to use it.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As you can see, after some time, we didn't need most of these meetings, but at the start, they were very helpful. It's really important to recognize when meetings stop bringing value and cancel them. If no more questions are being asked and no more blockers are being resolved, I feel like it's a sign that the meeting could be happening less often or even canceled.&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 As the leader, you don't have to know everything, but you have to know where to find the answers
&lt;/h3&gt;

&lt;p&gt;As a fresh leader, I sometimes felt that I didn't know enough about the project or how to solve problems or do some things.&lt;br&gt;
And these doubts were blocking me mentally. But then, one day, I realized that I had a bunch of intelligent developers around me working with me on the project. I just had to ask for their help.&lt;/p&gt;

&lt;p&gt;That's why I decided to have a Retro meeting with the developers, where I would get feedback from them about the project or suggestions for improvements.&lt;br&gt;
It's also helpful to even get some validation that your ideas are good and you are on the right track.&lt;/p&gt;

&lt;p&gt;It's a shame that we haven't had a lot of Retro meetings, as this idea came a bit late. I would recommend having them from the start of the project.&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 Decide in advance what will be the structure and the props
&lt;/h3&gt;

&lt;p&gt;I would recommend deciding in advance what the structure of the components will be and what props they will have.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Having the same prop names in the component as in the design documentation.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We are using Figma for our design system docs, so we have&lt;br&gt;
   the same names for the props in the Figma file as in the code. This makes the communication between different roles (designers and developers) easier when everyone is calling the same things by the same name.&lt;/p&gt;

&lt;p&gt;Additionally, when developers get some feature designs in Figma where design system components were used, it makes it easier for them to understand what props to use.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deciding the story's structure.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We are using &lt;a href="https://storybook.js.org"&gt;Storybook&lt;/a&gt; for our design system docs, and we decided to go with the atomic design structure for our stories.&lt;/p&gt;

&lt;p&gt;There is no right or wrong way to structure your stories, but I would recommend having some structure in place, so it makes it easier to find the components and decide where to put the new ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 Write things down
&lt;/h3&gt;

&lt;p&gt;After explaining the same things multiple times, I realized I should write things down. These are the main documents that we have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Short intro to the project&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;What is this project about, and why do we need it;&lt;/li&gt;
&lt;li&gt;A list of all the main contact people (i.e., development lead, design lead);&lt;/li&gt;
&lt;li&gt;Our working agreements;&lt;/li&gt;
&lt;li&gt;Other short notes that might be useful for new people and links to other documents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--srRTVezg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/umc3nze7623vailtp272.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--srRTVezg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/umc3nze7623vailtp272.png" alt="Intro doc preview" width="880" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Detailed steps on how to approach different tasks&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;When we are picking up new tasks;&lt;/li&gt;
&lt;li&gt;Different tasks' tags explained (tags we use: &lt;code&gt;new component&lt;/code&gt;, &lt;code&gt;update component&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;cleanup&lt;/code&gt;);&lt;/li&gt;
&lt;li&gt;How to approach new components and update existing components;&lt;/li&gt;
&lt;li&gt;Testing with designers;&lt;/li&gt;
&lt;li&gt;Updating other company's projects that are using current components;&lt;/li&gt;
&lt;li&gt;Releasing changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nncza_Y4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gbgfs0vfk2zn1pdu9lj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nncza_Y4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3gbgfs0vfk2zn1pdu9lj.png" alt="Tags explanation doc" width="880" height="712"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These documents make it easier for new people to onboard and understand what they need to do.&lt;br&gt;
And it also makes my life easier - I don't have to explain the same things repeatedly.&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 Don't forget about the performance
&lt;/h3&gt;

&lt;p&gt;We didn't think much about the performance at the start of the project. We were more focused on functionality and design.&lt;br&gt;
But now, when we had to work on improving performance in one of the projects, we could see that our UI library was getting big and it's slowing things down, so we will have to do something about it.&lt;/p&gt;

&lt;p&gt;So I would recommend considering the performance from the start of the project and looking into Treeshaking and/or other performance optimizations.&lt;/p&gt;

&lt;p&gt;Performance is a big topic; I might write a separate post about it in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion 🎉
&lt;/h2&gt;

&lt;p&gt;Overall, building a design system was a challenging but rewarding experience. It required a lot of hard work, collaboration, and learning, but the end result was a valuable tool for our company. We now have a consistent and accessible product that benefits both our designers and developers.&lt;/p&gt;

&lt;p&gt;If you're considering building a design system, I hope my experiences and lessons learned can be helpful to you. Don't be afraid to take on the challenge and learn along the way. It's definitely worth it in the end.&lt;/p&gt;

&lt;p&gt;I hope you enjoyed reading this post! You can follow me on &lt;a href="https://twitter.com/desinni"&gt;Twitter&lt;/a&gt; for more updates.&lt;/p&gt;

</description>
      <category>design</category>
      <category>webdev</category>
      <category>devjournal</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
