A brightly colored tunnel.

Less is More. Reducing Color to Improve Usability

Reevaluating our color design system for better legibility and accessibility.

The colors of a traffic light tell you what actions to take: slow down, stop, go. Color is powerful. It evokes feelings, communicates importance, and encourages action. In the Signal Sciences UI (what we call “the console”), users often log in when they need to investigate suspicious activity from hackers. These moments can be hectic because users need immediate access to information and often jump in and out of multiple security apps. Our console relies on color to support our users’ context and help them prioritize information.

Our design system had some basic color guidelines around messaging (e.g., use red for errors and green for success), but these were table stakes. We didn’t have consensus when it came to fuzzier use cases like what color to use for our range of statuses.

We left these decisions up to each individual designer, and over time inconsistencies began to grow. Color turned into a distraction instead of providing clarity. Instead of trying to fix these inconsistencies on a case-by-case basis, we started from the ground up and reevaluated how we use color across our entire design system.

Audit all the colors

We began by auditing every color in the console and logging its usage. We asked ourselves: What color patterns already exist? Where and why is color confusing and inconsistent? Where does color interfere with usability?

Our audit revealed that our UI relied on color too much:

  • Blue was heavily used—from links to buttons to status labels. The amount of blue felt overwhelming.
  • Green was used for many different use cases, which watered down the color’s significance. We used green for: success, new, open, active, enabled, and blocking mode.

We also found that color was confusing whenever we associated “good” with green and “bad” with red. This association came from the green=success and red=error connotation but it didn’t translate well in other contexts. Here’s an example of where these colors felt off:

original rules colors
Green and red lost meaning on our Rules page.

  • “Enabled” is green, but enabling a rule is neither a good nor bad thing.
  • “Disabled” is red, but it doesn’t mean that something bad happened. Our users intentionally disable rules because they set them to expire.
  • “Allow request” and “Block request” are also neither good nor bad things. They are neutral actions that users intentionally configure.

We wanted to reserve red for truly bad things, like an error or an attack signal (which indicates malicious behavior to our users). We also wanted to tone down the usage of green with a neutral color since we already used green to represent success messages. Our solution was to remove all color from text strings and add a subtle dot indicator for statuses.

rules color removed
Less color, less distraction.

We changed “enabled” statuses to our brand purple, and “disabled” statuses to grey. This now feels much cleaner and has a neutral tone, rather than a heavy-handed emphasis on good or bad.

Another example of color confusion was on our trend indicators. Here, green (good) was always paired with an upward arrow and red (bad) was always paired with a downward arrow. This can be confusing because sometimes a downward arrow can indicate a positive trend (think a decrease in attack requests) but the arrow still displayed as red.

trend indicators before
Trend indicators were green for an upward trend and red for downward regardless of context.

First, we tried removing color entirely from the trend indicators. We attempted to let the arrow and page context speak for the trend, but this resulted in the trends feeling lost on the card. Removing color made the trends feel less important.

trend indicators black
Removing color from the trend indicators made them feel lost in the table.

We solved this problem by separating the arrow from the number and showing color based on context. Instead of the upward arrow always being a static green, it will now display as red or green based on context.

trend indicators new
Changing the color to be contextual brings a subtle importance to the trend indicators.

Less is more: condensing color for clarity

We decided our guiding principle with color would be less is more. With many actions on any given page, using color to differentiate every action was creating a lot of noise. To reduce visual clutter and make important information stand out, we decided to consolidate and remove colors.

events before after
We removed blue to focus the user on the content, rather than the color.

By deemphasizing color we were able to focus the user on what was important on the page. In the example above there was so much blue that the color became meaningless. By reducing the use of blue, we were able to make the story of the event stand out. Now, the timeline is easier to read, the country flags no longer get lost, and it’s easier for users to take in all the important information about an IP without getting distracted by all the other actions they can take.

Making data viz accessible

Data visualization plays an important role in our console because it allows users to see a high-level view of how they’re being attacked. We used a set of colors for each data viz chart, but they weren’t tested for WCAG accessibility and didn’t match the voice and tone of our console.

data viz original color chart
These original colors were a bit dull.

Accessibility matters a lot to us not just because it’s the right thing to do, but also because some enterprises can’t use us if we don’t meet WCAG standards. We wanted to see what our original colors looked like through the eyes of a colorblind person, so we tested them using the Color Blind Figma plugin. This plugin was great because it simulates the six most common types of color blindness—giving us the ability to see what our colors looked like for a wide range of people.

The test revealed that our original data viz colors were difficult to tell apart.

card bad contrast
The XSS, Datacenter, and Directory Traversal colors look the same to someone with color blindness.

To figure out what our new set of colors would be, we gave ourselves a set of standards to work toward. We wanted these new colors to be vibrant, engaging, and modern, while still being WCAG compliant. We decided to start with our brand color purple and selected complementary colors that had good contrast. We knew contrast was the key to color accessibility because that’s what made each color distinct. But finding this balance meant manually tweaking every single color until our color palette was usable for every colorblind simulation.

data viz color blind test
Our new set of accessible colors works across all six types of colorblindness.

Finding the perfect color contrast across every simulation was difficult in practice, so we came up with a strategy to focus higher contrast among the first three colors that users see the most. The last three colors still had contrast, but the contrast wasn’t as strong. This gave us a good balance and prevented us from continuing to tweak colors and never feel satisfied with the results.

contrast example
The first three colors in this chart have more contrast than the last three colors.

Finding accessible colors was a slow and detailed exercise but we’re happy with our new set of colors and feel like they now speak to the heart of our brand.

final data viz colors
Our new set of data viz colors.

The future of color

Refreshing our color design system was laborious, but the results were worth it. We’re now more intentional about how we use color, and by dramatically toning down our usage of color it has greater impact, better legibility, and improved usability. Now each page has a clear opinion about what the most important information for the user is, and we have a system in place to keep color consistent.