An incoherent rant about design systems
No matter how fancy your Figma file is or how beautiful and lovingly well organized that Storybook documentation is; the front-end is always your source of truth. You can hate it as much as you likeâall those weird buttons, variables, inaccessible form inputsâbut that right there is your design system.
You canât cherry pick what is and isnât your design system just because it might make you feel icky inside. Why? If we canât look at the thing clearly, or if we pretend itâs better than it is, then weâll never fix the tech debt, the inaccessibility problems, or the confusion that haunts engineers and designers every day.
Sometimes this is tough because a lot of folks donât want to acknowledge how bad the design system is. It feels like youâre throwing the engineers and designers under the bus or it sounds cynical. Youâre insulting all that hard work that went into this...ahem...âsystemâ.
Anyway, the front-end is the source of truth. All of the front-end. The component library you have divvied up into neat little buckets but also the rest of the app. Your design system is the eight inconsistent select inputs.
So being honest about this is the first step to fixing it.
But wait, if designers are looking at Figma or Sketch all day, then isnât Figma the design system? Shouldnât our design system be aspirational, delightful?
Nope! Screw delight. The delightful part of any design system is simply the lack of confusion, the ease of use. And pretending that Figma is the source of truth is only going to add to the confusion. Iâve worked with folks who want the design system in Figma to be this beautiful, aspirational thing. They want it to be the shining city on the hill, the place that engineers can one day hope to build. âWhat if our buttons looked like this? What if our imaginations were let loose and we used font-weights like that?â
Great. But now Iâm confused as hell. What are the font-sizes of a tables? What icons should I be using? Whatâs actually available in the front-end for my engineers to take and run with? What do they have to build from scratch?
Hereâs my advice: take all that aspirational stuff out of your Figma design system file. Put it somewhere else. Your Figma docs should be a mirror of the front-end (because thatâs really the source of truth) and when an update is made then you should update Figma immediately after the fact.
Look. I donât want to go into Figma and try to parse what is and isnât usable right now. Like when Iâm driving a car, I donât want a button that is aspirationally useful. I want a button that works when I click it. I want to drag and drop in a component and then an engineer see that and know that itâs available in Storybook under the same name as it was in Figma.
But this is hard! You may be refactoring buttons, icons, and all sorts of other great things in the front-end all the time, but if you donât spend just as much time in Figma making sure everything is correctly documented then you could cause things to be out of sync, and more confusion will appear.
But Figma will always be out of sync with the front-end and thatâs okay. We have to pick and choose which parts of the front-end we should make a mirror-image of. Do we need all the form styles? Nah, just what most designers need each day to get their work done.
The hard truth is this; your Figma docs should be treated like a sketch on the back of a napkin. It should be somewhat accurate but itâs a tool that reflects the front-end, but: it ainât your design system.