Purpose: Guidelines for determining what constitutes a component.
Referenced by: Design system router, assessment flow
"Is this one component or multiple components?"
This is the most common design system challenge.
A component should do one thing well.
✅ Good: Button component triggers actions ❌ Bad: Button component that also handles forms, navigation, and modals
A component should be reusable across contexts.
✅ Good: Input Field used in login, signup, profile forms ❌ Bad: Login-Specific Input Field that only works on login page
A component should work independently.
✅ Good: Card component that can contain any content ❌ Bad: Card component that requires specific parent container
Question: Is the icon part of the button or separate?
Answer: Depends on usage:
Part of Button (Variant):
Button Component:
variants:
- with-icon-left
- with-icon-right
- icon-only
When: Icon is always the same type (e.g., always arrow for navigation)
Separate Components:
Button Component: (text only)
Icon Component: (standalone)
Composition: Button + Icon
When: Icons vary widely, button can exist without icon
Recommendation: Start with variant, split if complexity grows.
Question: Is the label part of the input or separate?
Answer: Usually part of Input Field component:
Input Field Component:
includes:
- Label
- Input element
- Helper text
- Error message
Reason: These always appear together in forms, form a semantic unit.
Question: Is the button part of the card?
Answer: Usually separate:
Card Component: (container)
Button Component: (action)
Composition: Card contains Button
Reason: Card is a container, button is an action. Different purposes.
Question: Is each nav item a component?
Answer: Depends on complexity:
Simple (Single Component):
Navigation Bar Component:
includes: All nav items as configuration
Complex (Composition):
Navigation Bar: (container)
Navigation Item: (individual item)
Composition: Nav Bar contains Nav Items
Threshold: If nav items have complex individual behavior, split them.
Can it exist independently?
Does it have its own states/behaviors?
Is it reused in different contexts?
Does it have a clear single purpose?
Low Complexity: Keep together
High Complexity: Split apart
Together:
Apart:
Container provides structure, content is flexible.
Card Component: (container)
- Can contain: text, images, buttons, etc.
- Provides: padding, border, shadow
Multiple parts that work together.
Accordion Component:
- Accordion Container
- Accordion Item
- Accordion Header
- Accordion Content
Single, indivisible unit.
Button Component:
- Cannot be broken down further
- Self-contained
Warning: Component has 10+ variants
Problem: Probably multiple components disguised as variants
Solution: Split into separate components based on purpose
Warning: Component has many "if this, then that" rules
Problem: Component doing too many things
Solution: Split into simpler, focused components
Warning: Component behaves differently in different contexts
Problem: Not truly reusable
Solution: Create context-specific components or use composition
One Component:
Button:
variants: primary, secondary, ghost
states: default, hover, active, disabled, loading
Reason: All variants serve same purpose (trigger action), share behavior
Multiple Components:
Text Input: (text entry)
Select Dropdown: (choose from list)
Checkbox: (toggle option)
Radio: (choose one)
Reason: Different purposes, different behaviors, different HTML elements
Compound Component:
Modal: (overlay + container)
Modal Header: (title + close button)
Modal Body: (content area)
Modal Footer: (actions)
Reason: Complex structure, but parts always used together
Start simple:
It's easier to split later than merge later.
Companies can define their own boundary rules:
# Acme Corp Component Boundaries
**Rule 1:** Icons are always separate components
**Rule 2:** Form fields include labels (never separate)
**Rule 3:** Cards never include actions (composition only)
Consistency within a company matters more than universal rules.
Use this guide when the design system router detects similarity and you need to decide: same component, variant, or new component?