--- title: 10 Common Component Architecture Mistakes in Figma Design Systems sha256: 69676acad441bf8c84b7ac68019de67388dcbd79095fe65cb8520d540accebf5 type: raw-article source: newsletter source_url: https://zeroheight.com/blog/10-common-component-architecture-mistakes-in-figma-design-systems/ tags: [design-system] fetcher: jina ingested: 2026-05-15 --- Markdown Content: “Garbage in, garbage out.” A common phrase that can also be reversed, and it would still be just as true: “quality in, quality out.” With design systems acting as an infrastructure layer, “quality” is often a major pillar or offering. If designers and engineers are expected to deliver high-quality experiences that are consistent across teams (with the help of the design system), the system’s assets must be of high quality too. Let’s return to the phrase’s original negative perspective. If a designer pulls a _poorly_ built component from a Figma library, two things can happen: * They use the component as best they can, favoring consistency over quality. But it slows them down or impedes them from doing their best work. It may also confuse and frustrate them. * The lack of quality is offensive enough that the designer does not use the component, favoring quality over consistency. This can look like detaching, building their own component, or sourcing a component from another system. Both of those situations teach consumers not to expect quality from the design system. This hurts trust — a hard thing to earn. To help you start regaining trust with consumers, or get a new system going with a strong start, I’ve compiled a list of mistakes I’ve made myself or encountered in the wild. ## 1. Creating a “count” or “# of items” variant property ![Image 1](https://zh-marketing-wordpress-uploads.s3.amazonaws.com/wp-content/uploads/2026/05/image-1.png) **Why it’s bad**: File memory. Each and every variant in a component is rendered in the background when an instance is placed on the canvas. Variants therefore should be considered the most expensive type of property (relative to string and boolean props, which let you manipulate individual layers). This is why when you’re using list-like UI elements — such as checkboxes or radios in a form field, options within a dropdown menu, rows in a table, list items in a list, or buttons inside of a button group — you’re likely to find them slower to work with. Or your file suddenly loses memory when a lot of them are present. Many component architects will use a variant property to give component consumers a closed range of items to populate the element with: 0 to 24 rows in a table, 2 to 7 radios in a form field, 1 to 55 options in a dropdown menu. Even if file memory wasn't an issue, this approach requires an enormous amount of building effort and maintenance to keep working. This can introduce room for error when making updates, and consumers will likely always need “just a couple more” variants at the high end of any given range of items offered. **What to do instead**: Use the latest slot feature. Even before slots were released, component architects could use [instance swapping](https://zeroheight.com/blog/using-composability-over-inheritance-to-scale-design-systems/) as a “pseudo slot”, alleviating all the issues that came with using variants. ## 2. Adding interactive states to icons ![Image 2](https://zh-marketing-wordpress-uploads.s3.amazonaws.com/wp-content/uploads/2026/05/image-2.png) **Why it’s bad**: Semantically confusing. Remember what icons are: Their closest relative would be characters in a font. They’re not inherently interactive, but you could wrap them in an or