<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>One Mo&apos; Gin</title>
    <description>&amp;copy; Cory Watson. All rights reserved.
</description>
    <link>http://onemogin.com/</link>
    <atom:link href="http://onemogin.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sat, 01 Aug 2026 18:02:57 +0000</pubDate>
    <lastBuildDate>Sat, 01 Aug 2026 18:02:57 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      
      <item>
        <title>Introducing Kapell, a music player</title>
        <description>&lt;p&gt;Holy shit it’s been 6 years since I wrote a blog post here. [raps microphone] is this thing on?&lt;/p&gt;

&lt;p&gt;I really love music and to that end I’ve developed &lt;a href=&quot;https://kapell.fm&quot;&gt;Kapell&lt;/a&gt;, which is an Apple Music player that connects to &lt;a href=&quot;https://musicbrainz.org&quot;&gt;MusicBrainz&lt;/a&gt;, &lt;a href=&quot;https://www.wikidata.org&quot;&gt;Wikidata&lt;/a&gt;, and more. It aims to improve &lt;em&gt;active&lt;/em&gt; listening, giving you a way to learn while you listen.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://kapell.fm/blog/2026-08-01-rolling-stone-part-1/&quot;&gt;I wrote about using Kapell to listen to Rolling Stone’s 500 Best Albums of All Time&lt;/a&gt; and I hope you’ll check it out!&lt;/p&gt;
</description>
        <pubDate>Sat, 01 Aug 2026 07:51:00 +0000</pubDate>
        <link>http://onemogin.com/music/appstore/introducing-kapell.html</link>
        <guid isPermaLink="true">http://onemogin.com/music/appstore/introducing-kapell.html</guid>
        
        
        <category>music</category>
        
        <category>appstore</category>
        
      </item>
      
    
      
      <item>
        <title>Improving Automation: Working Together</title>
        <description>&lt;p&gt;I painted a bleak picture of runaway, people-eating automation in &lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you.html&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt;. It was a bit alarmist, but for good reason. In my experience at many companies and with many customers, automation is treated as a cure-all that is rarely designed to work &lt;em&gt;with&lt;/em&gt; human teammates. Instead, it removes the human completely while providing little in the way of substitute. &lt;strong&gt;This post is meant to provide guidance on how to overcome this challenge and improve your operations by giving automation some extra capabilities.&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
   &lt;p&gt;This post is part of series on automation, the result of many months of reserach and reading. I may adjust these posts as my research grows. If you&apos;ve got comments leave feedback at the bottom!&lt;/p&gt;
   &lt;ul&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/alternatives-to-automation.html&quot;&gt;Alternatives to Automation: Amplification, Complexity, and Control&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/improving-automation.html&quot;&gt;Improving Automation: Working Together&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;p&gt;
     Thanks to Arijit Mukherji, Franklin Hu, Jay Shirley, Rajesh Raman, and Sam Boyer for their feedback and reviews of these posts.
   &lt;/p&gt;
&lt;/div&gt;

&lt;h1 id=&quot;how-to-improve&quot;&gt;How To Improve&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;To be a good team, the parties on that team must agree to a basic compact wherein they coordinate, work toward shared goals, and prevent breakdown in communications.&lt;sup id=&quot;fnref:tenchallenges&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:tenchallenges&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/strong&gt; The rest of this post is concerned with doing our best with current technology to make automation a part of this deal.&lt;/p&gt;

&lt;p&gt;As such, in this post I will be speaking about automation anthropomorphically as &lt;em&gt;part of a team&lt;/em&gt;. This might feel a bit funny, but doing so encourages us to make it behave less… assholey. If we start thinking of these systems as teammates who can improve with feedback, we can begin to change our approaches to one where our humans and our robots work together instead of in isolation.&lt;/p&gt;

&lt;h1 id=&quot;automation-exists-in-a-team&quot;&gt;Automation Exists In A Team&lt;/h1&gt;
&lt;p&gt;Automation often comes from a place of frustration or failure, like an incident remediation. As such it is easy for the author to focus on the outcomes rather than the context in which the automation operates. A form of incident-driven-development, if you will.&lt;/p&gt;

&lt;p&gt;To build automation that works well with humans — or even other automation — we need to consider these techniques &lt;strong&gt;at the time of design&lt;/strong&gt;. Many of the improvements suggested will require changes to the automation’s approaches, algorithms, and capabilities. Let’s discuss how.&lt;/p&gt;

&lt;h2 id=&quot;automation-must-be-designed&quot;&gt;Automation Must Be Designed&lt;/h2&gt;
&lt;p&gt;The point of automation is to free the human from some effort. Unless you work alone, other humans will become responsible for working with and caring for the automation in the future.&lt;sup id=&quot;fnref:jcsauto&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:jcsauto&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; To that end &lt;strong&gt;you must treat automation the way you’d treat a product&lt;/strong&gt;. That means talking to stakeholders, getting feedback, and considering ergonomics.&lt;sup id=&quot;fnref:designofevery&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:designofevery&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;An appropriate design should assume the existence of error, it should continually provide feedback, it continually interact with operators in an appropriate way, and it should have a design appropriate for the worst of situations.&lt;sup id=&quot;fnref:problemauto&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:problemauto&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We must also consider the cognitive load of the automation. Is it hard for people to use? If the complexity exceeds the perceived benefit they may avoid its use all together.&lt;sup id=&quot;fnref:misuse&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:misuse&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; Automation that is bypassed is both wasted effort and a potential future problem.&lt;/p&gt;

&lt;h2 id=&quot;automation-must-communicate&quot;&gt;Automation Must Communicate&lt;/h2&gt;
&lt;p&gt;Above all, automation must communicate with its human partners to be effective. Consider your automation as another person on the team. What might they say to their teammates as they work? This can improve the &lt;a href=&quot;https://en.wikipedia.org/wiki/Gulf_of_evaluation&quot;&gt;gulf of evaluation&lt;/a&gt;&lt;sup id=&quot;fnref:designofevery:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:designofevery&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. How you do this will depend on your internal capabilities, but here are some suggestions:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Emit metrics that track currently monitored values (gauges) and critical operations (timers and error counters).&lt;/li&gt;
  &lt;li&gt;Track estimates and error. What did the automation expect versus what &lt;em&gt;actually occurred&lt;/em&gt;? Consider some lessons from &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_theory&quot;&gt;control theory&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/PID_controller&quot;&gt;PID controllers&lt;/a&gt;. Emit telemetry about these measurements as well as judgements.&lt;/li&gt;
  &lt;li&gt;Emit metrics that make clear any goals, thresholds, or limits. These may be fixed values, or values that change with the state machine.&lt;/li&gt;
  &lt;li&gt;Emit events around actions, intentions, and decisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This feedback is vital for humans in their work and performance.&lt;sup id=&quot;fnref:ninesteps&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:ninesteps&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; Build interfaces or dashboards that curate this information, specifically aligned with the goals — e.g. control, stability, cost, latency - of the operator and the automation.&lt;sup id=&quot;fnref:autoaware&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:autoaware&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;As a final note, remember to allow access to the raw information (logs, metrics, events) so the operator can dig in deeply if needed. This is important, because automation merely removes the need for the human to &lt;strong&gt;focus&lt;/strong&gt; on the tasks in question. When they need to take over for automation it is essential that raw information be available to reestablish control, see also &lt;a href=&quot;https://en.wikipedia.org/wiki/Ecological_interface_design&quot;&gt;Ecological interface design&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;automation-must-be-predictable&quot;&gt;Automation Must Be Predictable&lt;/h2&gt;
&lt;p&gt;It is generally advisable to &lt;a href=&quot;https://en.wikipedia.org/wiki/Principle_of_least_astonishment&quot;&gt;avoid surprise in software&lt;/a&gt;. Humans will inevitably forget stuff and work with imperfect mental models.&lt;sup id=&quot;fnref:wrongmental&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:wrongmental&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; This is a normal form of energy conservation for humans who can’t possibly remember everything at all times. Maybe they are new and don’t even know the automation! As such we must work to ensure that our automation considers its teammates and acts predictably. (Remember our &lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you.html&quot;&gt;toxic teammate example&lt;/a&gt;!)&lt;/p&gt;

&lt;p&gt;Here are some ways to improve predictability:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Emit notifications and reasons when goals change, errors occur, or any time when a human might need to be aware of an action.&lt;sup id=&quot;fnref:designofevery:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:designofevery&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
  &lt;li&gt;Emit information about the current, past, or next step in the process.&lt;/li&gt;
  &lt;li&gt;Avoid sudden movements. Aside from being surprising to humans, smaller adjustments at faster intervals are typically better at stabilizing systems.&lt;sup id=&quot;fnref:feedbackcontrol&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:feedbackcontrol&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
  &lt;li&gt;Add (and emitting notifications for) cool down or observational periods such that the automation can transmit its &lt;em&gt;intent&lt;/em&gt; to act in time for a human to react.&lt;/li&gt;
  &lt;li&gt;Increase urgency of communication as the bounds of control get closer. Do not snap from normal to freaking out in one tick of a loop, do so gradually. This might signal a need for a tighter feedback loop or lower interval!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As an aside, another way to improve predictability is to keep things simple. Some ML or AI features promise great benefits, but may be opaque and unpredictable to operators. Take care when evaluating and using such features.&lt;/p&gt;

&lt;h2 id=&quot;automation-must-be-directable&quot;&gt;Automation Must Be Directable&lt;/h2&gt;
&lt;p&gt;So far we’ve focused on ways that automation can transmit information about its work. Now we must turn the tables and think about how our automation can receive information and adjust its behavior.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Add a kill switch or other mechanism to quickly disable automation and make it accessible during incident response. Train people on its use.&lt;/li&gt;
  &lt;li&gt;Add APIs to your automation that can enable, disable, or influence it’s parameters, like feature flags.&lt;/li&gt;
  &lt;li&gt;Configure “policies” that adjust the approach or the aggressiveness of actions, with ways to change this easily at runtime.&lt;/li&gt;
  &lt;li&gt;Messages, APIs, or signaling to sense &lt;em&gt;other teammates&lt;/em&gt; actions — i.e. other automation or humans — and to react accordingly. If a human intervenes, maybe I should sense this and adjust my actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These features allow teammates to direct the automation in a way consistent with the given context.&lt;sup id=&quot;fnref:tenchallenges:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:tenchallenges&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; With these capabilities, working with automation can become a part of the documented process for responding to loss of control. Without them, automation may be forgotten and exacerbate the problem through well meaning but opaque activity.&lt;/p&gt;

&lt;h2 id=&quot;automation-must-be-respectful&quot;&gt;Automation Must Be Respectful&lt;/h2&gt;
&lt;p&gt;We’ve discussed at length how vital it is for automation to make information about its work available. We must also, however, balance all that yelling with a respect for the other agents. Humans typically rely on mental models of others to determine what, if anything, needs to be said to keep coordination going.&lt;sup id=&quot;fnref:tenchallenges:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:tenchallenges&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Our automation, being of simple mind, needs our help. Here are some ways we can improve things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Use log levels or other filterable tagging to indicate matters of different importance. Normal operations are no big deal and should be kept to low priority of communication whereas nearing the bounds of control warrants yelling loudly.&lt;/li&gt;
  &lt;li&gt;Leverage consolidation and filtering tools that allow dialing up or down the attention given.&lt;/li&gt;
  &lt;li&gt;Accept feedback that mutes notifying users, either at the source or through a common filter.&lt;/li&gt;
  &lt;li&gt;Incorporating context, such as if other teammates are acting, to help guide internal decisions about how much and often to direct attention. Are we in incident?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practical terms automation needs to be aware of the state of the world around it. If the humans are stressed out automation should aim to be helpful and not overwhelming. This could begin as a human controlled flag or signal, but over time could be adjusted to track critical health metrics of the system.&lt;/p&gt;

&lt;h1 id=&quot;automation-must-evolve&quot;&gt;Automation Must Evolve&lt;/h1&gt;
&lt;p&gt;We commonly celebrate a new bit of automation being turned on. We’re done with the toil and frustration of doing this manually. No more human error for us, no sir! It might be appropriate to celebrate the end of one bit of work, but now it’s time to shift over to a whole new effort: the care and feeding of automation.&lt;/p&gt;

&lt;p&gt;Being a part of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Complex_system&quot;&gt;complex system&lt;/a&gt; means that the automation will need to adjust over time. Working with humans will also mean learning from errors, sanding down rough edges, and generally improving understanding for the operator.&lt;sup id=&quot;fnref:designofevery:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:designofevery&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Ensure that you’ve allocated time for this work, and that you revisit your automation. Think of it like a quarterly review. It’s a chance to evaluate how the automation has met the organization’s expectations and communicate what the automation can do to improve. Since it’s not as adaptable as you, any improvements will come from your own keyboard.&lt;/p&gt;

&lt;p&gt;Too often we pave over this critical automation, tossing it aside as soon as it serves its purposes. This forces our future teammates — maybe even ourselves — to act like technological archaeologists, digging up old bits of automation and struggling to decipher what they are doing.&lt;/p&gt;

&lt;h1 id=&quot;revisiting-the-autoscaler&quot;&gt;Revisiting The Autoscaler&lt;/h1&gt;
&lt;p&gt;When we last left our autoscaling example from &lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you.html&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt; we hadn’t we read all this rad stuff about how to improve automation. Let’s count off some ways that the autoscaler can be improved to fit the techniques described (less design, since that ship has sailed):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Communicate&lt;/strong&gt;: Emit metrics for the current, target, and &lt;strong&gt;expected&lt;/strong&gt; values. Measure durations of any adjustments (calls to scaling APIs, etc). Track difference between expected and current values with consideration to duration and emit this as an error value.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Predictable&lt;/strong&gt;: Emit log lines for all decisions and any problems. Emit log lines for potential next steps. Adjust frequency of checks and sizes of adjustment to smaller amounts, with backoff and/or cooldowns before actually making changes to scale.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Directable&lt;/strong&gt;: Add feature flags to disable completely or adjust aggressiveness of changes. Add API calls or feature flags to adjust parameters on the fly. Monitor health KPIs over affected services and bail out (with messaging!) if things look fishy.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Respect&lt;/strong&gt;: Ensure that logging uses appropriate log levels. Monitor for changes to current values that did not correspond to automation’s changes and consider bailing out or at least logging. Don’t page or otherwise bother people directly.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Evolve&lt;/strong&gt;: Provide a convenient way for users to give feedback on tooling, preferably one that doesn’t require 11 different required JIRA fields or anything to be filed in triplicate. Periodically review performance metrics and track any tickets generated for improvement. Hell, just &lt;em&gt;ask&lt;/em&gt; them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;future-and-summary&quot;&gt;Future And Summary&lt;/h1&gt;
&lt;p&gt;At this point, I hope you’re glancing around at the automation that holds together your systems with a combination of fear and excitement. Fear because there many footguns and time bombs in your midst. Excitement because the above techniques can defuse and improve automation!&lt;/p&gt;

&lt;p&gt;There are additional improvements we could imagine, like making automation aware of how &lt;em&gt;humans&lt;/em&gt; work through modeling and allowing that automation to predict and adjust it’s behavior. Sadly, this and others are still a bit science fiction. The steps above, however, are all practical with today’s technology and a bit of forethought!&lt;/p&gt;

