The Design System Ecosystem
bradfrost.com
bradfrost.com
A possible exception to this is some CMS systems I've dealt with that can sometimes tell you this, but they don't typically cover the whole of the product's UX. But I do wish the tech stacks would recognize this issue.
I’ve been away from development for quite a while but I remember using simpler tools before the days of easy-to-use post processors.
Here is how to use Grep to look for occurrences of specific classes, elements, etc to tweak/track or do something with it. https://brajeshwar.com/2013/hijacking-developer-tools-optimi...
I gave it a try on just our public login page and it said "no pages found" - perhaps it doesn't work for single page apps?
I built a dashboard to display this for the design system I work on at my day job to give product designers better visibility into production, using a library called react-scanner[0] and some logic related to the way our different product repos are structured / places where the component names are different between figma and react. there are probably other libraries for this sort of thing in different ecosystems, and you can always build your own with a parser as well.
I'm on the design systems slack channel, for instance, and I see designers asking all the time about react or whatever. The chosen technology stack should be an implementation detail from the perspective of the design team.
Yes, it's an implementation detail. But it's not an invisible detail. The choice of framework affects the capabilities of your design system. Choose poorly and you're stuck with an expensive bad decision.
I'm interested in seeing design and dev work closer together, but I think what will help them best is an interface that clearly defines the roles and responsibilities of both groups.
Here's the thing: nobody builds a design system for themselves—well, maybe they do, but it really doesn't matter what you choose if that's your prerogative.
Design systems are about people. It's about getting your whole company on one page and making a broad set of UIs look good and consistent. Sure, you can build your design system with anything or nothing, but the point is making sure it's well-used, and the framework you use is an absolutely paramount part of that.
In my usage of the term “framework”, I mean the UI technology used to implement the product UI. So if a design system is “built in React”, it means that any usage of the DS must also be in React.
If that definition holds true, then making consistent UI across a company basically requires that the DS be not only framework-agnostic but platform-agnostic as well.
My favorite example for this problem is Netflix. You could restore a BlackBerry from 2005 that you found at a pawn shop and it would probably have a Netflix app on it. They might be the most ubiquitous technology on the planet. This means their UX has to be consistent between iOS, Android, TV, Web, PlayStation, Xbox, etc.
Even on the web, you have the experience itself, as well as several backend/b2b and internal UIs.
At that scale, the question of “react vs vue vs htmx” is waaaay out of scope, no?
Nobody expects all of these platforms implemented to be a single codebase (though you perhaps could). The intention of a design system is for all of the UIs to be consistent, not all of the underlying code. Zero people expect a button component for the PS5 to work on the Web. And of course they wouldn't! One is clicked and tapped and one is interacted with a controller.
Stripe is a great example of this. Their design system, SAIL, runs on every web surface (internal and external) at the company. And ignoring versioning, it's essentially one design system codebase. But that doesn't mean they aren't principled about using React. Their latest major version was originally going to be multi-framework but that plan was scrapped because it meant sacrificing composability. There's exactly one way to build UIs for the web.
No, you could not. There were never any versions of Netflix that ran directly on any BlackBerry OS, unless you count the Android ports that some folks managed to port and get running on BlackBerry 10 devices as the platform was dying around 2014 or so…
It wasn’t just a joke, you were trying to make a point about how it’s possible to have a design / UI that’s so ubiquitous it can run anywhere, which I disagree with, and your point isn’t helped by a false and exaggerated example.
And again with the literalism - you think I meant "run anywhere"? I said "consistent UI", as in the branding and UX, not literally the same code. That does need to be consistent, and it's a well-known problem when supporting lots of different platforms, as Netflix themselves point out:
https://netflixtechblog.com/hawkins-diving-into-the-reasonin....
I understand it's a problem, I think it's quite hard, I appreciate that Netflix does a reasonable job, I still don't think your joke works the way you think it does.
Let me break it down further and attempt to fix it so I can perhaps disabuse you of the notion that I'm so far out on the spectrum I'm incapable of communicating effectively or understanding humor (way to slander "techies" by the way, your "design thinking" superiority complex is showing).
You said: "My favorite example for this problem is Netflix. You could restore a BlackBerry from 2005 that you found at a pawn shop and it would probably have a Netflix app on it."
A version that actually works as a "joke" - aside, I hate the use of that word here, since it's an insult to the craft (1): "Netflix has to work anywhere - their design is so consistent, flexible and ubiquitous it would have worked on on a BlackBerry from 2005... in screen reader mode."
29472 different frameworms mean nothing is cross compatible and you have to reimplement.
It might not be design layer.... But I'm more than happy to learn a new technology(Within reason) to get more reuse. They're mostly all the same anyway, learning a new framework is easier than creating new code.
90% of the time it was basically a theme, and we implemented using Bootstrap and its primitives/components were fine.
You can contribute by responding to the discussions in the backlog[0], by improving the actual distributed styles and code[1] or suggesting improvements to the documentation in the link I posted above.
Bigger changes need to be backed up with user research, evidence of user needs and accessibility reviews and checks.
That leaves an engineering team to implement using the tools they are comfortable with and what works with their stack.
Though often, it’s just incredibly pragmatic to conflate the two. You don’t ship figma files to users.
I work on a very large product that has 100+ product teams using my core team's design system. The number of "recipes" that are created is enormous. The number of duplicate recipes that are created is enormous (teams creating the same combination of components over and over and over). The number of recipes shared between product teams is enormous. It's a massive, chaotic web of componentry.
There's no way to control the chaos. And you wouldn't want to - that would stifle product team independence, creativity, and speed. The only thing you can do is try to have the right system and incentives in place to nudge people in the right direction to improve the overall health of the ecosystem. Oh and you also need to figure out how to measure the health of this ecosystem...
I was hoping this post would have a cute framework for that, but it doesn't.
They're great ideas; many very useful in practice, but I feel like it's easy to over-systematise design... your observation about the "recipes" being a great example.