Flame Graph Redesign

Glen Chiacchieri — April 21, 2016

This morning I saw an article about Flame Graphs, a type of data graphic that attempts to visualize the hierarchical CPU time of computer program traces. Here's an example:

Yow! As a designer, I immediately saw the need for a redesign. In particular, the colors are distracting and not particularly useful. You can see just how distracting by squinting your eyes or applying a blur:

Blurred Flame Graph

The designer of the flame graph says the bright colors are meant to distinguish the bars from one another (and it's implied that this helps diagnose performance issues), but I think the larger effect the colors have is one of distraction and visual noise.

This unnecessary visual noise is a shame because otherwise I think the graphic is neat. It can show performance bottlenecks in a pretty interesting way and apparently has been used to fix a number of real performance issues. And it reminds me of some of the graphics I did for Legible Mathematics.

In an attempt at improvement, I experimented with a visual redesign:

Using contrast and layering, I highlighted the longest-running functions calls in dark grey. Since the point of the graphic is to find long-running functions, highlighting the longest set of calls by default draws the eye toward the most likely area of scrutiny. Now, areas where time was wasted are much clearer:

Anywhere that has large visual jumps (like above) is probably an interesting place to look. This redesign takes advantage of our human perceptual ability to distinguish contours. By matching jumps in colored graphical areas to likely areas of performance issues, I'd argue that the graphic accomplishes its goals better than the original design.

My hope is that one day these kinds of graphics that take advantage of our human abilities will be used much more widely to show program behavior.

Programming wasn't designed for humans to understand, so we have to invent tools like these to see what our programs do. Someday, maybe we can design programming to be understood by humans first, machines second.