&lt;p&gt;By incorporating these concerns into our design and maintenance of automation, we can not only create a more harmonious environment, we can look forward to a less toxic, more helpful teammate. A teammate that keeps us informed of what’s going on, and backs off when we take over.&lt;/p&gt;

&lt;p&gt;I encourage you to check out the citations listed in this and the earlier posts on automation. My suggestions are just that, and are largely viewed through the lens of an observability wonk. I’m excited to hear what ideas you might have for improving automation.&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
   &lt;p&gt;This post is part of series on automation, the result of many months of reserach and reading. I may adjust these posts as my research grows. If you&apos;ve got comments leave feedback at the bottom!&lt;/p&gt;
   &lt;ul&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/alternatives-to-automation.html&quot;&gt;Alternatives to Automation: Amplification, Complexity, and Control&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/improving-automation.html&quot;&gt;Improving Automation: Working Together&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;p&gt;
     Thanks to Arijit Mukherji, Franklin Hu, Jay Shirley, Rajesh Raman, and Sam Boyer for their feedback and reviews of these posts.
   &lt;/p&gt;
&lt;/div&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:tenchallenges&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Klein, Woods, Bradshaw, Hoffman, Feltovich, &lt;a href=&quot;http://jeffreymbradshaw.net/publications/17._Team_Players.pdf_1.pdf&quot;&gt;Ten Challenges for Making Automation A Team Player&lt;/a&gt; &lt;a href=&quot;#fnref:tenchallenges&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:tenchallenges:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:tenchallenges:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:jcsauto&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;E. Hollnagel, &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S1474667017376851&quot;&gt;The Role of Automation in Joint Cognitive Systems&lt;/a&gt; &lt;a href=&quot;#fnref:jcsauto&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:designofevery&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Donald A. Norman, &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Design_of_Everyday_Things&quot;&gt;The Design of Everyday Things&lt;/a&gt; &lt;a href=&quot;#fnref:designofevery&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:designofevery:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:designofevery:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:designofevery:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:problemauto&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Donald A. Norman, &lt;a href=&quot;https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19900004678.pdf&quot;&gt;The Problem of Automation: Inapporpriate Feedback and Interaction, Not “Overautomation”&lt;/a&gt; &lt;a href=&quot;#fnref:problemauto&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:misuse&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Raja Parasuraman, &lt;a href=&quot;https://journals.sagepub.com/doi/abs/10.1518/001872097778543886&quot;&gt;Humans and Automation: Use, Misuse, Disuse, Abuse&lt;/a&gt; &lt;a href=&quot;#fnref:misuse&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:ninesteps&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Woods, Cook, &lt;a href=&quot;https://www.researchgate.net/publication/226450254_Nine_Steps_to_Move_Forward_from_Error&quot;&gt;Nine Steps to Move Forward From Error&lt;/a&gt; &lt;a href=&quot;#fnref:ninesteps&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:autoaware&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Mica Endsley, &lt;a href=&quot;http://www.aerohabitat.eu/uploads/media/Automation_and_Situation_Awareness_-_Endsley.pdf&quot;&gt;Automation and Situation Awareness&lt;/a&gt; &lt;a href=&quot;#fnref:autoaware&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:wrongmental&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Besnard, Greathead, &lt;a href=&quot;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.62.9857&amp;amp;rep=rep1&amp;amp;type=pdf&quot;&gt;When mental models go wrong. Co-occurrences in dynamic, critical systems&lt;/a&gt; &lt;a href=&quot;#fnref:wrongmental&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:feedbackcontrol&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Philipp K. Janert, &lt;a href=&quot;http://shop.oreilly.com/product/0636920028970.do&quot;&gt;Feedback Control for Computer Systems&lt;/a&gt; &lt;a href=&quot;#fnref:feedbackcontrol&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Thu, 28 May 2020 07:51:00 +0000</pubDate>
        <link>http://onemogin.com/automation/improving-automation.html</link>
        <guid isPermaLink="true">http://onemogin.com/automation/improving-automation.html</guid>
        
        
        <category>automation</category>
        
      </item>
      
    
      
      <item>
        <title>Alternatives To Automation: Amplification, Complexity, and Control</title>
        <description>&lt;p&gt;In &lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt; I talked a lot of shit about automation. What can we do to avoid toil and error if we cannot automate? Well, we &lt;em&gt;can&lt;/em&gt; automate but that’s coming later. First, let’s discuss the middle ground.&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
   &lt;p&gt;This post is part of series on automation, the result of many months of reserach and reading. I may adjust these posts as my research grows. If you&apos;ve got comments leave feedback at the bottom!&lt;/p&gt;
   &lt;ul&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/alternatives-to-automation.html&quot;&gt;Alternatives to Automation: Amplification, Complexity, and Control&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/improving-automation.html&quot;&gt;Improving Automation: Working Together&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;p&gt;
     Thanks to Arijit Mukherji, Franklin Hu, Jay Shirley, Rajesh Raman, and Sam Boyer for their feedback and reviews of these posts.
   &lt;/p&gt;
&lt;/div&gt;

&lt;h1 id=&quot;what-is-complexity&quot;&gt;What Is Complexity?&lt;/h1&gt;
&lt;p&gt;I have a lot to learn about complexity. I’m still researching, but I really enjoy David D. Woods’ take in &lt;em&gt;Coping With Complexity&lt;/em&gt;, summarized by me:&lt;/p&gt;

&lt;p&gt;Complexity isn’t a &lt;em&gt;thing&lt;/em&gt;, it is a &lt;em&gt;situation&lt;/em&gt; composed of a world, an agent, and a representation. The world is dynamic, interconnected, uncertain, and costly. The agent is one or more humans and… other stuff like computers. The representation is whatever those agents use to understand and manipulate the world.&lt;sup id=&quot;fnref:coping&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:coping&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Complexity can be expensive. It makes things slow, error-prone, and frustrating. My primary interest is in complexity’s impact on the operator.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;As the complexity of a system increases, the accuracy of any single agent’s own model of that system decreases rapidy.&lt;sup id=&quot;fnref:abovebelow&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:abovebelow&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1 id=&quot;the-goal-is-control&quot;&gt;The Goal Is Control&lt;/h1&gt;
&lt;p&gt;In many of the citations I’ve used in this series the discussion is usually about &lt;strong&gt;control&lt;/strong&gt;. The systems we operate hum along, doing their thing, within a desired performance envelope. This envelope is defined by what our customers are willing to accept, what we’re willing to pay, and how well the operation works.&lt;/p&gt;

&lt;p&gt;Now and then things go wrong and, like a plane blown off course, we steer, throttle up, or however a plane works — I am not a pilot — to get things pointed in the right direction.&lt;/p&gt;

&lt;h1 id=&quot;amplifying-human-ability&quot;&gt;Amplifying Human Ability&lt;/h1&gt;
&lt;p&gt;Sticking to airplanes, the human pilot exerts control by operating the various control surfaces on the wings and such. Apparently, I’m &lt;em&gt;still&lt;/em&gt; not a pilot. Originally these surfaces were operated with cables and pulleys and required raw human strength. As airplanes got faster, more strength was needed and hydraulics &lt;strong&gt;amplified&lt;/strong&gt; human strength. Some modern planes use &lt;a href=&quot;https://en.wikipedia.org/wiki/Fly-by-wire&quot;&gt;fly-by-wire&lt;/a&gt; to replace all those heavy hydraulics with wires and actuators. Regardless, the human is still in control.&lt;sup id=&quot;fnref:autopilot&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:autopilot&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; This is just one example of how humans have engineered increased capabilities to exert control. But it’s a cool one because planes are rad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before deciding to remove the human from the loop you should consider amplifying the human’s effort.&lt;/strong&gt; Take &lt;a href=&quot;https://www.terraform.io/&quot;&gt;Terraform&lt;/a&gt; or &lt;a href=&quot;https://puppet.com/&quot;&gt;Puppet&lt;/a&gt; as examples. Both allow a single user to define a desired outcome and affect change across tens of thousands of machines in a fraction of the time.&lt;sup id=&quot;fnref:terruppet&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:terruppet&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; Critically these and other tools of their shape keep the human “in the loop”: deciding on action, monitoring progress, and responding to error. They can still cause incidents — believe me, I’ve done it plenty — but the human is more likely to be present, aware, and up to speed.&lt;/p&gt;

&lt;p&gt;One way to deal with complexity is not to add it. The gist of my argument in &lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt; is that &lt;strong&gt;creating automation adds complexity&lt;/strong&gt;.&lt;sup id=&quot;fnref:ironies&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:ironies&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; Before we add this complexity we could instead amplify the human’s abilities of strength, perception, or attention.&lt;/p&gt;

&lt;h1 id=&quot;autoscaler-example&quot;&gt;Autoscaler Example&lt;/h1&gt;
&lt;p&gt;In &lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt; we talked about automating an autoscaler. Before removing the human, what if we tried making a small tool that speeds up, simplifies, or otherwise improves this process? Maybe a small command line tool with best practices as defaults that allows multiple systems to be scaled all at once?&lt;/p&gt;

&lt;p&gt;If we had done this we could &lt;em&gt;keep the human involved&lt;/em&gt;. We could amplify their effort as well as coding in a few smart defaults. Maybe the human can even submit patches or, at a minimum, we can interview them to get some feedback to improve further.&lt;/p&gt;

&lt;p&gt;You may recall the Law of Stretched Systems&lt;sup id=&quot;fnref:jcs&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:jcs&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; from &lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;the last post&lt;/a&gt;. The additional time gained by leveraging our tool will undoubtedly result in our humans doing more things. The difference is that we’ve not cast the work aside for our humans to forget about. We’ve merely made it easier. Furthermore we’re good on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Variety_(cybernetics)#Law_of_requisite_variety&quot;&gt;Law of Requisite Variety&lt;/a&gt; because our tool can continue to rely on the human to cover all of the things we’ve left out. &lt;strong&gt;The tool is a supplement to an adaptive human.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;tools-can-be-complex-too&quot;&gt;Tools Can Be Complex Too&lt;/h2&gt;
&lt;p&gt;The creation of such a tool will obviously require some investment. It will require consideration about best practices, repercussions and outcomes. The adoption of any technology — tool or automation — fundamentally changes the job, the problems, and the future of the operation.&lt;sup id=&quot;fnref:anticipatingchange&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:anticipatingchange&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;The difference I am advocating here is to include the human in the use of the tool, versus automation which replaces the human. &lt;strong&gt;When we remove the human we remove the only adaptive, safety-creating&lt;sup id=&quot;fnref:complexsystems&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:complexsystems&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; component and replace it, if at all, with a poorly coded analog. When we amplify, we retain the &lt;em&gt;best&lt;/em&gt; human parts.&lt;/strong&gt;&lt;/p&gt;

&lt;h1 id=&quot;amplify-before-you-automate&quot;&gt;Amplify Before You Automate&lt;/h1&gt;
&lt;p&gt;There are other ways to deal with complexity such as increasing &lt;a href=&quot;https://en.wikipedia.org/wiki/Reliability_engineering&quot;&gt;reliability&lt;/a&gt; to the point that it’s mostly ignored, or &lt;a href=&quot;https://en.wikipedia.org/wiki/Ecological_interface_design&quot;&gt;embracing complexity’s representation&lt;/a&gt;. Those are topics for another day, though.&lt;/p&gt;

&lt;p&gt;Amplification via tools allows us to increase output while decreasing, or at least keeping constant, human effort. We retain the best traits of humans while decreasing effort or toil.&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
   &lt;p&gt;This post is part of series on automation, the result of many months of reserach and reading. I may adjust these posts as my research grows. If you&apos;ve got comments leave feedback at the bottom!&lt;/p&gt;
   &lt;ul&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/alternatives-to-automation.html&quot;&gt;Alternatives to Automation: Amplification, Complexity, and Control&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/improving-automation.html&quot;&gt;Improving Automation: Working Together&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;p&gt;
     Thanks to Arijit Mukherji, Franklin Hu, Jay Shirley, Rajesh Raman, and Sam Boyer for their feedback and reviews of these posts.
   &lt;/p&gt;
&lt;/div&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:coping&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;David D. Woods, &lt;a href=&quot;https://www.researchgate.net/publication/238727732_Coping_with_Complexity_The_psychology_of_human_behavior_in_complex_systems&quot;&gt;Coping with complexity, the psychology of human behavior in complex systems&lt;/a&gt;. &lt;a href=&quot;#fnref:coping&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:abovebelow&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Richard I. Cook, M.D., &lt;a href=&quot;https://queue.acm.org/detail.cfm?id=3380777&quot;&gt;Above the Line, Below the Line&lt;/a&gt; &lt;a href=&quot;#fnref:abovebelow&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:autopilot&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Yes, there are autopilots which are automation but that’s supplemental and the subject of many more papers. &lt;a href=&quot;#fnref:autopilot&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:terruppet&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Both also have their faults, but they obviously allow people to control huge fleets of machines. &lt;a href=&quot;#fnref:terruppet&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:ironies&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Lisanne Bainbridge, &lt;a href=&quot;https://www.ise.ncsu.edu/wp-content/uploads/2017/02/Bainbridge_1983_Automatica.pdf&quot;&gt;Ironies of Automation&lt;/a&gt; &lt;a href=&quot;#fnref:ironies&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:jcs&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Woods, Hollnagel, &lt;a href=&quot;https://erikhollnagel.com/books/joint-cognitive-systems-patterns.html&quot;&gt;“Joint Cognitive Systems: Patterns in Cognitive Systems Engineering”&lt;/a&gt; &lt;a href=&quot;#fnref:jcs&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:anticipatingchange&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Woods, Dekker, &lt;a href=&quot;https://www.researchgate.net/publication/247512351_Anticipating_the_effects_of_technological_change_A_new_era_of_dynamics_for_human_factors&quot;&gt;Anticipating the effects of technological change: A new era of dynamics for human factors&lt;/a&gt; &lt;a href=&quot;#fnref:anticipatingchange&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:complexsystems&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Richard Cook, &lt;a href=&quot;https://web.mit.edu/2.75/resources/random/How%20Complex%20Systems%20Fail.pdf&quot;&gt;How Complex Systems Fail&lt;/a&gt; &lt;a href=&quot;#fnref:complexsystems&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 27 May 2020 07:49:00 +0000</pubDate>
        <link>http://onemogin.com/automation/alternatives-to-automation.html</link>
        <guid isPermaLink="true">http://onemogin.com/automation/alternatives-to-automation.html</guid>
        
        
        <category>automation</category>
        
      </item>
      
    
      
      <item>
        <title>Stop Hitting Yourself: How Automation Is Hurting You</title>
        <description>&lt;p&gt;I really dislike writing post openings. It feels tedious to define the problem in leading ways that will entice a reader, especially when the important bits are further down. I wish I could just press a button and get a Cory-like opening blurb with some toilsome bits like “so and so is defined by wikipedia as” and a pithy joke. I wanna automate it.&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
   &lt;p&gt;This post is part of series on automation, the result of many months of reserach and reading. I may adjust these posts as my research grows. If you&apos;ve got comments leave feedback at the bottom!&lt;/p&gt;
   &lt;ul&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/alternatives-to-automation.html&quot;&gt;Alternatives to Automation: Amplification, Complexity, and Control&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/improving-automation.html&quot;&gt;Improving Automation: Working Together&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;p&gt;
     Thanks to Arijit Mukherji, Franklin Hu, Jay Shirley, Rajesh Raman, and Sam Boyer for their feedback and reviews of these posts.
   &lt;/p&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Automation&quot;&gt;Automation&lt;/a&gt; is a process being performed with minimal, if any, human involvement. &lt;a href=&quot;https://en.wikipedia.org/wiki/DevOps&quot;&gt;DevOps&lt;/a&gt; and &lt;a href=&quot;https://en.wikipedia.org/wiki/Site_Reliability_Engineering&quot;&gt;SRE&lt;/a&gt; commonly recommend aggressive automation to do more with less in modern, &lt;a href=&quot;https://en.wikipedia.org/wiki/Complex_system&quot;&gt;complex systems&lt;/a&gt;. There’s certainly a lot to be gained from automation, but there’s also a downside when this technology replaces human involvement.&lt;/p&gt;

