I often wonder whether it should be a component first approach or what exactly should be the strategy to build a design system.
The approach to designing and implementing a Design System is generally based on the particular need or the problem that you want to solve. This could be to try and standardise the look & feel due to a divergence of the UI even though the same design patterns are used, or to provide a systematic and consistent way of extending a particular design language or how UI components are put together.
You also have to evaluate the amount of time and resources that can be dedicated to creating and maintaining the design system, since it has to be treated like a project or product to keep it healthy. This is why some teams will adopt a design system that is most similar to their current requirements, and why other teams will create one from scratch because the effort of tweaking various components is not justified when there is less issues starting from a clean slate.
Finally, you have to think about the ideal state of the design system and what type of digital ecosystem it will have to support. If you find that products are diverging and there is probably a need for different design systems to support each product, then you'll have to do the analysis and work out where to draw the line when it comes to the look and feel of the different design systems.
I think there are various strategies to decide and approach in building a design System.
I have read the Atomic Design by Brad Frost recently that is amazing place to understand what is one of the optimal approaches towards building a design system.
Modular approach is always efficient and flexible.
That really depends on what stage you are at right now. If the design hasn't existed yet, then you can start by creating a simple but ideal design system library.
If the design has already existed and you want to start building a design system, here are some high-level steps from my experience:
- Document the most used components iteratively.
- Once documented properly, new projects shall use the new components from the design system.
- List down legacy components that already live, work with the PM to renew them iteratively.
Hope this helps.