Published in


Because, colors are beautiful

Making an appealing and accessible palette for brands, products, and experiences.

Color swatches overlaying photography.
Selected color swatches and mood board from the new IBM Design Language.

Over the past few years, IBM’s Carbon Design System and Brand Experience teams partnered to craft a universal color palette. A second iteration, set to launch with Carbon’s October minor release, meets all accessibility requirements of product design with the most subtle changes to the palette.

This cycling GIF highlights just how subtle the changes are in the latest version of the IBM color palette.

Gif cycling through IBM Color Palettes V1 and V2
Comparison of IBM Color Palettes V1 and V2

A team led by Sadek Bazaraa first put the palette together, which was released with the new IBM Design Language. Although the palette was built with accessibility in mind, potential improvements emerged as we tested it in product design. Some ratios across color families failed by one-hundredth of a point and there were a limited number of accessible text and background color combinations.

Here’s how we’ve adjusted the palette for accessibility in product usage, and a bit of history dear to our hearts.

Pass or fail: seeking nuance in a binary world

In large organizations like IBM, brand teams have long been responsible for creating and maintaining color palettes. As more and more people experience the brand through software and websites, this has begun to change. Screen-based products have become the environments where the colors are truly stress-tested, along with typefaces, grids, and any other foundational elements.

Even a hair of contrast difference can cause an interface to fail accessibility testing. IBM clients like governments and educational institutions depend on IBM to uphold WCAG standards, so we make accessibility a high priority in our color palette. This helps us maintain trust with our clients and users and reduce the risk of lawsuits by avoiding violations.

Let’s take a look at what a functional design system color palette looks like.

Grays with lighter lights, darker darks, and fewer mid tones

Neutral grays are essential in UI. They provide structure, denote boundaries, and establish a hierarchy.

When we design interfaces, it’s common to reach for extremes: the darkest and lightest grays. Maximizing contrast is key for readability and focusing a user’s attention. By including enough shades of gray in both ends of the spectrum, we prevent muddy mid tones with low contrast. This is especially important in enterprise software products, which can often be a mess of containers inside containers, panels flying over panels, and endless rows and columns of zebra-striped data tables!

A single column data table with selection, shown on four themes.
This is not a zebra-striped data table, just a single column table with selection. This exploration is to find the shades that are subtle enough but still differentiating.

The plot below shows how the contrast ratios between the grays fall roughly on a bell curve. As the bell curve gets thinner and taller, the light grays get lighter and the dark grays get darker.

Plot of the contrast ratio between the grays fall on a slightly shifted bell curve.
Contrast ratios between the grays fall on a slightly shifted bell curve.
Comparison of the neutral grays before and after adjustment.
The adjusted row shows lighter light grays and darker dark grays.

Perceived dark and light theme symmetry

Notice the bell curve is not perfectly symmetrical. The right side is steeper and ends higher, suggesting steps between dark grays are larger than between light grays. This is to accommodate for the fact that our eyes are better at differentiating lighter shades than darker ones. To maintain a perceived dark and light theme symmetry, the contrast ratio between dark grays should be slightly higher.

Comparisons between two light grays and two dark grays equal contrast ratios apart.
Do you see how the 10–20 to have a bigger difference, though both pairs have contrast 1.2:1?

The adjusted steps are still far from smooth. So far, we haven’t found a way to programmatically generate colors by inputting a custom contrast ratio curve. I love ColorBox, but I dream of a world where I no longer have to manually adjust the asymmetry between dark and light grays. (Wink, wink. Any talented coders looking to make a small web tool?)

Number of accessible text colors against theme backgrounds

Contrast is an important visual cue for communicating hierarchy between text and creating differentiation between headings, titles, labels, paragraphs, and captions. Keeping in mind text in user interfaces must be accessible, a color palette should offer enough accessible colors to create text hierarchy. In Carbon’s case, enough means five shades, which is half the row.

For example, on a Gray 10 background, colors 60–100 can all be used for text with an accessible contrast ratio ≥4.5:1. We generally do not recommend pure black or pure white for text because extreme high contrast actually compromises readability.

Before the palette adjustment, we had only four shades accessible on the Gray 90 background. This limitation forced us to use italics for helper text in the Text input component. We reserve italics for emphasis and glossary terms, so using it for helper text broke the system’s intent.

Following the palette adjustments, the helper text can be assigned Gray 60, with the label text assigned to Gray 80, and input text assigned to Gray 100. For anyone interested in additional details on this work, check out this thoroughly documented GitHub issue.