&lt;h2 id=&quot;toxic-teammates&quot;&gt;Toxic Teammates&lt;/h2&gt;
&lt;p&gt;Have you ever worked with a stubborn, uncommunicative teammate? Maybe they didn’t contribute to joint projects or &lt;em&gt;did&lt;/em&gt; contribute but didn’t share until the end? Perhaps they insisted on dropping everything at exactly noon every day so they could get their favorite sandwich for lunch, work be damned, and left everyone else to deal with the mess.&lt;/p&gt;

&lt;p&gt;Such a teammate is often considered toxic and ruinous to teams everywhere. My goal today is to show you how the automation you’re making in your job is generating these “teammates” and wrecking your happiness, reliability and ability to do cool new things.&lt;/p&gt;

&lt;h2 id=&quot;toil-and-trouble&quot;&gt;Toil and Trouble&lt;/h2&gt;
&lt;p&gt;One of my responsibilities is keeping an API library up to date. Inside this API is a list of acceptable names for cloud provider services. That list changes periodically and is kept in a bit of Java source code as a map. So every few weeks I copy the block from Java into Go and — by hand — rejigger it into Go syntax and commit it. Each time I think about how I could write a parser to do this… or maybe ask the other team to move the definitions to YAML files so I could rid myself of this toilsome work. Sometimes I even typo a definition and release it to the world. “Damn!” I say, reminding myself that if this were YAML and I had a script I could avoid this happening.&lt;/p&gt;

&lt;p&gt;This sort of tedium is common in jobs. Despite my whining, I’ve only had problems with this process two or three times in a year. Each time it was obvious to me what had happened and it was fixed quickly and effectively with very little customer impact. This is because I — as a human — am full of wonder: foresight, imagination, adaptability, and ingenious. While I make errors on some occasions, I more often create safety.&lt;sup id=&quot;fnref:0&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:0&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; When I do make errors, I quickly recognize and correct them using my adaptability and ingenuity. Compare this to the heap of new problems I might bring by introducing new dependencies to a well understood process.&lt;/p&gt;

&lt;h2 id=&quot;how-automation-hurts&quot;&gt;How Automation Hurts&lt;/h2&gt;
&lt;p&gt;The point I’m getting to here is that despite our seemingly genetic distaste for toil we should be extremely careful about reaching for automation.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Automation has generally been introduced to meet the needs of the process rather than the needs of the people working with the process&lt;sup id=&quot;fnref:jcsauto&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:jcsauto&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My plan is to scare you sober by showing all ways that automation is like that toxic teammate. In a follow up I’ll help you learn how to avoid these problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automating a process without proper consideration, design, and planning can create technical debt, incidents, and undermine all your hard work.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the rest of this post, imagine a common bit of automation in many orgs: &lt;a href=&quot;https://en.wikipedia.org/wiki/Autoscaling&quot;&gt;autoscaling&lt;/a&gt;. Some sort of latency metric is monitored and, based on thresholds, some other resource like compute is scaled up or down. This replaces a human looking at charts and making a judgement call, or missing an unexpected surge because they were busy watching &lt;em&gt;Tiger King&lt;/em&gt; and eating half-gallons of ice cream. Not that I’ve done that.&lt;/p&gt;

&lt;p&gt;Imagine our new autoscaling system has worked well for weeks, then a surge in traffic occurs. The autoscaler automation does its job and no human needs to get involved! Sadly, this load consumes all the compute your cloud provider has allotted to you. Tasks across the org begin failing with esoteric error messages as compute grinds to a halt. Since most of us skip error checking for operations that generally succeed we may not even have error messages!&lt;/p&gt;

&lt;p&gt;“But Cory”, you say with a smirk, “we have tons of automated things underlying our entire lives and we’re getting by”. Sure, we are. The key difference is &lt;em&gt;definedness&lt;/em&gt;. There are some processes which are so well defined, and so unlikely to encounter problems that we’ve been able to free ourselves completely from the toil. For more complex or poorly defined situations, however, human capabilities are still essential.&lt;sup id=&quot;fnref:jcsauto:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:jcsauto&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;automation-requires-more-of-humans&quot;&gt;Automation Requires More Of Humans&lt;/h3&gt;
&lt;p&gt;Automation removes the human from involvement in the operation. This is a blessing in reduced fatigue or improved productivity. Unfortunately it’s a curse in &lt;em&gt;situation awareness&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;These kinds of second order effects are common with automation because humans are “out of the loop”. &lt;strong&gt;This means additional time is required for all these folks to get acquainted with the system, how it works, and what can be done about it.&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/strong&gt; If the user doesn’t know about the automation or has forgotten the logic, they may end up fighting what seems like unexplainable behavior! This price is being paid at a shitty time, as we may be dealing with customer side effects and blowing up the entire org’s productivity by invoking the incident machinery.&lt;/p&gt;

&lt;p&gt;This situation leaves us with an irony and a paradox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Irony:&lt;/strong&gt; the more complex an automation, the more crucial the human becomes.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; Our autoscaler, meant to improve latency, has instead caused a complex series of second order failures that a — or many! — humans most now sort through.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paradox:&lt;/strong&gt; our automation was intended to remove the need for humans, but instead we’ve made a new, different joint human-computer doodad.&lt;sup id=&quot;fnref:2:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h3 id=&quot;automation-creates-new-problems&quot;&gt;Automation Creates New Problems&lt;/h3&gt;
&lt;p&gt;When we set out to make our autoscaler or any other automation, our goal was to reduce the effort and/or accuracy of a task. This goal is so strong that we generally miss, or don’t bother to imagine, the &lt;em&gt;side effects&lt;/em&gt; that come with the benefits. &lt;strong&gt;Adoption of any technology, which automation is a form of, increases needs for coordination, creates new situations, and new failures. “It changes what is canonical and what is exceptional.”&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consider our earlier example. Not only do we have new failure modes, we have additional process and state that humans must internalize. Before the autoscaler we had one set of problems, now we have exciting new problems!&lt;/p&gt;

&lt;h3 id=&quot;automation-increases-complexity&quot;&gt;Automation Increases Complexity&lt;/h3&gt;
&lt;p&gt;The productivity gain from automation is tantalizingly quantifiable. The ramifications are frustratingly qualitative. The time spent staring at charts, editing files, and executing changes can be added up in a spreadsheet and celebrated at review time. What will we do with all this extra time?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We create even more complexity&lt;/strong&gt;, that’s what. We’ll go and automate another thing, or create a new thing that needs automation later. This is a form of The Law of Stretched Systems&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Every system is stretched to operate at its capacity; as soon as there is some form of improvement, for example, in the form of new technology, it will be exploited to achieve a new intensity and tempo of activity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We’ll take this newfound free time and permission to make &lt;em&gt;more&lt;/em&gt; complexity without realizing we’re going to pay later.&lt;/p&gt;

&lt;p&gt;Harkening back to our earlier problems we can also look to cybernetics for the &lt;a href=&quot;https://en.wikipedia.org/wiki/Variety_(cybernetics)#Law_of_requisite_variety&quot;&gt;Law of Requisite Variety&lt;/a&gt; which warns us that a controller — which is what our automation is — must have &lt;em&gt;at least&lt;/em&gt; as many states as the system it controls. This culminates in a combo finisher by &lt;a href=&quot;https://en.wikiquote.org/wiki/Brian_Kernighan&quot;&gt;Brian Kernighan’s famous admonition&lt;/a&gt; that debugging is twice as hard as programming. Can you debug this automation if it’s more complex than its target process? What about when multiple pieces of automation start interacting?&lt;/p&gt;

&lt;h3 id=&quot;automation-is-design&quot;&gt;Automation Is Design&lt;/h3&gt;
&lt;p&gt;Automation usually begins from a point of frustration. Our autoscaler was likely born either from an incident remediation or someone who was sick of staring at charts. Our aforementioned quantitative improvements spur us into action. The autoscaler is only a state machine, right? You’ve written a zillion of those!&lt;/p&gt;

&lt;p&gt;The repercussions of adding automation warrant research, user interviews, collecting feedback, and all that other work that &lt;em&gt;isn’t&lt;/em&gt; coding. I’m talking about &lt;strong&gt;design&lt;/strong&gt; here.&lt;/p&gt;

&lt;p&gt;Design is never neutral, so every change you affect or error you emit benefits from design.&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; How will users know the autoscaler has taken action? Will the autoscaler make correct choices when faced with increasing latency and capacity for other functions? Can users disable the autoscaler? These are all essential questions to factor into your design.&lt;/p&gt;

&lt;h3 id=&quot;automation-reduces-optionality&quot;&gt;Automation Reduces Optionality&lt;/h3&gt;
&lt;p&gt;Humans have created some beautiful  — and some despicable — things. A human as part of a system means that system can still be adaptive&lt;sup id=&quot;fnref:0:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:0&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. When we remove humans we remove this adaptive capability. Yeah, yeah, I know we have ML and AI but these are, for now, very crude in comparison to humans. Using them is, in effect, even more automation that we must understand. Eep!&lt;/p&gt;

&lt;p&gt;To automate a process requires a very specific, fixed set of instructions. Do you understand the process and its ramifications well enough to do that yet? Automating a process requires design and choices, which can reduce the freedom of afforded from continued learning, evolution, and adaptation from the human operator.&lt;sup id=&quot;fnref:3:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt; Doing this too early can result in shortcomings, bugs, and technical debt.&lt;/p&gt;

&lt;p&gt;A human is aware of seasonal differences, like Black Friday, where a human would temper their actions. A human would recognize a network outage and not scale the compute down to 0 when the latency metric is 0 or missing. These lessons must be learned before we can rely on automation, lest we realize the repercussions in embarrassing incidents.&lt;/p&gt;

&lt;h2 id=&quot;automation-is-brittle-and-dangerous&quot;&gt;Automation Is Brittle And Dangerous&lt;/h2&gt;
&lt;p&gt;You’re still here reading, so you didn’t bail early. Those that did probably think this post is some sort of Luddite position that we should stop or cast off automation. I’m ok with that assessment if it slows engineers down and encourages them to think through when and how to automate something. By all means read this half way through and talk shit about it, so long as it scares you.&lt;/p&gt;

&lt;p&gt;Really, the opposite is true. I’m in awe of our automated accomplishments. My issue is with the wreckage we leave in our wake in the form of half-ass resilience. Automation is incredibly powerful, but so is human capability. Deploying automation too soon can result in a rickety, dangerous foundation that humans prop up with grueling on all schedules and unhappy customers.&lt;/p&gt;

&lt;p&gt;The next time you feel the urge to automate, instead begin a design document. Better yet, marvel in your own antientropic powers and keep learning so you can write a better design document later.&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
   &lt;p&gt;This post is part of series on automation, the result of many months of reserach and reading. I may adjust these posts as my research grows. If you&apos;ve got comments leave feedback at the bottom!&lt;/p&gt;
   &lt;ul&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/automation-is-hurting-you&quot;&gt;Stop Hitting Yourself: How Automation Is Hurting You&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/alternatives-to-automation.html&quot;&gt;Alternatives to Automation: Amplification, Complexity, and Control&lt;/a&gt;&lt;/li&gt;
     &lt;li&gt;&lt;a href=&quot;http://onemogin.com/automation/improving-automation.html&quot;&gt;Improving Automation: Working Together&lt;/a&gt;&lt;/li&gt;
   &lt;/ul&gt;
   &lt;p&gt;
     Thanks to Arijit Mukherji, Franklin Hu, Jay Shirley, Rajesh Raman, and Sam Boyer for their feedback and reviews of these posts.
   &lt;/p&gt;
&lt;/div&gt;

&lt;h1 id=&quot;references&quot;&gt;References&lt;/h1&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:0&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Richard Cook, &lt;a href=&quot;https://web.mit.edu/2.75/resources/random/How%20Complex%20Systems%20Fail.pdf&quot;&gt;How Complex Systems Fail&lt;/a&gt; &lt;a href=&quot;#fnref:0&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:0:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:jcsauto&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;E. Hollnagel, &lt;a href=&quot;https://www.sciencedirect.com/science/article/pii/S1474667017376851&quot;&gt;The Role of Automation in Joint Cognitive Systems&lt;/a&gt; &lt;a href=&quot;#fnref:jcsauto&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:jcsauto:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Mica Endsley, &lt;a href=&quot;http://www.aerohabitat.eu/uploads/media/Automation_and_Situation_Awareness_-_Endsley.pdf&quot;&gt;Automation and Situation Awareness&lt;/a&gt; &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Lisanne Bainbridge, &lt;a href=&quot;https://www.ise.ncsu.edu/wp-content/uploads/2017/02/Bainbridge_1983_Automatica.pdf&quot;&gt;Ironies of Automation&lt;/a&gt; &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:2:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Thomas B. Sheridan, &lt;a href=&quot;https://journals.sagepub.com/doi/10.1177/106480469800600305&quot;&gt;Allocating Functions Rationally&lt;/a&gt; &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:3:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Woods, Hollnagel, &lt;a href=&quot;https://erikhollnagel.com/books/joint-cognitive-systems-patterns.html&quot;&gt;“Joint Cognitive Systems: Patterns in Cognitive Systems Engineering”&lt;/a&gt; &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Donald A. Norman, &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Design_of_Everyday_Things&quot;&gt;“The Design of Everyday Things”&lt;/a&gt; &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 26 May 2020 07:50:00 +0000</pubDate>
        <link>http://onemogin.com/automation/automation-is-hurting-you.html</link>
        <guid isPermaLink="true">http://onemogin.com/automation/automation-is-hurting-you.html</guid>
        
        
        <category>automation</category>
        
      </item>
      
    
      
      <item>
        <title>Dashboard Organization and Naming</title>
        <description>&lt;p&gt;It starts innocently: a monolith with some simple KPIs to keep an eye on. You whip up a quick dashboard. The simplicity of your needs means that things are well organized and all in one place. Order is kept. Everyone knows where to look.&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
  &lt;p&gt;This post is part of &lt;em&gt;A Practitioner&apos;s Guide to System Dashboard Design&lt;/em&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Structure and Layout&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Presentation and Accessibility&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html&quot;&gt;What Charts To Use&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html&quot;&gt;Context Improvement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html&quot;&gt;Naming and Organization&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;p&gt;Fast forward a bit and as you’ve microed your services and kubered your netes the sheer fecundity of services, teams, operators, and needs have resulted in a hot mess of dashboards. Operators use bookmarks or address bar completion to find their trusted sources. Friends meet over lunch and realize they are looking at two different views of similar data. Shady vendors erupt from allies promising magic spells that point out all your problems. It’s so confusing!&lt;/p&gt;

