{"id":231,"date":"2020-04-04T21:53:20","date_gmt":"2020-04-04T19:53:20","guid":{"rendered":"http:\/\/metaworks.eu\/wordpress\/?p=231"},"modified":"2020-04-08T17:02:04","modified_gmt":"2020-04-08T15:02:04","slug":"tool-integration-visualization-whats-next","status":"publish","type":"post","link":"https:\/\/metaworks.eu\/wordpress\/tool-integration-visualization-whats-next\/","title":{"rendered":"Blind Men, Elephants, Tool Integration and Visualization \u2013 What&#8217;s next?"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>A group of blind men heard about a strange animal, which had been brought to the town. It was <em>called an &#8220;Elephant<\/em>&#8220;, but none of them knew its shape or form. They said: &#8220;Let us inspect and know it by touch, of which we are capable&#8221;. So, they went. The first, whose hand landed on the trunk, said &#8220;It is like a giant snake&#8221;. The second, whose hand reached the elephant&#8217;s ear, claimed it seemed like a kind of fan. The third, whose hand was upon its leg, said, the elephant is a pillar like a tree-trunk. The blind man who placed his hand upon the side said the elephant, &#8220;is a wall&#8221;. Another who felt its tail, described it as a rope. The last felt its tusk, stating the elephant is that which is hard, smooth and like a spear.<\/p><cite>Indian fable<\/cite><\/blockquote>\n\n\n\n<p>It seems we all have a tendency to claiming to know the truth, based on a usually very limited, subjective experience.  Within our limited perception, with the importance of considering context, we forget that other limited, subjective experiences may be equally true. <\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>This blog post is about tool integration and new approaches to visualization of information flow. All I intended to do was to apply the 3 ways of DevOps and take them a little further. However, it&#8217;s been a while since I came up with an unwieldy academic article, so here&#8217;s a made-up title for readers with matriculation backgrounds:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Towards an integrated framework for shorter feedback cycles<\/p><\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">State of the Union<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Tool Integration<\/h4>\n\n\n\n<p>There are several integration solutions on the market, from basic nightly CSV exports to internally developed API-based integrations, from ChatOps approaches such as <a rel=\"noreferrer noopener\" href=\"https:\/\/atomist.com\/\" target=\"_blank\">Atomist<\/a> to large-scale middleware-like solutions such as the <a rel=\"noreferrer noopener\" href=\"https:\/\/www.tasktop.com\/integration-hub\" target=\"_blank\">Tasktop Integration Hub<\/a> &#8230; not to mention ESBs and message brokers.<\/p>\n\n\n\n<p>So it is quite fair to assume that integration of two or more software tools is more or less a solved problem. We can make data <em>flow<\/em> between tools.<\/p>\n\n\n\n<p>How about the visualization of data?<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Visualization<\/h4>\n\n\n\n<p>In IT operations, monitoring solutions like Nagios have long been able to visualize how the infrastructure is doing &#8211; almost in real time.<\/p>\n\n\n\n<p>With <a rel=\"noreferrer noopener\" href=\"https:\/\/en.wikipedia.org\/wiki\/Kibana\" target=\"_blank\">Kibana<\/a> (and Elasticsearch\/Logstash under the hood) we can not only analyze the UP\/DOWN state of a host, disk usage and CPU load, but also visualize and trend various structured data &#8211; usually the log files generated by our services.<\/p>\n\n\n\n<p>And last but not least, tools such as <a rel=\"noreferrer noopener\" href=\"https:\/\/marketplace.atlassian.com\/apps\/1211051\/eazybi-reports-and-charts-for-jira?hosting=server&amp;tab=overview\" target=\"_blank\">eazyBI<\/a> and <a rel=\"noreferrer noopener\" href=\"https:\/\/www.tasktop.com\/viz\" target=\"_blank\">Tasktop Viz<\/a> can visualize whole process chains and business data.<\/p>\n\n\n\n<p>While an <em>integration <\/em>optimizes the flow of data and a <em>visualization <\/em>gives feedback, we currently have no direct relation between the two, as it&#8217;s different tools.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Having the Cake and Eating it<\/h3>\n\n\n\n<p>So far so semi-good, as this breaks the &#8220;Experimentation Principle&#8221; from the <em>3 Ways of DevOps<\/em> (remember <a href=\"https:\/\/amzn.to\/2XinNAo\" target=\"_blank\" rel=\"noreferrer noopener\">Gene Kim&#8217;s book<\/a>?).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>First&nbsp;<strong>Way<\/strong>: Work always flows in one direction \u2013 downstream. Second&nbsp;<strong>Way<\/strong>: Create, shorten and amplify feedback loops. Third&nbsp;<strong>Way<\/strong>: Continued experimentation, in order to learn from mistakes, and achieve mastery.<\/p><\/blockquote>\n\n\n\n<p>We will see <em>a<\/em> change at some point in the future, without knowing where it came from. Just like the blind men in the fable, we lack context!<br>For example,<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Assume we double the WIP limits for feature development in a Jira Kanban, what impact would that have downstream, for example in quality assurance?<\/li><li>Let&#8217;s improve the quality of our client-facing documents by hiring another technical writer, how does that change affect customer support?<\/li><li>Does it affect the error rate if we came up with a policy to have all phones, Slack and Skype muted?<\/li><\/ul>\n\n\n\n<p>What I propose is to combine both dimensions, i.e. to <strong>allow changes directly from the visualization interface<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Objection handling<\/h4>\n\n\n\n<p>One of the constants in a consultant&#8217;s world is many people <em>knowing<\/em> beforehand what isn&#8217;t possible or viable. So, to make the most of everybody&#8217;s time, here are two objections that I could immediately think of (contact me if you have more, I&#8217;ll add them)<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Martin, headcount changes or internal policies are things that we cannot change from a tool interface! It involves people!!<\/li><li>Such changes takes ages before we could actually <em>see<\/em> a change, so what&#8217;s the point?<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">My Approach: Annotations and Trigger Tickets<\/h4>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<h4 class=\"wp-block-heading\">#1: Introducing annotations.<\/h4>\n\n\n\n<p><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>In a first iteration, we can work with <strong>annotations<\/strong>. So note in the appropriate place what has been changed where and how.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"http:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung-1024x344.png\" alt=\"\" class=\"wp-image-314\"\/><figcaption>System Model with Annotations<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<h4 class=\"wp-block-heading\">#2: Allow inline changes directly from the visualization.<\/h4>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>Instead of just adding comments, the next iteration allows for inline manipulation (where feasible). This way, we make our visualization even more interactive, which would also allow for a <strong>simulation mode<\/strong>. What would happen, if more team members take days off during the summer? What&#8217;s the effect of more\/less investment into education and training?<\/p>\n\n\n\n<p>To accomplish this, we use <strong>sliders <\/strong>to change values directly inline, in this example the WIP limit for development.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"558\" src=\"http:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Sliders-1024x558.png\" alt=\"\" class=\"wp-image-337\" srcset=\"https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Sliders-1024x558.png 1024w, https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Sliders-300x164.png 300w, https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Sliders-768x419.png 768w, https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Sliders.png 1302w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>System Model with Inline Manipulation Option<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<h4 class=\"wp-block-heading\">#3: Using trigger tickets.<\/h4>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>Why leave the interface we&#8217;re working in? Being a developer means you most probably work in Jira or commit your code to a repo. So, instead of manually fiddling with sliders, let&#8217;s use <strong>trigger tickets<\/strong> to control system behavior [1]. A similar mechanism already exists with the so-called &#8220;Smart Commits&#8221; in some repos. We apply this in a broader context now and again change the WIP limit:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"558\" src=\"http:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Triggers-1024x558.png\" alt=\"\" class=\"wp-image-338\" srcset=\"https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Triggers-1024x558.png 1024w, https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Triggers-300x164.png 300w, https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Triggers-768x419.png 768w, https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/SysDyn_Was-kommt-nach-der-Visualisierung_Triggers.png 1302w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">If you&#8217;ve made it this far&#8230;<\/h3>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:33.33%\">\n<h4 class=\"wp-block-heading\">#4: From triggers to Liquid Democracy with delegated voting.<\/h4>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:66.66%\">\n<p>Why stop here? By now, we have a system which is optimized for the flow of data. We visualize the data in a meaningful way and allow for adhoc changes via trigger tickets. Therefore, it seems natural to use this mechanism to allow for team members to actively influence their working environment. We can implement a full-blown Liquid Democracy &#8211; see this example from the Pirate Wiki:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/liquid-democracy_delegated_voting.png\" alt=\"\" class=\"wp-image-316\" width=\"328\" height=\"369\" srcset=\"https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/liquid-democracy_delegated_voting.png 533w, https:\/\/metaworks.eu\/wordpress\/wp-content\/uploads\/2020\/04\/liquid-democracy_delegated_voting-267x300.png 267w\" sizes=\"auto, (max-width: 328px) 100vw, 328px\" \/><figcaption>Image source: <a href=\"https:\/\/wiki.piratenpartei.de\/Liquid_Democracy\">https:\/\/wiki.piratenpartei.de\/Liquid_Democracy<\/a><\/figcaption><\/figure><\/div>\n\n\n\n<p>Here, distributed teams can vote on initiatives or, if they&#8217;re meh about it, delegate their vote. Rather than sitting in meetings for up\/downvoting initiatives, we can now use this mechanism to <\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>continuously improve our working environment.<\/em><\/p>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>[1] I am fully aware that processing data and instructions in the same system is basically a Von-Neumann-architecture.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>While an integration optimizes the flow of data and a visualization gives feedback, we currently have no direct relation between the two, as it&#8217;s different tools.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42,47],"tags":[54,52,17,53,51,32,39,40],"class_list":["post-231","post","type-post","status-publish","format-standard","hentry","category-metrics","category-tools","tag-continuous-improvement","tag-delegated-voting","tag-devops","tag-distributed-teams","tag-liquid-democracy","tag-prioritization","tag-system-dynamics","tag-visualization","entry"],"_links":{"self":[{"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=231"}],"version-history":[{"count":12,"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":494,"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/posts\/231\/revisions\/494"}],"wp:attachment":[{"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/metaworks.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}