Context

Binder is a school management web app designed for school staff to manage school assets, monitor availability, submit tickets, oversee both staff and students, and integrate with platforms such as Microsoft 365.

When I joined as the only designer on deck, I had a huge task as there was no established design language or UI kit. With a clear disconnect between existing designs and actual code, plus a strong need for product scalability, I took on the challenge of building a design system from scratch.

PROBLEM

No design language or UI Kit in place

When I joined, there was no design language or UI kit in place. Engineers relied on an open-source library and hard-coded elements from basic BA wireframes, leading to inconsistent designs across the app. Because both in-house and freelance teams were working on different features simultaneously, these inconsistencies piled up in the code, dragging out the UI testing phase and delaying launches.

The initial process included BA drawing wireframes and sending them straight to dev without UX/UI consultation

PROJECT GOALS

For the Product & Team

  1. Establish a single source of truth to align design and development efforts, improve efficiency, and ensure scalability

  2. Ensure the system is easily understood, maintainable, and scalable. Most importantly, it needs to be simple to adopt for all teams

  3. Minimise repetitive design decisions and reduce QA issues stemming from UI inconsistencies

For Users

  1. Deliver a cohesive and accessible interface that reinforces Binder’s brand

  2. Improve usability through consistent design patterns and interactions

  3. Boost user confidence in the platform’s reliability and professionalism

Understand the problem

Too many variants!

The first thing I did was conduct a quick audit. I discovered the common problem was that there were too many variants of each component. This was caused by a lack of a proper design system with up-to-date documentation and the inconsistent assets that developers chose to implement. At the time, the developer chose an open-source UI kit with limited customisation ability to save time in the development process.


pain points

For Designers

  1. Detached components due to new variants need to be created quickly. Resulted in too many variants and an unorganised library

  2. Repeatedly tested and flagged the same inconsistent UI patterns

  3. Spent too much time “quality checking” code to ensure design alignment rather than developing new features with higher impact

For Designers

  1. Detached components due to new variants need to be created quickly. Resulted in too many variants and an unorganised library

  2. Repeatedly tested and flagged the same inconsistent UI patterns

  3. Spent too much time “quality checking” code to ensure design alignment rather than developing new features with higher impact

For Developers

  1. Time constraints pressured them to hard-code

  2. No clear and established guidelines for states, behaviors, or interactions

  3. Technical limitation due to the chosen UI library package

  4. Mixing in-house and freelance work led to fragmented code

For Developers

  1. Time constraints pressured them to hard-code

  2. No clear and established guidelines for states, behaviors, or interactions

  3. Technical limitation due to the chosen UI library package

  4. Mixing in-house and freelance work led to fragmented code

How might we create a design system that is simple, scalable, and easy to adopt by designers and developers?

How might we create a design system that is simple, scalable, and easy to adopt by designers and developers?

How might we create a design system that is simple, scalable, and easy to adopt by designers and developers?

How might we create a design system that is simple, scalable, and easy to adopt by designers and developers?

Our approach

Prioritising core components

Due to time constraints, I focused on the most frequently used and high-impact components first, like text fields and buttons. Throughout this process, I worked closely with the development team to identify common components and discuss implementation details. We then created a table to map out all the components we needed at the time. This helps us visualise the prioritisation of resources and the expected timeframe to make sure the library implementation aligns with the product roadmap.

Establishing a design system foundation

I began by establishing a consistent brand style, choosing a cohesive color palette, and a clear type scale to create a unified experience. For easier implementation, I also introduced a straightforward naming convention—using descriptive prefixes and suffixes (e.g., text-primary, “background-secondary”)—to keep text styles, states, and background layers well-organised.

My foundations include the style, effects, and structure that are used in the creation of components within the design system. It includes colours, typography, spacing, border, and shadows.

Incorporating the Atomic Design principle to create a shared design language

This was my first time building a design system, and applying the Atomic Design principle was very helpful to me. We started with atom-level components, then assembled them into molecules, organisms, and finally templates. This structure gave us a more organised library with reusable components, ultimately improving consistency, efficiency, and scalability.

A quick peek at how I organised the components using the Atomic Design principle

Elevating collaboration through best practices

While creating our design system, I made sure to follow key design principles that streamlined both design and development.

I used a consistent naming convention for component properties to reduce cognitive load when searching for the right elements, grouped related variants and properties to keep the interface organised, and nested instances for complex components to maintain clarity. I also adopted slot components to avoid detaching elements, preserving the overall structure while allowing flexibility for different design contexts. Each component also has its documentation, including all variants, states, and other dimensions, followed by usage guidelines for easier implementation.

Additionally, introducing Dev Mode in Figma helped developers pull accurate specs directly from the designs, boosting efficiency and reducing back-and-forth debugging.

Outcomes & IMPACTs

So… did it work?

The before and after applying the design system to one feature.

The design system is a continuous work-in-progress, but even in its current form, it has already streamlined how designers and developers collaborate. To see if it meets the goals we initially set, let’s break it down:

  1. Understandable: using the Atomic Design framework makes it straightforward for both designers and developers to understand how components are built. We now rely on a single, dedicated Binder library, preventing confusion and ensuring everyone references the same guidelines. This clarity also makes onboarding new team members a breeze.

  2. Scalable: by organising components into reusable building blocks, we can quickly expand the library to support new features, pages, and entire product lines without starting from scratch.

  3. Maintainable: consistent naming conventions and usage best practices mean any changes made at the atomic level automatically roll out across the system. Everything is documented under a single set of guidelines, keeping maintenance simple.

  4. Simple to adopt: our design system is fully integrated into our Figma workflows, giving both new and experienced team members immediate access. The step-by-step documentation lowers the learning curve and ensures smooth adoption.

  5. Efficiency: standardised elements significantly cut down the back-and-forth during QA, letting the team focus on building new features instead of fixing UI issues. Designers and developers stay aligned by sharing updates in Figma and chat tools, accelerating feedback loops.

    By centralising all design decisions into one single source of truth, the final UI remains visually and functionally coherent across different platforms and features, minimising rework and confusion.

In short, while there’s always room for refinement, the system already delivers on its promise: it helps teams work more efficiently, ensures consistency, and makes ongoing iteration much smoother.

50% faster design-to-development handoff

50% faster design-to-development handoff

Significant reduction in UI-related bug reports

Significant reduction in UI-related bug reports

Increased brand recognition due to consistent visuals

Increased brand recognition due to consistent visuals

REFLECTIONS

Challenges & Lessons

  • Dev Involvement from Day One: Integrating developer feedback into the earliest design phases would have prevented the initial adoption issues.

  • Continuous Communication: Regular check-ins and design critiques proved essential in keeping everyone aligned.

  • Documentation Maintenance: A design system is never “finished.” Keeping documentation current is crucial to ongoing success.

Next Plan

  • Storybook Integration: Request the implementation of Storybook for a robust master component library that developers can reference in real time.

  • Improved Onboarding: Create quick-start guides or mini-tutorials to get new team members up to speed on the design system.

  • Ongoing Feedback Loop: Regularly survey developers and stakeholders to refine components and guidelines.

© made by Kate with ♥ 2025

© made by Kate with ♥ 2025

© made by Kate with ♥ 2025

© made by Kate with ♥ 2025