&lt;iframe src=&quot;https://giphy.com/embed/5t9wJjyHAOxvnxcPNk&quot; width=&quot;480&quot; height=&quot;401&quot; frameborder=&quot;0&quot; class=&quot;giphy-embed&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;a href=&quot;https://giphy.com/gifs/latelateshow-what-confused-5t9wJjyHAOxvnxcPNk&quot;&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s discuss how we can &lt;em&gt;design&lt;/em&gt; our dashboard organization to increase awareness and findability.&lt;/p&gt;

&lt;h2 id=&quot;a-very-particular-set-of-skills&quot;&gt;A Very Particular Set of Skills&lt;/h2&gt;

&lt;p&gt;The folks making dashboards are often the folks running the systems they monitor. This is both important from a DevOps perspective as well as for accuracy. &lt;strong&gt;Unfortunately these folks — the skillful artisans of backend services, data pipelines, and machine learning — might not know best how to set up an entire company’s monitoring assets.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you squint at dashboards and how they interact with your operations this can be reduced to a problem of &lt;em&gt;organization&lt;/em&gt;. Luckily there is an entire discipline around this called &lt;a href=&quot;https://en.wikipedia.org/wiki/Information_architecture&quot;&gt;information architecture&lt;/a&gt; or IA. Information architecture, a branch of &lt;a href=&quot;https://en.wikipedia.org/wiki/Information_science&quot;&gt;information science&lt;/a&gt;, concerns itself with the design of information environments to support findability and usability. Yay for the -ilities!&lt;/p&gt;

&lt;p&gt;Your first step is to ask around: does your company have folks that are experts in this discipline? If so, seek them out and ask for some of their time. They can likely help you through some basics on what to work toward. &lt;em&gt;Use their advice over any you get here!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For those without you might find the &lt;a href=&quot;https://www.usability.gov/what-and-why/information-architecture.html&quot;&gt;U.S. Department of Health &amp;amp; Human Services’s Information Architecture Basics page&lt;/a&gt; helpful. Also a run through &lt;a href=&quot;https://usabilla.com/blog/fundamental-concepts-ux/&quot;&gt;Fundamental Concepts of Good UX&lt;/a&gt; wouldn’t hurt.&lt;/p&gt;

&lt;p&gt;Note: It may help you to explicitly appoint someone this responsibility and applaud their efforts rather than relying on unofficial or “shadow” work that goes unrewarded. Most tools have APIs for fetching assets and you can set up policies that enforce the ultimate design.&lt;/p&gt;

&lt;h2 id=&quot;see-what-youre-working-with&quot;&gt;See What You’re Working With&lt;/h2&gt;

&lt;p&gt;Most companies looking to improve their dashboard findability will be using some sort of tool, be it vendor, OSS, or in-house. Regardless you’ve likely got some existing capabilities. What does the tool support? Common mechanisms are tags or labels, hierarchies, groups, or layouts like matrices. This is vital, as trying to fight against your tools preferred mechanisms will only yield frustration.&lt;/p&gt;

&lt;p&gt;Empowered by knowing the way your tool works we can start looking at how to best leverage it’s strengths.&lt;/p&gt;

&lt;h2 id=&quot;ship-your-org-chart&quot;&gt;Ship Your Org Chart&lt;/h2&gt;

&lt;p&gt;Ever noticed that you tend to move toward things you’re looking at? Since organizations are full of people we tend to also go where the organization is looking. The trusty org chart is a strong indicator of how a company is orienting itself, and our products tend to reflect that. This idea is called &lt;a href=&quot;https://medium.com/@donorem/shipping-the-org-chart-3319181be9bd&quot;&gt;shipping the org chart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;People tend to understand the product they work in as well as the org chart that shapes it. To that end, consider arranging your assets using the org chart as a guide. For example, you might have Product and Infrastructure Engineering teams. The Database team, nested in Infra, might have a team for Transactional versus Analytics.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p5-org.png&quot; alt=&quot;Icon-based org chart showing hierarchy of Infra, Storage, and two sub-teams&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Does your org chart have these fancy icons?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The folks that work in these areas, as well as those higher in the org chart probably know how to navigate this structure. You can leverage this hierarchy by placing appropriate dashboards at each level. High level KPIs for each team might live at the Infra level whereas a dashboard for use with Hadoop would live in the analytics team’s area.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p5-org-labels.png&quot; alt=&quot;Icon-based org chart with labels for where dashboards might live&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Maybe these dashboards in these places?&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;naming&quot;&gt;Naming&lt;/h2&gt;

&lt;p&gt;I know you put a lot of thought into the clever names you’ve given your services and projects. Naming the data pipeline service for that Lord of the Rings character, complete with backstory, was really a stroke of genius. Unfortunately many teams use this sort of process and it quickly becomes impermeable claptrap.&lt;/p&gt;

&lt;p&gt;Name your dashboards and monitoring assets for activities, not for nouns. These activities likely share some DNA with your org chart and team names. Furthermore most companies use similar words for things like orders, ETL, RPC. This allows new hires or folks from other disciplines a better chance of knowing what they are looking at.&lt;/p&gt;

&lt;h2 id=&quot;findability&quot;&gt;Findability&lt;/h2&gt;

&lt;p&gt;Lastly let’s talk about how one finds these assets. You’ll again look to your tools for help. Do they offer search features? Are names the only searchable field, or can you also search descriptions or even chart titles within a dashboard? Knowing this will help you create a strategy for improving findability.&lt;/p&gt;

&lt;h3 id=&quot;use-words-that-help&quot;&gt;Use words that help&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Data Pipeline Overview&lt;/em&gt; is a better name than &lt;em&gt;Smeagol Overview&lt;/em&gt;, but &lt;em&gt;Data Pipeline (Smeagol) Overview&lt;/em&gt; that lives in the Analytics team is much more helpful.&lt;/p&gt;

&lt;h3 id=&quot;add-more-words&quot;&gt;Add more words&lt;/h3&gt;

&lt;p&gt;Many tools have descriptions or other text fields beyond just the title. Consider something like “Contains high level indicators for data pipeline health useful for stakeholders interested in investigating delays and statuses”. This might help search tooling or just those that browse in and wonder the goals.&lt;/p&gt;

&lt;h3 id=&quot;linking-lists-and-ordering&quot;&gt;Linking, Lists and Ordering&lt;/h3&gt;

&lt;p&gt;Many tools allow you to create relationships between assets. A data pipeline dashboard might link to it’s destination or source, helping operators hop from one place to another. In hierarchical or list-based systems the order of dashboards might be a prominent UI feature. Consider placing more important or higher-level dashboards at the top.&lt;/p&gt;

&lt;p&gt;Additionally, many dashboard tools allow placing text widgets. Consider including these with links to helpful resources.&lt;/p&gt;

&lt;h3 id=&quot;favorites-or-usage-based-metrics&quot;&gt;Favorites or Usage-based Metrics&lt;/h3&gt;

&lt;p&gt;If your tool allows users to flag databases as favorites or upvote them, this might help bring attention. Be wary of this, as popularity might not match your IA design.&lt;/p&gt;

&lt;h2 id=&quot;keep-it-up&quot;&gt;Keep It Up!&lt;/h2&gt;

&lt;p&gt;In case you missed it before I’ll reiterate: Appointing someone to do this work is a big help. Designs usually need &lt;em&gt;designers&lt;/em&gt;. Your tools might have a framework out of the box, but helping the folks in your company know how best to use these tools, to create policities, and to enforce these policies can pay dividends. This function might be a part-time role for a skillful individual or a function of a larger team like an observability or SRE team in conjunction with specialists from your product arm. Regardless, this investment can prevent duplication of effort, improve responsiveness during problems, and generally level up your cross-team awareness. Have fun designing!&lt;/p&gt;

&lt;iframe src=&quot;https://giphy.com/embed/l0MYJnJQ4EiYLxvQ4&quot; width=&quot;480&quot; height=&quot;418&quot; frameborder=&quot;0&quot; class=&quot;giphy-embed&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;a href=&quot;https://giphy.com/gifs/l0MYJnJQ4EiYLxvQ4&quot;&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Tue, 20 Aug 2019 07:49:00 +0000</pubDate>
        <link>http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html</link>
        <guid isPermaLink="true">http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html</guid>
        
        
        <category>observability</category>
        
        <category>dashboards</category>
        
      </item>
      
    
      
      <item>
        <title>Observability Crash Course</title>
        <description>&lt;p&gt;The title is succinct, but in practice an organization’s “observability” efforts range a number of disciplines. This document aims to compress the breadth of topics into a succinct (fitting on 1 printed page) set of best of breed write-ups that avoid any ties to vendors or implementation.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=U4E0QxzswQc&quot;&gt;Bryan Cantrill’s Visualizing Distributed Systems with Statemaps&lt;/a&gt;&lt;/em&gt;: Leads with a master class in what observability is and how our brains, our systems, and our tools are important.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://distributed-systems-observability-ebook.humio.com/&quot;&gt;Cindy Sridharan’s Distributed Systems Observability&lt;/a&gt;&lt;/em&gt;: This is a free, 25-page eBook that does a great job summarizing the various tools and concepts available. You could also read &lt;em&gt;&lt;a href=&quot;https://medium.com/@copyconstruct/monitoring-and-observability-8417d1952e1c&quot;&gt;Monitoring and Observability&lt;/a&gt;&lt;/em&gt; from Cindy’s blog for a shorter and less formal version of the same.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://landing.google.com/sre/books/&quot;&gt;Google’s Site Reliability Engineering:&lt;/a&gt;&lt;/em&gt; This book has provided a lingua franca for discussions around the practices of reliability. It includes lots of great material like “Golden Signals”, error budgets, and more. You can &lt;a href=&quot;https://landing.google.com/sre/sre-book/toc/index.html&quot;&gt;read it online&lt;/a&gt; for free.
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.weave.works/blog/the-red-method-key-metrics-for-microservices-architecture/&quot;&gt;Tom Wilkie’s RED Method&lt;/a&gt;&lt;/em&gt; is a focused explanation of the SRE book’s Golden Signals and tends to resonate well with people.&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://www.brendangregg.com/usemethod.html&quot;&gt;Brendan Gregg’s USE Method&lt;/a&gt;&lt;/em&gt; is an exceptional framework for measuring resource consumption. It takes more effort, but has fantastic results.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Fred Hebert’s &lt;em&gt;&lt;a href=&quot;https://ferd.ca/operable-software.html&quot;&gt;Operable Software&lt;/a&gt;&lt;/em&gt; careens from observability to user experience and reminds us why this all so important.&lt;/li&gt;
  &lt;li&gt;Specific guidance for some of the “pillars” of Observability:
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://prometheus.io/docs/concepts/metric_types/&quot;&gt;Prometheus’ Guide To Metric Types&lt;/a&gt;&lt;/em&gt; covers the basics of metrics and their &lt;em&gt;&lt;a href=&quot;https://prometheus.io/docs/practices/naming/&quot;&gt;Metric and Label Naming&lt;/a&gt;&lt;/em&gt; reminds us that our metrics are also an interface for our engineers, and how we can standardize.&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://charity.wtf/2019/02/05/logs-vs-structured-events/&quot;&gt;Charity Majors’ Logs Vs Structured Events&lt;/a&gt;&lt;/em&gt; describes how we can turn logging from a burden into a blessing.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;On the practice of measuring and using this tooling for the day-to-day:
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=czes-oa0yik&quot;&gt;Coda Hale’s Metrics, Metrics, Everywhere&lt;/a&gt;&lt;/em&gt; touches on everything from mental models to &lt;a href=&quot;https://en.wikipedia.org/wiki/OODA_loop&quot;&gt;OODA loops&lt;/a&gt; and generally explains how to measure and why you should. It’s 7 years old and low quality, but is the best summary I’ve ever heard.&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://vimeo.com/77232632&quot;&gt;Baron Schwartz’ What Metrics Should I Monitor&lt;/a&gt;&lt;/em&gt; helps to frame what to pay attention to in systems. It’s aimed at MySQL but can be applied to other systems.&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://speakerdeck.com/kavya719/applied-performance-theory&quot;&gt;Kavya Joshi’s Applied Performance Theory&lt;/a&gt;&lt;/em&gt; is an excellent talk who’s title couldn’t be more apt. It gives quick and practical advice on using many of the formal topics from performance engineering.&lt;/li&gt;
      &lt;li&gt;John Allspaw’s &lt;em&gt;&lt;a href=&quot;https://www.kitchensoap.com/2013/07/22/owning-attention-considerations-for-alert-design/&quot;&gt;Owning Attention (Considerations for Alert Design)&lt;/a&gt;&lt;/em&gt; is a class in alerting for humans.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;On incidents:
    &lt;ul&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://www.gremlin.com/community/tutorials/how-to-establish-a-high-severity-incident-management-program/&quot;&gt;Gremlin’s How to Establish a High Severity Incident Management Program&lt;/a&gt;&lt;/em&gt; provides a good example of how to think about and handle incidents.&lt;/li&gt;
      &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://snafucatchers.github.io/&quot;&gt;The STELLA Report&lt;/a&gt;&lt;/em&gt; is the findings from the review of a few incidents and how engineers cope with them. It provides some strong food for thought for organizations and is a good gateway drug into the work of&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;periodic-reading&quot;&gt;Periodic Reading&lt;/h1&gt;

&lt;p&gt;Enjoy mailing lists and such? Here are some good ones:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;&lt;a href=&quot;https://monitoring.love/&quot;&gt;Monitoring Weekly&lt;/a&gt;&lt;/em&gt; is exactly what it sounds like.&lt;/li&gt;
  &lt;li&gt;Thai Wood’s &lt;em&gt;&lt;a href=&quot;https://resilienceroundup.com&quot;&gt;Resilience Roundup&lt;/a&gt;&lt;/em&gt; summarizes papers in the resilience space and adds special insight from his combined tech and EMT background.&lt;/li&gt;
  &lt;li&gt;Lex Neva’s &lt;em&gt;&lt;a href=&quot;https://sreweekly.com/&quot;&gt;SRE Weekly&lt;/a&gt;&lt;/em&gt; frequently hits topics in or adjacent to observability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;my-contributions&quot;&gt;My Contributions&lt;/h1&gt;