Comparison of available text colors before and after update on Gray 90 background.
Comparison of available text colors before and after update on Gray 90 background.

Mid tones should have high saturation and be accessible

Mid tones, in general, should be used sparingly. When they are used, they should offer a breath of fresh air. They are the highlights, the calls to action. They are accent colors and branding moments in a digital experience. They should command attention and provide character.

Example product screens using Carbon.
Example product screens using Carbon.

Carbon uses mid tone blues for primary buttons, the highlight bar on selected tabs, and progress indicators. This usage requires the color to be accessible with at least a 3:1 contrast ratio against the background, according to WCGA 2.1 standard for meaningful non-text elements.

We use mid tones for colored text elements such as links and warning messages. This usage requires the color to be 4.5:1 accessible against the background. Mid tones should be saturated to stand out from gray text.

Link color exploration.
Link color exploration.

Account for theme switching exceptions

The need for dark and light themes has increased in demand and become mainstream when building color systems. For Carbon, the complication comes with dark themes. Our button component’s dark theme implementation is not a simple inversion of background and text color. When you simply reverse colors and put dark text on buttons on a dark background, the readability can fall apart, especially with mid tones. Keeping button labels white maintains the user’s expectation of a bright, punchy call-to-action. This puts a squeeze on our mid tones. If the button background is any brighter, the white label will fail 4.5:1. Any darker, the button does not stand out against the background 3:1.

Switching to dark theme is not always as simple as a background–text color flip.
Switching to dark theme is rarely as simple as a background–text color flip.

To solve this, we extended the darkest and lightest ranges ever so slightly. This gave the mid tones a bit more wiggle room while staying accessible on all fronts. The danger of doing this is that the extreme ends of the grays might not reproduce well on all monitors, projectors, and printers. We need a unifying palette, and we want to offer the safest colors to use for most use cases.

Left: before adjustments, all mid tone button backgrounds fails the 3:1 contrast ratio by just a hair.
Before adjustments, all mid tone button backgrounds fail the 3:1 contrast ratio on Gray 90 theme by just a tiny bit.

When all of these adjustments come together, you get a fail-safe structure for a family of grays. The contrast ratio intervals between the mid tones and extreme ends of the spectrum (which are the backgrounds) have to satisfy the following requirements:

  1. Contrast between gray 60 and 90 has a minimum of 3:1.
  2. Contrast between gray 60 and 10 has a minimum of 4.5:1.
  3. Contrast between 50 and 90 has a minimum of 4.5:1.
  4. Contrast between 50 and 10 has a minimum of 3:1.
Full family of neutral grays, annotated with magenta lines for contrast ratio intervals.
Considering all four of Carbon’s theme background, grays (and color families) should satisfy these contrasts ratios intervals.
Contrast ratio chart of all combinations of grays.
Contrast ratio chart of all combinations of grays. Top indicates AAA (4.5:1), bottom indicates AA (3:1).

After making big improvements to the grayscale, we applied the same brightness spectrum across all other color families.

Left, color palette in full color. Right color palette in gray scale.
All color families (rows) obey the brightness spectrum as set up by the neutral grays. Be sure to convert to gray-scale in Photoshop, which from our experience is most accurate in this conversion.

What about data visualization?

Data visualization is the ultimate stress test of a color palette, as a palette needs to provide many differentiating colors that work for various modes of color blindness. Some systems choose to have a separate or extended palette. This is a huge topic in its own right, so I’ll save it for another post. Our work on restyling Carbon Charts is still in progress so look out for updates!

All you need, and nothing more

Too many colors can harm a user’s experience and a stressed product designer facing too many options can make mistakes. Garish, clashing color choices can create confusion and distract users from the job to be done. Poor color choices can even create a strong after-image when combined with prolonged screen interaction.

IBM hires a lot of early-career professionals, who appreciate guidance and embrace constraints. There are still many legacy products with poor usability and we are constantly adding acquisitions which do not share our Design Language.

Individual designers aren’t just designing interfaces. They influence product roadmaps, respond to clients, and work directly with leadership day-to-day. With big opportunities to focus on, it’s easy to miss the nuanced details of color usage and make mistakes. From the perspective of a design system, offering fewer color options discourages misuse and ensures harmony among products.

Limitation is not the only reason we reduced the palette from a rainbow spectrum to the current seven hues. The decision was driven by IBM’s brand philosophy, and this is where we’ll dive into a bit of history around the work that led us to the original palette.

Evolution of a color palette

IBM has existed for over a century, and the colors associated with the brand have been ever-evolving. You can easily spot the changing technology and the design intents that shape each of these color palettes.

