luis. Profile picture
Feb 15 13 tweets 4 min read
There are a lot of questions at the moment about colour tokens and Figma soooo

I thought I'd thread some thoughts on it to create a healthy discussion in public 🧂
Some assumptions first:

• This is *in Figma*, not talking about code
• You have a Figma design systems team set up
• You're at least splitting up styles and components into two files A screenshot of a map of teams -> projects -> files -> pages
And very importantly!

There is almost no *right* answer, but you've got to start somewhere

I'll be using some terminology in this thread which makes sense to me right now, but will probably horrify you 😱
The style ➡️ components relationship in Figma

Right now, the recommendation is to use slash naming conventions to create folders with your styles

This will eventually map to a similar model for your non-Figma tokens too

(these are example style names) A visual showing a style ➡️ component library flow in Fi
Alright, the token relationship!

The relationship goes like this:

1️⃣ Your base value (e.g. #ffffff for white)
2️⃣ Your base token (e.g. Mono/100)
3️⃣ Your token alias (e.g. Input/Fill) An illustration showing the base value, base token, and toke
An example – an input field

A question to ask: are there shared component values?

Yes? You can bundle the tokens to start with

Here, we bundle border, text, icon into a token & fill is split

(Content) + (fill)

Remember when I said this would cause discussion? 😅 An illustration of an input/search component with token valu
What if you don't have shared values? Split the tokens!

Here's an example that isn't too realistic, but shows how you could structure the styles, with a separate token alias for:

• Border
• Icon
• Text
• Fill

This would compound when we add states too 😬 An illustration showing an input/search component with diffe
Alright, alright, what about variations of components?

Well, they will still likely have shared styles, so we can bundle certain bits and split the differences

Here's an example of the input/search with a default and error state An illustration of the token mapping for the input/search in
If you want to be *even more descriptive*, you could do something like this

This example shows the same token value, but the application is hyper specific

e.g. grey/400 is split into every aspect of the input – border, icon, text

Overkill? Probably, yes
Readable? Definitely! An illustration showing a mapping of tokens within the input
Important notes:

• Specificity is easier to read, harder to manage
• Within Figma, it's (probably) easier to optimise for reuse, rather than being overly descriptive
• Right now, your code tokens and Figma styles will probably have to be differently named
More notes:

• I've used "fill" here to represent what other people call background or surface, this is something we argue about in the team all the time
• I've used "content" to bundle the inner elements of components. This is *my* name, which again might not be what you use
Finally, tokens are really difficult to learn and I'm not an expert at all – just ask my team!

It'll take time to learn, and even longer to use effectively, but start somewhere

I'd advise taking a component in your library and trying to break it down first into logical aliases
Thank you to @HonzaTmn for helping me to simplify the visuals 🙌🏻

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with luis.

luis. Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @disco_lu

Jan 4
I recently went through the iCloud upgrade process, and my systems brain was very confused by their usage of...buttons (of course)

🗣 Here’s an unsolicited analysis of those buttons because who doesn’t like talking about buttons? A series of 5 iPhone screens lined up horizontally. They are
First things first, and the main reason I’m doing this, is because I thought “hang on, there are a lot of different styles being used here"

It turns out there are 6 variations

This might not actually be a problem, but it’s the variations within variations which caught my eye
1a) Full width primary action, blue / neutral
1b) Full width primary action, red / danger

2a) Narrow action, medium sized, pill shaped
2b) Narrow action, medium sized, smooth radius

3a)️Inline action / regular weight
3b) Inline action / semibold weight An arrangement of screenshotted buttons / actions from the p
Read 12 tweets
Dec 9, 2022
Anyone interested in a little pop quiz?

It's about the most fun topic ever – "breaking changes" in components 🤓

Question 1️⃣!

Would you consider this a breaking change? We are changing the layer order Two tab menu components aligned side by side. There are thre
Question 2️⃣!

What about this one, is it a breaking change?

We are consolidating the layers of the component, by placing all the existing menu items inside a new auto layout frame Two tab menu components aligned side by side. There are thre
Question 3️⃣

Is this one a breaking change? We are introducing a new item to the menu Two variant components aligned side by side, both titled Nav
Read 4 tweets
Nov 24, 2022
Interviewing is really hard & asking the right questions is something we're all told to do, but I rarely see examples

Questions help clarify:

*️⃣ Design's value
*️⃣ Teamwork
*️⃣ Growth
*️⃣ Expectations
*️⃣ Risk
*️⃣ Business health
*️⃣ Impact

Here's a few for your back pocket 👖
Is design valued?

❓ Can you explain how the last major feature you shipped was chosen?

This helps clarify if there's a "product process", or if the CEO picks what you work on

❓ What's your approach to design debt?

Do the team clean up debt, accept it, or ignore it?
Risk appetite

❓ Would you un-ship a feature?

Hard question, but opens conversations around decision impact & whether there is hunger for refinement / efficiency

❓ What's the balance between gut instinct and research-driven decision making?

Do they think they are Steve Jobs?
Read 11 tweets
Nov 14, 2022
Just hit publish on another helper component resource 💡

This one is called "Helpers: Components and tokens" and allows you to indicate:

1️⃣ Component token/style values for documentation
or
2️⃣ Variant component sticker sheets in user flow files

figma.com/community/file… Screenshot of Figma componentsScreenshot of the implement...Implementation of the compo...
The style/tokens supported are:

• Color
• Font style
• Spacing
• Border radius
• Border style
• Effect style
• Code component name

There's also a "customisable" option in case you want to make your own Screenshot of the token/sty...
As a simple example of usage, here's a button (everyone's favourite)

I've copied in the connectors from FigJam, and link them to elements of the component and then lay out each token/style component to the side

This is a great use case for Sections too, tidying up the canvas! A screenshot of a Figma Sec...
Read 5 tweets
Nov 2, 2022
It's common during the handoff process to provide screens to our engineering teammates by "throwing designs over the fence"

We've all been there!

This puts pressure on devs to play a game of spot the difference, finding minor changes between screens 🔎

We can simplify this 📣 A layout of 4 app screens t...
The red circles are the true differences, sooooo why are we duplicating *everything* from each screen?

This is inefficient from both sides:
– Designer must track identical screens, with changes doubled* every time there's a modification
– Developer is playing spot the difference The same image as before, b...
Let's remove duplicate screens!

Instead, we can show *component* differences alongside the main screen

Then group them with a section & use component labels to describe the differences

The developers then just need to look at one template, and read the component differences 🪄 The same screen from before...The duplicate screens have ...
Read 4 tweets
Oct 4, 2022
How can you use component props for contextual spacing?

For example, an icon that needs a 12px margin in *some* instances?

– Create a spacer component
– Place that inside a wrapper component for your icon
– Nest that one inside your main component
– Bubble up the props
Going to try and explain this in tweets.

Step #1
Create your icons

Step #2
Create a spacer component with fixed size auto layout Screenshot of a series of i...Screenshot of the spacer co...
Step #3
– Create a new icon wrapper component
– Nest one icon and the spacer inside
– Duplicate spacer & place either side, then rename the instances to "left" & "right”
– Add visibility (boolean) props to spacers and the icon
– Expose nested instances for spacers and icon Screenshot showing the icon...
Read 5 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(