&lt;p&gt;As a long time advocate of observability I hope it’s ok to add a few bits of my own. First, my definition:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Observability is a quality of software, services, platforms, or products that allows operators to understand &lt;strong&gt;how&lt;/strong&gt; systems are working. Observability makes investigating and diagnosing problems easier; the more observable a system, the more tools we’ve made available to diagnose problems or understand behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And some of my works:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/#speaking&quot;&gt;My talks on observability&lt;/a&gt; across the years.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Structure and Layout in System Dashboard Design&lt;/a&gt;&lt;/em&gt; aims to condense the work of many other sources into practical advice for how to make great dashboards.&lt;/li&gt;
  &lt;li&gt;The &lt;em&gt;&lt;a href=&quot;http://onemogin.com/monitoring/case-method-better-monitoring-for-humans.html&quot;&gt;CASE Method: Better Monitoring for Humans&lt;/a&gt;&lt;/em&gt; aims to give a vendor agnostic, manual-if-needed process for controlling alert fatigue and measuring value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;honorable-mention&quot;&gt;Honorable Mention&lt;/h1&gt;

&lt;p&gt;I’ve not read all of these yet, but seen them referenced enough to think they are worth a mention.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://shop.oreilly.com/product/0636920063964.do&quot;&gt;Seeking SRE&lt;/a&gt;&lt;/em&gt; is a supplement to Google’s SRE book, aimed at how the SRE role can be applied to organizations that aren’t Google.&lt;/p&gt;
</description>
        <pubDate>Wed, 07 Aug 2019 07:49:00 +0000</pubDate>
        <link>http://onemogin.com/observability/dashboards/observability-crash-course.html</link>
        <guid isPermaLink="true">http://onemogin.com/observability/dashboards/observability-crash-course.html</guid>
        
        
        <category>observability</category>
        
        <category>dashboards</category>
        
      </item>
      
    
      
      <item>
        <title>Context Improvement in System Dashboard Design</title>
        <description>&lt;p&gt;With a strong layout and helpful visualizations our next goal is to orient the user with as much context as possible. Failing to provide any context is one of the most common mistakes in creating dashboards (Few 38)&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. The context our user needs often comes from other sources not included in our carefully considered charts.&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
  &lt;p&gt;This post is part of &lt;em&gt;A Practitioner&apos;s Guide to System Dashboard Design&lt;/em&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Structure and Layout&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Presentation and Accessibility&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html&quot;&gt;What Charts To Use&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html&quot;&gt;Context Improvement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html&quot;&gt;Naming and Organization&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;h1 id=&quot;basics-text&quot;&gt;Basics: Text&lt;/h1&gt;

&lt;p&gt;Humans are pretty good at reading. Those that make the dashboards often lean toward terseness. In &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;part 2&lt;/a&gt; we covered &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html#scale-and-units&quot;&gt;Scale and Units&lt;/a&gt;. Labeling our data and considering the &lt;em&gt;form&lt;/em&gt; of that label can yield comprehension improvements.&lt;/p&gt;

&lt;p&gt;But let’s not get too deep here: just label your damn charts better. There’s no charge for letters! Imagine you’re a new operator who’s just been paged for the first time. What do you need to know?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-text.png&quot; alt=&quot;Comparison of charts with and without labels&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The left chart has no effort. The right side has reasonable labels to help the user understand the context of the visualization.&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;basics-next-steps&quot;&gt;Basics: Next Steps&lt;/h1&gt;

&lt;p&gt;If a user wants to know more about this visualization, how can they get there? A common pattern is clicking on the title to open a fullscreen version that may allow further slicing and dicing. This a convenient place to put data tables or other helpful information:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-fullscreen.png&quot; alt=&quot;Full screen with table&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Opening the chart in full screen gives us new tools since the user has demonstrated an interest in further digging.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Seeing a bad thing in a chart might lead to another tool or to notifying teammates. Why not embed these into a menu on the chart?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-chart-actions.png&quot; alt=&quot;Chart action menu example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;A menu could take you to an exception catcher, Slack sharing, or beginning the incident process.&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;human-actions-control-data&quot;&gt;Human Actions, Control Data&lt;/h1&gt;
&lt;p&gt;In &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html#line-charts&quot;&gt;part 3, Line Charts&lt;/a&gt; we discussed the value of time as our X axis in run charts. This is extremely helpful for readers in that it shows change over time, but the passage of time isn’t the &lt;em&gt;causal&lt;/em&gt; factor in our data. For that we need more context.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-changes.png&quot; alt=&quot;Sources of change&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Lots of thing can cause change. Pesky ghosts!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tufte suggests improvement by “smuggling additional variables into the graphic design” (38) to increase the causal explanations for the reader.&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; This intersects neatly with system dashboards because &lt;em&gt;changes&lt;/em&gt; from humans or automated systems are often the progenitors of system effects. Capturing these events and visualizing them provides our user with crucial insights into what’s being done that may correlate with system behavior.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-deploy.png&quot; alt=&quot;Range chart example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The blue diamond shows that my deploy correlates strongly with a decrease in latency. Yay!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This &lt;a href=&quot;https://en.wikipedia.org/wiki/Control_plane&quot;&gt;control plane data&lt;/a&gt; is much lower rate than the signals we measure in our systems. Ensuring that such changes are instrumented and available in the same place as your dashboards  should be a high priority. It can significantly improve how quickly our users can accomplish their goals.&lt;/p&gt;

&lt;h2 id=&quot;instrumentation-here-be-dragons&quot;&gt;Instrumentation: Here Be Dragons&lt;/h2&gt;
&lt;p&gt;Unfortunately most tools for system dashboards have spotty support for this data, often called “annotations”. The events tend to be hard to reuse, untyped, and often assumed &lt;em&gt;instantaneous&lt;/em&gt;. Some packages support events with a start and end timestamp for deploys and other “stepped” changes.&lt;/p&gt;

&lt;p&gt;Furthermore, getting annotations to your dashboards is spotty and often requires hand instrumenting dozens of disparate systems. Then you must find a way to connect the relevant events into dashboards. Eek!&lt;/p&gt;

&lt;p&gt;Some advice on how to implement this well:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Leverage common outputs like &lt;a href=&quot;https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html&quot;&gt;CloudTrail Events&lt;/a&gt; and CI/CD systems.&lt;/li&gt;
  &lt;li&gt;Try and reuse events rather than having users mint their own that only work in their dashboards.&lt;/li&gt;
  &lt;li&gt;Be careful of clutter, too many events is as bad as none!&lt;/li&gt;
  &lt;li&gt;Provide a link in the event for your user to follow to find more information. This provides the user context but avoids turning your dashboarding tool into an administrative interface. Less is more if they can click on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;norms-goals-and-agreements&quot;&gt;Norms, Goals, and Agreements&lt;/h1&gt;
