{"id":2496,"date":"2015-05-05T09:58:01","date_gmt":"2015-05-05T13:58:01","guid":{"rendered":"http:\/\/antipaucity.com\/?p=2496"},"modified":"2015-05-05T09:58:01","modified_gmt":"2015-05-05T13:58:01","slug":"what-level-of-abstraction-is-appropriate","status":"publish","type":"post","link":"https:\/\/merikebi.warrenmyers.com\/?p=2496","title":{"rendered":"what level of abstraction is appropriate?"},"content":{"rendered":"<p>Every day we all work at multiple levels of abstraction.<\/p>\n<p>Perhaps this XKCD comic sums it up best:<\/p>\n<figure style=\"width: 442px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/xkcd.com\/676\"><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/imgs.xkcd.com\/comics\/abstraction.png\" alt=\"If I'm such a god, why isn't Maru *my* cat?\" width=\"442\" height=\"442\" \/><\/a><figcaption class=\"wp-caption-text\">abstraction<\/figcaption><\/figure>\n<p>But unless you&#8217;re weird and think about these kinds of things (like I do), you probably just run through your life happily interacting at whatever level seems most appropriate at the time.<\/p>\n<p>Most drivers, for example, don&#8217;t think about the abstraction they use to interact with their car. Pretty much every car follows the same procedure for starting, shifting into gear, steering, and accelerating\/decelerating: you insert a key (or have a fob), turn it (or push a button), move the drive mode selection stick (gear shift, knob, etc), turn a steering wheel, and use the gas or brake\u00a0pedals.<\/p>\n<p>But that&#8217;s not\u00a0<em>really<\/em> how you start a car. It&#8217;s not\u00a0<em>really<\/em> how you select drive mode. It&#8217;s not\u00a0<em>really<\/em> how you steer, etc.<\/p>\n<p>But it&#8217;s a convenient, <em>abstract<\/em> interface to operate a car. It is one which allows you to adapt rapidly to different vehicles from different manufacturers which operate under the hood<sup>*<\/sup> in potentially very different ways.<\/p>\n<p>The problem with any form of abstraction is that it&#8217;s just a summary &#8211; an interface &#8211; to whatever it is trying to abstract away. And sometimes those interfaces <a href=\"http:\/\/www.joelonsoftware.com\/articles\/LeakyAbstractions.html\">leak<\/a>. You turn the key in your car and it doesn&#8217;t start. Crud. What did I forget to do, or is the car broken? Did I depress the brake and clutch pedal? Is it in Park? Did I make sure to not leave the lights on overnight? Did\u00a0the starter motor seize? Is there gas in the tank? Did the fuel pump quit? These are all thoughts that might run through your mind (<em>hopefully<\/em> in decreasing likelihood of probability\/severity) when the simple act of turning the key doesn&#8217;t work like you <a href=\"http:\/\/en.wikipedia.org\/wiki\/Leaky_abstraction\">expect<\/a>.<\/p>\n<p>For a typical computer user, the only time they&#8217;ll even begin to care about how their system\u00a0<em>really<\/em> works is when they try to do something they\u00a0<em>expect<\/em> it to do &#8230; and it doesn&#8217;t. Just like drivers don&#8217;t think about their cars&#8217; need for the fuel injector system to make minute adjustments thousands of times per second, most people don&#8217;t think about what it\u00a0<em>actually<\/em> takes to go from typing &#8220;www.google.com&#8221; in their browser bar to getting the website returned (or how their computer goes from off to &#8220;ready to use&#8221; after pushing the power button).<\/p>\n<p>Automation provides an abstraction to manual processes (be it <a href=\"http:\/\/antipaucity.com\/2013\/05\/11\/automating-or-automation\/#.VTqXSK1VhBc\">furniture making<\/a>\u00a0or tier 1 operations <a href=\"http:\/\/en.wikipedia.org\/wiki\/Runbook#Runbook_Automation\">run book<\/a> scenarios). And abstractions are good things .. except when they leak (or outright break).<\/p>\n<p>Depending on your level of engagement, the abstraction <em>you<\/em> need to work\u00a0with will differ &#8211; but knowing that you&#8217;re at\u00a0<em>some<\/em> level of abstraction (and, ideally,\u00a0<em>which<\/em> level) is vital to being the most effective at whatever your role is.<\/p>\n<p>I was asked recently how a presentation on the benefits of automation would vary based on audience. The possible audiences given in the question were: engineer, manager, &amp; CIO. And I realized that when I&#8217;ve been asked questions like this before, I&#8217;ve never answered them\u00a0<em>wrong<\/em>, but I&#8217;ve answered them very inefficiently: I have never used the level of abstraction to\u00a0<em><a href=\"http:\/\/cnx.org\/contents\/dec1d663-dbd8-48b0-bf40-5d600ce5fa7d@7\/Planning_for_Focused_Modularit\">solve the general case<\/a><\/em> of what this question is really getting at. The question is\u00a0<strong>not<\/strong> about whether or not you&#8217;re comfortable speaker to any given &#8220;level&#8221; of customer representative (though it&#8217;s important). It is\u00a0<strong>not<\/strong> about verifying you&#8217;re not lying about your work history (though also important).<\/p>\n<p>No. That question is about finding out if you really know how to abstract to the proper level (in leakier fashions as you go upwards assumed) for the specific &#8220;type&#8221; of person you are talking to.<\/p>\n<p>It is vital to be able to do the &#8220;three pitches&#8221; &#8211; the elevator (30 second), the 3 minute, and the 30 minute. Every one will cover the &#8220;same&#8221; content &#8211; but in very different ways. It&#8217;s very much related to the &#8220;10\/20\/30 rule of {{PowerPoint}}&#8221; that {{Guy Kawasaki}} <a href=\"http:\/\/guykawasaki.com\/the_102030_rule\">promulgates<\/a>: &#8220;a PowerPoint presentation should have <strong>ten<\/strong> slides, last no more than <strong>twenty<\/strong> minutes, and contain no font smaller than <strong>thirty<\/strong> points.&#8221; Or, to quote {{Winston Churchill}}, &#8220;A good speech should be like a woman&#8217;s skirt; long enough to cover the subject and short enough to create interest.&#8221;<\/p>\n<p>The answer that epiphanized for me when I was asked that question most recently was this: &#8220;I presume everyone in the room is &#8216;as important&#8217; as the CIO &#8211; but everyone gets the same &#8216;sales pitch&#8217; from me: it&#8217;s all about ROI. The &#8216;return&#8217; on &#8216;investment&#8217; is going to look different from the engineer&#8217;s, manager&#8217;s, or CIO&#8217;s perspectives, but it&#8217;s all just ROI.&#8221;<\/p>\n<p>The exact same data presented at three different levels of abstraction will &#8220;look&#8221; different, even though it&#8217;s conveying the same thing &#8211; because the audience&#8217;s engagement is going to be at their level of abstraction (though hopefully they understand at least to some extent the levels above (and below) themselves).<\/p>\n<p>A simple example: it currently takes a single engineer 8 hours to perform all of the tasks related to patching a Red Hat server. There are 1000 servers in the datacenter. Therefore it takes 8000 engineer-hours to patch them all.<\/p>\n<p>That&#8217;s a lot.<\/p>\n<p>It&#8217;s a crazy lot.<\/p>\n<p>But I&#8217;ve seen it countless times in my career. It&#8217;s why patching can so easily get relegated to a once-a-year (or even less often) cycle. And why so many companies are woefully out-of-date with their basic systems from known issues. If your patching team consists of 4 people, it&#8217;ll take them a <strong><em>year<\/em><\/strong> to patch all 8000 systems &#8211; and then they just have to start over again. It&#8217;d be like <a href=\"http:\/\/goldengatebridge.org\/research\/factsGGBIntOrngPaint.php\">painting<\/a> the Golden Gate Bridge &#8211; an unending process.<\/p>\n<p>Now let&#8217;s say you happen to have a management tool available (could be as simple as <a href=\"https:\/\/code.google.com\/p\/parallel-ssh\">pssh<\/a>\u00a0with preshared SSH <a href=\"http:\/\/en.wikipedia.org\/wiki\/Ssh-keygen\">keys<\/a>, or as big and encompassing as <a href=\"http:\/\/www8.hp.com\/us\/en\/software-solutions\/server-automation-software\">Server Automation<\/a>). And let&#8217;s say you have a local mirror of <a href=\"http:\/\/rhn.redhat.com\">RHN<\/a>\u00a0&#8211; so you can decide just what, exactly, of any given channel you want to apply in\u00a0<em>your<\/em> updates.<\/p>\n<p>Now that you have a central point from which you can launch tasks to all of the {{Red Hat}} servers that need to be updated, and a managed source from which each will source their updates, you can have a single engineer launch updates to dozens, scores, even hundreds of servers\u00a0<em>simultaneously<\/em> &#8211; bringing them all up-to-date in one swell foop. What had taken a single engineer 8 hours is still 8 &#8211; but it&#8217;s 8\u00a0<em>in parallel<\/em>: in other words, the &#8220;same&#8221; 8 hours is now touching scores of machines instead of 1 at a time. The single engineer&#8217;s efficiency has been boosted by a factor of, say, 40 (let&#8217;s stay conservative &#8211; I&#8217;ve seen this number as high as 1000 or more).<\/p>\n<p>Instead of it taking 8000 engineer-hours to update all 1000 servers, it&#8217;s now only 200. Your 4 engineer patching team can now complete their update cycle in well under 2 weeks. What had taken a full year, is now being measured in days or weeks.<\/p>\n<p>The &#8220;return on investment&#8221; at the abstraction level of the engineer is they have <em>each<\/em>\u00a0been &#8220;given back&#8221; 1900 hours a year to work on other things (which helps make them <a href=\"http:\/\/antipaucity.com\/2012\/12\/10\/finding-your-niche\/#.VTqf661VhBc\">promotable<\/a>). The team&#8217;s manager sees an ROI of &gt;90% of his team&#8217;s time is available for new\/different tasks (like patching a new OS). The CIO sees an ROI of 7800 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Full-time_equivalent\">FTE<\/a> hours no longer being expended &#8211; which means the business&#8217; need for expansion, with an associated doubling of server estate, is now feasible without having to double his patching staff.<\/p>\n<p>Every abstraction is like that &#8211; there is a different ROI for a taxi driver on his car &#8220;just working&#8221; than there is for a hot rodder who&#8217;s truly getting under the hood. But it&#8217;s still an ROI &#8211; one is getting his return by being able to ferry passengers for pay, and the other by souping-up his ride to be just\u00a0<em>that<\/em> little (or lot) bit better. The ROI of a 1% fuel economy improvement by the fuel injector system being made incrementally smarter in conjunction with a lighter engine block might only be measured in cents per hour driving &#8211; but for FedEx, that will be millions of dollars a year in either unburned fuel, or additional deliveries (both of which are good for their bottom line).<\/p>\n<p>Or consider the abstraction of talking about financial statements (be they for companies or governments) &#8211; they [almost] never list revenues and expenditures down to the penny. Not because they&#8217;re being lazy, but because the\u00a0<em>scale<\/em> of values being reported do not lend themselves well to such mundane thinking. When a company like Apple has $178 billion in cash on <a href=\"http:\/\/money.cnn.com\/2015\/01\/28\/investing\/apple-cash-178-billion\">hand<\/a>, no one is going to care if it&#8217;s\u00a0<strong>really<\/strong> $178,000,102,034.17 or $177,982,117,730.49. At that scale, $178 billion is a close-enough <em>approximation<\/em> to reality. And that&#8217;s what an abstraction is &#8211; it is an <em>approximation<\/em> to the reality being expressed down one level. It&#8217;s\u00a0<strong>good enough<\/strong> to say that you start your car by turning the key &#8211; if you&#8217;re not an automotive engineer or mechanic. It&#8217;s\u00a0<strong>good enough<\/strong> to approximate the US Federal Budget at $3.9 trillion or maybe $3900 billion (whether it should be that high is a totally different topic). But it&#8217;s\u00a0<strong>not<\/strong> a good approximation to say $3,895,736,835,150.91 &#8211; it may be\u00a0<em>precise<\/em>, but it&#8217;s not\u00a0<em>helpful.<\/em><\/p>\n<p>I guess that means the answer to the question I titled this post with is, &#8220;the level of abstraction appropriate is directly related to your &#8216;function&#8217; in relation to the system at hand.&#8221; The abstraction needs to be\u00a0<strong><em>helpful<\/em><\/strong> &#8211; the minute it is no longer helpful (by being either too approximate, <em><strong>or<\/strong><\/em> too precise), it needs to be refined and focused for the audience receiving it.<\/p>\n<hr \/>\n<p><sup>*<sub>see what I did there?<\/sub><\/sup><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every day we all work at multiple levels of abstraction. Perhaps this XKCD comic sums it up best: But unless you&#8217;re weird and think about these kinds of things (like I do), you probably just run through your life happily interacting at whatever level seems most appropriate at the time. Most drivers, for example, don&#8217;t &hellip;<br \/><a href=\"https:\/\/merikebi.warrenmyers.com\/?p=2496\" class=\"more-link pen_button pen_element_default pen_icon_arrow_double\">Continue reading <span class=\"screen-reader-text\">what level of abstraction is appropriate?<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[7,23,41],"tags":[63,121,266,333,642],"keyring_services":[],"class_list":["post-2496","post","type-post","status-publish","format-standard","hentry","category-commentary","category-insights","category-technical","tag-abstraction","tag-automation","tag-efficiency","tag-focus","tag-roi"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=\/wp\/v2\/posts\/2496","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2496"}],"version-history":[{"count":0,"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=\/wp\/v2\/posts\/2496\/revisions"}],"wp:attachment":[{"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2496"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/merikebi.warrenmyers.com\/index.php?rest_route=%2Fwp%2Fv2%2Fkeyring_services&post=2496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}