Run a systematic design QA process to verify that implemented components match Figma specifications — layout checks, typography validation, color token verification, and interactive state testing.
Design QA is the systematic verification that the implemented UI matches the design specifications. Without QA, small deviations accumulate — a 2px margin difference here, a missing hover state there, an incorrect font weight — until the product looks noticeably different from the design.
As a developer, understanding how designers conduct QA helps you anticipate what they will find and fix common deviations before submitting work for review. As a designer doing QA, structured checklists make the process consistent, fast, and unambiguous.
This lesson covers a complete design QA methodology: the checklist, the tools, the common issues, and the documentation format that makes corrections actionable.
Design QA covers six dimensions of fidelity. A complete checklist verifies all six for every component before marking it accepted.
Quick self-QA before PR submission:
1[ ] Hover state works on all interactive elements
2[ ] Tab through page — focus ring visible every time
3[ ] No horizontal scroll at 375px, 768px, 1440px
4[ ] Font-weight numbers match (not 'bold' keywords)
5[ ] Color hex values match Figma Inspect
6[ ] Spacing differences < 4px everywhereThe most efficient QA workflow uses Figma Dev Mode on one monitor and browser DevTools on the other, comparing values directly.
DevTools setup for QA:
Checking layout dimensions:
Simulating hover states in DevTools:
Common QA findings and frequency:
1Finding Frequency DevTools location
2Incorrect font-weight (400 vs 600) High Computed → font-weight
3Missing hover state High Force :hover → check styles
4Spacing off by 4-8px High Element box model overlay
5Incorrect border-radius Medium Computed → border-radius
6Missing focus ring Medium Tab navigation
7Wrong color (one shade) Medium Computed → color
8Missing transition on hover Low Watch for instant color changePixelParallel extension (Chrome/Firefox):
Figma Dev Mode reference:
QA findings must be precise enough that the developer can fix them without follow-up questions. Vague findings ('the button looks wrong') waste time. Precise findings ('font-weight is 400, spec is 600') get fixed immediately.
QA finding format:
1Component: [name]
2Location: [URL + element description]
3Issue: [what is wrong]
4Spec: [what Figma specifies, with exact value]
5Actual: [what browser DevTools shows]
6Priority: Critical / High / Low
7Fix: [exact CSS to apply]Example QA finding:
1Component: Course Card
2Location: staging.devbootstrap.com/courses — first card title
3Issue: Title font-weight incorrect
4Spec: font-weight: 600 (Figma: font-weight: 600)
5Actual: font-weight: 400 (DevTools Computed)
6Priority: High — breaks visual hierarchy
7Fix: .course-card__title { font-weight: 600; }Severity levels:
1Critical: accessibility failure (no focus ring, color contrast fail)
2 wrong brand color, completely missing interactive state
3High: wrong font-weight, incorrect spacing > 8px,
4 wrong component state color
5Low: ±1-4px spacing, minor color shade difference,
6 sub-pixel border-radius differenceSharing QA findings:
QA passing criteria:
Positioning QA correctly in the sprint workflow prevents last-minute crunch and ensures quality without blocking velocity.
Recommended QA timing in a 2-week sprint:
1Day 1-2: Design freeze
2 Designer: confirms artboards are final, no further changes
3 Developer: reads specs, asks all clarifying questions
4
5Day 3-9: Implementation
6 Developer: implements and runs self-QA checklist daily
7 Developer: fixes all Critical/High deviations before branching off
8
9Day 10-11: Feature branch QA
10 Developer: full self-QA against 6-dimension checklist
11 Developer: submits PR only after self-QA passes
12
13Day 12-13: Designer QA on staging
14 Designer: 30-60 min QA session against staging URL
15 Designer: files GitHub Issues for all findings
16 Developer: fixes Critical+High same day
17
18Day 14: Sign-off
19 Designer: confirms fixes
20 Issues closed → sprint completePreventing QA bottlenecks:
Automated QA tools:
Catches unintended changes: if a CSS change breaks 10 components, Chromatic flags all of them
Automated QA in CI pipeline:
1# .github/workflows/visual-qa.yml
2jobs:
3 visual-regression:
4 steps:
5 - run: npx chromatic --project-token=$CHROMATIC_TOKEN
6 # Chromatic screenshots every Storybook story
7 # Flags any visual changes for designer review
8 # Designer approves changes that are intentional
9 # Rejects changes that are regressionsA complete QA session output comparing a staged course card against its Figma specification.
1/* QA SESSION: Course Card Component
2 Figma: figma.com/file/xxx — 'Course Card / Default'
3 Staging: staging.devbootstrap.com/courses
4 Date: 2026-06-01 | Reviewer: Design team
5
6=== FINDING #1 — CRITICAL ===
7Issue: Missing focus-visible on Enroll button
8Spec: outline: 2px solid #2563EB; outline-offset: 2px (Figma)
9Actual: No focus ring (outline: none in CSS resets)
10Fix:
11 .course-card__cta:focus-visible {
12 outline: 2px solid #2563eb;
13 outline-offset: 2px;
14 }
15
16=== FINDING #2 — HIGH ===
17Issue: Title font-weight incorrect
18Spec: 600 (Figma Inspect → font-weight: 600)
19Actual: 400 (DevTools Computed → font-weight: 400)
20Fix:
21 .course-card__title { font-weight: 600; }
22
23=== FINDING #3 — HIGH ===
24Issue: Hover shadow not applied
25Spec: 0 8px 24px rgb(0 0 0 / 0.1) (Figma shadow in hover variant)
26Actual: No shadow on hover (DevTools shows box-shadow: none on :hover)
27Fix:
28 .course-card:hover {
29 box-shadow: 0 8px 24px rgb(0 0 0 / 0.1);
30 }
31
32=== FINDING #4 — LOW ===
33Issue: Border-radius 2px too small
34Spec: 12px → 0.75rem (Figma: border-radius: 12)
35Actual: 10px → 0.625rem (DevTools: border-radius: 0.625rem)
36Fix:
37 .course-card { border-radius: 0.75rem; }
38
39=== PASSING ===
40Font sizes: title 1.125rem/600/1.44 ✓, meta 0.8125rem ✓
41Colors: title #111827 ✓, meta #6B7280 ✓, badge bg #DBEAFE ✓
42Responsive: 375px (1col) ✓, 768px (2col) ✓, 1440px (3col) ✓
43Border color on hover: #2563EB ✓
44Card body padding: 1rem ✓, gap: 0.5rem ✓
45
46=== QA RESULT: FAIL ===
471 Critical + 2 High findings
48Required before release: Findings #1, #2, #3
49Optional: Finding #4
50
51Developer action: Fix in same sprint, re-submit for QA sign-off */The QA report provides both the spec value and the actual DevTools value for every finding. Finding #1 (missing focus ring) is Critical because it breaks keyboard accessibility — the button cannot be focused at all via keyboard without the visible ring, which is a WCAG 2.1 AA failure. Findings #2 and #3 are High severity because they affect visual hierarchy (font-weight) and hover interaction (shadow). Finding #4 is Low because a 2px border-radius difference is below the threshold of perceptibility in most contexts. The exact CSS fixes are included — the developer can apply them without any additional communication.
The next lesson covers Figma Dev Mode in depth — the CSS generation, variable inspection, and annotation features that make design QA faster by reducing manual measurement against spec.
Your progress is saved in this browser, on this device only.