Skip to content
Go back

Never Rely on Color Alone: Why Symbols Matter More Than You Think

Updated: (Originally published 22 Oct, 2025 )

Submitting a form only to see fields turn red or green — but you can’t tell which — is a frustrating experience.

TL;DR: Relying solely on color to convey information excludes millions of people with color vision deficiency (CVD). Using symbols, text labels, and patterns alongside color ensures accessibility and clarity for everyone.

This is the reality for roughly 300 million people worldwide with color vision deficiency (CVD), a condition where individuals have difficulty distinguishing certain colors.

Quick Stats

  • 8% of men and 0.5% of women have some form of CVD.
  • In a room of 20 people, odds are at least one person struggles with color-coded interfaces.

The Problem: Color Alone Isn’t Enough

We love color-coding. It’s fast, it’s intuitive, it feels natural:

But here’s what someone with deuteranopia (the most common form of red-green color vision deficiency) sees:

All the same. No distinction. No meaning.

This isn’t a niche problem. 8% of men and 0.5% of women have some form of CVD. In a room of 20 people, odds are at least one person struggles with color-coded interfaces.


Why This Matters Everywhere

Color-only coding shows up across digital experiences:

1. Form Validation

<!-- Bad: color-only validation -->
<input class="error" type="email" />
<input class="success" type="text" />

<!-- Good: symbols + color -->
<div>
    <input type="email" aria-invalid="true" />
    <span class="error-icon"></span>
    <span class="error-text">Please enter a valid email</span>
</div>

<div>
    <input type="text" aria-invalid="false" />
    <span class="success-icon"></span>
</div>

Without the text and icons, CVD users can’t tell which fields need correction.

2. Status Indicators

E-commerce sites, dashboards, and admin panels are full of status badges:

If these rely on color alone, they become meaningless to CVD users.

Better approach:

<!-- Color + text label + icon -->
<span class="badge badge-success"> <CheckIcon /> Shipped </span>

<span class="badge badge-error"> <XIcon /> Cancelled </span>

<span class="badge badge-warning"> <ClockIcon /> Pending </span>

3. Data Visualizations

Charts and graphs frequently use color to distinguish data:

Solutions:

4. Call-to-Action Buttons

Primary actions are often green (“Continue”, “Submit”, “Buy Now”) while destructive actions are red (“Delete”, “Cancel Order”). But if the only difference is color:

<!-- Bad: color-only distinction -->
<button class="btn-green">Continue</button>
<button class="btn-red">Delete Account</button>

<!-- Good: clear labeling + icons + placement -->
<button class="btn-primary">Continue →</button>

<button class="btn-destructive"><TrashIcon /> Delete Account</button>

The icon and explicit wording carry the weight, not the color.

5. Notification Systems

Toast notifications, alerts, and system messages:

// Bad: color-only
<Notification color="red">Action failed</Notification>
<Notification color="green">Saved successfully</Notification>

// Good: icon + color + clear message
<Notification icon={<AlertCircle />} variant="error">
  Action failed: Unable to save changes
</Notification>

<Notification icon={<CheckCircle />} variant="success">
  Saved successfully
</Notification>

Developer Tools: Logs and Terminals

In addition to general web UI, developers face color-only patterns constantly:

Terminal Output

# Color-only (inaccessible)
Build succeeded
Build failed
Warning: deprecated API

# Color + symbols (accessible)
 Build succeeded
 Build failed
⚠️  Warning: deprecated API

Without symbols, CVD users can’t distinguish success from failure.

Git Diffs

Standard git diffs use red and green:

- const oldValue = 'foo';
+ const newValue = 'bar';

For someone with protanopia or deuteranopia, these lines look identical. The + and - symbols are essential, not optional.

CI/CD Pipelines

Status indicators in GitHub Actions, CircleCI, Jenkins:

Remove the symbols and meaning disappears.


Emojis: The Unexpected Accessibility Win

This is where emojis shine.

In my previous post defending emojis in developer logs, I argued they improve scannability. But there’s a deeper benefit: emojis are inherently accessible symbols.

function logSuccess(message) {
    log(`${message}`, colors.green);
}

function logError(message) {
    log(`${message}`, colors.red);
}

function logWarning(message) {
    log(`⚠️  ${message}`, colors.yellow);
}

Even if the terminal strips all color, the emojis remain:

✅ Build succeeded
❌ Build failed
⚠️  Warning: deprecated API

Meaning intact. No color required.

Emojis are language-agnostic, platform-independent symbols that work across cultures and accessibility needs. They’re not just decoration — they’re functional signifiers that transcend color perception.

This applies to web UI too:

// Status badges with emojis
<Badge>✅ Active</Badge>
<Badge>⚠️ Warning</Badge>
<Badge>❌ Suspended</Badge>

// Form feedback
<span>✅ Password strength: Strong</span>
<span>⚠️ Username already taken</span>
<span>❌ Invalid email format</span>

The emoji provides meaning independent of color.


Designing for Everyone

Accessible design isn’t “extra work.” It’s better design for everyone.

Here are practical guidelines:

✅ Do This

❌ Avoid This


Real-World Examples

GitHub

GitHub’s PR status checks combine symbols and color:

Remove the color and you still know what’s happening.

Stripe’s Dashboard

Stripe uses badges with text labels (“Paid”, “Failed”, “Refunded”) alongside color. The text carries the meaning, color is supplementary.

Figma

Figma’s comment system uses:

Material Design

Google’s Material Design components include:


Testing Your Interfaces

You don’t need to be color vision deficient (CVD) to test for accessibility:

  1. Use browser extensions: Chrome’s “Colorblind – Dalton” or “Colorblindly” simulate various types of CVD
  2. Desaturate your screen: Convert to grayscale and see if meaning is preserved
  3. Ask your users: If you have colleagues or users with CVD, get their feedback
  4. Automated tools: Lighthouse and axe DevTools check for color contrast, but manual testing catches symbol issues
  5. Print in black and white: Old-school but effective for catching color-only dependencies

The WCAG Standard

The Web Content Accessibility Guidelines (WCAG) explicitly address this:

Success Criterion 1.4.1: Use of Color (Level A)

Color is not used as the only visual means of conveying information, indicating an action, prompting a response, or distinguishing a visual element.

This is a Level A requirement — the most basic level of accessibility. It’s not optional. It’s foundational.


The Takeaway

Color is powerful. It’s fast, it’s beautiful, it’s intuitive. But it’s not universal.

For 300 million people worldwide, red and green are the same. Yellow and blue blur together. Interfaces that rely solely on color exclude them entirely.

Symbols — whether icons, text labels, or even emojis — are the universal language. They work for everyone, regardless of color perception, language, or assistive technology.

So the next time you’re designing a form validation flow, a status indicator, a data visualization, or a terminal logger:

Don’t ask: “What color should this be?”

Ask instead: “What symbol represents this?”

Because the symbol is what matters. The color is just a nice bonus.

Accessibility is not just a technical requirement — it’s an act of empathy.


Share this post on:

Previous Post
In Defense of Emojis in Developer Logs
Next Post
Building Image Optimizer: From Personal Tool to Developer API