Homepage

/

Solving Design Debt: Foundation Build Tictag Design System

My Legal Pro…

Redefining visual consistency: My role in establishing and…

Tictag

Design System

Project type: 0 to 1

Solving Design Debt: Foundation Build Tictag Design System

Build a design system and foundation, fix design debts and implement new design system to the product apps.

My Role :

Design system, UI designer, visual designer

Timeline

February - March 2025

10 mins read

Tictag

Project Background

Tictag is a Singapore-based startup specializing in data annotation and collection for AI and machine learning (ML) models. The company provides a gamified, mobile-first platform that leverages crowdsourcing to collect, annotate, and manage various types of data, including images, text, and audio

This is a part-time project. In order to create a proper and scalable design system, with my expertise in design systems, Tictag recruited me to help them build & create a proper design system and its documentation in the design system building project, this project lasted 2 months with the division of the first month focusing on creating and building a design system using the Atomic Design method, then the second month was re-skinning.

Scope of projects :

  • Proper design foundation such as color, typography, design tokens, variables, naming, brand guidelines, design storybooks

  • Design components that gonna be use by designer

  • Re-skinning current interface on apps

  • Maintain design system consistency

Design Debts

Design debt refers to the accumulation of design inconsistencies, inefficiencies, or usability issues that arise over time in a product due to rushed decisions, lack of documentation, or poor maintenance of design systems. It is similar to technical debt, where shortcuts in development lead to long-term issues that require costly fixes. What causes design debts in Tictag design?

  • Internal design teams are on high peak of project backlog. They have time limitation to pickup a design system and make documentation. While the project must go on without any proper design system, it might increase scalability of design debts

  • Lack of a design system – Without a structured design system, teams may create inconsistent UI components, leading to a fragmented user experience.

  • Short-term thinking – Prioritizing speed over design consistency, leading to temporary solutions that become permanent problems.

Impact of design debts :

  • Inconsistent UI/UX: Users experience confusion due to mismatched patterns or components.

  • Higher Development Costs: Developers spend more time fixing inconsistencies rather than building new features.

  • Longer Onboarding for Designers: New designers struggle to navigate an unstructured design ecosystem.

  • Reduced Brand Cohesion: A disjointed design language weakens brand identity and credibility.

Project Details

Image: Interface audit (one of pages that I did audit)

Why Do I Conduct This Audit?

  • Ensure consistency across products.

  • Improve design efficiency and developer handoff.

  • Reduce design debt and component redundancy.

  • Align the system with brand and accessibility guidelines.

  • Identify gaps in documentation and usage.

From the audit, I can arrange my plan to move on to the next step

Define Scope & Goals

Determine what aspects we’re auditing

  • UI components

  • Typography

  • Accessibility

  • Colors

  • Identify the key stakeholders

  • Designers

  • Developers

  • Product managers

  • Set measurable goals

  • Reduce duplicate components by 20%

Identify Redundancies & Gaps

  • Remove unnecessary variants.

  • Merge similar components.

  • Create missing components or guidelines.

Prioritize & Implement Fixes

  • Categorize issues based on severity (high, medium, low).

  • Collaborate with teams to update the system iteratively.

Evaluate Key Areas

UI Components

  • Check for duplicate or outdated components.

  • Ensure proper naming conventions and categorization.

  • Validate spacing, padding, and alignment consistency.

Typography

  • Audit font styles, sizes, and usage across different products.

  • Ensure correct implementation in both design and code.

Color & Theming

  • Identify inconsistent color usage (e.g., multiple shades of the same color).

  • Verify contrast ratios for accessibility compliance (WCAG guidelines).

Spacing & Layout

  • Standardize spacing values (e.g., 4px, 8px, 16px).

  • Ensure a responsive grid system.

Icons & Illustrations

  • Check for uniformity in icon styles and sizes.

  • Avoid unnecessary variations of the same icon.

Accessibility Compliance

  • Verify color contrast ratios.

  • Audit navigation and screen reader support.

Documentation & Guidelines

  • Ensure every component has usage guidelines.

Project Constraints

After the first brief with related stakeholders, this design system project will more or less take references from Google's Material Design 3. This is done to speed up the development process because the developer team can take the source from the Material 3 library, and I can copy and tweak Google's Material 3 design components according to Tictag's needs.

I divided design process into 2 sections, first one is build design foundation that include atoms component, and second one is design system components

Design Process 1: Build the Design Foundations

Colors

Primary Color Scheme

Tictag already has its own brand color. From this brand color, it will be used as an identity and I will apply it to the primary action in the application interface

Semantic Color Scheme

For semantic color, I use Vuetify color generator library, this decision was taken based on a discussion with developer team that give a suggestion to use color generator instead of create it from scratch, for faster development later on.

Neutral Color Shades

For semantic color, I use Vuetify color generator library, this decision was taken based on a discussion with developer team that give a suggestion to use color generator instead of create it from scratch, for faster development later on.

Color Token Mapping

