This guide walks you through a structured design system audit inside Figma. You will identify inconsistencies, remove orphaned components, and produce a prioritised fix list. The full workflow takes three to four hours for a mid-size product with one hundred or more components.
What You'll Build
- A component inventory spreadsheet that maps every Figma component to its usage count and status
- A set of Figma annotation frames that flag broken instances, detached overrides, and missing variants
- A token coverage report showing which styles are hardcoded versus properly linked to Figma Variables
- A prioritised audit backlog you can hand straight to a designer or developer to action
Prerequisites
- Figma Professional or Organisation plan (Variables and branching are required)
- The Design Lint plugin installed
- The Similayer plugin for bulk selection
- Access to your main Figma library file and at least one product file that consumes it
- A spreadsheet tool such as Google Sheets or Notion database
Step 1: Freeze Your Library Before You Audit
Before touching anything, create a Figma branch from your main library file. Name it audit/[date]. This protects the live library while you work.
Branching is available under the file menu in Figma as of the 2025 workspace update. Teams using Figma Organisation can also lock the main branch to prevent concurrent edits during the audit window.
Common pitfall: auditing directly on the main branch and accidentally publishing mid-session. Even one mistaken publish will push broken styles to all connected product files.
Why does branching matter here?
An audit surfaces problems. Some fixes are quick. Others require a decision from a product lead or engineer. Branching keeps the audit work isolated until every fix has been reviewed.
Step 2: Generate Your Component Inventory
Open your library file on the audit branch. Run the Design Lint plugin and select the entire page. Export the report as a CSV.
The CSV will include every layer name, its style links, and any lint violations. Paste this into Google Sheets.
Add three columns manually:
- Component status: Active, Deprecated, or Candidate for removal
- Usage count: How many product file instances reference this component (see Step 3 for how to pull this)
- Owner: The designer or team responsible for maintaining it
For a library with around 120 components, this export and column setup takes roughly 25 minutes.
What if Design Lint misses layers?
Design Lint scans visible layers only. Hidden layers used as template scaffolding will be skipped. After the initial scan, toggle layer visibility on for any known hidden scaffolds and re-run the plugin on just those frames.
Step 3: Count Component Usage Across Product Files
This is the step most teams skip, and it is the reason audits produce incomplete recommendations.
Open each product file that consumes your library. Use the Similayer plugin to select all instances of a specific component. The instance count appears in the selection panel on the right.
Record each count in your inventory spreadsheet under the Usage count column.
Any component with zero usage in all product files is a removal candidate. Any component used in more than 30 frames needs extra care during any structural changes.
Pro tip: Figma's built-in Component Analytics (available on Organisation plans) shows a 90-day usage graph per component. This is faster than Similayer for large libraries. Cross-reference both sources to confirm zero-usage components before marking them for removal.
Step 4: Audit Detached Instances and Hardcoded Values
Return to the audit branch of your library file. Run Design Lint again, this time focused only on the following violation types:
- Fill colours not linked to a style or Variable
- Text styles not linked to a text style or Variable
- Border radius values that are hardcoded integers
- Spacing values that do not match your spacing scale
For each violation, Design Lint shows the exact layer path. Click through to each violation and tag the parent frame with a red annotation label. Use a dedicated Figma page called Audit Flags to keep these annotations separate from the working library.
A healthy design system should have fewer than five percent of its total layers flagged for hardcoded values. If you are seeing 20 percent or more, the system has significant token debt that will slow down any future theming or dark mode work.
How do I handle components built by previous designers?
Treat them the same as any other component. Assign an owner in your inventory spreadsheet, even if that owner is currently unassigned. The audit is about the system, not about attributing blame.
Step 5: Check Variable and Token Coverage
Figma Variables (introduced in the 2024 Variable Modes update and extended through 2025) are the current standard for managing design tokens inside Figma. If your library predates this feature, it may rely on legacy Styles instead.
Open the Variables panel in your library file. Count how many colour and spacing tokens are defined as Variables. Then compare that number to the total number of unique colour and spacing values in your Design Lint export.
Calculate your token coverage ratio:
Token coverage = (Variables defined / Unique values in use) × 100
A score above 80 percent is a reasonable target for 2026. Below 60 percent indicates the system will struggle to support multi-brand or multi-theme use cases reliably.
Record this score in your audit spreadsheet. It becomes one of the key inputs for your prioritised backlog in Step 7.
Step 6: Audit Variant Completeness
Components without a complete variant set cause inconsistency at the product file level. Designers patch missing variants with manual overrides, which then detach from the library.
For each component in your inventory, open the component and check the Variants panel. Verify that every interactive state is covered:
- Default
- Hover
- Focused
- Disabled
- Error (for form components)
- Loading (for buttons and data components)
Mark any missing state in your inventory spreadsheet. Flag components missing more than two states as high priority in the backlog.
Common pitfall: treating mobile and desktop as separate components when they should be a single responsive component with size variants. If your library has duplicated Button/Mobile and Button/Desktop components, merge them during the fix phase.
When should you skip variant auditing for a component?
Skip it for deprecated or zero-usage components. They are earmarked for removal anyway, so investing in their variant completeness is wasted effort.
Step 7: Build Your Prioritised Fix Backlog
Now you have enough data to create an actionable backlog. Open your audit spreadsheet and add a Priority column using this scoring logic:
- High (fix this sprint): Used in 30 or more frames AND has hardcoded values OR missing critical states
- Medium (fix next cycle): Used in 5 to 29 frames AND has minor violations
- Low (schedule or remove): Used in fewer than 5 frames OR is deprecated
Sort by Priority descending. Export this as a Notion database or Jira backlog depending on your team's tooling.
For most SMB product teams, a first audit produces 15 to 40 items. Aim to resolve all high-priority items within two weeks to prevent the audit from becoming shelfware.
Step 8: Document the Audit Findings
Create a summary document that any stakeholder can read in under five minutes. Include:
- Total components audited
- Token coverage score
- Number of flags by severity
- Top three systemic issues (for example: "40% of buttons use hardcoded colour values")
- Estimated fix effort in hours
If your team works with an external design partner, this document is the handoff artefact. At Lenka Studio, audit documentation like this is the starting point for design system engagements because it replaces assumptions with evidence.
Attach the Figma branch link and the spreadsheet URL to the document so everything is findable from one place.
Step 9: Merge Fixes and Publish a Clean Release
Once high-priority fixes are complete on the audit branch, request a branch review in Figma. A second designer should check:
- All flagged components now link to Variables or Styles
- No new hardcoded values were introduced during the fix
- Removed components are not referenced anywhere in the product files
After approval, merge the branch into main and publish a new library version with a clear changelog. Tag the release with a version number such as v2.4.0 and note the audit date.
Teams who do this quarterly reduce design-to-development handoff errors by a measurable margin. Internal data from agencies running regular audits suggests rework from inconsistency drops by 30 to 50 percent within two release cycles.
Frequently Asked Questions
How often should you audit a design system?
Quarterly audits work for most product teams. If your team ships multiple releases per month, run a lightweight audit monthly and a full audit every six months.
Can you run this audit on a free Figma plan?
Partially. The free plan does not include branching or Variables, so Steps 1 and 5 are limited. You can still run the Design Lint export and build the inventory, but you will need to audit directly on the main file, which carries risk.
How is this different from a UX audit?
A UX audit evaluates whether a product meets user needs. A design system audit evaluates whether the system itself is internally consistent and maintainable. They address different problems and often involve different stakeholders.
What if my team uses Tokens Studio instead of Figma Variables?
The workflow in Steps 2 through 4 applies equally. In Step 5, replace the Figma Variables panel check with a Tokens Studio token count from your JSON token file. Compare the token count in the file against the unique values in the Design Lint export.
How do I get developer buy-in for fixing design system debt?
Show the usage count data from Step 3. Developers respond to concrete evidence that a broken component affects 60 product frames, not to abstract arguments about consistency. Pair the count with an estimated QA time saving per component fixed.
Next Steps
Once your audit backlog is in place, the next logical move is to connect your Figma Variables to a code-level token pipeline. This closes the gap between design changes and production output. You can find a walkthrough of that process in the guide on building a design tokens pipeline from Figma to code.
If your audit revealed broader branding inconsistencies across your product and marketing assets, the free brand health score assessment is a useful next step. It surfaces gaps between how your brand is designed and how it is perceived.
If your design system needs a full rebuild or your team lacks the capacity to action the backlog, the team at Lenka Studio works with product teams across Australia, Singapore, Canada, and the US on exactly this kind of work. Get in touch to talk through your audit findings.




