Product Design is a continuous and an iterative process.
Managing design improvements on the go and handing off newly minted designs to the development teams gets very tricky especially when the team handles a complex product.
- Screen-wise or page-wise design and development handoff is too rudimentary. What worked for simple websites, doesn't work for large products. An application is far more dynamic and complex. A number of interconnections and states must be considered.
- It gets extremely difficult for designers to explain all the application states and responsive variants in a document using static mockups for the development teams.
- Design iterations are hard on development teams. They get blocked by design teams. If they proceed without final designs in place typically inconsistency creeps in.
In a nutshell, managing design at scale is a nightmare.
Moving from page-based approach into a component-based model (atomic design) optimised design-developer workflows. But reusable components alone wasn't enough.
With component libraries in place, multiple sources of truth existed in many places (design tool, code, documentation) and without a governance model it was hard to improve the reusable components. This gave birth to a new way of working: Design Systems.
In a nutshell, a design system is product (scalable and repeatable system) that serves products. It can't be treated as a one-off project.
A design system is a time and energy intensive proposition. It requires a dedicated team to maintain and upgrade. It takes training for the product team to adopt and adapt to the design system. So for simple and one-off projects, a design system is not needed. Just a pattern library is good enough. Creating a design system for every project is like killing a mosquito with a bazooka.
A design system must include both tangible and intangible aspects of building scalable complex products (code, philosophy, libraries, principles and guidelines).
Whenever we build a design system for ourselves or our clients, we ensure it contains design language, design tenets, documentation, style libraries, component libraries, a sandbox to play around, best practices and a governance model that helps in managing the system.
Design system is a perfect example of Gall's Law.
John Gall said every complex system that works was invariably created from a simple system, and that every complex system that was created from scratch as a complex system always breaks and fails and cannot be patched to work.
A good design system helps in operationalising and optimising design efforts in a large organisation. Without good governance, a great design system can become unwieldy collections of components and code that makes product teams lives a living hell.
🥂 to design systems!