Design tokens are named variables that store design-related values such as colors, typography, spacing, and more. They help bridge the gap between design and code by ensuring consistency across platforms and making UI updates more efficient. Why is design tokens important?

🔹 Scalability – Easily update styles across multiple platforms (Web, iOS, Android) without rewriting code.
🔹 Consistency – Ensures uniformity in UI components by using the same set of values.
🔹 Efficiency – Reduces redundant styling work and makes theme updates faster.
🔹 Cross-Platform Support – Works with CSS, JSON, SCSS, Tailwind, Swift, Android XML, and more.

Design tokens bridge design and development, ensuring a consistent, scalable, and efficient way to manage styles across platforms.

Design tokens should be applied in all aspects of design system to maintain the consistency

Bring it on to Figma Local Variable

In building a consistent and measurable design system, we have used the atomic design approach from the start. However, the implementation of atomic design did not go so well because when changing the color hex code, it did not have implications for the global assets.

But this problem can be solved when the Figma variable feature is released, because we can build from the smallest atom, which has not been given a specific name or for a specific role.

  • Primitive : All basic brand colors, numbers, etc, not assign a role, just pure hex code & number

  • Alias : It’s starting assign the purpose of each defining items

  • Mapped : Giving alias specific role

We took a systematic approach by grouping our variables into logical categories:

  • Color Variables : Primary, Secondary, Background, Border, State (Hover, Active, Disabled)

  • Spacing Variables : Small, Medium, Large

  • Typography Variables : Heading, Body, Caption, Button

  • Radius & Shadows : Standardized corner radii and elevation levels

By doing this, we ensured that every element in the UI referenced a variable instead of being hardcoded, making future updates effortless.

Primitive Level

Primitive variables are the core values of design system. They store raw, unlinked values such as colors, spacing, typography, and numbers.

At this primitive level, all kinds of colors, numbers used are in their original or raw form. We have not identified these colors for what specific task. As seen in the image on the side, there is only the color name and the color palette number.

Alias Level

Alias variables are references to other variables instead of direct values. They allow to create contextual relationships between design elements.

Alias ​​level is when the color is associated with a certain task. For example, here the color navy is the Primary color that will be used for the color of buttons, navigation, tabbing and so on. Likewise with other semantic colors such as red for error indicators, green for success indicators and so on.

To assign an alias, you can right click, then when the pop up menu appears select "Create alias".

Mapped Level

Mapped variables allow you to switch variable values based on different modes (e.g., Text colors, background, icon, etc).

Typography

Roboto Family

I choose Roboto font family, because it was an instruction from PM, for faster development process just use the font by Google Material 3. Because the design system should be consider to use Material 3 components and tweak it little bit.

Typography properties

Typography tokens

Guidelines

Bring it on to Figma Local Variable

In building a consistent and measurable design system, we have used the atomic design approach from the start. However, the implementation of atomic design did not go so well because when changing the font properties, it did not have implications for the global assets.

But this problem can be solved when the Figma variable feature is released, because we can build from the smallest atom, which has not been given a specific name or for a specific role.

Primitive Level

Primitive variables are the core values of design system. They store raw, unlinked values such as text spacing, typography, font weight, and numbers.

Alias Level

Alias variables are references to other variables instead of direct values. They allow to create contextual relationships between design elements.

Alias ​​level is when the type style is associated with a certain task.

Typography doesn’t have a complex structure like colors, so we only need 2 levels of tokens instead of 3 just like colors.

Scaling / Spacing Values

Scaling or Spacing methods use baseline grids, keylines, padding, and incremental spacing to adjust ratios, containers, and touch targets.

Elevation

Elevation in Material Design is measured as the distance between Material surfaces. The distance from the front of one Material surface to the front of another is measured along the z-axis in density-independent pixels (dps) and depicted (by default) using shadows.

Design Process 2: Build Design Components

Button Components & Variants

Input Text Field Components & Variants

Checkboxes Components & Variants

Radio Button Components & Variants

Switch Components & Variants

Chips Components & Variants

Accordion Components & Variants

Bottom Sheet Components & Variants

Bottom sheet is likely to have many use cases when I discuss and confirm with related stakeholders. So the interface for the bottom sheet must also accommodate this need so that it produces quite a lot of interface variations.

Snackbar Components & Variants

Bottom Navigation Components & Variants

Here are some setup documentation that I made for system design documentation. Setup documentation is like a manual document for implementation.

Button Components

Buttons help people take actions, such as sending an email, sharing a document, or liking a comment. Each screen should contain a single prominent button for the primary action. This high-emphasis button commands the most attention. The arrangement of on-screen elements should clearly communicate that other buttons are less important.

Specs

In addition to creating button variations and specifications, I also wrote down rules of thumbs and do's & don'ts. This is important because in using buttons, there are certain rules that must be understood, and this is also to make documentation easier for new designers who will join in the future.

Do’s and Dont’s

When using multiple buttons, you can place an outlined button (medium emphasis) next to a filled button (high emphasis).

Use a filled button on its own for a single important action.

