What's wrong with atomic design?
Atomic Design is a way of organising a design system from small components to large components. These components are referred to as atoms, molecules, organisms, templates, and pages. They all work together to create an effective interface design system. An atom is the smallest building block and combines with other atoms to form molecules. A button is considered to be an atom and when combined with other elements like an input field it will create a form which is considered to be a molecule.
Atomic design's flaw
Sounds great eh? But wait, Atomic Design has one flaw that makes it difficult to work with.
So you've organised your design components into atoms, molecules, organisms, templates and you feel like some kind of design god. Then you come to look for those components when building a design like a form on a website. In your design god head, buttons and more complicated things a dropdown button are fairly similar. But according to Atomic Design they sit in two different categories. We have now encountered the problem that is technically know as, "Is this an atom or a molecule, what the hell is it, Jimmy?".
They are both navigational tools that should sit somewhere in the same group but in Atomic Design they are split based on their complexity. It would make more sense to organise components into groups based on their functionality.
At Bridge Studio we encountered this problem when creating a design system from scratch for one of our clients. Atomic Design was actually a useful frame work to use when creating the components. We started with the smallest components then worked our way up to combining them to create more complicated molecules and organisms. However, halfway through this we realised its flaw. We decided to finish creating the components in this manner and then reorganised them in a more logical way after. This is how we organised our design system:
Foundation
This is the core of our design system and will effect everything going forward. It contains the following elements:
- Colour
- Typography
- Spacing
- The grid
Components
These are the building blocks we use to create our pages. They are then divided into sub groups based on functionality. This section also include things like modal windows that contain various smaller elements. Here are just some examples components:
- Buttons > Buttons with icons, dropdowns, dropdowns with search, etc.
- Icons
- Input fields > Search, text inputs, date inputs
- Selectors > Check boxes, Radios, Toggles
- Date picker
- Modal popup > basic alerts, popups with text inputs
Components
These are pages that have examples of the most common UI elements. They show how the design system works and also serves as starting templates when creating new designs. Here are some examples:
- Home page
- Sign up page
- Contact page
This is how we went about organising our design system but I'm sure there are many other ways of doing it. This is just what suited us at the time.
Advantages of this system:
No illogical boundaries between sections.
Disadvantages of this system:
It can create long lists of components that take a while to search.
At the end of the day design systems are humongous beasts that will take some time to tame. Because of their complex nature they will always be difficult to organise. It does take time to get to know how to use them but if created correctly they will be a great asset for your team.
Senior Software Engineer | React.js & TypeScript Expert | Crafting High-Performance, Responsive, and Accessible Web Experiences
7 个月There are flaws in atomic design, but the problem you describe is more related to a particular preference for another component system and the friction it generates when switching to atomic design. "They are both navigational tools that should sit somewhere in the same group". That is not true in atomic design. That is part of a preconception taken for the experience of working with another approach. The real problems of the design appear when you completely adopt the philosophy of atomic design and start to see repeating patterns or pain points like prop drilling, the ever-repeating question about when to abstract and when not, or how to avoid duplications with "almost similar" components or even component repeated on different categories. If I manage global dependencies only in pages I win making more testable components but I start doing prop drilling because a simple "loading" state in a button now should pass over 3 or 4 layers of components. There are also strategies to mitigate those flaws like composition, render functions, global state, and a good sense of "when to do that" because all in development has its pros and cons.
User Experience Design | Service/Process Design | UI/Interaction Design | Human-Centered Design | Design Leader | Design Strategy
1 年You have "Components" as sub-headers for two different sections. I think the second one was probably meant to be "Templates" or "Pages?" Otherwise, I appreciate the thinking here. Thanks! :)
Senior Software Engineer | Full Stack Engineer | ASP.NET | Node.Js | React | Next.Js | AWS | Azure | Docker
2 年Can I plug an atom inside another atom? As I want to keep all my text styles in one place and then use them in buttons.
Motion Designer Pleno
2 年As stated in the Atomic Design book by Brad Frost, you can bend the rules and definitions of this methodology according to your needs. Being that the case, I have seen different systems defining Buttons as Atoms or as Molecules. It all comes down to what you find easier when creating your design system. I personally think the nomenclature of the Atomic Design Methodology helps stablish a hierarchy for the components. Still, it was insightful to read about how you organized your design system. Thanks!
React/Go - Full Stack Developer (Remote)
2 年I was trying to implement the same, then I have some questions regarding atomic design. Am I able to call an atom directly into an organism? or a molecule in a template? Or I need to follow strict atom> mol > org> templ ?