{"id":929,"date":"2009-08-30T13:39:12","date_gmt":"2009-08-30T03:39:12","guid":{"rendered":"http:\/\/nsrd.wordpress.com\/?p=929"},"modified":"2009-08-30T13:39:12","modified_gmt":"2009-08-30T03:39:12","slug":"semi-aside-interesting-article-on-practical-heuristics","status":"publish","type":"post","link":"https:\/\/nsrd.info\/blog\/2009\/08\/30\/semi-aside-interesting-article-on-practical-heuristics\/","title":{"rendered":"(Semi) Aside \u2013 Interesting article on practical heuristics"},"content":{"rendered":"<p>Over at <a title=\"Daring Fireball\" href=\"http:\/\/daringfireball.net\" target=\"_blank\">Daring Fireball<\/a>, there&#8217;s a link at the moment to <a title=\"Heuristics and Human Factors\" href=\"http:\/\/wilshipley.com\/blog\/2009\/08\/pimp-my-code-part-16-heuristics-and.html\" target=\"_blank\">Wil Shipley&#8217;s article on implementing heuristics<\/a> within various applications he works on (Mac OS X), particularly focusing in this article on the human factors of heuristics.<\/p>\n<p>As a programmer and an author, I find the article interesting, because the lessons don&#8217;t just apply to the software Wil directly works on. Indeed, they don&#8217;t just apply to programming at all. Here&#8217;s an example &#8211; when I was writing my <a title=\"Enterprise Systems Backup and Recovery: A Corporate Insurance Policy\" href=\"http:\/\/www.enterprisesystemsbackup.com\" target=\"_blank\">book<\/a>, I was <em>constantly<\/em> wanting to come up with a method to reverse the core components. That is, the book title is &#8220;Enterprise Systems Backup and Recovery: A Corporate Insurance Policy&#8221;, but when you think about it, the <em>more important<\/em> activity, the activity that people will (or should) think of first, is <em>recovery<\/em>. That is, from a logical perspective, it would have been more appropriate to layout the book so that all the recovery concepts were covered first, being more important, before the backup concepts.<\/p>\n<p>From a &#8220;what the average reader will expect&#8221; perspective though, that doesn&#8217;t make sense, due to the chicken-and-egg nature of backup and recovery \u2013 you can&#8217;t recover without a backup, so you still need to introduce backup before recovery, even though backup is just the means towards the end.<\/p>\n<p>Similarly, programming I find is frequently a battle between:<\/p>\n<ul>\n<li>What is the <strong>easy<\/strong> thing to do<\/li>\n<li>What is the <strong>right<\/strong> thing to do<\/li>\n<\/ul>\n<p>Like all large pieces of software with years upon years of development processes (and for that matter, like all other enterprise backup software), NetWorker features a host of situations where heuristics have not been correctly applied; like the situation of the tail wagging the dog, we have several instances I can name off the top of my head where functionality has been implemented (or not, as the case may be) not because it&#8217;s the <strong>right<\/strong> thing to do, but because it&#8217;s the <strong>easy<\/strong> thing to do. Some of these are:<\/p>\n<ol>\n<li>No pool selection in the user backup GUI (winworkr, nwadmin).<\/li>\n<li>No inline cloning.<\/li>\n<li>Implementation of the jobs database in RAP format (RAP format is <em>hopelessly inadequate<\/em> for this task).<\/li>\n<li>No <a title=\"Personal NetWorker Wish list\" href=\"https:\/\/nsrd.info\/blog\/2009\/07\/01\/my-personal-networker-wish-list\/\" target=\"_blank\">proxying for nsrmmd<\/a> processes.<\/li>\n<li>The amount of time it took before comment fields were introduced to resources.<\/li>\n<li>The amount of time it took before pool based recycling was available.<\/li>\n<li><em>etc<\/em>.<\/li>\n<\/ol>\n<p>The challenge, moving forward for any company that wants to not only keep their product up to date but to offer compelling reasons for people to switch <em>to<\/em> it, is to start doing those hard things. There&#8217;s a very practical reason for this: the <em>hard<\/em> things are invariably the things where someone will compare the product against a competitor and say &#8220;but the competitor <em>does<\/em> do this&#8221;.<\/p>\n<p>Within reason, every time you take away a &#8220;the competitor <em>does<\/em> do this&#8221; argument, you make the product more compelling. One key way to achieve this, which few companies successfully do, is to take control of the company away from product engineering. Product engineering <em>should not control the direction of the product<\/em>. No ifs, no buts, no maybes. The key people at the heart of all decisions should of course be product <em>management<\/em>. Why? For the simple fact that product management are (or should be) tasked at understanding the reasons why something <em>should<\/em> be done, not the objections to <em>doing it<\/em>. (Other companies, for what it&#8217;s worth, suffer the problem of being run by sales people.)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over at Daring Fireball, there&#8217;s a link at the moment to Wil Shipley&#8217;s article on implementing heuristics within various applications&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[4],"tags":[433],"class_list":["post-929","post","type-post","status-publish","format-standard","hentry","category-aside","tag-heuristics"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/pKpIN-eZ","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/posts\/929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/comments?post=929"}],"version-history":[{"count":0,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/posts\/929\/revisions"}],"wp:attachment":[{"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/media?parent=929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/categories?post=929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nsrd.info\/blog\/wp-json\/wp\/v2\/tags?post=929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}