Maintain Visual Hierarchy – Differentiate between primary, secondary, and tertiary buttons using color, size, or styling.

Don’t overuse primary button in one page

Don’t use more than 1 primary CTA in one page

Don't Rely Solely on Color – Use underlined alongside color to differentiate button states for color-blind users.

Input Text Fields

5

6

1

2

3

4

1 Container

2 Leading icon (optional)

3 Label title

4 Label text

5 Trailing icon (optional)

6 Supporting text (optional)

Specs & Anatomy

Defining the anatomy of checkboxes and their variations, so that implementation in the development process is more actual.

Guidelines

Use a text field when someone needs to enter text into a UI, such as filling in contact or payment information.

Containers

Containers improve the discoverability of text fields by creating contrast between the text field and surrounding content.


Fill and stroke
A text field container has a fill and a stroke (either around the entire container, or just the bottom edge). The color and thickness of a stroke can change to indicate when the text field is active. 

Containers improve the discoverability of text fields by creating contrast between the text field and surrounding content.

Fill and stroke
A text field container has a fill and a stroke (either around the entire container, or just the bottom edge). The color and thickness of a stroke can change to indicate when the text field is active. 

Label

Label text informs users about what information is requested for a text field. Every text field should have a label.


Label text should be aligned with the input text, and always visible.

Label text shouldn't be truncated or take up multiple lines. Keep it short, clear, and fully visible.

Required Text Indicator

To indicate that a field is required, display an asterisk (*) next to the label text and mention in supporting text that the asterisks indicate required fields.

  • If some fields are required, indicate all required ones

  • If most fields are required, indicate optional fields by displaying the word “optional” in parentheses next to the label text

  • If required text has a particular color, that color should also be used for the asterisk

Input text

Input text is text the user has entered into a text field.

Text fields can display user input text in the following ways:

  • Single line text fields display only one line of text

  • Multi-line text fields grow to accommodate multiple lines of text

  • Text areas are fixed-height fields

Prefix text

Text fields can contain prefix text such as currency symbol.

Checkboxes Components

1 Identifier

Shape that acts as container and visual cues, meant to attract attention. Gives ability to user in seeing the main information in the first place.

2 Supporting Identifier

Icon that is meant to inform users about changes in the expected option. Next information users rely on to ensure the identifier interacts as expected.

Use checkboxes to:

  • Select one or more options from a list

  • Present a list containing sub-selections

  • Turn an item on or off in a desktop environment

  • Visually group similar options together

Specs & Anatomy

Defining the anatomy of checkboxes and their variations, so that implementation in the development process is more actual.

Guidelines

Use checkboxes to:

  • Select one or more options from a list

  • Present a list containing sub-selections

  • Turn an item on or off in a desktop environment

  • Visually group similar options together

Checkboxes should be used instead of switches if multiple, related options can be selected from a list. Checkboxes visually group similar items effectively and take up less space than switches.

When text or description has long paragraph

If there is a checkbox component that has a long paragraph of text, then clicking on the area is the entire container including the caption.

Lesson Learned

Design Inconsistencies Have a Bigger Impact Than Expected

  • Small inconsistencies (e.g., different button styles) led to confusion for both users and developers.

  • A lack of design standards made UI/UX feel fragmented.

Cross-Team Collaboration Is Key

  • Designers and developers need a shared language to work efficiently.

  • Early alignment between teams prevents rework and speeds up implementation.

A Design System Is More Than Just a UI Kit

  • Beyond colors and components, it also includes guidelines, principles, and documentation to ensure long-term success.

  • A well-documented system helps onboard new team members faster.

Adoption Takes Time & Needs Advocacy

  • A design system is only valuable if teams use it consistently.

  • Regular training, documentation, and feedback loops are crucial for adoption.

Scalability Matters

  • A flexible and modular approach makes it easier to update and expand as the product evolves.

  • Using design tokens ensures easy adaptation across different platforms.

Migrating design system to Figma Local Variables wasn't just about improving efficiency—it was about future-proofing our design process and empowering our team to design at scale with confidence.

The Impacts

UI Consistency

  • Before design system: Inconsistent buttons, colors, and layouts across the product

  • After design system: Unified, predictable, and professional-looking UI

Development Speed

  • Before design system: Rebuilding UI components from scratch

  • After design system: Faster development with reusable components

Collaboration

  • Before design system: Designers and developers working with different guidelines

  • After design system: A shared source of truth for all teams

User Experience

  • Before design system: Fragmented visual language, harder to use

  • After design system: More seamless and intuitive experience

Scalability

  • Before design system: Hard to maintain and scale UI

  • After design system: Easily adaptable for new features & platforms

Time & Cost Efficiency

  • Before design system: More time spent on redesigning and fixing inconsistencies

  • After design system: Reduced maintenance effort and design debt

© Copyright 2025 - Created and developed by Randika Israj Aditya

© Copyright 2025 - Created and developed by Randika Israj Aditya

© Copyright 2025 - Created and developed by Randika Israj Aditya