Let’s get into the intents behind today’s IBM Design Language palette, and how we chose to express them.

IBM color palettes over the years from left to right: 1960, 2008, 2015, 2016, 2018, 2019.
IBM color palettes over the years from left to right: 1960, 2008, 2015, 2016, 2018, 2019.

Be essential

There is so much we love about the 1960s IBM machines. In the past, bold primary colors covered IBM's hardware and defined the future of business in an era where the possibilities of computing were just starting to unfold. Later on, in an effort to revitalize design at IBM, the color palettes expanded again and again, driven by an underlying theme of inclusiveness, rejuvenation, and progress. Today, the palette is sharply reduced to focus on communicating a point of view IBM represents:

1969 Computer color usage product mockups.
1969 Computer color usage product mockups.

We must assume that all products will be physically associated with each other, therefore, color and its application must consider our problem as a whole.

—IBM ID, Color Applications, Introduction, 1962

To be essential means the palette is intentionally minimal. There are only a total of 104 swatches, which breaks down to 10 color families, each containing 10 shades, black and white, a single shade of yellow, and a single shade of orange. If you rule out the grays, there are effectively only 7 hues in this palette.

Offering fewer hues makes the palette more usable. It provides direction and a clear point of view that scales across a huge company where designers are still a scarce resource.

Blue at the core

The whole palette remains blue at the core to pay tribute to IBM’s historical nickname, “Big Blue”. So blue was the first color picked.

Comparisons of IBM color palette’s blue family from 2015 to 2019.
The 2015 blue family shifts a little towards purple in the lighter end, and towards teal in the darker end. In 2018–9, the blue is refreshed to be more saturated, pure, and vibrant.

The 2015 blue family shifts a little towards purple in the lighter end, and towards teal in the darker end. In 2018–9, the blue is refreshed to be more saturated, pure, and vibrant. This family of blues is potentially vibrant to a fault. To some, the new palette is an unpleasant experience, especially when viewed over a longer period. It was almost as if the effort to refresh the blue was too enthusiastic.

When adjusting the blue for products in 2019, we knew we had to reel it in a bit.

Even though the palette is designed with digital as its primary use case, (a Pantone palette is matched for print usage), the colors are pulled from the world around us, both natural and machined.

Moodboard of Blue, photo reference from environment (nature and machine)
Photo references of the IBM Blue from the environment (nature and machine).

Effortless harmony and scale

After the blue was picked, it became the central axis for all other hues. The hues furthest from blue in this palette are the reds and greens. They are equidistant from the blues to each side. Any color outside this range was eliminated due to the disharmony they created. The result is a selection of hues all tightly associated with the blue hue.

Cylindrical-coordinate color model with blue, magenta, purple, cyan, teal, and green’s 60th grade selected.
The hue for Blue was the first to be decided. All other hues are kept within axels for red and green.

With a little bit of blue in every hue and fewer hues in the palette, it is hard to put the wrong colors together and easier to stay on brand. It is exciting to create harmony, and the palette’s usage guidance can be significantly simplified.

The impact of the new palette is evident. Almost every combination of the colors looks fresh and modern. It gained an instant fan base in the illustration channel in Slack. Just explore the IBM Design gallery page, or these community Dribbble shots, or these gorgeous app icons designed by Peter Garvin.

Gradient IBM app icons by Peter Garvin
App icon designs by Peter Garvin.
One color palette informing designs of print collateral, industrial design, and event spaces.
One color palette informing designs of print collateral, industrial design, and event spaces.

Functional and accessible

At this point, we come full circle back to the collaborative work between the design system and design language teams. This collaboration was made possible by IBM’s culture of ample mutual respect for each designer’s expertise. After all, a color palette constructed with features and guidance to ensure accessibility is more empowered to express brand philosophy.

With the latest release, we’ve finally arrived at a confident, stable palette that supports brand experiences on all fronts.

Closing note

This is the end of the story of the making of a color palette. I’ve learned so much in this work and I hope you have too from this article.

Tweaking a hundred and four shades of colors is like tweaking all the distances between hundreds of dominoes—a manual, tedious, and time-consuming process. But when the palette is done, and a logic of usage securely in place, it is amazing how much it simplifies everyone’s life.

I believe many designers out there, like me, secretly hold a love-hate relationship with colors. I encourage you all to try and tame this beast. Because, after all, colors are worth it. Colors are beautiful.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store


Crafting design systems and design language at IBM. ❤ Motion, color, data viz, AR/VR