Design systems scale through composition, not complexity.
Modularity and composability mean designing components as
small, focused units that can be combined in predictable ways.
A composable system enables teams to build diverse interfaces
without introducing inconsistency or duplication.
Design components with a single responsibility
Each component should solve one problem well.
Single responsibility
mds-buttonHandle button interactions and states
✓ Single
mds-iconDisplay icon graphics
✓ Single
mds-textRender typography with consistent styling
✓ Single
mds-form-cardLayout + validation + styling + submission
✗ Multiple
Create components with a clear, narrow purpose.Bundle multiple responsibilities into a single component.Expose variation through composition, not branching logic.Add props to cover every possible layout scenario.
A list of tools and services related to this argument.Component architecture
Separate primitives, patterns, and compositions.Expose low-level details in high-level components.Document intended usage and composition boundaries.Let teams guess how components should be combined.
A list of tools and services related to this argument.Documentation platforms
A component should remain useful even when its context changes.
Context-agnostic design
mds-buttonUses tokens, no layout assumptions
✓ High
mds-cardFlexible content slots, token-based spacing
✓ High
mds-input-field
Context-agnostic, works in forms, modals, pages
✓ High
CheckoutButtonCoupled to checkout flow, hardcoded layout
✗ Low
Keep components context-agnostic where possible.Couple components to specific pages or flows.Use tokens and shared patterns for spacing and behavior.Bake layout assumptions into components.
A list of tools and services related to this argument.Tokens tools