Component properties are underrated

Component properties are underrated

How one button and one input field skipped 15+ near-duplicate variant

How one button and one input field skipped 15+ near-duplicate variant

2 min read

Concept redesign

The Underrated Fix for Design System Bloat: Component Properties

The Underrated Fix for Design System Bloat: Component Properties

The Underrated Fix for Design System Bloat: Component Properties

The Pattern I Kept Running Into
Every design system I've worked on hits the same wall eventually: too many variants. A button needs states like Default, Hover, Pressed. Add icon-or-no-icon, and that multiplies. An input field is worse: states, helper text, error messages, icons, all combining into dozens of near-duplicate components that are a nightmare to maintain.

The Pattern I Kept Running Into
Every design system I've worked on hits the same wall eventually: too many variants. A button needs states like Default, Hover, Pressed. Add icon-or-no-icon, and that multiplies. An input field is worse: states, helper text, error messages, icons, all combining into dozens of near-duplicate components that are a nightmare to maintain.

The Pattern I Kept Running Into
Every design system I've worked on hits the same wall eventually: too many variants. A button needs states like Default, Hover, Pressed. Add icon-or-no-icon, and that multiplies. An input field is worse: states, helper text, error messages, icons, all combining into dozens of near-duplicate components that are a nightmare to maintain.

Most teams solve this by just living with it. More variants, more scrolling, more places for something to go stale.

Most teams solve this by just living with it. More variants, more scrolling, more places for something to go stale.

Most teams solve this by just living with it. More variants, more scrolling, more places for something to go stale.

The Approach I've Relied On

The Approach I've Relied On

The Approach I've Relied On

Figma's Component Properties, text, boolean, and instance swap, let you decouple content and optional elements from variant state. Instead of a new variant for every combination, you build the base states once and expose controls on top. I've used this consistently across components rather than treating it as a one off; it's the difference between a component that scales and one that just accumulates variants.

Figma's Component Properties, text, boolean, and instance swap, let you decouple content and optional elements from variant state. Instead of a new variant for every combination, you build the base states once and expose controls on top. I've used this consistently across components rather than treating it as a one off; it's the difference between a component that scales and one that just accumulates variants.

Figma's Component Properties, text, boolean, and instance swap, let you decouple content and optional elements from variant state. Instead of a new variant for every combination, you build the base states once and expose controls on top. I've used this consistently across components rather than treating it as a one off; it's the difference between a component that scales and one that just accumulates variants.

Primary Button.

One variant property (State), one text property (Label), and four more properties controlling the icons: instance swaps for which icon shows on each side, plus independent booleans for whether each icon shows at all. Six properties total, zero duplicate button components.

Primary Button.

One variant property (State), one text property (Label), and four more properties controlling the icons: instance swaps for which icon shows on each side, plus independent booleans for whether each icon shows at all. Six properties total, zero duplicate button components.

Primary Button.

One variant property (State), one text property (Label), and four more properties controlling the icons: instance swaps for which icon shows on each side, plus independent booleans for whether each icon shows at all. Six properties total, zero duplicate button components.

Input Field.

One variant property for state, three text properties (Title, Supporting text, Field input), and seven boolean properties controlling everything optional: the info icon, the input icon, required/optional marking, supporting text, context text, and character limit. Eleven properties on a single component, replacing what would otherwise be 15+ separate variant combinations.

Input Field.

One variant property for state, three text properties (Title, Supporting text, Field input), and seven boolean properties controlling everything optional: the info icon, the input icon, required/optional marking, supporting text, context text, and character limit. Eleven properties on a single component, replacing what would otherwise be 15+ separate variant combinations.

Input Field.

One variant property for state, three text properties (Title, Supporting text, Field input), and seven boolean properties controlling everything optional: the info icon, the input icon, required/optional marking, supporting text, context text, and character limit. Eleven properties on a single component, replacing what would otherwise be 15+ separate variant combinations.

Why This Is Underrated

Why This Is Underrated

Most designers know variants. Fewer treat properties as the actual redundancy killer they are. The distinction that matters: variants are for things that are mutually exclusive (you're never in Hover and Pressed at once). Properties are for things that can be true independently of each other (an input can have an error and an icon and helper text, all at once; that's not a new variant, that's three properties).


The Payoff
Fewer components to maintain, faster edits across the file, and instances that self-document their own usage rules instead of relying on someone remembering "oh, use the one with the icon."

Most designers know variants. Fewer treat properties as the actual redundancy killer they are. The distinction that matters: variants are for things that are mutually exclusive (you're never in Hover and Pressed at once). Properties are for things that can be true independently of each other (an input can have an error and an icon and helper text, all at once; that's not a new variant, that's three properties).


The Payoff
Fewer components to maintain, faster edits across the file, and instances that self-document their own usage rules instead of relying on someone remembering "oh, use the one with the icon."

Parthil Ajmera

@ 2026 ALL RIGHTS RESERVED.

Parthil Ajmera

@ 2026 ALL RIGHTS RESERVED.

Parthil Ajmera

@ 2026 ALL RIGHTS RESERVED.