
{"id":243,"date":"2013-04-05T08:27:21","date_gmt":"2013-04-05T07:27:21","guid":{"rendered":"http:\/\/serverdude.dk\/?p=243"},"modified":"2013-04-05T08:27:21","modified_gmt":"2013-04-05T07:27:21","slug":"crossing-a-river","status":"publish","type":"post","link":"https:\/\/serverdude.dk\/?p=243","title":{"rendered":"Crossing a River"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>For those who are not in the software development business, I have tried\u00c2\u00a0to create a parallel to an engineering task simple enough that most can\u00c2\u00a0see what some of the issues are.<\/p>\n<p>In this story we have a customer who wants to cross a river. He has seen\u00c2\u00a0other people using boats to cross the river, but he doesn&#8217;t know anything\u00c2\u00a0about boats, he simply wants to be able to carry some merchandise from one\u00c2\u00a0shore to the other without getting it wet.<\/p>\n<p>The software developers he hires have no business insights into the river\u00c2\u00a0crossing domain, but they do know that they can solve almost every\u00c2\u00a0problem.<\/p>\n<p>Customer: &#8220;I want to cross the river without getting wet. I&#8217;ve seen\u00c2\u00a0boats, but I can&#8217;t be bothered with the hassle of sailing one.&#8221;<\/p>\n<p>Developers: &#8220;River? Wet? Boat? What are those things?&#8221;<\/p>\n<p>Here the customers animosity towards the apparently completely stupid\u00c2\u00a0developers germinate.<\/p>\n<p>Customer: &#8220;Don&#8217;t you know anything? The river is this flowing barrier.\u00c2\u00a0Boats float somehow and can be rowed across using muscle strength. But as\u00c2\u00a0I said &#8211; I can&#8217;t be bothered with the hassle of sailing one.&#8221;<\/p>\n<p>The developers taking note of the animosity don&#8217;t want to ask more\u00c2\u00a0questions trying to keep up appearances they conclude that they have\u00c2\u00a0sufficient information to start work and their own preliminary\u00c2\u00a0investigations on the subject.<\/p>\n<h2>Version 1.0<\/h2>\n<p>The developers set up an investigation on the objects mentioned. They get\u00c2\u00a0that wood will float, and that apparently the river flows carrying the\u00c2\u00a0wood downstream, which means that there is a possibility of some kind of\u00c2\u00a0raft can be carried across using this flow.<\/p>\n<p>Another team tests the best launch site of the raft within the river to\u00c2\u00a0the highest probability that it can land on the other side. They conclude\u00c2\u00a0that starting close to the middle of the stream has a high probability of\u00c2\u00a0keeping the raft in the middle of the stream.<\/p>\n<p>The developers come up with the following solutions covering all of the customers needs.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-244\" title=\"Initial design\" src=\"http:\/\/serverdude.dk\/wp-content\/uploads\/crossing-a-river-2.png\" alt=\"Initial design for crossing a river\" width=\"399\" height=\"453\" srcset=\"https:\/\/serverdude.dk\/wp-content\/uploads\/crossing-a-river-2.png 399w, https:\/\/serverdude.dk\/wp-content\/uploads\/crossing-a-river-2-264x300.png 264w\" sizes=\"auto, (max-width: 399px) 100vw, 399px\" \/><\/p>\n<p>Proudly they show this to the customer, who in turn is thrilled to see it\u00c2\u00a0in action. Though after getting to the other side he&#8217;s a bit stomped, and\u00c2\u00a0asks the developers: &#8220;How do I get back then?&#8221;<\/p>\n<p>The developers are fluttered. There is no mention of getting back from\u00c2\u00a0the other side, just a simple crossing.<\/p>\n<p>The customer argues: &#8220;But that goes without saying. If I take my\u00c2\u00a0merchandise from one side to the other I have to get back to resupply.&#8221;<\/p>\n<h2>Version 2.0<\/h2>\n<p>One developer suggests reversing the flow of the river. Naturally you\u00c2\u00a0can&#8217;t do that thus he shows the lack of domain knowledge of rivers. But if\u00c2\u00a0it was possible to reverse the flow, then this would be a viable idea.<\/p>\n<p>Whether the customer is informed of this idea or the developers try it\u00c2\u00a0out for themselves, the result is greater animosity or wasted effort.<\/p>\n<p>While the reverse solution seemed stupid, another developer reflect upon\u00c2\u00a0the concept and the original idea, then gets his Eureka moment: We&#8217;ll just\u00c2\u00a0add another dock on the first side further downstream &#8211; it&#8217;ll be the same\u00c2\u00a0as going from the first to the second side, just reversed.<\/p>\n<p>The developers proudly present version 2.0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-244\" title=\"Version 2.0\" src=\"http:\/\/serverdude.dk\/wp-content\/uploads\/crossing-a-river-3.png\" alt=\"Getting back to the first side again\" width=\"399\" height=\"453\" \/><\/p>\n<p>The now wary customer is thrilled that he can get back home, but now\u00c2\u00a0there&#8217;s an issue with reuse. &#8220;I want to be able to bring another shipment,\u00c2\u00a0but now the raft will just continue down the river.&#8221;<\/p>\n<h2>Version 3.0, 3.1, &#8230;<\/h2>\n<p>After mentioning that this was another thing not in the specification,\u00c2\u00a0the developers come up with several suggestions for solutions.<\/p>\n<ol>\n<li>Repeat the success. Build more docks alternating sides. While this\u00c2\u00a0works for a few round-trips the customer finds that the way back home\u00c2\u00a0becomes excruciatingly long. Or they end up wherever the river flows to.<\/li>\n<li>Skip the surplus docks, just keep the three from the second solution.\u00c2\u00a0Build new rafts at the start of every round-trip. While this works, and\u00c2\u00a0the way back home is constant, the price for a raft: Materials and time\u00c2\u00a0spent. Soon becomes unfeasible.<\/li>\n<li>Drag the raft from the last dock to the first. This can be done either\u00c2\u00a0by the customer or some other power source, e.g. a horse.<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-244\" title=\"Dragging back\" src=\"http:\/\/serverdude.dk\/wp-content\/uploads\/crossing-a-river-4.png\" alt=\"Dragging the raft back to the beginning\" width=\"399\" height=\"453\" \/><\/p>\n<p>While the customer now has a reusable way of crossing the river, there\u00c2\u00a0are better alternatives.<\/p>\n<p>Some of the downsides to this solution:<\/p>\n<ul>\n<li>Cost &#8211; the developers worked on several solutions. If they got to\u00c2\u00a0version 3 above before multiple docks or rafts, they would at least have\u00c2\u00a0saved a lot of time and resources.<\/li>\n<li>Time &#8211; while time is a cost, then time spent crossing the river in\u00c2\u00a0this fashion seems wasteful<\/li>\n<li>Parallelism &#8211; everyone crossing must depart at the same time or wait a\u00c2\u00a0full revolution of the raft. Naturally more rafts can be issued, but\u00c2\u00a0then there&#8217;s another problem of cluttering up the river.<\/li>\n<\/ul>\n<p>The &#8220;correct&#8221; solution would have been to build a bridge crossing the\u00c2\u00a0river.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-244\" title=\"Bridge\" src=\"http:\/\/serverdude.dk\/wp-content\/uploads\/crossing-a-river-5.png\" alt=\"Crossing the river using a bridge\" width=\"399\" height=\"453\" \/><\/p>\n<p>While this should seem like a no-brainer to us, then there was a first\u00c2\u00a0bridge at some point.<\/p>\n<p>The &#8220;funny&#8221; part is that this could be achieved at 2\/3 the cost of the\u00c2\u00a0final solution as the docks are going halfway into the river.<\/p>\n<p>Another &#8220;funny&#8221; part is that most likely then the developers analyzing\u00c2\u00a0the flow and suggesting the launch site to be he middle of the river,\u00c2\u00a0would probably have build a tiny bridge crossing the entire river from\u00c2\u00a0which they could launch probes. Quite possibly they would have build\u00c2\u00a0another bridge to measure where the probes went.<\/p>\n<p>The bridge does have a drawback, which the dock solution doesn&#8217;t have:\u00c2\u00a0Tall things can pass through the river without tearing apart the solution.<\/p>\n<p>To keep with this parallel. A new developer company &#8211; a set of bridge\u00c2\u00a0builders &#8211; shows up telling the customer that there is a better way to do\u00c2\u00a0things, namely a bridge. But the customer is quite happy with his\u00c2\u00a0solution. It might not be the best, but it works, and the cost\/benefit of\u00c2\u00a0the current solution is still in the red.<\/p>\n<h2>Summary<\/h2>\n<p>So &#8211; what to take away from this story? First off, this is an extreme\u00c2\u00a0simplification of the issues in software development. It would probably\u00c2\u00a0have been more correct if the customer had been blind, as most software\u00c2\u00a0customers don&#8217;t understand the code making up the solution. But then some\u00c2\u00a0of the developers would have had to be blind, deaf, mute, and forgetful.<\/p>\n<p>The customer is most likely the best candidate for an expert in the\u00c2\u00a0domain for which the developers are building a solution. On the other\u00c2\u00a0hand, then developers should be experts in the solution cracking and\u00c2\u00a0development domains.<\/p>\n<p>Animosity and trying to keep up appearances are detrimental to the\u00c2\u00a0solution at hand. It is quite easy for the customer to think that the\u00c2\u00a0developers are stupid when they don&#8217;t know what he is trying to\u00c2\u00a0communicate. On the other hand, then the developers quite easily find\u00c2\u00a0themselves on a death-march project where it seems the customer keeps\u00c2\u00a0wanting more features for free.<\/p>\n<p>The unsaid, not written down expected parts of solutions are always there\u00c2\u00a0&#8211; they may be given for those knowledgeable in the domain, but probably\u00c2\u00a0aren&#8217;t for others.<\/p>\n<p>Anchoring terms in the conscience of anyone is dangerous if you want\u00c2\u00a0something completely different.<\/p>\n<p>Communication is difficult<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction For those who are not in the software development business, I have tried\u00c2\u00a0to create a parallel to an engineering task simple enough that most can\u00c2\u00a0see what some of the issues are. In this story we have a customer who wants to cross a river. He has seen\u00c2\u00a0other people using boats to cross the river, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-243","post","type-post","status-publish","format-standard","hentry","category-programming"],"_links":{"self":[{"href":"https:\/\/serverdude.dk\/index.php?rest_route=\/wp\/v2\/posts\/243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/serverdude.dk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/serverdude.dk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/serverdude.dk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/serverdude.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=243"}],"version-history":[{"count":1,"href":"https:\/\/serverdude.dk\/index.php?rest_route=\/wp\/v2\/posts\/243\/revisions"}],"predecessor-version":[{"id":248,"href":"https:\/\/serverdude.dk\/index.php?rest_route=\/wp\/v2\/posts\/243\/revisions\/248"}],"wp:attachment":[{"href":"https:\/\/serverdude.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=243"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/serverdude.dk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=243"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/serverdude.dk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}