Contributing to our Design System at Wayfair
Your design system has now reached a point of maturity. You’ve established your component libraries, you have a standardized grid system, your themes have been set, adoption is high, and you have a well-rounded team in place ready to keep scaling this beast up. But a larger question still remains: How do we get users outside of our design system team to contribute in order to strengthen, grow, and even challenge the system? It’s these contributions that help our design system evolve — and it’s this continuous change that is critical to maintaining a highly performant design system.
Contributing to a Design System
Contribution to a design system is successful when a user of the design system proposes an enhancement or new component and completes that work all the way through implementation according to the design system governance and guidelines. Contribution comes in many forms; it could look like a change to the design, code, or documentation (or all three!) for a new feature, enhancement, or bug fix.
Why do these contributions matter? Let’s start with some context.
The Design System Is a Team Sport
“The Design System is owned by all of us.” At Wayfair, this is one of our strongest system value props, hence the team sport reference. The system is used across Wayfair’s (very large) organization and used day in and day out to help shape each and every one of our experiences. Contributing to the design system promotes:
- 🤝 Inclusiveness so that individuals feel like a part of the greater whole
- 🌎 Representation across all platforms and product teams
- 💪 A sense of ownership in that each contributor has a stake in the system
- ⚙ Skill development through exposure to new people, processes, and systems thinking
- ✅ Alignment across all users of the system
- 🙋 System advocacy to help share knowledge of the design system and evangelize its value
Most of all, contribution promotes scalability. We have a mighty design systems team here at Wayfair, but we don’t have enough hands (or hours in the day) to do all the work in order to make the system shine as bright as possible. And I’m sure your systems team can’t either. The more contributors we have, the faster we can scale the system and adapt to the needs of our ever-changing experiences. Think of it as a merry-go-round: The more people pushing it to spin, the faster it will go.
Wayfair’s Contribution Process
Ever since we launched the first iteration of the contribution process, we’ve been trying to find ways to enhance it. Why? It’s a high priority for our systems team to make sure our users feel empowered to own a “piece of the pie.” Giving them a seamless path for contribution is one such way to do that.
Our current proposal journey looks like this:
We start with the idea. If one of our users has an idea for a contribution, great! We send them to the ‘Contributions’ page on our internal systems documentation website, where they can find four different paths for contribution:
- Report an Issue: Squash bugs in code, fix issues in design assets, or edit guidelines
- Propose a System Icon: Create an icon that represents a specific action, page, or feature
- Propose an Enhancement: Rebuild an existing component and/or extend its functionality
- Propose a New Component: Add an entirely new component to the design system
Each path leads to a form outlining our contribution acceptance criteria, which are grounded in our system principles. These forms include key contextual questions like:
- What’s the user problem?
- How this problem relates to our guidelines
- Is the proposed solution scalable? Does your solution enhance more than one experience while serving a variety of end users?
- How has cross-platform integration been considered?
- How has accessibility been considered?
- What areas of the experience will be improved as a result of this proposed change?
Once the proposal is submitted, we have a proposal review. Our systems team holds a contribution review each week to go over any new proposals. In these meetings, we evaluate the proposal against our criteria to assess if it meets or doesn’t meet our guidelines (which are listed above.) This assessment gives us the opportunity to check if there’s a solution that already exists within our system, and also confirms that the proposed solution has taken into account all necessary criteria for acceptance.
If a proposal is accepted, the contributor will be assigned a buddy from our systems team to help scope and prioritize the work. Once that design/build is complete, congratulations are in order! The contributor deserves recognition for making a positive impact on our design system! We do this by thanking them in the release note and we also plan to eventually add contributors to each individual component or guideline page they impacted.
In the event that the proposal does not meet our acceptance criteria, the proposal is sent back to the contributor with clear feedback about what criteria were not met. The contributor can review and resubmit the proposal if they are able to provide additional information.
Process Practice Makes Perfect
We totally understand that this is a complicated process. However, contributing to the system is complicated when you hold such a high standard for your system. We continue to spend time working with our internal team and external stakeholders in order to balance these high standards with a manageable process. For example, we recently conducted an internal workshop with the goal of identifying opportunity areas for improving the contribution process. Here’s what we found out:
- The contribution process can be lengthy and intimidating
- Proposals are often sent back to contributors seeking more information
- The proposal evaluation process isn’t clear to external teams
- The scope of the proposal isn’t always clear to the systems team
- There are a lot of different communication methods between contributors and the systems team
- There aren’t enough contributors outside of the systems team (most of our contributions come directly from our systems team)
- There isn’t a strong incentive for external partners to contribute
- The systems team doesn’t always have resources to act on all accepted proposals
Whew! The list of findings was certainly long, but certainly helpful! We used these learnings to inform and develop an enhanced contribution process. We also learned some great best practices along the way that we implemented into the new process.
Have No Fear, Best Practices Are Here
During our discovery phase, we came up with a list of best practices for both the systems team and our contributors. We used them to guide our contribution process enhancements.
- 🔍 Show contributors what a “good” proposal looks like. Provide examples of a well-written proposal so that contributors can base their own submissions off of them.
- ⏰ Set clear timelines for, well, everything. Put limits on how long a proposal can sit in a backlog or another queue, create a clear prioritization framework, and be transparent with contributors about proposal timelines.
- 🤝 Foster a partnership. Assign a lead/owner from the systems team to each proposal to help contributors stay more engaged along the way.
- 🎤 Be transparent about the review process. Make sure that the teammates submitting proposals understand the evaluation criteria and why their proposal might get accepted or declined. Doing so will empower the team to write a stronger proposal that is aligned with the system principles.
- 🔭 Identify and track proposal scope. Create a few distinct proposal paths to help differentiate types of submissions. For example, consider creating a proposal path for small bugs in code, and a different one for larger-scale changes (like net-new component builds). Having separate paths depending on proposal scale will help your team better track and prioritize the work at hand.
- 👁 Increase proposal visibility. Consider a public-facing proposal board and contribution review to help make proposals more visible, engage the community, and encourage more teammates to proactively submit proposals.
- ⚓ Centralize all things contribution. Assign a primary home for all things contribution. Currently, we house everything on a JIRA board and have created an automation that generates tickets from every proposal submitted through our website (and sends those tickets right to the JIRA proposal board!).
- 🎉 Celebrate proposals! Give credit where credit’s due! Show your appreciation for contributors’ hard work and the meaningful part they’ve just played in strengthening the design system! Recognition also helps create a sense of community around the design system (which, in turn, will lead to more contributions!)
Putting Our Process to Work
With the guidance of the above best practices, the Wayfair design systems team has just launched a new and improved contribution process! While we are confident that the enhancements are a step in the right direction, we intend to keep the process flexible and we will be inviting feedback from our users about how it is (or isn’t) working.
We’ll collect metrics on contribution proposals (e.g., how many proposals we’re getting each week, how large the scope is, what the turnaround is for each proposal) and figure out how to more effectively celebrate our users for their contributions!
Don’t stress about making your contribution process perfect the first time around. It’s a complex process based on a complex system.
What makes your design system’s contribution process unique? The more inspiration, the better!
— — — —
Also, a huge shoutout to the Homebase design system team and product partners for participating in the enhancement of this contribution process. Many thanks to Sara Heilbronner, Jessie Rogers, Alison Colby, and Simone Orlowski for providing thoughtful feedback on this article before publication!