Transcript
00:49 Hey, good to see you.
00:50 Thanks for coming.
00:51 This is another episode of wireframe.
00:52 And today we’re gonna be talking about design tokens.
00:56 Yep.
00:57 Long time coming.
00:57 I know you could imagine that I should of been talking about this earlier
01:01 because I talk about design tokens a lot.
01:03 In fact, this is an episode so nice.
01:05 I ended up doing it twice.
01:06 This is now the second time because I was very silly and recorded the
01:10 entire episode with my mute on.
01:13 My devices.
01:14 So but now I can see the levels of green very clearly in my monitor.
01:18 So I know that I.
01:20 I’m producing sound on this track.
01:22 So hopefully everything turns out okay this time around.
01:26 So the reason that I’m talking about design tokens at this moment is because
01:31 just this last week there was a tweet 1 that got a lot of attention and I kind of want
01:35 to go over what that tweet was all about, because I think there was definitely
01:40 a little bit of confusion in there.
01:42 And this is also something I don’t talk too much about.
01:44 I, I did mention it at the state of design tokens panel when we were talking
01:49 about primitive tokens, but let me just discuss what the tweet was that I
01:54 retweeted with a little bit of a quote.
01:56 So there was a tweet that came out on Thursday morning, or maybe
02:00 it was late Wednesday night.
02:02 And this person was kind of describing a question or maybe even a frustration
02:08 that was out there that was describing why we have primitive tokens.
02:13 And in particular, he has a picture of a whole bunch of scales, you can
02:17 imagine them from material like the color scales for things like color
02:21 teal 500 and so on and so forth.
02:23 So the image of that and he was basically kind of outwardly asking why
02:28 do we still use these scales if if we have other tokens that are meant to
02:33 describe where A color’s supposed to go, not what a particular color is.
02:39 And what he’s describing is semantic tokens, right?
02:41 So a semantic token being like a button primary background color.
02:44 So he believes from what I can understand in his tweet, that we should
02:49 be using those tokens and not the primitive ones, the color teal 500.
02:55 So, I quote tweeted that with a response, and that response was, again,
02:59 very similar to what I mentioned in the State of the Design Tokens panel.
03:03 In fact the report actually links out to the article that I mentioned the
03:11 reason why primitive tokens exists in, in my mind and what I could tell.
03:15 And here’s the general gist.
03:17 Okay.
03:18 The quote tweet basically says that there’s only one reason why the
03:22 primitive tier of design tokens exists.
03:25 And that has to do with team communication because color teal 500 is a lot easier to
03:33 understand and comprehend when I speak it or otherwise write it than it is for me to
03:38 say something like #00ffcc or whatever the teal is that you’re playing with, right?
03:44 So for most people again, you know, they’re not reading a hex values,
03:50 although it’s not too hard to do if you understand what, how a hex is
03:54 composed, but you can imagine any other kind of color composition or really
03:58 any other value that you would need to potentially be computed or isn’t
04:03 necessarily human describable, right?
04:05 And that’s a lot of the reason why the color scale or this primitive token
04:10 exists is because we have this idea of color teal 500 and I’m able to convey
04:15 that to my team very easily to describe that there is a teal that exists.
04:20 And then the 500 kind of suggests that there’s a scale in which
04:24 other teals might exist, right?
04:26 There might be a 400 or a 600 and even farther from that.
04:30 And that’s the reason why the primitive scale exists.
04:33 So from there, we’re talking also a little bit about organization, right?
04:37 Because at that point, once you have these scales that you want to create,
04:42 then you want to organize them.
04:43 And that’s why we start having, you know, the, the set of teals, and then
04:47 the grouping of, of 100, 200, 300, and so on in these areas so that you’re
04:52 able to group them properly and then mix and match and, and what have you.
04:56 And all of that is fine from an organizational standpoint.
05:00 If you want to organize this particular tier so it was really
05:04 interesting in the quote tweet all the responses that I was getting.
05:08 In fact, I heard that a couple of organizations were actually discussing
05:13 this thread after I posted that.
05:16 response.
05:17 And I don’t know exactly what those discussions were, but I imagine that
05:22 because the take about it being a single reason why they exist probably
05:28 is a little hot for folks, right?
05:29 Because you would imagine that there must be More to it, right?
05:35 I mean, it would seem like clearly, yes, it makes sense from an organizational
05:41 standpoint to have color teal 500 as part of your token set, right?
05:45 Like, how else am I supposed to manage that color?
05:49 In order to kind of break this down a little bit, I’d like you to kind
05:54 of remove all the noise that you hear about design tokens as a whole, okay?
06:00 And what I mean by that is forget about the naming, forget about the tiers,
06:04 forget about all of that stuff, okay?
06:07 And just kind of be zen for a moment.
06:13 And I know it’s a little hard to do because of course, design tokens
06:16 typically has a lot of information bombarding as lots of articles about
06:20 design tokens and naming conventions, et cetera, et cetera, but just remove it
06:24 all out of your mind just for a moment.
06:26 And I want you to just focus on the act of curating a semantic token with its value.
06:35 So just to kind of recap about semantic tokens, semantic tokens are basically
06:40 meant to describe where something is going to be used in an interface.
06:44 Okay.
06:44 So button primary background color could be under the semantic token nomenclature.
06:49 You could also consider as a component token.
06:52 They are basically the same thing as my you know, aside hot take, but.
06:57 A button primary background color certainly is not a primitive token in
07:01 terms of the parlance that we talk about.
07:03 So button primary background color describes that this particular token
07:08 is meant to be applied on all primary buttons across your interface.
07:13 And it’s specifically meant to describe its background color.
07:19 It’s not meant to be the border of an input.
07:22 It’s not meant to be the text color of a modal, right?
07:25 It’s not meant to do any of that stuff.
07:26 It has a very specific purpose.
07:28 And that’s supposed to be the background color of a primary button.
07:32 Okay, that’s it.
07:33 Now, When you assign a value to that token, right, I call that curation.
07:41 Okay.
07:42 So you’re curating the values that are going to be assigned to these
07:44 semantic tokens and those values will eventually be these primitive
07:51 values as we, we call them.
07:52 And that’s why the primitive token nomenclature ends up being in there.
07:56 But let’s assume that there’s no tokens in there.
07:59 It’s actually just hard coded values, right?
08:00 So there’s a hex directly assigned to this semantic token.
08:04 Maybe there’s an LCH assigned to it or whatever you’d like.
08:08 Okay.
08:09 Now in that curation process, again, forgetting about naming conventions or any
08:14 of the kind of opinions you might have.
08:16 In that curation process, think about what, what’s happening.
08:22 What’s happening in that curation process is you are trying to select
08:28 the correct color that is meant to represent all of these ideas, right?
08:34 This is what a semantic token is.
08:36 It’s an idea, a concept that will exist in your interface.
08:39 So, It could be a hex and, and, you know, any other kind of composed version of a
08:46 color, maybe even a gradient that’s fine.
08:48 In some cases, so all of that stuff is, is that, that value in there,
08:51 or it could be a primitive token.
08:55 Okay.
08:56 Now what’s the benefit over using a hex color from the primitive token?
09:05 The answer is there isn’t much.
09:07 And you could probably argue with me and say, well, hold on a second.
09:10 Of course there is.
09:11 Right.
09:12 And when you argue that, you would say, well, you just kind
09:15 of mentioned it earlier, right?
09:16 I could describe color teal 500 very quickly rather than describing the
09:21 hex for that particular teal, right?
09:24 Well, the situation is, is that in that curation step, that’s
09:27 typically not a team effort.
09:30 Right?
09:30 A person, a single person, individual is selecting the color and then
09:35 assigning it to that semantic token.
09:39 And it’s fairly well established that the larger organization shouldn’t be accessing
09:45 primitive values just normally, right?
09:47 They’re supposed to be using semantic or even component tokens, right?
09:50 So they’re not accessing the primitive token, so you’re really not
09:52 sharing it in that particular sense.
09:55 So that means that the curation step, when you, you as an individual are
09:59 selecting which color needs to be assigned to that semantic token, it’s just you.
10:05 In a room, on a computer, or however you’re doing this exercise, right?
10:12 It’s not common for it to be a group thing , right?
10:17 It’s usually a task that’s in a ticket maybe somewhere in some
10:20 project management system that says, Hey, we need this new theme or this
10:24 new mode, please curate it with the new values for these tokens, right?
10:30 It’s usually one person doing it.
10:31 And Okay.
10:32 Yes.
10:33 Could there be a a review process in which other people will look at these values?
10:37 Certainly.
10:38 Right.
10:38 And again, that goes all the way back to that team communication part, right?
10:44 Because if it’s just you, Well, you’re picking the hex.
10:49 You know what color the hex is because you’ve chosen it.
10:53 So then, you applying it should just be very simple in terms
10:56 of, okay, here it goes, right?
10:58 This is the assignment I’m doing.
10:59 Only until you have more cooks in the kitchen do you now need to Make it
11:05 easier to convey what your intention is in the spot right here, right?
11:10 So it makes it much easier from a review standpoint.
11:12 If you don’t have a visual tool to help you do this curation step it’s a lot
11:17 easier to read the color teal 500 in that spot than it is to provide a hex.
11:22 But again, if this is you as an individual curating this
11:25 thing, You don’t need the hex.
11:27 Now, on another topic, you’ll say, well, I don’t want to be copying and pasting
11:31 hexes over and over and over again.
11:33 Well, it’s the same situation.
11:36 You’re still going to be copying and pasting that token
11:39 over and over and over again.
11:40 It’s the exact same behavior that you’re going to be doing
11:44 when you do that exercise.
11:46 Okay.
11:46 So that’s a moot point as well, in terms of why you might need
11:50 a primitive token overall.
11:53 So in my mind, if.
11:56 You are a sole person that is curating these themes.
12:00 You, I think again, don’t need primitive tokens if it’s doesn’t make sense
12:05 to have to communicate these tokens.
12:07 Okay.
12:09 Now there’s one more point that I wanted to make in terms of the primitive
12:11 tokens and I make it all the way back in an older blog post, which I’ll
12:15 mention which one that is in a moment because it goes about another point.
12:20 Regarding this tweet.
12:21 It has to do with the word semantic.
12:22 But basically, people also like the idea of a primitive token because
12:28 then it potentially gives them the ability to change the value, right?
12:31 I mean, that’s the whole idea about design tokens as a whole, is that
12:35 they are a design decision and that design decision can be changed.
12:39 Well, not this tier.
12:43 This tier in particular really is a static tier.
12:47 That’s why they’re named primitives because primitives
12:50 aren’t supposed to change either.
12:51 So when you have color teal 500 that’s meant kind of as a contract to the
12:57 rest of the organization to say.
12:59 We have a particular teal that is at this 500 state and it should always
13:03 be this particular teal, right?
13:05 You can imagine that if we were going to Update the brand colors.
13:10 Okay, and it was teal before but now is orange It wouldn’t make sense for color
13:17 teal 500 to now be an orange Right.
13:21 That completely subverts our expectations about what that value is meant to be.
13:27 Now, meanwhile, if we’re talking about a semantic part of the
13:31 ecosystem, right, we’re talking about logo brand color, right?
13:35 And that’s fairly semantic.
13:38 Because it doesn’t suggest what the value of that color is just as logo brand color.
13:44 That means that I can assign a teal or an orange or whatever I want to
13:49 it when it’s appropriate, right?
13:51 And that thing can change and be slotted out through a theming system
13:55 through modes, et cetera, et cetera.
13:57 So that’s another important point in the primitive set because those things
14:01 aren’t supposed to change those things.
14:04 As kind of defined as a primitive, they are meant to kind of be
14:08 set, as understood, as, as organized, or as, as agreed upon
14:13 throughout the entire organization.
14:15 So it’s another reason why you may consider not using them, because once
14:20 you create that token, it’s very, very hard to unlearn a new value for it.
14:25 Especially if, you know, you’re directly relating it to something
14:28 that’s in the UI, in which case you want to make a change over time.
14:32 It kind of is really hard to do because it’s a direct relation, right?
14:36 Again, that’s the reason why we, we try to keep The primitive set private from the
14:43 rest of the organization, because if we were to have direct access to those things
14:47 and then we want to change just maybe even for dark mode, you can imagine for the
14:53 folks that are familiar with the exercise creating dark mode, that that would be a
14:57 lot of extra work to find all the places that are using color white and then
15:03 changing all those places to color black.
15:06 Right?
15:06 That’s why we have that proxy in the middle, that semantic set that
15:10 describes where something is going to be colored, not what color the thing is.
15:17 Now, I mentioned the blog post that talks about that reason why the
15:22 semantic token set kind of exists.
15:25 Okay?
15:26 And that blog post is called Tokens as Intents. 2
15:29 It’s one of my earlier ones off of the blog.
15:31 And the reason I’m bringing it up is because Is because one of the responses
15:35 in that tweet was a person who I have no idea who they were Just I guess found
15:41 it off of it being kind of Spicy for the day and came in there to tell me that
15:47 color teal 500 was semantic, and I had to do a double take because I’m just
15:56 like, how could you possibly believe that knowing everything that we know right now?
16:01 I mean, if you look at the token naming conventions or any of the
16:07 other token articles that are out there we have agreed as a community
16:11 about these particular tiers.
16:13 Okay?
16:14 There are three tiers.
16:15 It is the primitive tier, which I’ve been talking about mostly.
16:18 The semantic tier, which is that middle tier that I leaned very heavily into.
16:21 And then there’s the component tier, which again, I believe is mostly just a
16:25 semantic tier that becomes more specific.
16:29 Those are the three tiers that we have.
16:31 Okay?
16:31 And we’ve agreed on the naming convention for these tiers.
16:36 So, When I told this person that it’s not semantic, right?
16:42 Color teal 500 is not semantic.
16:44 And in fact, I believe I even linked to the blog post called truly semantic 3
16:49 that describes what is semantic and what isn’t and why he went on
16:53 to say that everything’s semantic because linguistics and that’s when
16:58 I was like, ah, here, fantastic.
17:00 A troll, right?
17:01 Or maybe this person’s isn’t a troll and they just want to go ahead and have an
17:04 argument or whatever they want to do.
17:06 But.
17:07 It’s wild to me that, you know, a person who brings up linguistics
17:14 into a conversation doesn’t take a step back and realize, hold on a
17:19 second, there’s other fields out there that words mean different things.
17:25 Right?
17:25 And when we say semantic, that’s meant to describe a particular tier of tokens, as
17:33 opposed to just linguistics in general.
17:36 Right?
17:37 So, yeah, very strange, odd, to have that discourse in there.
17:43 Again that semantic tier, I think, is a in my opinion, a poor naming choice.
17:49 And I say that, and this is talking about that earlier blog
17:52 post called tokens as Intents is.
17:55 Describing the term that I knew semantic tokens to be before I knew
18:00 of them as semantic tokens At compass, which is the real estate company.
18:04 I used to work at as their first ux engineer there was a Set of
18:11 i’ll just call them variables that were used to describe style.
18:15 It’s as we know them as design tokens today But we called them Intents And this
18:21 was from Joe Schmitt who was the front end architect over there You for a long time.
18:25 He’s been there for almost 10 years at this point now.
18:28 And he was the one who kind of created the idea of Intents mostly from
18:33 this concept because the brand kept changing, you know, design would want
18:38 to experiment on a new button color, or they want to experiment on into
18:41 some kind of new style for the card.
18:44 And it got to be a lot of overhead to, you know, change in all these places.
18:49 So it made a lot more sense to him.
18:51 To describe where the thing was going to be changed as opposed to, you
18:56 know, the, just assigning the color there, you know, in in this way.
19:00 So Intents comes from the idea of providing intention for a color
19:06 to eventually exist in a spot.
19:09 Okay, so I intend to provide the background color for this primary button.
19:13 I intend to provide the corner radius of this card, right?
19:17 So it doesn’t, again, describe anything to do with the value of that
19:22 color or the, or the radius, right?
19:25 It’s talking about where this Is in our interface as a whole.
19:28 And it very directly aligns to what we believe as semantic tokens today.
19:33 So the concept, or I should really say the vocabulary of Intents, I adopted
19:38 and moved over to GoDaddy, where Intents is basically the term that they now
19:44 use to describe that semantic layer.
19:46 So I believe that the word intense does a much better job of really
19:51 Kind of separating the type of token that sits in there personally.
19:55 And I know that there’s other folks that are out there that have also adopted
19:59 that terminology, but at large, we do talk about this as the semantic.
20:04 So I continue to discuss it at large as the semantics tier, but
20:09 I always like to introduce that Intents idea because I think it does
20:14 a lot better job of describing what that tier is meant to do, right?
20:20 Semantic, as this person’s kind of pointing out, Is a little bit of a
20:25 ambiguous term because yeah, even in HTML, there’s things that are semantic that
20:30 mean something, but it’s very difficult to connect it to that style piece, right?
20:35 Like, okay, well semantic, but with style, how does that work?
20:39 But I think the intention part really leans into a designer providing intent
20:46 for a color to eventually exist.
20:48 Okay.
20:50 So, now, I want to dovetail this a little bit into the token specification because
20:57 the token specification as it stands today there’s a lot of complexity in it.
21:02 And more complexity is, is being suggested every day and it actually
21:07 drives me nuts because I think it really needs to be a lot simpler.
21:12 And I say that because if you go back all the way to what I was
21:16 talking about being very zen and into that curation step, right?
21:21 That curation step, Is, is in my mind meant to describe a
21:26 single like context, right?
21:29 So that could mean light mode.
21:30 That could mean dark mode.
21:31 That could be the Halloween theme.
21:33 That could be the Home Depot brand.
21:35 All of that stuff could be a single context.
21:38 And.
21:40 In that context, in that zen like state of curation, I’m only
21:44 thinking of that single context.
21:46 I’m not thinking while I’m curating light mode about what
21:51 this would be in dark mode.
21:53 There’s no reason to be context switching like that when you’re
21:57 in this curation mode, okay?
21:59 In this curation mode, you’re, I believe, Most effective in terms of
22:05 trying to create the values or set the values for every single semantic token
22:10 that you have with whatever value is meant to be and As one continuous set
22:15 for light mode, as an example, right?
22:17 Once you’re completed with that, then you go into dark mode and
22:21 you stay right there in dark mode.
22:22 There’s, again, I don’t see a reason why you would go back and forth because
22:26 the value that you would set for the button primary background color in
22:32 light mode has nothing to do with the value that you would set in dark mode.
22:37 Because they shouldn’t appear In the same context ever, right?
22:43 And I say ever a little bit in quotation marks because certainly
22:47 there’s different ways of scoping the mode as I’ve of course talked about
22:51 in previous episodes and elsewhere.
22:53 But when we’re talking about a holistic kind of conveying of an
22:58 expression, you want that button.
23:01 Primary background color to align with the rest of the colors and
23:05 other values that you’ve set in that one curation in that one scope.
23:10 And I bring this back to the token specification because in issue number
23:14 210, which is talking about modes and themes, there’s a lot of tree
23:19 like complexity in there that I think is going to make it very difficult.
23:26 For folks to manage tokens just easily I mean, just look at any
23:33 particular JSON file that, you know, has several levels, nesting of arrays
23:39 and objects and things like that.
23:40 And it makes it very hard to know what’s happening.
23:44 in that file.
23:46 And yes, there are visualizers out there, but every time I look at one
23:49 of those visualizers, I think I need a degree in, like, graph theory to
23:52 understand what’s going on here.
23:53 Again, imagine a very flat file that, with barely any nesting, that basically
23:59 just has token name and its value, maybe the type, if that’s helpful.
24:03 And that’s basically it.
24:06 And yes, this is coming from the person who created token operations.
24:09 And as complex as that is, I still am not entirely confident that we
24:14 need something like that as much as.
24:16 We need a simpler way of porting tokens between systems.
24:23 Right.
24:24 But yeah, like I said, I think the spec is turning a little bit into a monster
24:28 personally especially after some of the stuff that I saw with color recently,
24:33 that’s starting to bring in some of the new color spaces and I’m, I’m
24:37 just getting very confused personally as someone who’s color deficient.
24:41 But you know, I have my own.
24:43 Reasons to not enjoy color, but yeah, so the primitive set going all the way
24:48 back to that again as the kind of the the topic of today’s episode really
24:53 consider if you need that primitive set.
24:57 It’s entirely possible that you might not, and it just ends up being
25:01 more tokens that you need to manage.
25:04 Right.
25:04 And as a design system maintainer, I always recommend not introducing
25:09 tokens if you don’t need to.
25:11 And if you can keep everything as a hex color I think that would
25:13 be, or some color representation.
25:17 I say hex because I’m used to saying hex for the past 30 years, but.
25:21 Some color representation and that goes for any other set of tokens typography
25:25 space and etc, etc So I always recommend to reduce all those tokens because
25:30 the less tokens you manage the less managing that you need to do overall
25:35 and Just stick with the semantic set.
25:38 There was plenty of people in that thread.
25:39 I believe the original poster included that You know, and I guess that was his
25:46 real stance was that semantic is what we should really be focusing our energy
25:52 on, as opposed to any other tier of these tokens and really aligning with
25:58 what semantic is meant to provide would be a lot better use of the time than us
26:04 again, trying to, you know, create these color scales or typography scales and
26:08 represent them as some sort of token.
26:11 But anyway, let me know what you think on this.
26:13 I can imagine that’s going to be a little bit of a debate on here,
26:15 especially if you are already managing primitive tokens today, right?
26:19 I’m not saying for you to remove them from existence because,
26:22 you know, they already do exist.
26:24 And if you’re already managing them, that’s totally cool.
26:27 Certainly if you have a tool that’s helping you manage
26:29 these tokens, that’s great too.
26:31 But if you’re a person that’s starting out on there, again, I highly recommend
26:35 that you reconsider introducing new tokens into your ecosystems,
26:39 especially since you’re not expected to distribute these to your platform.
26:44 You know, keeping those decisions tight knit because you could always
26:47 add them as well if you believe that they would be helpful down the road,
26:51 especially if your team gets bigger and you need to communicate things
26:54 it could be helpful in that way.
26:56 But again, let me know what you think on that.
26:58 And if you have any opinions on the primitive set as a whole, do you need it?
27:02 Do we not need it?
27:03 Any other.
27:04 Considerations about why the primitive set might exist that I may have missed.
27:09 I admittedly again I don’t think I’ve missed anything in terms of The one
27:13 reason which is that team organizational piece that that comprehension piece
27:17 but i’m interested to know what you think on that and Other than that,
27:21 i’ll see you in the next one later