Apply Figma version history, branching, and change communication to team workflows — coordinate design version states with code branches, manage breaking changes, and maintain a design history that developers can reference during implementation.
Design version control becomes critical when multiple people work on the same design system, when design changes occur mid-sprint while developers are implementing, and when teams need to trace back to why a design decision was made.
The ideal state is a direct link between Figma version names and git branch names — when a developer is working on git branch feat/sprint-3/course-detail, they reference Figma named version 'Sprint 3 / Course Detail — Final'. Any design change during that sprint gets flagged as a breaking change with specific values.
This lesson builds on basic version history knowledge to create a team-wide version control protocol that keeps design and code in sync.
Linking Figma version names to git branch names creates a unified history across design and code.
Naming alignment convention:
1Git branch Figma version name
2feat/sprint-3/course-detail → Sprint 3 / Course Detail — Final
3feat/sprint-3/checkout-step-1 → Sprint 3 / Checkout Step 1 — Final
4fix/enrollment-cta-contrast → Hotfix / Enrollment CTA Contrast — Final
5explore/new-card-layout → Explore / Card Layout — Draft (branch: never main)In practice:
'Design reference: Figma Sprint 3 / Course Detail — Final'
GitHub PR template with Figma reference:
1## Changes
2[describe implementation changes]
3
4## Design Reference
5- Figma file: [url]
6- Named version: Sprint N / [Component] — Final
7- Figma branch: [branch name if still active]
8
9## Design QA
10- [ ] Self-QA completed against named version
11- [ ] No open design comments in Figma
12- [ ] Token changes applied to tokens.cssWhen to update the Figma reference in a PR:
Using git log to trace design history:
1git log --oneline --grep='Figma'
2# Shows all commits that reference Figma links
3# Output:
4# a1b2c3d feat(course-detail): implement course detail (Figma: Sprint 3 Final)
5# e4f5g6h feat(checkout): implement checkout step 1 (Figma: Sprint 3 Checkout Final)A breaking design change is any change that requires a developer to modify already-written code. The protocol prevents silent breaking changes from causing rework without notice.
Breaking change definition:
1Breaking changes (require developer action):
2 - Color value change (update CSS token or variable)
3 - Spacing change > 4px on a component in implementation
4 - Typography change (weight, size, family)
5 - Component removed or renamed
6 - New required state (developer must add new CSS/JS)
7 - Layout change that affects implemented code
8
9Non-breaking changes (no developer action needed):
10 - Content/copy changes (handled separately)
11 - New component not yet in implementation
12 - Artboard-level design exploration on non-implemented pages
13 - Annotation updates
14 - Adding a new variant that is not being implemented this sprintBreaking change notification template:
1[DESIGN BREAKING CHANGE] Sprint 3 / Course Detail
2
3Component: Course Card
4Change type: Color update
5Old value: border-color: #E5E7EB (border-default token)
6New value: border-color: #D1D5DB (border-strong token)
7
8Figma: Updated in named version 'Sprint 3 / Course Detail — v1.1'
9New Figma link: [url]
10
11Developer action required:
12 .course-card { border-color: var(--color-border-strong, #d1d5db); }
13 (was: --color-border)
14
15Reason for change: Higher contrast on light background pages
16 per Stark accessibility audit result.
17
18Impacted: CourseCard component only
19Timeline: Please update before Thursday QA
20
21@developer-nameBreaking change log in Notion:
1Sprint | Date | Component | Change | Dev Action
2-------|------------|------------------|-------------------|-----------
3S3 | 2026-06-03 | Course Card | Border color | CSS token update
4S3 | 2026-06-05 | Lesson Item | Height 72→64px | CSS height update
5S3 | 2026-06-06 | Enrollment bar | Shadow opacity | CSS shadow updateA design changelog is maintained in the design system Figma file or Notion, documenting all changes across versions with enough context for developers to understand what changed and why.
Changelog location options:
Changelog format (semantic versioning for design):
1## v3.2.0 — 2026-06-14 (Sprint 3 complete)
2### Added
3- Category badge: gray variant (data-cat='general')
4 CSS: .course-badge[data-cat='general'] { bg: #f3f4f6; color: #4b5563 }
5- Enrollment bar: sticky enrollment CTA for all course pages
6 Implementation: see EnrollmentBar.tsx
7
8### Changed
9- Course card border: border-default (#E5E7EB) → border-strong (#D1D5DB)
10 Dev action: update .course-card border-color variable reference
11- Lesson item height: 72px → 64px
12 Dev action: .lesson-item { height: 4rem; }
13
14### Fixed
15- Enrollment bar shadow: opacity corrected from 0.12 to 0.08
16
17## v3.1.0 — 2026-05-28 (Sprint 2 complete)
18### Added
19- Lesson item: progress indicator (checkmark for complete, circle for incomplete)
20...Changelog automation with Tokens Studio:
1// scripts/generate-changelog.js
2// Compares current token values with previous version
3// Outputs markdown changelog for token changes
4const previous = require('./tokens/v3.1.json');
5const current = require('./tokens/v3.2.json');
6
7function diff(prev, curr, path = '') {
8 const changes = [];
9 for (const [key, val] of Object.entries(curr)) {
10 const fullPath = path ? `${path}.${key}` : key;
11 if (typeof val === 'object' && val.value) {
12 if (prev[key]?.value !== val.value) {
13 changes.push({ path: fullPath, old: prev[key]?.value, new: val.value });
14 }
15 } else if (typeof val === 'object') {
16 changes.push(...diff(prev[key] || {}, val, fullPath));
17 }
18 }
19 return changes;
20}
21
22const changes = diff(previous, current);
23console.log('## Token Changes');
24changes.forEach(c => {
25 console.log(`- ${c.path}: ${c.old} → ${c.new}`);
26});Sometimes a stakeholder-approved design change causes unexpected problems during implementation or QA, requiring a rollback to the previous design state.
Rollback triggers:
Figma design rollback procedure:
Developer CSS rollback procedure:
1# Find the commit where the breaking change was applied
2git log --oneline -20
3# output: a1b2c3d 'fix(tokens): update course-card border to border-strong'
4
5# Revert the specific commit
6git revert a1b2c3d
7# Creates a new commit that undoes the change
8
9# Or: if the change is in a token file, simply revert the value
10# tokens.css: --color-border-card: #e5e7eb; (back to original)Communicating a rollback:
1[DESIGN ROLLBACK] Sprint 3 / Course Card border
2
3We are reverting the border-color change from v1.1.
4
5Reason: The #D1D5DB border caused a contrast failure on the
6 marketing-blue section backgrounds that we missed in QA.
7 Reverting to #E5E7EB which passes contrast on all backgrounds.
8
9Design version: Now on Sprint 3 / Course Detail — Rollback to v1.0
10Figma link updated: [url]
11
12Developer action:
13 Revert .course-card border-color to var(--color-border, #e5e7eb)
14 (was temporarily changed to var(--color-border-strong, #d1d5db))
15
16No other changes. Token --color-border-strong remains in system
17for future use on non-blue backgrounds.
18
19@developer-nameA complete version control audit trail for Sprint 3, showing how Figma versions, git branches, breaking change notifications, and the changelog work together.
1/* SPRINT 3 VERSION CONTROL AUDIT TRAIL
2 Traceable from Figma history → git commits → changelog
3
4=== FIGMA VERSION HISTORY (from Version History panel) ===
5
6Sprint 3 / Course Detail — Final v1.0 2026-06-02 @designer
7 → Initial handoff, all artboards complete
8 → Developer starts implementation on git branch feat/sprint-3/course-detail
9
10Sprint 3 / Course Detail — v1.1 (Breaking) 2026-06-03 @designer
11 → Breaking change: border-color token updated
12 → Notification sent: Slack #design-dev-sprint3 at 10:30 AM UTC
13 → Developer applies CSS fix: commit f7e8d9c
14
15Sprint 3 / Course Detail — v1.2 QA Fixes 2026-06-06 @designer
16 → QA findings: shadow opacity + badge text color
17 → Not breaking: corrections to match v1.0 intent
18 → Developer applies: commits a1b2c3d and b2c3d4e
19
20Sprint 3 / Course Detail — QA Signed Off 2026-06-07 @designer
21 → Final QA sign-off
22 → Reference version for Sprint 4 changes
23
24=== GIT COMMITS ALIGNED TO DESIGN VERSIONS ===
25
26git log --oneline feat/sprint-3/course-detail
27
28c3d4e5f Sprint 3 Course Detail merged to master
29b2c3d4e fix(course-detail): correct enrollment bar shadow opacity to 0.08
30a1b2c3d fix(course-detail): correct general badge text color to #4b5563
31f7e8d9c fix(tokens): update course-card border to border-strong (Design v1.1)
32e5f6g7h feat(course-detail): implement lesson item 64px height and progress indicator
33d4e5f6g feat(tokens): add --color-enrolled token #16a34a
34c3d4e5f feat(course-detail): implement sticky enrollment bar with iOS safe-area
35b2c3d4e feat(course-detail): implement lesson list from Figma Sprint 3 v1.0
36a1b2c3d feat(course-detail): add page structure and course metadata section
37
38=== CHANGELOG ENTRIES (DESIGN_CHANGELOG.md) ===
39
40## v3.3.0 — Sprint 3 — 2026-06-07
41
42### Added
43- Token: --color-enrolled: #16a34a (green-600, for enrolled course states)
44- Component: EnrollmentBar (sticky purchase CTA with price + status)
45 iOS: padding-bottom: env(safe-area-inset-bottom)
46- Variant: CategoryBadge gray (data-cat='general')
47 CSS: background #f3f4f6; color #4b5563
48
49### Changed (BREAKING)
50- CourseCard border: --color-border (#e5e7eb) → --color-border-strong (#d1d5db)
51 REVERTED IN v3.3.1 (see below)
52- LessonItem height: 72px → 64px
53 CSS: .lesson-item { height: 4rem; }
54
55## v3.3.1 — Sprint 3 hotfix — 2026-06-04
56
57### Fixed (BREAKING REVERT)
58- CourseCard border: REVERTED to --color-border (#e5e7eb)
59 Reason: #d1d5db fails contrast on marketing-blue backgrounds
60 CSS: .course-card { border-color: var(--color-border, #e5e7eb); }
61
62=== TOKEN DIFF: v3.2 → v3.3 ===
63
64Added tokens:
65 --color-enrolled: #16a34a (NEW)
66
67Unchanged tokens (despite mid-sprint change attempt):
68 --color-border: #e5e7eb (REVERTED from #d1d5db attempt)
69 --color-border-strong: #d1d5db (remains, but not used on CourseCard)
70
71=== STAKEHOLDER AUDIT (if questioned months later) ===
72
73Question: 'Why does the course card still use light border instead of the
74 stronger border we asked for in Sprint 3?'
75
76Answer (traceable from this audit trail):
77 'The border-strong update was implemented on 2026-06-03 (git commit f7e8d9c)
78 but reverted on 2026-06-04 (git commit after rollback communication) because
79 it failed WCAG contrast requirements on marketing-blue section backgrounds.
80 The decision was communicated in Slack #design-dev-sprint3 at 14:30 UTC
81 on 2026-06-04 by @designer. The border-strong token remains in the system
82 for future use on white/gray backgrounds where it passes contrast.'
83*/The audit trail shows how Figma versions, git commits, and changelog entries link together to create a traceable history. The revert of the border-strong change is fully documented: why it happened (contrast failure), when it was communicated (Slack timestamp), what changed in both Figma and git (version name + commit hash), and what remained unchanged (the token itself stays, just not applied to CourseCard). Six months later, any team member can answer 'why was this decision made' without needing the original designers or developers present.
The next lesson covers Design-Dev Workflows — systematic processes for the complete design-to-implementation pipeline, from requirements through deployment, with quality gates at each stage.
Your progress is saved in this browser, on this device only.