&lt;p&gt;Some KPIs have acceptable ranges, internal goals, or even contractual obligations. Including this information in the relevant charts can be a part of the visualization (see &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html#gauges-bullet-ranges-etc&quot;&gt;Gauges, Bullets, Ranges, etc in Part 3&lt;/a&gt;) or included as context within the widget. This context helps the user avoid the requirement of what the chart “should” look like, or what impact the current value may have on stakeholders.&lt;/p&gt;

&lt;p&gt;Many tools support this type of watermarking. Adding them provides additional context to the reader so that the time series isn’t just an arbitrary value, but a comparison to our expectations.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-slo.png&quot; alt=&quot;Example of an SLO value in a chart&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The SLO for our service is included as a watermark in the chart.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We can extend this further with time shifts, moving averages, or forms of anomaly detection to draw in expected values:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-normal.png&quot; alt=&quot;Example of guidance via time shifting&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Here’s what normal looks like. This cyclical pattern seems ok!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Since we know these limits and expectations we can go a step further and process the information for our user ahead of time. Where a norm or expectation is violated, we can preemptive highlighting the violation. Now the user is drawn to the most &lt;em&gt;important&lt;/em&gt; information (Few, 54)&lt;sup id=&quot;fnref:1:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-highlight.png&quot; alt=&quot;A highlighted SLO violation&quot; /&gt;
&lt;br /&gt;&lt;em&gt;We seem to be violating the SLO on this instant chart!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We’ve gone from an anonymous line on a chart to a situation with lots of context and clear guidance as to the state of the system. Our SLO is being violated!&lt;/p&gt;

&lt;h1 id=&quot;flagging-alerts-or-other-bad-state&quot;&gt;Flagging Alerts or Other Bad State&lt;/h1&gt;
&lt;p&gt;A common use of system dashboards is to diagnose failure, especially in response to alerting. Our earlier control-rate context can be combined with data from the alerts. When and how did this fire?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-bad.png&quot; alt=&quot;Example of alert context&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Timeline annotations for alerts, highlighted violations, and coloration of values over a threshold!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This information helps our responder understand what brought about the alert, helping them orient to the problem. Other charts may provide additional context or perhaps our added menus help with next steps.&lt;/p&gt;

&lt;h1 id=&quot;projections-or-other-synthetic-data&quot;&gt;Projections or Other Synthetic Data&lt;/h1&gt;
&lt;p&gt;Much of the data we present is direct measurement from our systems. Because of this, you should take special care when presenting data that is projected, predicted, or otherwise synthesized so that the user understands where to place their trust. The &lt;a href=&quot;https://cfpb.github.io/design-manual/data-visualization/emphasis.html#projected-values&quot;&gt;Consumer Financial Protection Bureau provides guidance of deemphasizing such data&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;An example of this consideration is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Fan_chart_(time_series)&quot;&gt;fan chart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p4-fan.jpg&quot; alt=&quot;&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The estimated value and the range of possible future values helps the user see what may happen.&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;review&quot;&gt;Review&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;Spend some quality time labeling your charts with titles, subtitles, and whatever else you can find.&lt;/li&gt;
  &lt;li&gt;Our job doesn’t stop with just time series. Users need &lt;em&gt;context&lt;/em&gt; to understand what else is going on. That context comes from all over our organization.&lt;/li&gt;
  &lt;li&gt;Colocating event data into time series charts helps our user know what might’ve changed. These events are observability data, and arguably have better signal-to-noise ratios.&lt;/li&gt;
  &lt;li&gt;The data in our charts can be improved with normal, expected, or objective values to orient the user.&lt;/li&gt;
  &lt;li&gt;Coupling alert information can speed incident response.&lt;/li&gt;
  &lt;li&gt;Using any sort of projection requires careful visualization.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;
&lt;p&gt;Wow, this and the other parts of the series have been a lot of words about slapping charts onto a page! I’ve learned a lot about how to make &lt;em&gt;good&lt;/em&gt; dashboards that help my users. Much of this was contrary to my past opinions and advice I’ve given. Beyond my own growth much of this advice shows how much our tools need to improve, especially in the area of context.&lt;/p&gt;

&lt;p&gt;This stuff is &lt;strong&gt;important&lt;/strong&gt;. Many organizations rely on these dashboards as the primary source of information for the health, effectiveness, and sheer &lt;em&gt;upness&lt;/em&gt; of critical services. They are also a cultural watering hole for engineering organizations. In many cases, they &lt;em&gt;are&lt;/em&gt; the business, since you can’t exactly go look at a queue of people using your website. Our only visibility is the data we collect and display.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboards and charts are resources that multiply the creator’s effort.&lt;/strong&gt; A few days of thoughtful design can repay as thousands of hours of engineers, leadership, and/or users that are well informed. In many cases these can result in improved response time to problems.&lt;/p&gt;

&lt;p&gt;That’s worth your time, right?&lt;/p&gt;

&lt;p&gt;I hope you’ve enjoyed this guide as much as I’ve enjoyed research and writing it. Please check out the sources cited below each part for more in depth reading on this subject.&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
  &lt;p&gt;This post is part of &lt;em&gt;A Practitioner&apos;s Guide to System Dashboard Design&lt;/em&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Structure and Layout&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Presentation and Accessibility&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html&quot;&gt;What Charts To Use&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html&quot;&gt;Context Improvement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html&quot;&gt;Naming and Organization&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;h1 id=&quot;citations&quot;&gt;Citations&lt;/h1&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Few, Stephen. &lt;em&gt;Information Dashboard Design&lt;/em&gt;. Analytics Press, 2013. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:1:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Tufte, Edward R. &lt;em&gt;The Visual Display of Quantitative Information.&lt;/em&gt; Graphics Press, 1998. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 17 Apr 2019 07:49:00 +0000</pubDate>
        <link>http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html</link>
        <guid isPermaLink="true">http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html</guid>
        
        
        <category>observability</category>
        
        <category>dashboards</category>
        
      </item>
      
    
      
      <item>
        <title>What Charts To Use in System Dashboard Design</title>
        <description>&lt;p&gt;With &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Part 1: Structure and Layout&lt;/a&gt; and &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Part 2: Presentation and Accessibility&lt;/a&gt; you’re probably itching to have some damned dashboards made. Enough theory, which chart should you use?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&quot;https://twitter.com/litacho&quot;&gt;Lita Cho&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/sartak&quot;&gt;Shawn Moore&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/RealRajeshRaman&quot;&gt;Rajesh Raman&lt;/a&gt;, and &lt;a href=&quot;https://twitter.com/robusteza&quot;&gt;Joe Ross&lt;/a&gt; for reviewing this post.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
  &lt;p&gt;This post is part of &lt;em&gt;A Practitioner&apos;s Guide to System Dashboard Design&lt;/em&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Structure and Layout&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Presentation and Accessibility&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html&quot;&gt;What Charts To Use&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html&quot;&gt;Context Improvement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html&quot;&gt;Naming and Organization&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;h1 id=&quot;tables&quot;&gt;Tables&lt;/h1&gt;
&lt;p&gt;Wait, a table isn’t a visualization is it? Heck yes it is! Few&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; reminds us that if you’re showing single values, there’s no reason to have any sort of chart (114)&lt;sup id=&quot;fnref:1:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. For just a few values, using a table is quite effective.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-table.png&quot; alt=&quot;Table visualization example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The trusty table.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tables are common and well-understood visualizations that excel&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; when looking up a value. The above table makes finding a value and the dimensions related to it very easy. This version may be too dense for a system dashboard, but we can adapt it into a “single value” like so:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-instant.png&quot; alt=&quot;Instant values in a table&quot; /&gt;
&lt;br /&gt;&lt;em&gt;A table compressed to something widget-worthy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If the user needs to know a single value such as the sum, average, or “instant” then using simple numbers or tables is an excellent fit.&lt;/p&gt;

&lt;h1 id=&quot;line-charts&quot;&gt;Line Charts&lt;/h1&gt;
&lt;p&gt;Line charts are well suited to most data you’ll be displaying. The line chart begins with points, then connects the points with a line. This is worth saying out loud here because on a &lt;a href=&quot;https://en.wikipedia.org/wiki/Run_chart&quot;&gt;run chart&lt;/a&gt; this interpolation of data gives the user a sense of &lt;em&gt;shape over time&lt;/em&gt;. You’ll commonly hear people say that a metric is trending up or down as they watch updates.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-line1.png&quot; alt=&quot;A line chart with clear shape&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The shape is clear. Something is happening to our latency!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Line charts are popular visualizations because they embody many &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html#effectiveness-of-visualization&quot;&gt;pre-attentive attributes&lt;/a&gt; with a minimum amount of pixels. Lines give us slope and angle, position, and color to derive lots of information without thinking hard. We can even get fancy and use line width and intensity to draw attention:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-line4.png&quot; alt=&quot;Example of line thickness and intensity for attention&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The brown line is clearly the important one here.&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;not-all-line-charts&quot;&gt;Not All Line Charts&lt;/h2&gt;
&lt;p&gt;Before you close this tab and make everything a line chart, there are a few  things to be aware of. Having &lt;em&gt;too many lines&lt;/em&gt; in a chart can hide shape, muddy color, add perception latency and generally make them useless, aside from spotting outliers. Skip ahead to heat maps for some help there.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-line2.png&quot; alt=&quot;A line chart with too many lines&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The lines are so close as to be hard to differentiate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Line charts &lt;em&gt;interpolate&lt;/em&gt; data between two points with a line. This is desirable in most cases, since the shape provided aids perception. Unfortunately interpolation can also hide missing information or the opposite; make us think we have data we really don’t. Take our example line chart from earlier, now with points at each reading:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-line3.png&quot; alt=&quot;A line chart with points at each measurement&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The points show that we only get one reading at each change in latency.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The distance of the line might imply there are more measurements than really exist, such as the big changes in the above chart.&lt;/p&gt;

&lt;h1 id=&quot;area-charts&quot;&gt;Area Charts&lt;/h1&gt;
&lt;p&gt;First, &lt;strong&gt;don’t use area charts that aren’t stacked&lt;/strong&gt;. Occlusion just hides data, which is confusing.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-area1.png&quot; alt=&quot;An unstacked area chart, full of occluded data&quot; /&gt;
&lt;br /&gt;&lt;em&gt;What even is this? I can’t see anything but green.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Area charts are best used when the &lt;em&gt;whole&lt;/em&gt; of sums is the important value&lt;/strong&gt;, as in showing the contribution a few steps make to a total duration. They share a lot with line charts, in that they show shape. Unfortunately this shape is also their downfall: when one of the bottom areas changes, so do all the areas above it. A user may be confused where to attribute the change. Spotting the real change in this situation can be tricky.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-area2.png&quot; alt=&quot;Stacked area chart showing inability to see contributors&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Our latency moves around 4s, but we can’t tell what is contributing to the change. Is it all of the lines?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Few suggests that instead of using an area chart, use a single line chart showing the sum and an additional chart showing the contributions (Few, 146)&lt;sup id=&quot;fnref:1:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. This makes spotting the change significantly easier.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-area3.png&quot; alt=&quot;Two charts showing sum and contributions&quot; /&gt;
&lt;br /&gt;&lt;em&gt;This is the same data as the area chart above. The left chart shows sum of latency, right chart shows each contributor. The contributors to latency are obvious &lt;strong&gt;and&lt;/strong&gt; we can see our total!&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;bar-charts&quot;&gt;Bar Charts&lt;/h1&gt;
&lt;p&gt;Where line charts show shapes, bar charts show “exact” values. For most system metrics you’re better off using a line chart. The exception would be a chart which compares a few metrics:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-bar1.png&quot; alt=&quot;Bar chart example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;We can easily compare these two time series using bars. More would be tough.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The bar chart aids comparison of values at each interval through clear interval association and easy comparison of length by the user. Choosing a bar chart therefore means that your user’s goal is the comparison of a few values over other concerns.&lt;/p&gt;

&lt;p&gt;Be careful to avoid &lt;a href=&quot;https://en.wikipedia.org/wiki/Moir%C3%A9_pattern&quot;&gt;moiré patterns&lt;/a&gt;. This can happen when your bars are too small and evenly spaced. Do include a little space between bars to aid the visual separation, as seen above.&lt;/p&gt;

&lt;h2 id=&quot;stacked-bars&quot;&gt;Stacked Bars&lt;/h2&gt;
&lt;p&gt;See stacked area charts. You rarely want to use a stacked chart, unless the focus is on the whole value. Users will have difficulty comparing sizes in the stack.&lt;/p&gt;

&lt;h1 id=&quot;heat-maps&quot;&gt;Heat Maps&lt;/h1&gt;
&lt;p&gt;Reach for heat maps when you have a line chart that has too many lines to make sense of. Heat maps vary the intensity of color so that a lot of data can be packed in to a small space. Where occlusion hurts line charts, heat maps use the overlap to add more color. This has the novel side effect of showing banding where there is overlap aiding in pattern and outlier detection.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-heat-compare.png&quot; alt=&quot;Comparison of line chart and heatmap&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The line chart is terrible at everything but outliers. The heat map shows where the population is grouped.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This ability to view more data and spot patterns isn’t free. It comes with a decrease in &lt;em&gt;accuracy&lt;/em&gt; because humans can’t easily differentiate more than a few intensities of a color. Few says that more than 5 intensities is the limit for distinctiveness (Few, 86)&lt;sup id=&quot;fnref:1:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. This means that heat maps are best deployed in situations where accuracy is less important than the general shape of the visualization.&lt;/p&gt;

&lt;h1 id=&quot;gauges-bullet-ranges-etc&quot;&gt;Gauges, Bullet, Ranges, etc&lt;/h1&gt;
&lt;p&gt;Only use a visualization with limits if the data actually has those limits. For example, displaying requests per second as a gauge is misleading, as it has no maximum!&lt;/p&gt;

&lt;p&gt;If you do have a limit to show, such as a percentage or a queue with a maximum depth, then using these sorts of visualizations can be incredibly helpful. It allows you to communicate what the limit is as well as how close a value is to that limit. Use these types of visualizations when your metric has a basis for comparison, such as SLOs!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-range.png&quot; alt=&quot;Range chart example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;This is a suitable use of a range as it has bounds and orients the user.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Combining this with color yields a quick understanding of current value, upper and lower bounds and urgency of the current value.&lt;/p&gt;

&lt;p&gt;Sadly, I am not aware of any tools that allow the use of &lt;a href=&quot;https://en.wikipedia.org/wiki/Bullet_graph&quot;&gt;bullet graphs&lt;/a&gt; in their fullest form. At best, you can usually find only a single bullet.&lt;/p&gt;

&lt;h1 id=&quot;others&quot;&gt;Others&lt;/h1&gt;
&lt;p&gt;Some that don’t deserve a whole section.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Pie charts: Don’t. Humans generally can’t understand the area of a pie slice. Use bars.&lt;/li&gt;
  &lt;li&gt;Donut charts: Mostly cute ways of showing a single value. Or a pie chart with a hole in it.&lt;/li&gt;
  &lt;li&gt;Stacked Line Charts: Area charts, but worse since the lack of area fill makes it a surprise. Avoid.&lt;/li&gt;
  &lt;li&gt;Flame graphs: Great for some uses cases, not really in scope for system dashboards, more for profilers.&lt;/li&gt;
  &lt;li&gt;Sparklines: Great to supplement single values, but often lack context without the familiar bits of a line chart. Few proposes what he calls &lt;em&gt;sparkstrips&lt;/em&gt; that add bands of colored or hue to orient the reader. Sadly I don’t know of any tools that support these improvements.&lt;/li&gt;
  &lt;li&gt;Box plots: Not common in our tools&lt;/li&gt;
  &lt;li&gt;Dot plots: Use bars. May have some use cases for rare data over a long period?&lt;/li&gt;
  &lt;li&gt;Scatter plots: Rad for correlation, but that’s a specialized case that we’re not covering here.&lt;/li&gt;
  &lt;li&gt;Dials and gauges: If your data does not actually have lower and upper-bounds, presenting it in a dial is misleading. They also waste a lot of space.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;
&lt;p&gt;Before you flame me for missing some weird visualization or an option that your tool has, let me remind you that if your user &lt;em&gt;understands&lt;/em&gt; the dashboard, chart or visualization then it’s &lt;strong&gt;good&lt;/strong&gt;. As your use case broadens then so will your user base and we fall back on the guidance from &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Part 2&lt;/a&gt; to choose our visualizations.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p3-summary.png&quot; alt=&quot;Suitability range of chart types&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Line is probably what you want. Maybe others. A lobster is not a chart.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Use line charts, they are great! Single value or tabular charts are excellent for instant/single values. Bars make for great comparisons of small numbers of series and heat maps have some utility.&lt;/p&gt;

&lt;p&gt;Please read on for the next items in my series:&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
  &lt;p&gt;This post is part of &lt;em&gt;A Practitioner&apos;s Guide to System Dashboard Design&lt;/em&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Structure and Layout&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Presentation and Accessibility&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html&quot;&gt;What Charts To Use&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html&quot;&gt;Context Improvement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html&quot;&gt;Naming and Organization&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;h1 id=&quot;citations&quot;&gt;Citations&lt;/h1&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Few, Stephen. &lt;em&gt;Information Dashboard Design&lt;/em&gt;. Analytics Press, 2013. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:1:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:1:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:1:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;4&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;No pun was intended, honestly. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Wed, 17 Apr 2019 07:49:00 +0000</pubDate>
        <link>http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html</link>
        <guid isPermaLink="true">http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html</guid>
        
        
        <category>observability</category>
        
        <category>dashboards</category>
        
      </item>
      
    
      
      <item>
        <title>Presentation and Accessibility in System Dashboard Design</title>
        <description>&lt;p&gt;After &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;part 1&lt;/a&gt; we’ve got a nice grid and proper visual weighting within that grid. We’re now on to thinking about the presentation of the data to our user. This is where things often go awry, as many a pixel has been lit in pursuit of catchy graphics. Keep your design decluttered and consistent.&lt;/p&gt;

&lt;p&gt;Our guiding principle must be the user’s goals and the integrity of the data we’re displaying. Since this will vary widely — counts of users, fleeting time spent in garbage collection, and mercurial error counts — we must build up a framework we can use to make choices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To that end, let’s explore what it takes to make a good visualization of system metrics.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&quot;https://twitter.com/litacho&quot;&gt;Lita Cho&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/sartak&quot;&gt;Shawn Moore&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/RealRajeshRaman&quot;&gt;Rajesh Raman&lt;/a&gt;, and &lt;a href=&quot;https://twitter.com/robusteza&quot;&gt;Joe Ross&lt;/a&gt; for reviewing this post.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
  &lt;p&gt;This post is part of &lt;em&gt;A Practitioner&apos;s Guide to System Dashboard Design&lt;/em&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Structure and Layout&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Presentation and Accessibility&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html&quot;&gt;What Charts To Use&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html&quot;&gt;Context Improvement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html&quot;&gt;Naming and Organization&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;h1 id=&quot;choice-of-data-gardening&quot;&gt;Choice of Data, Gardening&lt;/h1&gt;
&lt;p&gt;You might expect this piece to tell you what specific data to put in your dashboard. Well, fair reader, that’s mostly up to you! Remember our users and their goals from &lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;part 1&lt;/a&gt;. Use your list and decide what best fits the bill for what Few describes as the four stages of monitoring information (32)&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Updating high-level situational awareness.&lt;/li&gt;
  &lt;li&gt;Identifying and focusing on particular items that need attention.
    &lt;ol&gt;
      &lt;li&gt;Update awareness of this item in greater detail&lt;/li&gt;
      &lt;li&gt;Determine whether action is required&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/li&gt;
  &lt;li&gt;If action is required, accessing additional information to determine appropriate information.&lt;/li&gt;
  &lt;li&gt;Response.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In general the &lt;a href=&quot;https://www.weave.works/blog/the-red-method-key-metrics-for-microservices-architecture/&quot;&gt;RED method&lt;/a&gt; and/or the &lt;a href=&quot;http://www.brendangregg.com/usemethod.html&quot;&gt;USE method&lt;/a&gt; provide with the best signals for high level service function and awareness. Optimally, you should only use key performance indicators (KPIs) as a dashboard is for situational awareness and not for data discovery (Few 30-31)&lt;sup id=&quot;fnref:1:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. That said, there are plenty of use cases where more specific information is needed outside of common KPIs. Refer back to your goals for help when you aren’t sure. Does the user need this to fulfill his/her goals?&lt;/p&gt;

&lt;p&gt;We should also remember that these dashboards are often tracking systems that change frequently. You’ll need to add occasional one-off charts or temporary widgets to track new and interesting KPIs or just data that is important for current issues. Your organization should build in time to regularly look at dashboards with a critical eye and sweep away any artifacts that are no longer useful. Check that one chart you added back when you were leaking file descriptors and ask if it’s really needed anymore. You &lt;em&gt;know&lt;/em&gt; which one I’m talking about.&lt;/p&gt;

&lt;h1 id=&quot;effectiveness-of-visualization&quot;&gt;Effectiveness Of Visualization&lt;/h1&gt;
&lt;p&gt;When you open the palette of widgets for your dashboard, there are probably lots of options. Temptation is high to use the fancy ones! But not all of these are equal, as humans do not perceive all forms of visual information the same. Our user is trying to quickly orient themselves, so our job is to present things in the most efficient way.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p2-accuracy.png&quot; alt=&quot;Ranking of perceptual accuracy.&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Ranking of perceptual tasks in order of accuracy.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;These human quantitative perceptual task rankings (Mackinlay, 125)&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; provide a handy guide for determining how easily our reader may be able to process our visualization. Some visual components are actually processed &lt;em&gt;subconsciously&lt;/em&gt; using &lt;a href=&quot;https://en.wikipedia.org/wiki/Pre-attentive_processing&quot;&gt;pre-attentive processing&lt;/a&gt;. The careful use of color, form, position and motion can greatly ease and speed up important information in a dashboard (Few, 80)&lt;sup id=&quot;fnref:1:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p2-preattentive.png&quot; alt=&quot;Pre-attentive Attributes Example!&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Examples of pre-attentive attributes You can see these without even thinking about it!&lt;/em&gt;&lt;/p&gt;

&lt;h2 id=&quot;scale-and-units&quot;&gt;Scale and Units&lt;/h2&gt;

&lt;p&gt;Moving a bit deeper into the form, Cleveland and McGill (830)&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; ranked tasks by accuracy for us humans, finding position along a &lt;em&gt;common scale&lt;/em&gt; more accurate than on non-aligned scales. Few (40-41) reinforces this by specifically advising the use of units and appropriate detail for data to avoid unnecessary computations for the user.  For this reason it is best to use common scales, axis and units where possible.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p2-axes-units-align.png&quot; alt=&quot;Alignment and Unit Axes Example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Three charts of the same data, without units, with units and no longer aligned. 250 what?! The left and middle chart are easy to compare, the middle is easier to understand. Alignment and units matter!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With this information you should be able to more effectively choose visualizations, picking those that help your reader quickly perceive the data.&lt;/p&gt;

&lt;h1 id=&quot;time&quot;&gt;Time&lt;/h1&gt;
&lt;p&gt;We’re using &lt;a href=&quot;https://en.wikipedia.org/wiki/Run_chart&quot;&gt;run charts&lt;/a&gt; heavily, so we should take care with how we present time. Charts should use a common time window. If the first chart shows a slice of 1 hour anchored by “now” then so should they all. This is especially true when there is a time selector or other “global” control involved.&lt;/p&gt;

&lt;p&gt;Many dashboard tools provide a helpful “cursor” when you are hovering your mouse over a chart, pointing to that same instant in other charts nearby. This can both orient the user’s understanding of time as well as make clear any deviations in the relationship between time and space, as evidenced in this example where one chart is wider than others:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p2-cursor.png&quot; alt=&quot;Cursor demonstration in wide charts&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The bottom chart is wider than the top two, but the vertical bar “cursor” keeps us aligned.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Recall our earlier points about alignment, as it also applies horizontally. Widgets or charts that do not adhere to the same time/space relationships should clearly communicate their temporal choices either through visual differences (i.e. a “single value” widget) or clear labeling.&lt;/p&gt;

&lt;h2 id=&quot;sneaky-aggregation&quot;&gt;Sneaky Aggregation&lt;/h2&gt;
&lt;p&gt;Be aware that many visualizations will need to deal with aggregation that happens &lt;em&gt;automatically&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;For systems work our dashboards must deal with wildly varying time windows as our users scoot around. The default for most system dashboards is a “current” view showing something ranging from the last hour to the last fifteen minutes. Assuming ten second intervals, every hour will contain 360 data points! Because there are only so many usable pixels for each of our precious little charts, dashboarding tools must make decisions about how to fit all those data points in a small box.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p2-aggregation.png&quot; alt=&quot;Automated aggregation example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The top chart covers 15 minutes, the bottom 1 week. Note how we completely lose the periodic increase in latency due to the default average aggregation. The resolution is shown to the right of the chart title.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is usually done via aggregation: showing an average, sum, or something similar. These defaults can make a big difference. Consider our earlier chart, but with the aggregation set to use a maximum instead of an average:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p2-aggregation-max.png&quot; alt=&quot;Aggregation max example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;With a maximum aggregation of the weekly data, our latency is ~30% higher.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Consult your tool’s documentation for how this works! We’ll cover concerns about this when we talk about specific chart types.&lt;/p&gt;

&lt;h2 id=&quot;aside-rates-and-sums&quot;&gt;Aside: Rates and Sums&lt;/h2&gt;
&lt;p&gt;This is, in my experience, one of the most asked about problems in system dashboards. Showing a counter as either a rate or a sum can have a large effect on the user’s understanding. If you’re viewing the number of errors as a rate then each point on the chart will be the summed count of errors divided by the time elapsed. Viewing as a sum will, of course, be the sum. This means the shape of the data should be the same, only the scale differs.&lt;/p&gt;

&lt;p&gt;When using rate or sum it is advised that you make the distinction very clear from the title of the chart. Work with your user to choose the form that best suits their needs when choosing between rate and sum. What do they expect to see?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Be mindful of rate and sum when interacting with aggregation!&lt;/p&gt;

&lt;h2 id=&quot;warning-missing-data&quot;&gt;Warning: Missing Data&lt;/h2&gt;
&lt;p&gt;If something goes awry in your measurements you may miss some data points. This can be problematic if your user is assuming regular data points! If this happens, be wary of interpolation. Commonly, system dashboard tools use linear interpolation to connect missing data. Sometimes they are completely unaware the data is missing at all. Sometimes the resolution of the data changes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p2-linear.png&quot; alt=&quot;Linear interpolation example&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The blue line is filling in zeros for missing data. The red line uses linear interpolation.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In a fit of wonkery, I actually contacted &lt;a href=&quot;https://www.perceptualedge.com/&quot;&gt;Stephen Few&lt;/a&gt; about this problem. I’ve grappled with it for &lt;a href=&quot;http://onemogin.com/observability/&quot;&gt;a long time&lt;/a&gt; and was curious of his take when trying on missing data in irregular, varying intervals:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;If you’re display[ing] values along a timeline, that timeline usually exhibits intervals that are consistent. As such, they are evenly spaced. If the interval changes, the the spacing between intervals should also change accordingly to visually indicate this change and should remain consistent unless the size of the interval changes again, at which time the spacing would change again. Values associated with consecutive intervals of time should be connected with a line, but when intervals are missing values for any reason, the line should not continue through those intervals. If values are collected intermittently (e.g., only when particular events occur), rather than at regular intervals, then they should not be connected with a line. A simple data point (e.g., a dot) or a bar should be used to encode the values in cases like this. Good luck in finding a tool that can handle this.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How interesting! To Stephen’s point I wasn’t sure &lt;em&gt;how&lt;/em&gt; to do this in software. To solve that, I sketched it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/dash-p2-missing.jpg&quot; alt=&quot;How to visualize changing intervals and missing data&quot; /&gt;
&lt;br /&gt;&lt;em&gt;The middle section is faster intervals. We’re missing some data on either side. Missing data does not connect. The pink highlight is informational and would not be in the chart the user sees.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You might wonder why no dashboard packages do this for you? Mostly because they don’t know if data is missing or not. We commonly infer the interval that metrics come in, and in a modern world of ephemeral containers these metrics can come and go in a flash. A tricky problem for sure, and something to aspire to.&lt;/p&gt;

&lt;h1 id=&quot;general-guidance&quot;&gt;General Guidance&lt;/h1&gt;
&lt;p&gt;Some other great bits:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Favor soft colors found in nature. Save the use of vivid, attention grabbing colors for thresholds or other health information you want to call attention to. &lt;a href=&quot;http://www.perceptualedge.com/articles/visual_business_intelligence/rules_for_using_color.pdf&quot;&gt;Stephen Few’s Practical Rules for Using Color in Charts&lt;/a&gt; is an excellent guide.&lt;/li&gt;
  &lt;li&gt;Mute or eliminate background grids, when possible. Consider lightening them. Keep the &lt;a href=&quot;https://en.wikipedia.org/wiki/Principles_of_grouping#Closure&quot;&gt;principle of closure&lt;/a&gt; in mind and eliminate some of those boxes.&lt;/li&gt;
  &lt;li&gt;Avoid faked perspective, such as in 3D graphics that serve no data purpose.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;accessibility&quot;&gt;Accessibility&lt;/h1&gt;
&lt;p&gt;Your user may have difficulty interpreting your dashboards if they are not accessible. The &lt;a href=&quot;https://www.w3.org/WAI/fundamentals/accessibility-intro/&quot;&gt;W3C has lots of content on accessibility&lt;/a&gt; to ensure all your users have a great experience. Depending on your tools, some of these may be easier than others, but all are worth considering.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Color blindness is very common, with 1 in 12 men and 1 in 200 women affected by &lt;a href=&quot;https://en.wikipedia.org/wiki/Color_blindness#Red-green_color_blindness&quot;&gt;Red-green color blindness&lt;/a&gt;. This is especially worrisome in dashboards as there is often a heavy reliance on using green for “good” and red for “bad” signaling. Leverage multiple techniques for signaling by leveraging the “effectiveness” section above: size, color, text, or icons.&lt;/li&gt;
  &lt;li&gt;Still on color, look to &lt;a href=&quot;https://www.w3.org/TR/WCAG20-TECHS/G18.html&quot;&gt;the W3C’s guidance for a 4.5:1 contrast ratio&lt;/a&gt; between text and backgrounds. You can also use this as a reason to choose clearly distinct colors for data as well. The &lt;a href=&quot;https://www.consumerfinance.gov/&quot;&gt;Consumer Finance Protection Bureau&lt;/a&gt; has an excellent &lt;a href=&quot;https://cfpb.github.io/design-manual/data-visualization/color.html&quot;&gt;guide on color in visualizations&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Consider screen readers and what they read for your widgets. In addition to descriptive titles, consider additional helper text in the widget. Additionally, consider the export of CSV data with descriptive headers so that users with screen readers have a way to tab through the data.&lt;/li&gt;
  &lt;li&gt;Make use of accessible navigation and data enrichment features to leverage browser assistance where applicable with tools like &lt;a href=&quot;https://en.wikipedia.org/wiki/WAI-ARIA&quot;&gt;WAI-ARIA&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;What is the target display device? A dashboard for a large TV likely has different needs than one used on a 13” laptop display by an on call engineer. Be sure and use your dashboard during the design phase on an appropriate device.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;summary&quot;&gt;Summary&lt;/h1&gt;
&lt;p&gt;There’s a lot to think about when displaying data to our users. There’s a lot to consider and this post provides a good explanation as to the thought that designers and engineers creating our system monitoring tools have to take into consideration. The buck doesn’t stop there though, as you, the designer, must continue to make good choices when building up your dashboards!&lt;/p&gt;

&lt;h2 id=&quot;review&quot;&gt;Review&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;Use KPIs like RED and USE. Your user’s goal will dictate any additional metrics.&lt;/li&gt;
  &lt;li&gt;Review dashboards periodically for improvement and cleanup, like &lt;a href=&quot;http://onemogin.com/monitoring/case-method-better-monitoring-for-humans.html&quot;&gt;the CASE method&lt;/a&gt; but for dashboards!&lt;/li&gt;
  &lt;li&gt;Preattentive attributes like position, length, slope and color can help with quick comprehension. Some are more accurate than others, choose them wisely!&lt;/li&gt;
  &lt;li&gt;Use units everywhere use common scales.&lt;/li&gt;
  &lt;li&gt;Time can be tricky, so use consistent time windows. Label any deviations clearly.&lt;/li&gt;
  &lt;li&gt;Be aware of forced aggregation and choices on display like rates and sums. Clearly label your charts.&lt;/li&gt;
  &lt;li&gt;Consider accessibility in design and data display. Avoid reliance on red and green and ensure sufficient contrast.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please read on for the next items in my series:&lt;/p&gt;

&lt;div class=&quot;well well-sm&quot;&gt;
  &lt;p&gt;This post is part of &lt;em&gt;A Practitioner&apos;s Guide to System Dashboard Design&lt;/em&gt;.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design.html&quot;&gt;Structure and Layout&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html&quot;&gt;Presentation and Accessibility&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p3.html&quot;&gt;What Charts To Use&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p4.html&quot;&gt;Context Improvement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://onemogin.com/observability/dashboards/dashboard-naming-and-organization.html&quot;&gt;Naming and Organization&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;h1 id=&quot;citations&quot;&gt;Citations&lt;/h1&gt;
&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Few, Stephen. &lt;em&gt;Information Dashboard Design&lt;/em&gt;. Analytics Press, 2013. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:1:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; &lt;a href=&quot;#fnref:1:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;3&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Mackinlay, Jock D. &lt;em&gt;Automating the Design of Graphical Presentations of Relational Information.&lt;/em&gt; ACM Transactions on Graphics, Vol. 5, 1986 &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Cleveland, William S., McGill, Robert. &lt;em&gt;Graphical Perception and Graphical Methods for Analyzing Scientific Data.&lt;/em&gt; American Association for the Advancement of Science, 1985. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 16 Apr 2019 07:49:00 +0000</pubDate>
        <link>http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html</link>
        <guid isPermaLink="true">http://onemogin.com/observability/dashboards/practitioners-guide-to-system-dashboard-design-p2.html</guid>
        
        
        <category>observability</category>
        
        <category>dashboards</category>
        
      </item>
      
    
      
      <item>
        <title>The CASE Method: Better Monitoring For Humans</title>
        <description>&lt;p&gt;Riiiiiiing! It’s 3am and you’ve just been dreaming about something great then poof: the phone rings. You’re on call this week and something seems to’ve gone awry. Automated systems are beckoning you to assess the situation and take action. Welcome to a critical point in running modern computer systems. Let’s talk about how to make alerting better for humans.&lt;/p&gt;

&lt;p&gt;I’d like to introduce a philosophy for monitoring borne from my decades of on-call experience, my role in multiple large observability teams, and heavy influence from Rob Ewaschuk’s seminal &lt;a href=&quot;https://docs.google.com/document/d/199PqyG3UsyXlwieHaqbGiWVa8eMWi8zzAn0YfcApr8Q/edit#heading=h.6ammb5h32uqq&quot;&gt;My Philosophy on Alerting&lt;/a&gt; — which has since been encoded into the &lt;a href=&quot;https://landing.google.com/sre/sre-book/toc/index.html&quot;&gt;Google SRE book&lt;/a&gt; — and John Allspaw’s &lt;a href=&quot;https://www.slideshare.net/jallspaw/alert-designcac-talk2013&quot;&gt;Considerations for Alert Design&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&quot;https://twitter.com/kellyleland&quot;&gt;Kelly Dunn&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/arijit_mukherji&quot;&gt;Arijit Mukherji&lt;/a&gt;, and &lt;a href=&quot;https://twitter.com/mpetazzoni&quot;&gt;Maxime Petazzoni&lt;/a&gt; for reviewing this post.&lt;/em&gt;&lt;/p&gt;

&lt;h1 id=&quot;what-is-case&quot;&gt;What is CASE?&lt;/h1&gt;

&lt;p&gt;Inspired by &lt;a href=&quot;http://www.brendangregg.com/usemethod.html&quot;&gt;Brendan Gregg’s USE Method&lt;/a&gt; and &lt;a href=&quot;https://www.weave.works/blog/the-red-method-key-metrics-for-microservices-architecture/&quot;&gt;Tom Wilkie’s RED Method&lt;/a&gt; I have backronymed a method. I call it &lt;strong&gt;the CASE Method&lt;/strong&gt; and it defines four points that a team should consider and maintain when working with automated monitoring:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#context-heavy&quot;&gt;&lt;strong&gt;C&lt;/strong&gt;ontext-heavy&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#actionable&quot;&gt;&lt;strong&gt;A&lt;/strong&gt;ctionable&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#symptom-based&quot;&gt;&lt;strong&gt;S&lt;/strong&gt;ymptom-based&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#evaluated&quot;&gt;&lt;strong&gt;E&lt;/strong&gt;valuated&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using CASE, an organization will have a healthy skepticism about interrupting humans. Monitoring will be evaluated regularly for value and effectiveness. Humans will have better mental models and greater confidence when alerted.&lt;/p&gt;

&lt;p&gt;To get catchy for a second, the idea is that you need to make a CASE for each alert’s existence. :sunglasses:&lt;/p&gt;

&lt;h1 id=&quot;why-do-we-need-this&quot;&gt;Why do we need this?&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://medium.com/@copyconstruct/on-call-b0bd8c5ea4e0&quot;&gt;On call can suck&lt;/a&gt;. There are a lot of reasons for this and CASE won’t help you fix all of them. It can, however, improve the quality of the things that wake you up in the night. Sneakily encoded into it are a number of organizational processes that may help as well.&lt;/p&gt;

&lt;p&gt;I’ve found the RED and USE methods really helpful not only in building things, but also in the shared vocabulary they provide. It is my hope that CASE brings some clarity and conversation to the alerts that protect our systems and harangue our colleagues.&lt;/p&gt;

&lt;p&gt;The core idea is to establish a culture in your organization where the existence of an alert is viewed with healthy skepticism. Alerts may be created for good reason, but we should be skeptical of their continued value unless it is demonstrated. What justifies this alert, and has that criteria been re-evaluated lately? CASE provides a framework for these questions.&lt;/p&gt;

&lt;h1 id=&quot;context-heavy&quot;&gt;Context-Heavy&lt;/h1&gt;
&lt;p&gt;Reading a jargon filled text message on your phone at 3am is hard enough at the best of times. Responding to that page effectively requires information. Optimally the information is targeted to the problem in question and helps the responder understand the system’s context as quickly as possible. In a sense, one must “design” the alert in such a way that this is possible. This is effectively the observe and orient portions of an &lt;a href=&quot;https://en.wikipedia.org/wiki/OODA_loop&quot;&gt;OODA loop&lt;/a&gt;. Spending time on this design should be worthwhile, because interrupting a human being is costly and should be treated with respect.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/case-alerts.png&quot; alt=&quot;Lots of things interrupt people&quot; /&gt;
&lt;br /&gt;&lt;em&gt;Lots of things cause problems. Especially ghosts.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;How can we help the responder? Alerts are one of the first stimuli that an operator will receive and are therefore a strong contributor to any hypothesis generation they may do. Runbooks and dashboards are common destinations, but are they suited to the alert rather than being full of general guidance? Allspaw claims that we must “think about the way the alert could be interpreted or acted on” (slide 29)&lt;sup id=&quot;fnref:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. A good alert is designed for the operator rather than just set at a threshold and pushed out into production.&lt;/p&gt;

&lt;p&gt;To that end, here are some ideas for improved alert context:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Link the user to something helpful and designed, not just to a generic runbook or dashboard. In the past colleagues and I used “investigation dashboards” that were tuned to specific alerts. This may help well known failures, but might be misleading for other things. It’s a tightrope!&lt;/li&gt;
  &lt;li&gt;Provide insight into the history of the alert: is it new? How often does it fire? Is it seasonal?&lt;/li&gt;
  &lt;li&gt;Recent change awareness: Help with system state. Has anything changed lately like a deploy or feature flag?&lt;/li&gt;
  &lt;li&gt;Show relationships and inform the mental model: Are the system’s dependencies clearly shown, preferably with indications of health?&lt;/li&gt;
  &lt;li&gt;Get the user to a team quickly: Can the responder see any in-progress incidents or determine who else in the org has already been paged? Has the &lt;a href=&quot;https://en.wikipedia.org/wiki/Incident_management&quot;&gt;incident management&lt;/a&gt; program been invoked?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Optimally your incident management program feeds more suggestions into how alert context can be improved as you investigate failures. We can always improve this!&lt;/p&gt;

&lt;h1 id=&quot;actionable&quot;&gt;Actionable&lt;/h1&gt;
&lt;p&gt;Is the responder supposed to do something in response to this notification? If action is not necessary or clear why have you interrupted them? The intent is to avoid alerts that pester the operator when no action is needed.&lt;/p&gt;

&lt;blockquote class=&quot;imgur-embed-pub&quot; lang=&quot;en&quot; data-id=&quot;u2MmRrJ&quot;&gt;&lt;a href=&quot;//imgur.com/u2MmRrJ&quot;&gt;What am I supposed to do now that you&apos;ve surprised me?&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;//s.imgur.com/min/embed.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;&lt;em&gt;What am I supposed to do now that you’ve gotten my attention?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the early days of a system when complexity is low and few people are involved we often establish monitoring as a form of informational awareness. A note saying that heap usage has grown may be a nice bit of context for us in case we see a later interruption in service. At scale this becomes unmanageable because our systems operate in various states of degradation at any time. This quickly leads to &lt;a href=&quot;https://en.wikipedia.org/wiki/Alarm_fatigue&quot;&gt;alarm fatigue&lt;/a&gt; and can result in desensitization that harms an operator’s ability to respond effectively either due to ignoring or outright filtering of such notifications. Don’t fall into the trap of allowing alerts to continue, only to route them to email and then into a folder you never read.&lt;/p&gt;

&lt;p&gt;These are the attributes of an actionable alert:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;The situation requires action, it is not merely informational.&lt;/li&gt;
  &lt;li&gt;There is no obvious automation for this action, or automation is unsafe. If the action can be automated, automate the damn thing and stop bothering people!&lt;/li&gt;
  &lt;li&gt;The situation contains urgency guidance in the form of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Service-level_agreement&quot;&gt;service-level agreement&lt;/a&gt; (SLA) and perhaps a &lt;a href=&quot;https://en.wikipedia.org/wiki/Disaster_recovery#Recovery_time_objective&quot;&gt;recovery time objective&lt;/a&gt;. This allows the responder to enlist the help of the organization’s incident management program.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To be clear I am not advocating that you &lt;em&gt;only&lt;/em&gt; alert on the topmost SLOs for your API or similar. This concept of monitoring SLOs is fractal in that each service in your organization can be approached the same way. You will obviously be monitoring top level SLOs that face paying customers, but you will also monitor infrastructure SLOs like databases. Pretty quickly these become focused on internal customers and supporting them. Turtles all the way down!&lt;/p&gt;

&lt;h1 id=&quot;symptom-based&quot;&gt;Symptom-Based&lt;/h1&gt;
&lt;p&gt;Like it or not, you’re probably working with a distributed system (Cavage)&lt;sup id=&quot;fnref:2&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. As a result, your work is likely to employ many tactics to isolate and buffer services from failure (Treynor et al)&lt;sup id=&quot;fnref:3&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;. While pangs of high garbage collection durations or database query times might mean something is awry, these rumbles are not urgent if users are not going to experience problems either now or very soon.&lt;/p&gt;

&lt;p&gt;These sorts of signals may be important and/or actionable, but if they are not causing user difficulties then they are likely not urgent enough to warrant interrupting our operator. Cause based alerts are snapshots of our mental models about system failure. It’s best to monitor important &lt;em&gt;symptoms&lt;/em&gt; rather than attempting to enumerate every possible cause of failure.&lt;/p&gt;

&lt;p&gt;To ensure your alerts are actionable you can focus on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Performance_indicator&quot;&gt;performance indicators&lt;/a&gt; that are important to your users. Ewaschuk called this aspect “monitoring for your users”. Also recall that you’ll be applying this philosophy through your entire organization. Once service in the bowels of your infrastructure begins having urgent problems, you can expect that the relevant team will be involved. Further hardening your systems against that failure is a wholly separate line of work (Treynor et al, section Strategies for Minimizing and Mitigating Critical Dependencies)&lt;sup id=&quot;fnref:3:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;h2 id=&quot;symptoms-change-less&quot;&gt;Symptoms Change Less&lt;/h2&gt;
&lt;p&gt;Cook reminds us that complex systems contain a multitude of flaws, faults, and problems&lt;sup id=&quot;fnref:4&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;. If you’re trying to enumerate each of these possible causes you’ll be doing a large amount of unhelpful work that never ends. Many of the problems you’re attempting to spot will shift away over time. Sridharan says that systems are “not necessarily going to be operating while 100% healthy at any given time“ so we should focus on more “human-centric” situations (“&lt;a href=&quot;https://distributed-systems-observability-ebook.humio.com/&quot;&gt;Distributed Systems Observability&lt;/a&gt;”, 7)&lt;sup id=&quot;fnref:5&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;h2 id=&quot;avoid-incident-based-alert-debt&quot;&gt;Avoid Incident-based Alert Debt&lt;/h2&gt;
&lt;p&gt;A common incident remediation is to make an alert for a cause. This “debt” of narrowly useful alerts may create a false sense of confidence, since your system will continue to change how it fails.&lt;/p&gt;

&lt;blockquote class=&quot;twitter-tweet&quot; data-lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;We are monitoring the SHIT out of everything but that…&lt;/p&gt;&amp;mdash; Honest Status Page (@honest_update) &lt;a href=&quot;https://twitter.com/honest_update/status/867058053480427525?ref_src=twsrc%5Etfw&quot;&gt;May 23, 2017&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;

&lt;p&gt;Rather than creating a false sense of confidence from cause-based alerts, instead ask yourself:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Why didn’t a symptom-based alert find this?&lt;/li&gt;
  &lt;li&gt;Could improved context for the responder help?&lt;/li&gt;
  &lt;li&gt;How can we improve our observability tooling to make this diagnosis faster rather than creating alert debt?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Observability tooling for diagnosis will only improve if you consider it the means for getting from symptom to solution. Without this feedback loop you end up with a collection of reactive alerts and charts that document your past failures and none of your future ones. This provides a wonderful opportunity for an organization to shift from a reactive stance on alerting to a proactive one. It also elevates the conversation between engineering and product via common expectations and clear value. The CASE (:wink:) for any alert’s existence is clear.&lt;/p&gt;

&lt;h2 id=&quot;cause-based-is-ok-in-moderation&quot;&gt;Cause-Based Is OK In Moderation&lt;/h2&gt;
&lt;p&gt;Sometimes the system being monitored leaves us little choice about a cause-based alert. Other times our operators are acutely aware that the symptom will lead to imminent failure and is therefore very actionable. Maybe you just aren’t sure what’s up and set up alerts out of an abundance of caution. This need for action is hopefully temporary until the system can be modified to deal with degradation.&lt;/p&gt;

&lt;p&gt;Keep the other parts of CASE in mind when dealing with these situations. Being temporary doesn’t remove the need for thoughtfulness.&lt;/p&gt;

&lt;h1 id=&quot;evaluated&quot;&gt;Evaluated&lt;/h1&gt;
&lt;p&gt;The changes — new code, new infra, or new… whatever — to our systems introduce new forms of failure (Cook, 3).&lt;sup id=&quot;fnref:4:1&quot; role=&quot;doc-noteref&quot;&gt;&lt;a href=&quot;#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; Do we still trust that this alert works as expected? Having sharp, recent mental models of your systems and experience responding to some alerts to aid &lt;a href=&quot;https://www.getrevue.co/profile/resilience/issues/resilience-roundup-anticipatory-thinking-issue-27-168981&quot;&gt;anticipatory thinking&lt;/a&gt; is a key part of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Learning_organization&quot;&gt;learning organization&lt;/a&gt;. Because the faults in our systems will continue to evolve, so must we.&lt;/p&gt;

&lt;p&gt;We need to regularly evaluate the performance of each alert to ensure they work the way that we expect. Listen up management, you can have a strong impact helping your team establish this! Here are some ideas for how to do evaluation:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Leverage &lt;a href=&quot;https://principlesofchaos.org/&quot;&gt;chaos engineering&lt;/a&gt;, &lt;a href=&quot;https://www.gremlin.com/community/tutorials/how-to-run-a-gameday/&quot;&gt;game days&lt;/a&gt;, or other forms of testing to ensure that alerts do what you expect. You can do this within your team without the process of larger incident management machinery!&lt;/li&gt;
  &lt;li&gt;Include collection of data about all relevant alerts that participated in incidents are part of your incident management program. Flag help, harm, irrelevance, confusion and more. Use this as feedback.&lt;/li&gt;
  &lt;li&gt;Healthy alerts fire on occasion and are well exercised. Verify that all the links work and point to relevant context, etc.&lt;/li&gt;
  &lt;li&gt;Alerts that never fire or that fire frequently are unhealthy. Improve or eliminate these. Be wary of both overload and underload!&lt;/li&gt;
  &lt;li&gt;Keep an expiration timestamp on alerts. If an alert expires, reevaluate it against CASE and update the timestamp. Think of this as a freshness date and review with your team regularly.&lt;/li&gt;
  &lt;li&gt;Make improvement of alerts easy. Use monitoring as code and keep your alerts in a Git repository. Pull requests help you involve the team as well and you get history for past experiences. This may help remove fear of changing the alert or getting sign off from those that “own” it.&lt;/li&gt;
  &lt;li&gt;Allow feedback on alerts, even if it’s just a quick &lt;a href=&quot;https://www.google.com/forms/about/&quot;&gt;Google Form&lt;/a&gt; so that responders can signal an alert being unhelpful or noisy. Put a link or call to action in the body of your alert and review the feedback regularly.&lt;/li&gt;
  &lt;li&gt;Establish team norms that those on call have time in their schedule to improve on call during slow periods. Try and leave things better than when you found them!&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;closing&quot;&gt;Closing&lt;/h1&gt;
&lt;p&gt;I believe that the CASE method provides teams and organizations a way to discuss the care and feeding of automated alerting. A single engineer can begin evaluating alerts through the CASE lens and from that scale up to an entire org working with teams, management, and incident management programs to keep alerts groomed and valuable. It requires no fancy tools or complex process.&lt;/p&gt;

&lt;p&gt;As an industry we must continue to consider the human factors of on call responsibility whilst giving our customers the best experience possible. The tools and practices that we use have a vast opportunity for improvement. I hope that CASE contributes to this improvement.&lt;/p&gt;

&lt;p&gt;Bask in improved alerting!&lt;/p&gt;

&lt;iframe src=&quot;https://giphy.com/embed/qISaMW1xwmvNS&quot; width=&quot;480&quot; height=&quot;360&quot; frameborder=&quot;0&quot; class=&quot;giphy-embed&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;a href=&quot;https://giphy.com/gifs/bird-owl-qISaMW1xwmvNS&quot;&gt;via GIPHY&lt;/a&gt;&lt;/p&gt;

&lt;h1 id=&quot;citations&quot;&gt;Citations&lt;/h1&gt;

&lt;div class=&quot;footnotes&quot; role=&quot;doc-endnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Allspaw, John. “&lt;a href=&quot;https://www.slideshare.net/jallspaw/alert-designcac-talk2013&quot;&gt;Considerations for Alert Design.&lt;/a&gt;” Monitorama 2013 Portland, OR. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Cavage, Mark. &lt;em&gt;&lt;a href=&quot;https://queue.acm.org/detail.cfm?id=2482856&quot;&gt;There’s Just No Getting Around It: You’re Building A Distributed System&lt;/a&gt;&lt;/em&gt;. ACM Queue, 2013. &lt;a href=&quot;#fnref:2&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Treynor, Ben et al. &lt;em&gt;&lt;a href=&quot;https://queue.acm.org/detail.cfm?id=3096459&quot;&gt;The Calculus of Service Availability&lt;/a&gt;&lt;/em&gt;. ACM Queue, 2018. &lt;a href=&quot;#fnref:3&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:3:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Cook, Richard. &lt;em&gt;&lt;a href=&quot;https://web.mit.edu/2.75/resources/random/How%20Complex%20Systems%20Fail.pdf&quot;&gt;How Complex Systems Fail&lt;/a&gt;&lt;/em&gt;. Cognitive technologies Laboratory, University of Chicago. 2000 &lt;a href=&quot;#fnref:4&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt; &lt;a href=&quot;#fnref:4:1&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot; role=&quot;doc-endnote&quot;&gt;
      &lt;p&gt;Sridharan, Cindy. &lt;em&gt;&lt;a href=&quot;https://distributed-systems-observability-ebook.humio.com/&quot;&gt;Distributed Systems Observability&lt;/a&gt;&lt;/em&gt;. O’Reilly Media, Inc. 2018 &lt;a href=&quot;#fnref:5&quot; class=&quot;reversefootnote&quot; role=&quot;doc-backlink&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</description>
        <pubDate>Tue, 09 Apr 2019 07:49:00 +0000</pubDate>
        <link>http://onemogin.com/monitoring/case-method-better-monitoring-for-humans.html</link>
        <guid isPermaLink="true">http://onemogin.com/monitoring/case-method-better-monitoring-for-humans.html</guid>
        
        
        <category>monitoring</category>
        
      </item>
      
    
  </channel>
</rss>
