Chronicling Figma library publications using Coda

The gist

I was sick of opening up the publication panel and seeing components that had no business being in there. Who edited these? They look exactly the same! Did someone (me?) update the description and forget to hit publish? How long ago since we last published these components anyway, and what were those edits?

I can't answer any of those questions with Figma's current analytics tools. But I can build Coda docs...

Especially proud of
  • Putting Nathan Curtis' contribution definitions to work.
  • Delivering our first component-level design change log.
  • Providing richer, and more discoverable publication notes.
  • Tracking individuals' contribution stats.
Collaborators
🎸 I rocked this one solo.
My role

Coda doc architect.

Speed

1 month

Figma's publication workflow and analytics leave much to be desired.

Our team of designers frequently expressed interest in things that detach data couldn't help with. I would hear statements like,

"I want to understand what changes were made to a component before I go editing and re-publishing it." That's understandable, having context can give you confidence you're publishing a productive edit. This seems especially critical for new joiners!

"I don't accept updates when they come through, and while I feel kind of bad about it, I don't have the time to investigate what the change was." And it shouldn't have to feel like an investigation! Hitting "accept" on an update should feel easy and desirable (not laden with anxiety and effort).

"I want to contribute more to the design system." Great, I want that too! So we will need a way to measure contributions.

I needed some sort of process and analytics system that let me:

  • Track publications at the component-level
  • Understand who is hitting publish, how often, and what "types" of publications those are.
  • Easily write excellent publication notes that tell consumers whether or not they're about to accept a breaking change.
  • Store a component's publication history alongside its design documentation (eg "do's and dont's")

The data I need to track those kinds of things is not complicated. It's just three things:

  1. A list of all our published components.
  2. A list of all the publications made (going forward)
  3. A list of edits that can be made in Figma and how those map to types of publications (based on Nathan Curtis' contribution types)

In an ideal world I'd able to extract the first two lists directly from Figma, but alas, it's not possible (not that I know of). In the mean time I use my other favorite tool to do this: Coda.

Act I: Writing better publication notes and collecting better library data.

To make the first list (the list of published components) I had to put in a couple hours of up-front work copy pasting information from Figma into Coda. I grabbed components' names and node links, and stored them in a table:

List of components in a data table. Other elements include variable collections and groups of styles.

After populating that table, maintaining the content was easy. New components get added and existing ones get deleted by making publications! So the next step was to create an experience in the same Coda doc that me and my designers would use to craft excellent publication notes. The workflow goes like this:

After you've made your edits in Figma, you go to the Coda doc and select the library you're publishing from:

Then, just like in Figma's publication panel, you need to select all the elements that you're including in the publication. if the publication you're making includes newly added elements, there are buttons that let you create new data table rows for new components, variable collections, or groups of styles.

Side-by-side view of selecting components in Coda VS selecting components in Figma

After you've made your selection of elements, you need to categorize it as a Defect Fix, Small Enhancement, Large Enhancement, or New Material. To make this as straightforward as possible, I listed out all possible edits that could be made in Figma and categorized them against those contribution types:

Edits you can make in Figma bucketed into 4 categories.

After you've made your selection of edits, you get to craft your publication note. Depending on the type of contribution, we can offer suggestions for what will make that note useful to consumers. And because we're doing this in Coda, all our table data is @-mentionable! We can @-mention people, other publications, components, variables, styles. This deep-linking enriches the history of the file that gets built with each publication.

This workflow actually changed my publication habits for the better. I found myself making more frequent, but more granular publications (one or two components at a time). This helped me get more specific in my notes, and allowed consumers to have more control over what updates they accepted VS held off on.

Once you hit that "copy publication notes" button, a formatted message is added to your clipboard to paste into the Figma publication note panel. On the consumer end, a library update looks like this:

The publication type (eg Large Enhancement) helps consumers understand the scope of the change before they dig into diff-checking. The ID number gives them a way to reference that exact publication in a Slack message or Figma comment. And most importantly, we call out whether or not they can expect breaking changes. That part was crucial. Breaking changes are why designers hesitate to accept changes to begin with!

Act II: My analytics kick Figma's analytics butt.

Remember, this doc isn't just about making accepting publications easier. 

One of the other goals was to track contribution stats. I wanted to be able to answer questions like,

  • "Wait, I thought I already made that change?"
  • "Didn't we build try building it like that, but ended up changing it?"
  • "Who updated the [library] last, and what change did the make?"
  • "When is the last time we deprecated something? And what was it?"
  • "How long has it been since we pushed a change on [component]?"
  • "Is [teammate] on track to meet their contribution goal they set for the quarter?"

Well, my Coda doc isn't just capturing which components are associated with a publication. It's also logging:

  • Who authored the publication
  • When they hit "publish"

Knowing "who" and "when" in addition to "what" (which library, and components) and "why" (good publication notes) allow me to build out a reporting dashboard that shows a super rich history of all our libraries. Cue dashboard montage:

This is a year-to-date (July 2024) snapshot of publications made to the "GDM UI" library file. It shows us that February was a busy month, and our defect fixes touched a lot of elements! The library saw much less activity in Q2.
On the left is a bar chart, and each bar is a component. The vertical axis shows the number of publications each component has received. It shows us that about 1/3 of components in the GDM UI library see many more publications than the other 2/3, which are more stable. The pie chart on the right tells us that the bulk of these publications are Defect Fixes and Large Enhancements.
This stacked bar chat shows the number of publications individual contributors have made. Each library is a different color. This gives us a sense of each person's expertise and familiarity not just with a library, but making contributions in general.
This stacked bar chart shows the number of publications made each week in a year-to-date view. Each individual contributor is a different color. This helps us understand who contributed most recently, and how much.

This donut chart shows up the top 10 edits made. You can tell we made a big effort to upgrade to variables after it was released, because 60%+ of our changes involved creating new variables, replacing styles with those new variables, and removing variant properties that could now use modes.

<div class="horizontal-rule"></div>

We didn't have this Coda doc at the time our, so the history is incomplete. But it does its job. If me or anyone on my team asks those questions from earlier, I can confidently answer them with high precision.

Act III: Design documentation + publication notes.

When it comes to component-level documentation, this doc gives us a massive advantage: we can place a component's change-log—a list of every publication its been through—right beside all the usage documentation. Here's an example of what our design documentation looks like for our <span class="figma-component">❖ Alert</span> component:

Screenshot of our ❖ Alert component design documentation.

Every component documentation view follows this structure:

  • Component name
  • Live embed preview of the component
  • Design documentation
  • Related ideas
  • Publication history

We can also reference specific publications in the design documentation copy to explain how and when certain design decisions are baked into components.

The power of Coda's structured data through @-mentions

There's more to this story

🔒 But it's reserved for interviews 🔒

Invite me for an interview