<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;DEcMSHc5eSp7ImA9WhBbF0Q.&quot;"><id>tag:blogger.com,1999:blog-21992362</id><updated>2013-05-17T18:38:09.921+05:30</updated><category term="microformats" /><category term="meta" /><category term="CloudCamp" /><category term="SaaS" /><category term="knowledge management" /><category term="appengine" /><category term="IT-in-India" /><category term="software_excellence" /><category term="books" /><category term="semantic web" /><category term="design" /><category term="organisation design" /><category term="agile-antipatterns" /><category term="organisation development" /><category term="devops" /><category term="usability" /><title>XPloring around</title><subtitle type="html">Sriram Narayan's blog on IT</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.sriramnarayan.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;orderby=published&amp;v=2" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/XploringAround" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="xploringaround" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DE8BQHs7eip7ImA9WhBbE0g.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-6866282017770268959</id><published>2013-03-31T17:56:00.000+05:30</published><updated>2013-05-12T16:37:31.502+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-12T16:37:31.502+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="organisation development" /><title>Mere uniformity does not make for consistency</title><content type="html">&lt;a href="http://2.bp.blogspot.com/-hZ5tAGCjBWY/UY9d6ujS-EI/AAAAAAAAARk/V8vtGExp1GQ/s1600/donald-norman-door2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://2.bp.blogspot.com/-hZ5tAGCjBWY/UY9d6ujS-EI/AAAAAAAAARk/V8vtGExp1GQ/s320/donald-norman-door2.png" width="320" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-w-TT43X4MTI/UY9d9wUoz6I/AAAAAAAAARs/E8K_49pu22I/s1600/donald-norman-door.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="205" src="http://1.bp.blogspot.com/-w-TT43X4MTI/UY9d9wUoz6I/AAAAAAAAARs/E8K_49pu22I/s320/donald-norman-door.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;We often play the consistency card in the support of an argument.&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;I want this UI (form) to be laid out this way for the sake of consistency.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;or&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Let's be consistent and use the corporate presentation template.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;or&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;I can't make an exception for you in case of this policy. We'll have to be consistent.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Used as above, consistency is an inappropriate substitute for &lt;i&gt;uniformity&lt;/i&gt;. To check, ask "consistency with what?"&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;I want this UI (form) to be laid out this way for the sake of consistency.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Consistency with what?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Consistency with the rest of the UI.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; You mean &lt;i&gt;uniformity&lt;/i&gt; with the rest of the UI?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Isn't it the same thing?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Well, laying it out this other way is &lt;i&gt;consistent&lt;/i&gt; with the aim of keeping&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; the user from making an incorrect assumption about the feature.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Let us all be consistent and use the corporate presentation template.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Consistent with what?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;With corporate guidelines of course.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Guidelines don't demand &lt;i&gt;uniformity&lt;/i&gt;. We could use our own templates as long as they are &lt;i&gt;consistent&lt;/i&gt; with the image we want to portray as a company.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;I can't make an exception for you in case of this policy. We'll have to be consistent.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Consistent with what?&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Consistent with the application of this policy.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; You mean you want to &lt;i&gt;uniformly&lt;/i&gt; enforce the letter of the policy on everyone? &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Well we certainly don't want to encourage exceptions.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; It seems you have already concluded that my case is an exception and one not worth granting.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Consistency is a 
higher order goal than mere uniformity. It requires some deliberation to
 decide if a certain course of action is consistent with broader 
objectives. On the other hand, uniformity is easily achieved by 
mechanical application of a rule book. This is what call center agents 
are trained to do. We know what the resulting user experience feels 
like. As Emerson said,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;"A foolish consistency is the hobgoblin of little minds".&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Why then, do we fall for this? Often, it is just laziness to listen and think. Sometimes (as in the case of call centers), it is side-effect of organisation design. Decision makers and policy makers sit on top of corporate hierarchies. They don't devolve discretionary powers to subordinates. The subordinates learn to function uniformly, without regard to context. They unconsciously cultivate a habit of using better sounding words like consistency to defend their actions. The makings of a classic bureaucracy!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/hRemXCH1G80" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2013/03/mere-uniformity-is-not-consistency.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/6866282017770268959?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/6866282017770268959?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2013/03/mere-uniformity-is-not-consistency.html" title="Mere uniformity does not make for consistency" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-hZ5tAGCjBWY/UY9d6ujS-EI/AAAAAAAAARk/V8vtGExp1GQ/s72-c/donald-norman-door2.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0EGRno-fSp7ImA9WhBWGE4.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-7529648172611493090</id><published>2012-10-12T09:33:00.000+05:30</published><updated>2013-04-13T11:10:27.455+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-13T11:10:27.455+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="devops" /><category scheme="http://www.blogger.com/atom/ns#" term="organisation design" /><title>Why continuous delivery needs devops, and why devops needs infrastructure-as-code</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;b&gt;&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Update 02-Apr-13&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Just came across this detailed relevant talk by &lt;/span&gt;&lt;b&gt;Reinertsen - &lt;/b&gt;the author I reference for silo reduction and batch size reduction.&lt;a class="editorlink f_taxonomyEditor" href="http://www.infoq.com/author/Don-Reinertsen;jsessionid=64DAC7480C6A7365BAEF70A101B1E065"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.infoq.com/presentations/lean-product-dev"&gt;http://www.infoq.com/presentations/lean-product-dev&lt;/a&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;===============================================&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/IAOmtBiKm94/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IAOmtBiKm94&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/IAOmtBiKm94&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Update 26-Oct-12&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;a href="http://www.sriramnarayan.com/c/continuous-delivery_devops_infrastructure-as-code.pdf"&gt;Slides&lt;/a&gt;, with &lt;a href="http://www.sriramnarayan.com/c/continuous-delivery_devops_infrastructure-as-code_notes.pdf"&gt;notes &lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;=========================&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;I'll present on this topic on 25th October 2012 as part of a ThoughtWorks Studios webinar &lt;a href="http://www.thoughtworks-studios.com/resources/agile-webinars" target="_blank"&gt;series&lt;/a&gt; on continuous delivery. &lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Please register from the &lt;a href="http://www.thoughtworks-studios.com/content/why-continuous-delivery-needs-devops-and-why-devops-needs-infrastructure-code"&gt;webinar page&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;Abstract&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Continuous
 delivery and devops have gone mainstream, at least in terms of 
mindshare. As a result, a lot of vendors have jumped onto the bandwagon.
 Most products that have anything to do with deployment now try to 
associate themselves with devops and continuous delivery. In this 
webinar, Sriram will try to clear the air in a product independent 
manner. He will also cover common devops anti-patterns and explain the 
idea of infrastructure as code.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/gQmjMBemHO4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2012/10/continuous-delivery-devops-infrastructure-as-code.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7529648172611493090?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7529648172611493090?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2012/10/continuous-delivery-devops-infrastructure-as-code.html" title="Why continuous delivery needs devops, and why devops needs infrastructure-as-code" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEEGSH0zcSp7ImA9WhJQE0Q.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-9223322196500900767</id><published>2012-07-27T19:13:00.001+05:30</published><updated>2012-07-27T19:13:49.389+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-27T19:13:49.389+05:30</app:edited><title>The economics of aesthetics</title><content type="html">&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Many will argue that it is just plain wrong to subject aesthetics to cost and benefit, at least until a certain threshold. Someone said, “An economist is someone who knows the price of everything and the value of nothing.”&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;But this is the reality of business. A product or service can be made just useful or it can be made useful and beautiful. As consumers, we frequently choose from varying degrees of form and function. However, things get more interesting in a B2B situation.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Clients agree to foot the bill for aesthetics to the extent it promises to help their topline. Funds are made available for aesthetics on a public facing website. The belt is tightened for an internal facing application. Vendors use the same logic. They spend money to make sure that their presentations are not only substantial but also aesthetic enough to impress clients.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;What about the people who write code? They also have a sense of aesthetics. Their bosses don’t grudge them the inexpensive effects – standard tools that can ensure uniform indentation, nice fonts and syntax highlighting. But higher order aesthetics are a different matter altogether.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;I mean lucid, performant code, fluent interfaces, pithy names, succinct tests and coherent classes residing in cohesive modules loosely coupled with their neighbours.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;“Don’t just call these aesthetics”, I hear the indignant coders say.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;“They confer vitality, suppleness, and longevity to the codebase.”&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;There is truth and perhaps some &lt;a href="http://blog.sriramnarayan.com/2012/07/the-irony-of-maintainable-code.html"&gt;irony&lt;/a&gt; to this claim. Unfortunately, even the truth is appreciated largely only by the coding intelligentsia. As a result, efforts to secure these higher order aesthetics go unchallenged only as long as the development team stays on track for budget and schedule. As Stewart Brand said, form follows funding.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;But estimates being estimates and competitive bids being competitive bids, there is many a slip between the cup and the lip. Screws get tightened,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;“Enough gold plating already.”&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Some will contend that effective visualization of internal software quality will bring about the necessary loosening of purse strings. Well, only occasionally. For one, a common (and sometimes legitimate) reaction is,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;“Why did you incur technical debt in the first place? That’s not why I hired expensive consultants like you.”&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;But first, there is the question what makes for effective visualization. Should we show a tangled ball of wool versus a neatly wound ball in order to contrast the current cyclomatic complexity with desired state? Should we progressively untangle the ball in progress reports? Is it not enough to state in text that the industry standard is about 20 per 100 hundred lines of code and that we are currently at 45?&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Should we depict a slummy urban sprawl for a monolithic codebase and gradually introduce suburbia with zoning as we modularize? Is it not enough to show a dependency structure matrix?&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;How accessible does a visual need to be before a non-technical/post-technical decision maker gets it? One kind of visual targets the recipient’s analytical faculty. Another kind targets their aesthetic faculty. Aesthetics are in vogue among consumer devices. I suspect this has spilt over to the &lt;a href="http://blog.sriramnarayan.com/2012/07/visualization-abuse.html"&gt;kind of visuals&lt;/a&gt; favoured by IT decision makers.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;They very people who scrutinize spend on aesthetics through the lens of the topline lean towards aesthetics when they ask their sub-ordinates and vendors to send them reports and presentations.&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/uTg4LZ0_jcQ" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2012/07/the-economics-of-aesthetics.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/9223322196500900767?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/9223322196500900767?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2012/07/the-economics-of-aesthetics.html" title="The economics of aesthetics" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUYNSHkzfSp7ImA9WhNUGUo.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-1980672466086090880</id><published>2012-07-27T19:09:00.003+05:30</published><updated>2013-01-12T13:23:19.785+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-12T13:23:19.785+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="organisation development" /><title>tl;dr and visualization abuse</title><content type="html">&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-indent: -18pt;"&gt;
&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;A picture (visual) is worth a thousand words when it is a photograph of the real world. Even in this case, an accompanying narrative can provide valuable context. It is sloppy to try to make sense of something without its context. When the picture (visual) in question is a mere illustration or graphic, the accompanying narrative becomes even more important. And yet, I see a trend of trying to make sense of the visual without providing, asking for or reading the narrative:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 9px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Archiving presentation slide decks in document repositories without a supporting narrative.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Demanding all sorts of reports in the form of presentations rather than the more traditional form of a document. Tradition makes sense sometimes.&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: 'Times New Roman'; font-size: 9px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Graphing all manner of metrics without any narrative that provides a context for the measurements.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;nbsp;&lt;/span&gt;&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Well argued supporting narratives are passé. I suspect this is an example of the &lt;a href="http://www.theshallowsbook.com/nicholascarr/Nicholas_Carrs_The_Shallows.html"&gt;Shallows&lt;/a&gt; effect. It has become fashionable to say &lt;/span&gt;&lt;/b&gt;&lt;span style="color: black; font-family: 'Times New Roman'; font-size: small; font-style: normal; font-variant: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;tl;dr&lt;/span&gt;&lt;/span&gt;&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Instead of introspecting if I have lost the ability to focus, I lull myself into believing that I have just run into a &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;wall of text&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;b&gt; -&lt;/b&gt; a newly minted pejorative for what used to be known more honourably until recent times as a &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;page of text&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. As a result, content creators fear that if their text is any longer than a tweet, it won’t be read. They have to make it &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: italic; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;interesting&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; with visual effects.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Instead of admitting my newly gained inability to parse a carefully constructed paragraph or argument full of nuances, I smugly proclaim myself a visual thinker. This is not to say &lt;/span&gt;&lt;a href="http://www.psychologytoday.com/blog/brain-workout/200903/can-you-solve-these-visual-thinking-puzzles"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;visual thinkers&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; don’t exist, just that the rate at which they seem to be proliferating is a little suspicious.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;One kind of visual targets the recipient’s analytical faculty. Another kind targets their aesthetic faculty. Aesthetics are in vogue among consumer devices. I suspect this has spilt over to the kind of visuals favoured by us. So we encounter graphs where a table would do, a 3-D visual where 2-D would do and only a visual where a paragraph is called for. The visual is no longer just a means to tap into the pattern recognizing, parallel processing prowess of the analytical brain, rather it is meant to catch the eye and increasingly, only the latter.&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/AK8VWY9vGsM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2012/07/visualization-abuse.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/1980672466086090880?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/1980672466086090880?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2012/07/visualization-abuse.html" title="tl;dr and visualization abuse" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D04NRXc4fyp7ImA9WhJQE0Q.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-268214830364412906</id><published>2012-07-27T19:03:00.000+05:30</published><updated>2012-07-27T19:03:14.937+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-27T19:03:14.937+05:30</app:edited><title>The irony of maintainable code</title><content type="html">&lt;div style="text-align: justify;"&gt;
&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-align: center;"&gt;
&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;b id="internal-source-marker_0.5933106252923608" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; color: black; font-family: 'Times New Roman'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Suppose there exists a lucid, performant, appropriately documented codebase with fluent interfaces, pithy names, succinct tests and coherent classes residing in cohesive modules loosely coupled with their neighbours. Is it maintainable? Very likely in theory, less so in practice.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Most often, this is simply because the maintainers are a different set of people than the creators. Also because of the way business finance works, &lt;/span&gt;&lt;a href="http://blog.sriramnarayan.com/2010/03/agile-maintenance-support-evolution.html"&gt;&lt;span style="background-color: transparent; color: #1155cc; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline; white-space: pre-wrap;"&gt;maintenance&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; is often the job of a less skilled set of people. Less skilled in the sense that they often have a problem with reading object oriented code. They are used to linear reading of procedural code and get disoriented by all the polymorphic jumping around. Ha! Speak of unintended consequences – object orientation leads to disorientation.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Less skilled also in the sense that they don’t appreciate unit tests as documentation, even when they attempt to read tests, they are put off by all the mocking. They don’t understand what the right granularity is for dependency injection and all the fuss over small classes and avoiding primitive obsession.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;So they don’t add/fix tests along with bug fixes and enhancements. The builds turns red and remains red. Continuous integration is forgotten. Soon there is no automated way to check against regression. No one attempts even small scale refactoring. The codebase is now unmaintainable by any definition.&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/Va0u3VK1tVw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2012/07/the-irony-of-maintainable-code.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/268214830364412906?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/268214830364412906?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2012/07/the-irony-of-maintainable-code.html" title="The irony of maintainable code" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUQCQHYzeyp7ImA9WhBREk0.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-7690089298498088087</id><published>2012-04-09T00:41:00.002+05:30</published><updated>2013-03-02T12:26:01.883+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-02T12:26:01.883+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="organisation development" /><title>How email shapes us... and how to get back into shape</title><content type="html">&lt;br /&gt;
&lt;div class="WordSection1"&gt;
In pre-email days, the inbox was physically separate from
the file cabinet. ‘Read’ items were carefully filed away or trashed. The inbox
was only meant for fresh arrivals. One didn’t attend to the inbox constantly.
Just once a day, maybe twice. People didn’t expect a two hour turnaround for
written correspondence. They just used the telephone for urgent matters. Corporate
announcements, bulletins, circulars were often stuck on notice boards. Every
employee didn’t have a copy of the notice thrust on his face in the middle of
the working day.&amp;nbsp; Communication, although
a part of work, was still considered distinct from actual work.&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Email has altered the balance of communication and actual
work. It was McLuhan who observed that technology shapes us even as we shape it.
How has email shaped us? &lt;/div&gt;
&lt;/div&gt;
&lt;div class="WordSection1"&gt;
&lt;b&gt;&lt;span style="font-family: Gabriola; font-size: 18pt; line-height: 115%;"&gt;The
inbox is the file cabinet&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="WordSection2"&gt;
&lt;div class="MsoNormal"&gt;
Say we decide to wrest control from the ever brimming
inbox. Check email only twice a day at fixed times, keep it closed otherwise,
let’s say. But no, closing our email clients (whether on the laptop, tablet or
mobile) also means locking our file cabinet. Thanks to multi-gigabyte inboxes
and terrific search algorithms, our email clients are also our file cabinets. And
we often need access to our file cabinets during the course of actual work.
There we go, looking at our inboxes again. Filters, rules, labels or folders
may help us avoid looking at what’s new but now we begin cutting against the
grain of the technology. To those who say “don’t blame the technology for your
lack of restraint”, think again - “technology isn’t &lt;a href="http://blog.sriramnarayan.com/2011/03/tools-arent-value-neutral.html"&gt;value neutral&lt;/a&gt;”.&amp;nbsp;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Email clients need to evolve, whether browser based or
otherwise. They need to provide a ‘go offline’ mode that gives us access to our
file cabinets but keeps the inbox away. It should also be possible to specify
our email checking times similar to how we already specify our working hours in
our calendars. Those eager for a response will be able to lookup these times. &lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Gabriola; font-size: 18pt; line-height: 115%;"&gt;By the
truckload, by the minute&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Because it is so cheap, we send and get loads of it. Never
mind spam, why have corporate notice boards disappeared? All sorts of corporate
announcements flood our inboxes through the working day. At the very least, corporates
should make it a rule to send announcements near close of business. But then
there is no suitable time for a global corporation. So it should be possible to
tag an email as a not-so-urgent announcement and have the email servers deliver
it near close of business as per the time zone of the receiver. Configurable
“delayed delivery” may work better than filters and rules.&lt;/div&gt;
&lt;b&gt;&lt;span style="color: #4f81bd; font-family: Gabriola; font-size: 18pt; line-height: 115%;"&gt;
&lt;/span&gt;&lt;/b&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Gabriola; font-size: 18pt; line-height: 115%;"&gt;A new
addiction&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Many managers and others spend a big part of their day
reading and writing email. Email notifications provide endless distraction for
those to choose to be notified of new email. New email provides a psychological
kick to many. Some get bored when there is no new email for half an hour. They
take a break if they see no new email. Less actual work, more communication,
most of it not addressed directly to the reader.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Gabriola; font-size: 18pt; line-height: 115%;"&gt;Frivolous
Documentation&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Email has bred a culture of excessive documentation. The
ability to easily get things on record has increased the tendency to do so.
This is another reason why people don’t use the telephone for not so important
but urgent matters. They write an email to put in on record and wait for a
quick reply, even if the recipient is only meters away. This needs to be
discouraged. Get them to use the phone. Cost need not be a hindrance. A global
corporation requires people to collaborate long distance in near real time.
Long distance telephony isn’t cheap but VOIP is.&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Gabriola; font-size: 18pt; line-height: 115%;"&gt;Privacy&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Vocal conversations can be overheard or may disturb others,
especially so in open plan layouts. Email affords privacy and doesn’t disturb. Fair
enough. &lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Gabriola; font-size: 18pt; line-height: 115%;"&gt;Of
luddites and of having access to the latest information&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
Am I a luddite for refusing access to real time updates, for
wanting to go offline? Communications technology is evolving rapidly. Embracing
all of it as good has unexpected and undesirable side effects. On the other
hand, is it just &lt;a href="http://www.roughtype.com/archives/2011/03/situational_ove.php"&gt;filter failure&lt;/a&gt;?. After all, would we want to miss a
relevant email in the midst of our work and then rework? To me, this sounds
like an insurance salesman. If we expect new email to have an immediate impact
on our work, wouldn’t we just choose to stay online for that piece of work? How
often does unexpected new email from the past couple of hours have an impact on
our work? Can some of these just-in-time scenarios be avoided by encouraging a
change of behaviour at the other end? &lt;/div&gt;
&lt;/div&gt;
&lt;span style="font-family: Gabriola; font-size: 14pt; line-height: 115%;"&gt;
&lt;/span&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style="font-family: Gabriola; font-size: 18pt; line-height: 115%;"&gt;Summary&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
As a reader of email,&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;
1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Let your colleagues, manager know that you only
check email twice a day. Publish your timings.&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;
2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Disable email notifications.&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpLast" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;
3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Ask your email vendor to support an offline mode
that screens new email from you (but lets you access old email) when you are
working.&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpLast" style="text-indent: -18pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
As a writer of email,&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l3 level1 lfo2; text-indent: -18.0pt;"&gt;
1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Don’t expect a two hour turnaround. Call if you
need a quick response.&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l3 level1 lfo2; text-indent: -18.0pt;"&gt;
2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Include just as many people as necessary in your
email. Don’t cc the whole department/team.&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpLast" style="mso-list: l3 level1 lfo2; text-indent: -18.0pt;"&gt;
3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Don’t send meeting invites without sufficient
notice (4 hours at least?)&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpLast" style="text-indent: -18pt;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
As a leader,&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l2 level1 lfo3; text-indent: -18.0pt;"&gt;
1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Encourage styles of working that don’t require
people to check email constantly&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l2 level1 lfo3; text-indent: -18.0pt;"&gt;
2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Encourage people to use VOIP and call their
colleagues for things that need a quick response rather than write email.&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpLast" style="mso-list: l2 level1 lfo3; text-indent: -18.0pt;"&gt;
3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Regulate the volume and timing of corporate
announcements into people’s inboxes.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
As a vendor of email software,&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l1 level1 lfo4; text-indent: -18.0pt;"&gt;
1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Allow people to specify their email checking
hours that others can look up.&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l1 level1 lfo4; text-indent: -18.0pt;"&gt;
2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Provide a ‘go offline’ button that screens new
email from the user until she is ready for it.&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l1 level1 lfo4; text-indent: -18.0pt;"&gt;
3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Provide options for delayed, time zone sensitive
delivery that lets corporates send announcements etc. without interrupting the
working day&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l1 level1 lfo4; text-indent: -18.0pt;"&gt;
4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Make notifications opt-in rather than opt-out&lt;/div&gt;
&lt;div class="MsoListParagraphCxSpLast" style="mso-list: l1 level1 lfo4; text-indent: -18.0pt;"&gt;
&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/KKr4pq2IvDk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2012/04/how-email-shapes-us.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7690089298498088087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7690089298498088087?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2012/04/how-email-shapes-us.html" title="How email shapes us... and how to get back into shape" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUMBR34-cSp7ImA9WhBREk0.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-3240094249280308267</id><published>2011-10-29T13:25:00.002+05:30</published><updated>2013-03-02T12:27:36.059+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-02T12:27:36.059+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="organisation development" /><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>Measurements and targets: The use and abuse of metrics</title><content type="html">Software development is a &lt;i&gt;social activity&lt;/i&gt;. As such, it does not lend itself very well to measurements. Sure, we can measure a whole lot of things about software development but we can never contend that a given set of metrics is exhaustive.&amp;nbsp; Plus, it is costly to regularly measure and track too many things. So, we restrict ourselves to a subset of feasible measurements.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-BuebXfA-FC0/Tquw5uK-zTI/AAAAAAAAAMs/YU6nvZOlaf4/s1600/metrics.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-BuebXfA-FC0/Tquw5uK-zTI/AAAAAAAAAMs/YU6nvZOlaf4/s400/metrics.jpg" width="375" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;table align="left" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td height="9" width="30"&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;
&lt;br /&gt;
For instance, although return on investment is a useful metric, it is often not feasible to measure and track it for a piece of software. Thus, in practice, we settle for things that &lt;i style="mso-bidi-font-style: normal;"&gt;only paint part of the picture&lt;/i&gt;. It is important to acknowledge this. Often, enterprise IT loses sight of this truth. It deludes itself that the reported metrics constitute the big picture (From the school of “If you can’t measure it, it doesn’t exist.”).&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
What is worse, in the name of continuous improvement, these metrics are converted into targets. Teams now have an incentive to work towards local optima. No wonder large swathes of big enterprise IT are in a desperate mess. New causes of failure are discovered all the time. Heads roll and the new heads track a slightly different subset of metrics.&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
Automatically converting metrics to targets also has adverse psychological effects. Here is an example from day trading. What is more important? Making more winning trades than losing trades or making money? Obviously it is the second. But the moment you start tracking win-loss ratio it may become a target it itself. Emotional conditioning will also come into play and we will try to have less losing trades.&lt;br /&gt;
&lt;br /&gt;
A software team can get severely constrained 
when a velocity target is imposed on it. At a certain threshold of 
constraints, team members lose a sense of empowerment. They play it 
completely safe and lose initiative. We experience this phenomenon 
sometimes when we deal with call centres. Government sponsored 
healthcare and education in western economies often exhibits similar 
characteristics. It is not just bureaucracy. In an effort to scale and 
centrally control efficient delivery of services, a raft of metrics is 
imposed on the practitioners. Performance of schools/hospitals is then 
tracked against these metrics (they now become targets). Teachers and 
doctors get frustrated, lose initiative and just play by the book much 
to the exasperation of parents and patients.&lt;br /&gt;
&lt;br /&gt;
This effect is also known as &lt;a href="http://en.wikipedia.org/wiki/Goodhart%27s_law"&gt;Goodhart's law&lt;/a&gt;, after Professor Charles Goodhart who was Chief Adviser to the Bank of England. Restated more succinctly and more generally:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
When a measure becomes a target, it ceases to be a good measure.&lt;/blockquote&gt;
Measurements should &lt;i&gt;not&lt;/i&gt; automatically become targets. When measurements indicate something is wrong, it calls for a &lt;i&gt;conversation in context&lt;/i&gt;, not for a rating downgrade. Conversations in context may reveal that &lt;i&gt;things are still ok in the larger scheme of things, the measurements only point to a local sub-optima&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Trouble is, it is easy to scale management by numbers. It is very difficult to scale management by context. Perhaps it is worth asking if scaling is more important than delivering a quality experience. Besides, too much scale creates “too big to fail” monsters that have to bailed out with the money of the innocent in times of crisis. This is not just true of macroeconomics. It is true of macro IT as well.&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/OLuTFCT34ak" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2011/10/measurements-and-targets-use-and-abuse.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/3240094249280308267?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/3240094249280308267?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2011/10/measurements-and-targets-use-and-abuse.html" title="Measurements and targets: The use and abuse of metrics" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-BuebXfA-FC0/Tquw5uK-zTI/AAAAAAAAAMs/YU6nvZOlaf4/s72-c/metrics.jpg" height="72" width="72" /><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;CkUMR3w6fyp7ImA9WhJXFk0.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-5615973194113963165</id><published>2011-04-11T21:30:00.000+05:30</published><updated>2012-08-10T17:34:46.217+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-10T17:34:46.217+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software_excellence" /><title>Dashboards promote ignorance</title><content type="html">It is possible to collect a wide range of metrics on a project. Metrics about the codebase, unit tests, performance tests, build, delivery progress etc. It is also possible to define&amp;nbsp; red, amber, green thresholds for each metric. Some go for standardized organization wide thresholds while others are comfortable with project specific ones. The obvious next step is to create a dashboard that rolls up all these metrics into a single red, amber, green project status indicator. Middle managers spend a good part of their life managing inputs to these dashboards. Some "programme managers" assiduously refer to their dashboards as &lt;a href="http://www.information-management.com/news/10001076-1.html?zkPrintable=true"&gt;balanced scorecards&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Trouble is, most of the time, an overall green status indicator doesn't mean anything. All it says is that the things under measurment seem ok. But there always will be many more things not under measurement. To celebrate 'green' indicators is to ignore the unknowns. &lt;i&gt;The value of a metric is not when it is green&lt;/i&gt;. Lets take unit test coverage for example. Is 100% test coverage a cause for celebration? What if most tests don't have any assertions? When measurements become &lt;a href="http://blog.sriramnarayan.com/2011/10/measurements-and-targets-use-and-abuse.html"&gt;targets&lt;/a&gt;, they encourage gaming. On the other hand, a coverage of 50% at least tells you unambiguously that half the code is not covered (or there is an error in measurement). &lt;br /&gt;
&lt;br /&gt;
One may argue that it is only a matter of measuring even more so that the overall green becomes truly indicative of overall project health. This is somewhat unrealistic in a fast paced knowledge work environment. Tools and technologies keep changing. Measurement tools don't keep pace. It takes significant effort to maintain the measurement infrastructure on a project.&lt;br /&gt;
&lt;br /&gt;
Avoiding subjectivity in assessments is also cited as a reason for resorting to metrics. But that's like saying that a person can be certified healthy without the judgement of a physician by a dashboard that rolls up a hundred diagnostic tests. &lt;br /&gt;
&lt;br /&gt;
In my experience, &lt;i&gt;metrics are much more useful when they report bad news&lt;/i&gt; than when they are green. In the words of the &lt;a href="http://www.agitar.com/downloads/TheWayOfTestivus.pdf"&gt;Way of Testivus&lt;/a&gt;, "Good tests fail". Unfortunately, the tendency to roll up metrics into dashboards promotes ignorance. We forget that we are only see what is under measurement. We only act when something is not green. &lt;br /&gt;
&lt;br /&gt;
Then comes the final argument. Don't blame the tool for human laxity. Dashboards cannot promote ignorance or even wisdom. Unfortunately, &lt;a href="http://blog.sriramnarayan.com/2011/03/tools-arent-value-neutral.html"&gt;tools aren't value neutral&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/sgEqlr7wj2M" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2011/04/dashboards-promote-ignorance.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/5615973194113963165?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/5615973194113963165?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2011/04/dashboards-promote-ignorance.html" title="Dashboards promote ignorance" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;DUIMRno9eCp7ImA9WhBREk0.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-3870812460423884520</id><published>2011-03-16T17:16:00.002+05:30</published><updated>2013-03-02T12:29:47.460+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-02T12:29:47.460+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="organisation development" /><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>Tools aren't value neutral</title><content type="html">&lt;span id="internal-source-marker_0.7017041532658942" style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;It is accepted that language influences the way we think&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 6.6pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: super;"&gt;1&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;. Language is one of the earliest technologies of communication. We don't have to make a big leap to see that all tools and technologies influence the way we think and act&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 6.6pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: super;"&gt;2&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Therefore, it is erroneous to say things like the following:&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;“The internet isn’t a pro or anti-democratic technology. It is value neutral”&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;or &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;“Powerpoint isn’t good or bad. It is how you use it.”&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;McLuhan understood this very well. He famously said:&lt;/span&gt;&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;“We shape our tools, and thereafter our tools shape us...Our  conventional response to all media, namely that it is how they are used  that counts, is the numb stance of the technological idiot.”&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Why am I writing this in the middle of posts on software excellence? Because I need this for my forthcoming posts :)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;1. Language influences the way we think&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.edge.org/3rd_culture/boroditsky09/boroditsky09_index.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;"&gt;http://www.edge.org/3rd_culture/boroditsky09/boroditsky09_index.html&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Language-Thought-Action-S-I-Hayakawa/dp/0156482401"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;"&gt;http://www.amazon.com/Language-Thought-Action-S-I-Hayakawa/dp/0156482401&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;2. Tools (and technologies) influence the way we act&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Understanding-Media-Extensions-Marshall-McLuhan/dp/0262631598"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;"&gt;http://www.amazon.com/Understanding-Media-Extensions-Marshall-McLuhan/dp/0262631598&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://www.amazon.com/Shallows-What-Internet-Doing-Brains/dp/0393072223"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;"&gt;http://www.amazon.com/Shallows-What-Internet-Doing-Brains/dp/0393072223&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/ezWpC4nLsX0" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2011/03/tools-arent-value-neutral.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/3870812460423884520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/3870812460423884520?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2011/03/tools-arent-value-neutral.html" title="Tools aren't value neutral" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUUASHo9eip7ImA9WhZTEU0.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-8549969508982399008</id><published>2011-03-14T18:22:00.002+05:30</published><updated>2011-03-14T18:24:09.462+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-14T18:24:09.462+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software_excellence" /><title>Build time impacts team performance</title><content type="html">&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Velocity often grabs a lot of managerial attention on a project. But while velocity is the effect, build time is a common cause. A slow build has several insidious side effects. Say a build takes 20 minutes:&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;table style="border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial;"&gt;&lt;colgroup&gt;&lt;col width="82"&gt;&lt;/col&gt;&lt;col width="542"&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;10:00am&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;My pair and I work for the day by doing a fresh checkout and initiating a local build. 20 minutes to kill? Maybe check email etc, talk to analyst about my story, take a coffee break. OK, build passes.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;10:20am&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Work begins. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;10:50am&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We are ready for checkin. Oh no, we can't wait for a 20 minute build every half hour can we? There goes the motivation for frequent checkins. &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;We decide to develop locally for another hour at least before trying a checkin&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Signs of discontinuity in continuous integration!&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;12:00pm&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Ready for checkin again. Run local build. &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;12:20pm&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;oops. Build broke. Our code broke some old test. Good catch by the test suite!&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;12:30pm&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Attempt another build after fixing the code.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;12:50pm&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Build passed! Now we just need to check once again after merging with latest code from the repository. Is the build green? Yes. Safe to checkout from repository. We checkout, couple of auto-merges, no conflicts. One more local build and we are good to go.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height: 0px;"&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;1:10pm&lt;/span&gt;&lt;/td&gt;&lt;td style="border-bottom-color: rgb(170, 170, 170); border-bottom-style: dotted; border-bottom-width: 1px; border-left-color: rgb(170, 170, 170); border-left-style: dotted; border-left-width: 1px; border-right-color: rgb(170, 170, 170); border-right-style: dotted; border-right-width: 1px; border-top-color: rgb(170, 170, 170); border-top-style: dotted; border-top-width: 1px; padding-bottom: 7px; padding-left: 7px; padding-right: 7px; padding-top: 7px; vertical-align: top;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Local build passed. We are about to checkin when we notice that the build is yellow. &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Darn, someone just checked in&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Now we have to wait for the build to go green, then checkout and build locally again before we checkin.&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Anything short of this rigour leaves a window open for build failure on the CI server. But hey, surely you can't expect us to play the waiting game indefinitely. What if someone checks in again while we are diligently verifying locally? Besides its time for lunch. So we gamble and checkout. No conflicts or even auto-merges. Good sign. &lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: italic; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;It isn't worth building locally again. &amp;nbsp;We checkin and go for lunch&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Halfway through lunch, I get a call. &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"@#$!, why did you checkin while the build was still running?"&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Why what happened? Don't tell me your build didn't go through"&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Yes it didn't and now I am having trouble fixing it on top of your changes"&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As build time increases, it tests my patience as a developer. I am tempted to take shortcuts that occasionally backfire. When this becomes standard team behaviour, the occasional turns into regular. Secondly, it increases the syncing window (12:50pm to 1:10pm above). This window is at least equal to build time. Greater this window, greater the chance that someone else might check in while I am still getting ready.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Now what if the build time were five minutes instead? There is much less waiting time associated with frequent bite sized checkins. So it encourages frequent checkins. This in turn reduces the likelihood of merge conflicts when I sync with trunk. Finally, if someone else does check in during my syncing window, I only have to wait five more minutes to see if it goes green.&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In summary, everything else constant, team performance correlates well with build time.&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 14pt; font-style: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;So what to do?&lt;/span&gt;&lt;/h3&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Keeping a build fast is a topic by itself. Basically try to keep the unit tests fast. At an average of 20 millisecs per unit tests, we can run 5000 tests in 100 secs (just under 2 minutes). &amp;nbsp;Avoid all I/O in unit tests. If you must have some unit tests that do I/O, keep them in the next stage of your build pipeline. Don’t write unit tests that exercise a lot of code. They aren’t unit tests if they do. &amp;nbsp;As a manager, be very concerned if you see build time going up steadily.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/9bDeuEumZF8" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2011/03/build-time-impacts-team-performance.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/8549969508982399008?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/8549969508982399008?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2011/03/build-time-impacts-team-performance.html" title="Build time impacts team performance" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DUQCRHg-eyp7ImA9WhZTEU0.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-247730258895873205</id><published>2010-08-17T16:59:00.003+05:30</published><updated>2011-03-14T18:26:05.653+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-14T18:26:05.653+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="software_excellence" /><title>The point of Object Orientation</title><content type="html">&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_P8pGGPoTKzo/TULU6zBJAbI/AAAAAAAAAMA/BMElKaJ6ibU/s1600/transaction_script_cost_escalation.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="301" src="http://3.bp.blogspot.com/_P8pGGPoTKzo/TULU6zBJAbI/AAAAAAAAAMA/BMElKaJ6ibU/s400/transaction_script_cost_escalation.png" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Transaction script cost escalation&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;A  common characteristic of large codebases is that it takes  disproportionate effort to add or extend functionality. Couple of common  reasons:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;&lt;li style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Hamstrung  team - The original developers may have moved on, development beyond  the first release may have been transferred to a less capable team or  handover may have been ineffective.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Poor codebase - Test quality and coverage may be lacking, encapsulation may be broken, &amp;nbsp;or the build may be inordinately long.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Bad  encapsulation is a common culprit. All too often, OO-capable languages  like Java and C# are used to author transaction script&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 6.6pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: super;"&gt;1&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;  applications. The business logic is use case driven rather than domain  driven. Use case driven code is characterized by global code acting on  global data. Well encapsulated codebases, on the other hand, consist of collaborating objects, each object encapsulating its local data and behaviour.&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_P8pGGPoTKzo/TGpyIJNkmEI/AAAAAAAAALk/BHdBBAqs-zk/s1600/point_of_oo.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="353" src="http://1.bp.blogspot.com/_P8pGGPoTKzo/TGpyIJNkmEI/AAAAAAAAALk/BHdBBAqs-zk/s640/point_of_oo.PNG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;For  a typical business app, everything else remaining constant, good  encapsulation will lead to constant or decreasing delta effort for delta  functionality. The point of object orientation is that it is meant to  help manage complexity of the business domain. This can only happen when  we encapsulate along the grain&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 6.6pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: super;"&gt;2&lt;/span&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt; of the domain. &lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;1:&lt;/span&gt;&lt;a href="http://martinfowler.com/eaaCatalog/transactionScript.html"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;"&gt;http://martinfowler.com/eaaCatalog/transactionScript.html&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;2:&lt;/span&gt;&lt;a href="http://www.threeriversinstitute.org/Cutting%20with%20the%20Grain.pdf"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;"&gt;Cutting with the grain: the rhythms of design - Kent Beck&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; color: black; font-family: Georgia; font-size: 11pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/GzjQ8KvG7NY" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/08/point-of-object-orientation.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/247730258895873205?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/247730258895873205?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/08/point-of-object-orientation.html" title="The point of Object Orientation" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_P8pGGPoTKzo/TULU6zBJAbI/AAAAAAAAAMA/BMElKaJ6ibU/s72-c/transaction_script_cost_escalation.png" height="72" width="72" /><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;DU8HRXg5eCp7ImA9WxFRGE0.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-8649552271385514599</id><published>2010-05-02T19:13:00.000+05:30</published><updated>2010-05-02T19:13:54.620+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-02T19:13:54.620+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile-antipatterns" /><title>Agile anti-pattern summary</title><content type="html">Here is a summary of anti-patterns I have written about so far:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.sriramnarayan.com/2010/02/pointless-agile-estimation.html"&gt;When Agile Estimation becomes pointless &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.sriramnarayan.com/2010/02/fail-fast.html"&gt;Not failing fast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.sriramnarayan.com/2010/02/label-activities-not-people.html"&gt;Labeling people instead of activities&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.sriramnarayan.com/2010/03/pair-programming-payoff.html"&gt;Cost-ineffective pair programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.sriramnarayan.com/2010/03/agile-maintenance-support-evolution.html"&gt;Agile Maintenance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.sriramnarayan.com/2010/03/how-to-do-xyz-in-agile.html"&gt;How to do XYZ in Agile?&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/4qJzCDVq_CU" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/05/agile-anti-pattern-summary.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/8649552271385514599?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/8649552271385514599?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/05/agile-anti-pattern-summary.html" title="Agile anti-pattern summary" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0YHSXY6fSp7ImA9WhNUGUs.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-8946213597292462872</id><published>2010-03-24T14:18:00.003+05:30</published><updated>2013-01-12T11:08:58.815+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-12T11:08:58.815+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="organisation development" /><category scheme="http://www.blogger.com/atom/ns#" term="agile-antipatterns" /><title>How to do XYZ in Agile?</title><content type="html">&lt;div&gt;
&lt;br /&gt;
Clients sometimes ask, "How do you do estimation in Agile?" or, in general "How do you do XYZ in Agile?". Typically, they are people making a transition from non-Agile methods. They often (understandably) want to hold on to some existing ways of functioning. They would like to blend Agile into their existing processes. There is a problem here. To be agile is not about following a different set of prescribed processes or practices. The only things that matter are:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Continuous delivery of valuable functionality&lt;/li&gt;
&lt;li&gt;Happy team (team includes client)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
The agile manifesto starts off by saying:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;
We are uncovering better ways of developing&lt;br /&gt;
software &lt;i&gt;by doing it&lt;/i&gt; and helping others do it.&lt;br /&gt;
&lt;/div&gt;
The practices codified under XP (or Scrum) is just documentation of how a bunch of practitioners were able to achieve continuous delivery and happy team. The question, "How do you do XYZ in Agile?" misses the point. It is a relic of a process conformance mentality. What's more, I was once asked, "Is it ok to ask for a number of tailorings or deviations from the master process template for agile?" I was speechless. Turned out that the organization still retained the services of a group called SEPG (software engineering process group, a relic of CMM) to define a master process template for agile. Every project was supposed to conform to the template and ask approval for tailorings (tweaking a process/practice) or deviations (omitting a process/practice)!&lt;br /&gt;
&lt;br /&gt;
If you are achieving continuous delivery and happy team, you are obviously doing something right. It doesn't matter how Agile it is. If you aren't achieving continuous delivery and happy team then again it doesn't matter how Agile your processes are. One might argue that this is watered-down agile. Big deal. Granted, it is definitely wise to go by the book first. It is arrogant/foolish to assume that we are smarter than the book before we begin. After all, the book represents distilled wisdom of practitioners. But it is important to keep an eye on the outcomes. All advice is contextual. It is no use wailing that you have done everything by the book and arem't getting results. It is dogma to stick to the book in the face of contrary results.&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/KwkpGnFVIaw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/03/how-to-do-xyz-in-agile.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/8946213597292462872?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/8946213597292462872?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/03/how-to-do-xyz-in-agile.html" title="How to do XYZ in Agile?" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0IESHc-eyp7ImA9WxBbF0w.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-2573791314803665153</id><published>2010-03-15T13:13:00.003+05:30</published><updated>2010-03-16T10:28:29.953+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-16T10:28:29.953+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile-antipatterns" /><title>Agile maintenance in a devops world</title><content type="html">"What is an agile way of doing maintenance projects?", is a common question. An answer like the following is par for the course:&lt;br /&gt;
"It isn't very different from development projects. Write tests to reproduce bugs before you fix them. Treat enhancements as one or more stories. Keep the CI server running. Make sure that changes are occasionally merged from the maintenance branch into trunk. Pairing is probably not as important."&lt;br /&gt;
&lt;br /&gt;
In the context of this post, a 'maintenance' project is one where a client outsources ongoing bug-fixes and enhancements for a live application to an IT vendor (often offshore). Conventional wisdom has it that development is investment (capex) and maintenance is cost (opex). Hence, clients look for much lower billing rates when it comes to maintenance. This results in separate contracts/teams/vendors for development and maintenance. Some clients go a step further and outsource even IT operations to a different team/vendor under a separate contract. The rationale is to stick to core 'business competency' and outsource everything else (let them vendors compete with each other for our slice of IT).&lt;br /&gt;
&lt;br /&gt;
Depending on how critical the said application is for revenue generation, this strategy of 'divide-and-conquer-IT' can be frustrating at best and suicidal at worst. The best of the businesses that make most of their money off their websites outsource little to none of their IT. This is simply because you cannot go to market fast enough if you have to orchestrate between three teams/vendors for every new feature. Equally importantly, the feedback loop gets badly constricted at contractual boundaries. Designing formal, SLA driven protocols of communication between business, development, operations and maintenance is a recipe for bureaucracy and indifference.&lt;br /&gt;
&lt;br /&gt;
Not everyone can afford not to outsource. It is very difficult to put a good IT team in place. A lot of outsourcing has been a reaction to uncooperative in-house IT. But the solution has gone overboard in trying to compartmentalize development, operations and maintenance. You don't want to be overly reliant on a single vendor? Fair enough, consider outsourcing product A to vendor X, B to vendor Y and C to vendor Z. This is better than outsourcing the development of A, B, C to vendor X, operations to vendor Y and maintenance to vendor Z. The latter model requires well defined, stable interfaces between different constituencies. Not suitable where business is changing every week. It is a repeat of the &lt;a href="http://dahliabock.wordpress.com/2009/08/06/why-i-think-layer-teams-are-a-bad-idea/" id="uaek" title="layered-team"&gt;layered-team&lt;/a&gt; anti-pattern at a higher level.&lt;br /&gt;
&lt;br /&gt;
What if we want to deliver a grand SOA? Once the team of architects have specified every service, surely it should be possible to outsource a bunch of services to different vendors and the consuming applications to yet others. Splitting up integration work is extremely risky, in my opinion. Service contracts are rarely cast in stone. On the contrary, if you like the idea of evolutionary, guerrilla SOA, you no longer plan to have stable interfaces - the service evolves in tandem with the needs of its consumers. So, try to give all integration work and important applications to your primary vendor. Better yet, don't do big bang top down integration. Evolve bottom up.&lt;br /&gt;
&lt;br /&gt;
On the other hand, it may be that your business doesn't change that often or your application doesn't generate revenue. If so, it is useful to ask "Why build? Why not buy?" every once in a while. SaaS is growing fast. It is likely that someone is offering your bespoke application as a service. At the cost of some tweaks to your business process, you might end up with a better application at lower cost. The SaaS vendor in turn is likely running a full in-house IT.&lt;br /&gt;
&lt;br /&gt;
The world has changed yet again. &lt;a href="http://www.kartar.net/2010/02/what-devops-means-to-me/" id="eicj" title="Devops"&gt;Devops&lt;/a&gt; is &lt;a href="http://www.devopsdays.org/" id="j89y" title="gaining"&gt;gaining&lt;/a&gt; currency. These days, a common way of testing the uptake of new features is to divert, say 5% of your traffic to a new deployment and see how it goes. A separate maintenance team is a dinosaur in an age of frequent deployment (&lt;a href="http://martinfowler.com/bliki/BlueGreenDeployment.html" id="p98n" title="blue-green"&gt;blue-green&lt;/a&gt; or otherwise) and &lt;a href="http://continuousdelivery.com/2010/02/continuous-delivery/#more-61" id="avvu" title="continuous delivery"&gt;continuous delivery&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Q. What is an agile way of doing maintenance projects?&lt;br /&gt;
A. Don't do maintenance as a separate project.&lt;br /&gt;
&lt;br /&gt;
There is one situation where a maintenance project might make sense. End-of-life support. Basically, you pay for a team to keep an old app running while a new replacement gets built. Other than that, it is all about breaking down silos.&lt;br /&gt;
&lt;br /&gt;
Of course, you will never hear Indian IT majors singing this tune. Their recruitment and business model is based on economies of scale. 'Changing businesses' are anathema to their ossified processes. However, in response to changing realities of the marketplace, some of them have begun to sing an agile tune. Some of them even claim to have proprietary, hybrid, high-performance methodologies that "synergize best of breed practices from CMMi, ISO, Six Sigma and Scrum". I'll explore a certain aspect of this 'synergy' in my next post.&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/9SwlaqwETDw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/03/agile-maintenance-support-evolution.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/2573791314803665153?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/2573791314803665153?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/03/agile-maintenance-support-evolution.html" title="Agile maintenance in a devops world" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;D0QCRHc6eip7ImA9WxBUGUs.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-113743870613045579</id><published>2010-03-04T12:49:00.004+05:30</published><updated>2010-03-07T18:06:05.912+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-07T18:06:05.912+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile-antipatterns" /><title>Pair Programming Payoff</title><content type="html">&lt;div style="text-align: justify;"&gt;For a project that runs for, say six months or more, there should no extra development cost on account of pair programming. Period. If there is extra cost, it means pairing is not paying off for you. Pairing should pay off in the following difficult-to-measure ways:&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Lesser rework during development on account of misunderstood/ill-defined requirements. These things surface quickly when pairs talk to each other.&lt;/li&gt;
&lt;li&gt;Slight reduction in maintenance cost on account of clearer code. Because every line is now considered readable by at least two people. (more in case of pair rotation)&lt;/li&gt;
&lt;li&gt;A better detail level design results when each pair acts as a sounding board for the other. Good design reduces cost of future change.&lt;/li&gt;
&lt;li&gt;Faster/better process of bringing new team members up to speed.&lt;/li&gt;
&lt;li&gt;Lesser impact of people taking vacations.&lt;/li&gt;
&lt;li&gt;Lesser bugs in QA, UAT&lt;/li&gt;
&lt;li&gt;More hours of focused work per day - however professional someone may be it is natural for concentration to wax and wane. Pairing almost always helps here.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Unlike the case of no-pairing, there is no separate code-review activity required&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;How do you figure if there is extra cost? Estimate both ways. The total 'release-lifecycle effort' for the case of pairing should not exceed that of no-pairing. Individual stories may indicate greater effort but that is okay. It is very difficult to do controlled experiments to nail this down. There are some &lt;a href="http://scholar.google.com/scholar?q=pair+programming+study&amp;amp;hl=en&amp;amp;safe=off&amp;amp;esrch=BetaShortcuts&amp;amp;um=1&amp;amp;ie=UTF-8&amp;amp;oi=scholart" id="npxf" title="studies"&gt;studies&lt;/a&gt; but your mileage may vary. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A word of caution when estimating for such comparisons. Remember that on all real projects, actuals mostly exceed estimates. Some of the difference is borne by the client (change control etc) and the rest by the vendor (unpaid overtime etc). You need to have a realistic idea of effort overrun for the case of no-pairing to be able to compare it with the overrun for the case of pairing.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;If pairing is resulting in net higher development cost on a long running project, then it simply means (to paraphrase Kent Beck) that the client is getting XP'd on :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/lduBmsaNZ8g" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/03/pair-programming-payoff.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/113743870613045579?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/113743870613045579?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/03/pair-programming-payoff.html" title="Pair Programming Payoff" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DEMNR3s9fCp7ImA9WxBUFEw.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-8042753315652832283</id><published>2010-02-25T12:19:00.003+05:30</published><updated>2010-03-01T09:38:16.564+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-01T09:38:16.564+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile-antipatterns" /><title>Label activities, not people</title><content type="html">Ideally, an XP team consists of all talented and experienced people. Every person is assumed to have good communication skills, technical skills, ability to analyze and synthesize, understanding of business drivers, ability to make trade-offs based on business constraints and the ability to work as part of a team. Indeed, there probably are thousands of people who qualify on all these counts scattered around the world. But IT is a pervasive beast. It touches almost every aspect of modern business. IT is also labor intensive. The demand for really good people outstrips supply by a factor of hundred if not more.&amp;nbsp; IT vendors who practice XP are therefore forced to move away from the ideal of more or less homogeneous poly-skilled teams.&lt;br /&gt;
&lt;br /&gt;
Instead, we hire people who have a subset of the above skills and assign them to specific roles in a team. So we have roles like developer, analyst, QA, manager, UX dude/dudette etc. It is essential to recognize that this arrangement is a departure from the ideal - a compromise driven by market reality. How we look at roles depends on our model of the ideal world. If you agree with the XP ideal, then roles are labels attached to the activities on a project. e.g. performance tuning activity needs developer role, activity of scope negotiation needs manager role.&lt;br /&gt;
&lt;br /&gt;
But all too often, we lose sight of the ideal and think of roles as labels attached to the people on a project. e.g. person A is a manager, anything she says outside her labeled area of competency should be taken with a pinch of salt, person B is a developer, anything she says outside her labeled area of competency should be taken with a pinch of salt, and so on. We forget that the labeled area of competency is merely a mutual agreement at the time of recruitment. We end up discounting the credibility of people outside their labeled domains.&lt;br /&gt;
&lt;br /&gt;
This kind of thinking also magnifies capacity constraints in a team. Say we have 4 people with label QA and 12 people with label developer on a team. What happens when stories start piling up in QA? We are less likely to see if some developers can add temporary capacity to QA. Oh no, that would never do. Developers can't test. They are not wired to test. Mass stereotyping sets in.&lt;br /&gt;
&lt;br /&gt;
Soon people start buying into their labels. Developers refuse to test. If you can communicate well, you are suspect as a developer. Managers shy away from writing code, or (shudder) gaining even basic user level technical competence. They go about saying "I can't handle technology", as if it were a feather in their cap. We become more and more entrenched in the silos created by our labels. Truly ploy-skilled people get disheartened in the process. A person with a label of analyst may have a great aptitude for domain modeling. But her inputs may be sidelined by developers. After a while she either starts believing in her artificial limitations or she starts looking for another job where her skills are more broadly appreciated.&lt;br /&gt;
&lt;br /&gt;
It is no good to call everyone consultant and then use a different labeling scheme when it comes to staffing projects. To the extent of their skills, people should get to play multiple roles within a single project. Oh, that complicates staffing. So? Should the tail wag the dog?&lt;br /&gt;
&lt;br /&gt;
Organized religion came about partly as a result of our need for identity and self-worth. It is probably reassuring to say "I belong to this group" and then move on to thinking "My group is better than the other group". We may have outgrown traditional organized religion but we seem to be falling for newer versions.&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/0BIUEfFlJXk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/02/label-activities-not-people.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/8042753315652832283?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/8042753315652832283?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/02/label-activities-not-people.html" title="Label activities, not people" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>11</thr:total></entry><entry gd:etag="W/&quot;A0ICSHY_eCp7ImA9WxBWGUo.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-5577962110218818424</id><published>2010-02-12T16:20:00.005+05:30</published><updated>2010-02-12T18:29:29.840+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-12T18:29:29.840+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile-antipatterns" /><title>Fail fast</title><content type="html">When failure is a possibility, design to fail fast rather than slowly. Doing so reduces the cost/impact of failure. What is equally important, failing fast makes further attempts feasible. Learning from previous failures makes future attempts more likely to succeed. This principle is widely applicable in software development:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Methodologies that have fail fast mechanisms baked in are more likely to generate greater ROI. More on this later.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.infoq.com/interviews/jim-webber-qcon-london" id="uc1f" title="Guerilla SOA"&gt;Guerilla SOA&lt;/a&gt; is arguably a fail fast take on big up-front SOA.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.martinfowler.com/ieeeSoftware/failFast.pdf" id="q93d" title="Fail fast in code"&gt;Code&lt;/a&gt; that is written to fail fast is likely to be more reliable in production.&lt;/li&gt;
&lt;li&gt;Small, frequent check-ins are likely to cause less overall rework than big, infrequent ones.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;h4&gt;Verification: When and How?&lt;/h4&gt;But how do you decide at any given checkpoint if we have a success or failure at hand? The quality of verification is crucial. Verification by peer review, while valuable, is prone to oversight. The proof of the pudding is in the eating. The more times you get to eat the better. The analog of eating here is testing functionality. A truly iterative process of software development where functionality gets tested iteratively is likely to achieve better ROI (everything else remaining constant). &lt;br /&gt;
&lt;br /&gt;
&lt;div id="r59o" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dd7mw33f_155f29c2qcb_b" style="height: 128.948px; width: 1024px;" /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Okay, so no one uses waterfall anymore. But we still have projects where big up-front analysis and design are the norm and continuous integration means weekly build. In such cases, we only have limited verification (peer reviews of requirements, design and code) till the very end. Failures (if any) are slow and horrible. &lt;br /&gt;
&lt;br /&gt;
Incremental agile is what almost all XP and Scrum teams follow. They run through the stories for a release doing just enough/just in time analysis, design, coding per story. The boundaries between design and code are often blurred but that is not material to this illustration. Truer verification now becomes possible at the end of every story (QA/customer testing/sign-off). However, each story still gets only attempt. Any changes (learnings?) after that go back into the backlog to be prioritized and taken up with everything else. &lt;br /&gt;
&lt;br /&gt;
But as &lt;a href="http://www.agileproductdesign.com/blog/dont_know_what_i_want.html" id="v0vn" title="Jeff Patton"&gt;Jeff Patton&lt;/a&gt; points out, it is possible to view each story as a series of progressive enhancements:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Necessity - core functionality (e.g. user registration)&lt;/li&gt;
&lt;li&gt;Safety - validations etc. (e.g. confirm via email, add a captcha)&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Flexibility (e.g. support openID)&lt;/li&gt;
&lt;li&gt;Luxury (e.g. add ajaxy feedback on available userids, password strength)&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;Yeah the example is a bit contrived (openID would mostly be another story even in incremental mode) but you get my drift. We can now design a release plan that allows the team to &lt;i&gt;iterate on a story&lt;/i&gt;, progressively enhancing it. The story sponsor reviews (tests) each story multiple times. Failures (if any) are faster and cheaper. The team learns better. I like this line from a Werner Vogels &lt;a href="http://queue.acm.org/detail.cfm?id=1142065" id="ju8-" title="interview"&gt;interview&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="margin-left: 40px;"&gt;With a new radical service, you try to go into prototype mode pretty quickly, and then you start iterating on that&lt;i&gt; until you feel that you understand your business problem.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
Stories in regular business applications may not qualify as radically new but very often the team is new to the application in question. "You only understand it when you &lt;i&gt;do it&lt;/i&gt;" is a much under-appreciated truth of all knowledge activity (if not all activity).&lt;br /&gt;
&lt;h4&gt;Expected cost/time&lt;/h4&gt;It may be argued that for a given chunk of functionality, iterating increases overall cost/time as compared to doing it in one go. This is only true when the risk of failure is zero. For situations of non-zero risk, the expected cost/time can often be lower with an iterative approach. The table below shows this for a hypothetical but realistic risk profile where risk decreases as learning increases. Your mileage will vary depending on the risk profile of your team and functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;div id="rg:q" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dd7mw33f_154cj47txdh_b" style="height: 160px; width: 645px;" /&gt;&lt;/div&gt;&lt;h4&gt;Failure is not an option&lt;/h4&gt;Sometimes you get to hear sponsors saying they don't care about downside risk because failure is not an option. Some of these projects run into a death march followed by a blow out followed by movement of key people. Then a new team and a new IT partner get to do it all over again.&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/oWQud0_OrgM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/02/fail-fast.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/5577962110218818424?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/5577962110218818424?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/02/fail-fast.html" title="Fail fast" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkUBR34-cSp7ImA9WxBWE0k.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-7254544669457470713</id><published>2010-02-05T08:52:00.002+05:30</published><updated>2010-02-05T08:54:16.059+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-05T08:54:16.059+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile-antipatterns" /><title>When Agile Estimation becomes pointless</title><content type="html">If a team &lt;i&gt;has to&lt;/i&gt;  deliver a certain amount of functionality by a certain date, then the  act of estimation becomes an act of commitment. The team has essentially  committed to cost, schedule, quality &lt;i&gt;and scope&lt;/i&gt;. There are no  levers left. In such a situation, velocity becomes a target rather than  just a measurement. Targeting velocity makes points based estimation a  charade. The team is better off estimating in real days in this case. It  helps the cause of commitment. Points based estimation is useful when  you agree to the following:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Plan the story list for a release  with only about 70% must-have functionality and the rest as negotiable.  This implies it is potentially okay to release (go into production)  with just that 70% functionality.&lt;/li&gt;
&lt;li&gt;By definition, estimates are  approximations. Software estimates are more so.&lt;/li&gt;
&lt;li&gt;It is  counterproductive to insist that your IT vendor/team deliver x points of  functionality by date y. Scope negotiation does not mean x remains x.  Yes, sometimes only the contents of x need change. At other times, x may  become x ± delta. This is not a rip-off. It doesn't make business  sense for your IT vendor to rip you off because you won't give repeat  business if you are ripped off. Without repeat business, your IT vendor  is likely to become uncompetitive because the cost of new business  development is very high.&lt;/li&gt;
&lt;/ol&gt;"Embrace change" is a two way  street. IT delivery team should embrace changes to requirements and  priorities. Clients should also embrace changes to scope when delivery  work proceeds at a different pace than originally expected.&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/M0JJAlcc6NU" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/02/pointless-agile-estimation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7254544669457470713?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7254544669457470713?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/02/pointless-agile-estimation.html" title="When Agile Estimation becomes pointless" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0EHRXs-fyp7ImA9WxBXF04.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-1930849276560912333</id><published>2010-01-29T08:55:00.003+05:30</published><updated>2010-01-29T08:57:14.557+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-29T08:57:14.557+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>The Tragedy of Commons based Peer Production</title><content type="html">In my previous &lt;a href="http://blog.sriramnarayan.com/2010/01/open-source-authors-struggle-for.html" id="j1pw" title="Open source authors' struggle for compensation"&gt;post&lt;/a&gt;, I mentioned how authors of small but useful open source projects often struggle for compensation. Using a FOSS/commercial license is one option but it could go either way. They wouldn't really have to resort to compulsory payment if donations were forthcoming from users/organizations who commercially benefit from it. Therein lies the tragedy of 'Commons based Peer Production'. Only a tiny minority donate. This is detrimental to the growth of all forms of free digitial distribution (indy music, books, software etc). It also makes for an unhealthy society. Big leap? Bear with me.&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The bulk of financial transactions in G20 economies happen between:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Corporations (B2B)&lt;/li&gt;
&lt;li&gt;Corporation and citizen (retail - citizens pays corporation, wages - corporation pays citizen)&lt;/li&gt;
&lt;li&gt;Corporation and state (taxes - corporation pays state, state funded projects - state pays corporation)&lt;/li&gt;
&lt;li&gt;Citizen and state (taxes - citizen pays state, pension/welfare - state pays citizen)&lt;/li&gt;
&lt;/ol&gt;But what about transactions between citizens? When this goes towards zero, we get a unhealthy society. Centralized services, mostly helpless consumers (citizens). Donating money to the creators of 'digital stuff' that we enjoy is a great way of changing the status quo. The internet has provided a great platform for disintermediation but it will only work if we choose to participate in the process.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;We could also try to build momentum within our organizations towards this. Companies that commercially benefit (however indirectly) from free software could set aside some money annually for donations. The beneficiaries could be decided by a poll within the company. After all, this is also part of CSR. Plus it will make for good PR copy.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/fuPnSwHPUK4" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/01/tragedy-of-commons-based-peer-pro.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/1930849276560912333?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/1930849276560912333?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/01/tragedy-of-commons-based-peer-pro.html" title="The Tragedy of Commons based Peer Production" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CU4ERHs4fyp7ImA9WxBXFEk.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-4039452553093697105</id><published>2010-01-25T16:37:00.006+05:30</published><updated>2010-01-25T23:55:05.537+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-25T23:55:05.537+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>Open Source authors' struggle for compensation</title><content type="html">&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;I guess we all know the difference between free as in speech (freedom) and free as in lunch (gratis). All open source software confer certain freedoms of use, modification and redistribution. None of them are required to be made available to users at zero cost. Yet, I don't know of a single significant project that is open source and fully paid, i.e. no version available at zero cost. Reasons typically offered are:&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;ol style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;li style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;It is the freemium business model - Give away the basic software and charge for enhanced functionality or support.&lt;/span&gt;&lt;/li&gt;
&lt;li style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;It is not enforceable - Users will simply build the software from the source code and there is no way you can get them to pay.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;br /&gt;
&lt;ol style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;/ol&gt;&lt;/div&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;#1 is okay for projects run by companies. It is often not feasible for projects run by individuals. This a big category of small useful pieces of software (think libaries, plugins, utilities). These people try (in vain?) to make some money via advertisements or by appealing for donations. It is a sad reality that they get no compensation from commercial software/organizations using their work. These people should relook at #2.&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;I suspect payment is very enforcable against commercial enterprises. Just add a line to your EULA saying "It is illegal to use this software for commercial purposes without paying for it". Most companies would pay a small fee (say $50 for a full version but without support) for a useful piece of software. Either that or their lawyers would blacklist the software. At least you wouldn't have legions of freeloaders just using the software without contributing anything (money, bug reports/fixes, documentation) back. The argument that even freeloaders help spread the word to someone who might eventually buy something is a trifle bleak. Of course, all power to you if are doing this altruistically or if you are happy with the other rewards (fun, learning, reputation).&lt;/span&gt;&lt;br /&gt;
&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;
&lt;/span&gt; &lt;br /&gt;
&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', serif;"&gt;Giving software away at zero cost means you have to depend on services for income. You either offer your services as an employee (day job) or as support (adding value to what is given away). Either way, it is a model of pricing input instead of output. Scales only with people. Or you have to fall into a category where you can be adopted by a big foundation like Eclipse or Apache or Mozilla. &amp;nbsp;Good luck with that.&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/Cp6H-C1lsH0" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2010/01/open-source-authors-struggle-for.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/4039452553093697105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/4039452553093697105?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2010/01/open-source-authors-struggle-for.html" title="Open Source authors' struggle for compensation" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DUAGRng5eyp7ImA9WxBXFEw.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-7521173614160481974</id><published>2009-11-17T00:08:00.005+05:30</published><updated>2010-01-25T16:38:47.623+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-25T16:38:47.623+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>No software patents versus patent reform</title><content type="html">&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;We often cry ourselves hoarse trying to justify non-waterfall methods of software development saying that software is fundamentally different from manufacturing or civil construction. There is substance to this. Code is design. Compilation (build) is zero cost for all practical purposes. If we agree that compilation is the equivalent of a manufacturing assembly line or brick-laying, then the economics of software development are very different indeed. The economics of software make it particularly vulnerable to the ill-effects ot the current patent regime.&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;I used to find it surprising when highly credible &lt;a href="http://www.paulgraham.com/softwarepatents.html"&gt;people&lt;/a&gt; said there was nothing fundamentally different about software patents - "If you're against software patents, you're against patents in general." Until I realized that software patents aren't inherently evil - the devil, as usual, lurks in the details.&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Patents exist to balance competing objectives:&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Encourage innovation&lt;/li&gt;
&lt;li&gt;Give innovators a chance to profit from their success&lt;/li&gt;
&lt;li&gt;Improve the body of knowledge in the public domain (eventually)&lt;/li&gt;
&lt;/ol&gt;&lt;div class="MsoNormal"&gt;In practice, the second objective is generally met by conferring a twenty year period of exclusive usage rights. Thus, patents are economic devices. Won't the efficacy of an economic device depend on the underlying economics of the industry it is meant for? Do all industries require twenty years to recoup investment and monetize an innovation? It certainly is ridiculous for software. Technology cycles keep getting shorter - twenty years is several generations in most industries today. A two year patent might be more reasonable for software. Of course, that still leaves jokes like the one-click-checkout patent untouched.&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;When patents were first conceived, they were meant for flesh and blood patent holders, not for mere legal persons (Corporations). Corporations gained personhood much later. However, the majority of patents today are held by corporations rather than individuals. This has lead to barely legal behaviors that end up stifling innovation in the industry as a whole.&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;What's really needed is a nimble international body that can tweak the terms of patenting for different industries. But then, international co-operation is hard to come by even for life threatening issues such as climate change. No wonder people push for elimination of software patents instead of push for a better patent regime.&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/8TN3YqkyfEM" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2009/11/no-software-patents-versus-patent.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7521173614160481974?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7521173614160481974?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2009/11/no-software-patents-versus-patent.html" title="No software patents versus patent reform" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>5</thr:total></entry><entry gd:etag="W/&quot;AkEFRnk9eCp7ImA9WxNXEko.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-3568041088271723810</id><published>2009-09-30T08:00:00.003+05:30</published><updated>2009-09-30T08:13:37.760+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-30T08:13:37.760+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="design" /><title>Being explict is better than being implicit - only when everything else is constant</title><content type="html">&lt;div style="text-align: justify;"&gt;The benefits of dependency injection are:&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;Separating configuration of dependencies from their use.&lt;/li&gt;&lt;li&gt;Improving unit testability.&lt;/li&gt;&lt;li&gt;Making dependencies explicit.&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;As I finished explaining these points to some new hires, I followed it up with a generalisation, "And in general, being explicit is better than being implicit - it reduces ambiguity and improves communication, always welcome in software development." Immediately I was struck by a few incongruities. After all, we have come to appreciate:&lt;br /&gt;&lt;/div&gt;&lt;ol style="text-align: justify;"&gt;&lt;li&gt;The absence of Java-esque checked exceptions in C#.&lt;/li&gt;&lt;li&gt;The flexibility afforded by dynamically typed languages.&lt;/li&gt;&lt;li&gt;The evolution friendliness and interoperability of loosely typed SOAP web service contracts (documents, coarse-grained interfaces, restricting ourselves to the simplest of XSD types).&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;In the above cases, being explicit comes with a stiff cost. We trade it off for flexibility. So the generalisation still holds. In general, being explicit is better than being implicit. But there is a caveat implicit in there - "In general, being explicit is better than being implicit &lt;span style="font-style: italic;"&gt;provided everything else remains constant.&lt;/span&gt;" If there  are additional benefits to be gained from going implicit, then being explicit is questionable.&lt;br /&gt;&lt;br /&gt;It helps to make this caveat explicit. A case of making the generalisation practise what it preached.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/dNH9GR318sw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2009/09/being-explict-is-better-than-being.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/3568041088271723810?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/3568041088271723810?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2009/09/being-explict-is-better-than-being.html" title="Being explict is better than being implicit - only when everything else is constant" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkUERno-eSp7ImA9WxNTGEo.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-4046878026821552473</id><published>2009-08-21T22:27:00.003+05:30</published><updated>2009-08-21T22:33:27.451+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-21T22:33:27.451+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IT-in-India" /><title>SOA in India</title><content type="html">businesstechnology.in run by S&amp;amp;S Media (people behind JAX conference) &lt;a href="http://businesstechnology.in//2009/08/14/Introspecting-SOA.html"&gt;interviewed&lt;/a&gt; me on the state of SOA in general and in India in particular.&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/Kav4sJKeSGc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2009/08/soa-in-india.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/4046878026821552473?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/4046878026821552473?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2009/08/soa-in-india.html" title="SOA in India" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;DEIBSXc4cCp7ImA9WxJWEks.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-7429263060066744450</id><published>2009-06-18T00:47:00.002+05:30</published><updated>2009-06-18T00:52:38.938+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-18T00:52:38.938+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="books" /><title>How applications learn. What happens after they are built?</title><content type="html">I have been reading &lt;a title="Stewart Brand's" href="http://web.me.com/stewartbrand/SB_homepage/Home.html" id="drfu"&gt;Stewart Brand's&lt;/a&gt; much celebrated &lt;a title="book" href="http://www.amazon.com/gp/product/0140139966/sr=1-1/qid=1155084886/ref=pd_bbs_1/102-5135120-3196937?ie=UTF8&amp;amp;s=books" id="t:jl"&gt;book&lt;/a&gt; over some time now. Took some inspiration from it for a local KM-community &lt;a title="talk" href="http://sriramnarayan.com/understanding_innovation.pdf" id="yhrp"&gt;talk&lt;/a&gt; on innovation. In particular, I was tickled by his characterization of how ideas spread:&lt;br /&gt;&lt;blockquote&gt;Perhaps culture is driven by just such flea-market ideas in a vast network of uncredited influence.&lt;br /&gt;&lt;/blockquote&gt;Replace culture by 'innovation in software' and it still makes perfect sense. Our aggregated blog &lt;a title="page" href="http://blogs.thoughtworks.com/" id="haf1"&gt;page&lt;/a&gt; is a good example of a flea-market of ideas.&lt;br /&gt;&lt;br /&gt;Stewart argues for evolutionary design over visionary design - now where have I heard that before? It seems he once suggested to an architect that he go back to his building to see how the users were finding it. The architect said, "Oh no. You never go back. It's too discouraging."  Just reinforces that we need to be on our guard when we choose technologies to build applications. Will the eventual maintainers of the application be comfortable with them? Is the app designed for change? Does the roof (read abstractions) leak?&lt;br /&gt;&lt;br /&gt;It's true that construction industry (or any other industry for that matter) isn't a good analogy for software development. In particular, coding is not analogous to construction (compilation probably is). But the life of a building seems to have striking similarities with that of an application. Though buildings are expected to have much longer lives than applications, the total churn that they are subjected to is probably comparable. Buildings are subjected to form-over-function pressures of the marketplace - software apps are less so. Both suffer every now and then from architect hubris.&lt;br /&gt;&lt;br /&gt;Wired &lt;a title="book" href="http://www.wired.com/wired/archive/2.11/streetcred.html" id="e-r_"&gt;covered&lt;/a&gt; the book long ago. The BBC documentaries based on the book are still available.&lt;br /&gt;&lt;br /&gt;&lt;a title="Part 1: Flow" href="http://video.google.com/videoplay?docid=8639555925486210852" id="j6ms"&gt;Part 1: Flow&lt;/a&gt;&lt;br /&gt;&lt;a title="Part 2: The Low Road" href="http://video.google.com/videoplay?docid=5088653796598486022" id="t.j4"&gt;Part 2: The Low Road&lt;/a&gt;&lt;br /&gt;&lt;a title="Part 3: Built for change" href="http://video.google.com/videoplay?docid=6141960341438553915" id="xx_7"&gt;Part 3: Built for change&lt;/a&gt;&lt;br /&gt;&lt;a title="Part 4: Unreal estate" href="http://video.google.com/videoplay?docid=-8761299882173964035" id="k7s0"&gt;Part 4: Unreal estate&lt;/a&gt;&lt;br /&gt;&lt;a title="Part 5: The romance of maintenance" href="http://video.google.com/videoplay?docid=5407846553590755822" id="cz8-"&gt;Part 5: The romance of maintenance&lt;/a&gt;&lt;br /&gt;&lt;a title="Part 6: Shearing Layers" href="http://video.google.com/videoplay?docid=2283224496826631552" id="m3wj"&gt;Part 6: Shearing Layers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There is also a good summary up at: &lt;a title="http://www.gyford.com/phil/writing/2004/10/24/how_buildings_le.php" href="http://www.gyford.com/phil/writing/2004/10/24/how_buildings_le.php" id="r18s"&gt;http://www.gyford.com/phil/writing/2004/10/24/how_buildings_le.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/fCgafYBgoVc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2009/06/how-applications-learn-what-happens.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7429263060066744450?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/7429263060066744450?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2009/06/how-applications-learn-what-happens.html" title="How applications learn. What happens after they are built?" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0ECQn44fyp7ImA9WxJXFkk.&quot;"><id>tag:blogger.com,1999:blog-21992362.post-5922218651581518758</id><published>2009-06-10T19:06:00.006+05:30</published><updated>2009-06-10T19:17:43.037+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-10T19:17:43.037+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="appengine" /><title>ThoughtWorks on App Engine for Java: Google I/O Enterprise track</title><content type="html">&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-4fA_UciDaA&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-4fA_UciDaA&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;ThoughtWorks' CTO, Rebecca Parsons and Martin Fowler &lt;a title="presented" href="http://dl.google.com/io/2009/pres/w_415_thoughtworks_on_appengine_for_java_enterprise.pdf" id="f97-"&gt;presented&lt;/a&gt; (with usual panache) this overview of ThoughtWorks' findings on Google App Engine (and the cloud in general) at &lt;a title="Google I/O" href="http://code.google.com/events/io/sessions/ThoughtWorksAppEngineJava.html" id="xdds"&gt;Google I/O&lt;/a&gt;. Being part of the enterprise track, their talk focussed on enterprise readiness/applicability.&lt;br /&gt;&lt;br /&gt;A summary for the busy technologist:&lt;br /&gt;&lt;br /&gt;&lt;i&gt; Google App Engine&lt;/i&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A reasonable option for a number of applications.&lt;/li&gt;&lt;li&gt;Sets the bar in terms of low barrier to entry&lt;/li&gt;&lt;li&gt;Technical things to consider before taking the plunge:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Testing - development environment not (yet) quite the same as production.&lt;/li&gt;&lt;li&gt;Persistence - Different idioms needed than when persisting to relational databases.&lt;/li&gt;&lt;li&gt;Concurrency - The deployment sandbox is effectively single threaded. A whole bunch of Java libraries that spawn their own threads will need to be ported over before they can be used on the app engine. Moving away from shared memory concurrency is probably good anyway.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;i&gt; Advice for the enterprise&lt;/i&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;There is a spectrum from infrastructure (Amazon) to applications (Salesforce) with platform (app engine) being in the middle but closer to infrastructure. Domain specific play (statistical analysis cloud) is possible in the space between platform and applications. Of course, considering the venue, the speakers did not emit competing names like Amazon or Microsoft.&lt;/li&gt;&lt;li&gt;Standard potential advantages - dynamic scaling, low entry barrier (therefore low downside risk), pay as you go (op-ex over cap-ex)&lt;/li&gt;&lt;li&gt;Economies of scale (in terms of skilled people and infrastructure) mean that it is much harder to do-it-yourself (private clouds). &lt;/li&gt;&lt;li&gt;Security, privacy and IP - SLAs are ok but not nearly as good as the ability to fire your CIO when things go horribly wrong.&lt;/li&gt;&lt;li&gt;Is it really cheaper? - Unambiguous yes only if you move everything and close down your own data center.&lt;/li&gt;&lt;li&gt;Need new IT org? - probably yes - hopefully one that has better relations with the business.&lt;/li&gt;&lt;li&gt;Vendor lock-in? - probably not much worse than Oracle lock-in. &lt;/li&gt;&lt;li&gt;Other use cases - experiments, spiky one-time computational needs.&lt;/li&gt;&lt;li&gt;This is another of those things that lets you focus on core competencies.&lt;/li&gt;&lt;li&gt;Has the potential to solve the last-mile problem in agile software development - frequent and incremental deployment to production.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;p style="text-align: right" align="right"&gt;&lt;a href="http://blog.sriramnarayan.com"&gt;blog home page&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/XploringAround/~4/yuJ4lv0hPVA" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://blog.sriramnarayan.com/2009/06/thoughtworks-on-app-engine-for-java.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/5922218651581518758?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/21992362/posts/default/5922218651581518758?v=2" /><link rel="alternate" type="text/html" href="http://blog.sriramnarayan.com/2009/06/thoughtworks-on-app-engine-for-java.html" title="ThoughtWorks on App Engine for Java: Google I/O Enterprise track" /><author><name>sriram</name><uri>http://www.blogger.com/profile/01237485664035584743</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="26" height="32" src="http://3.bp.blogspot.com/-npmU4sBG-Ek/UMGJfPJHarI/AAAAAAAAAQU/O_AzARSbi1k/s220/sriram-vellore-tiny.png" /></author><thr:total>0</thr:total></entry></feed>
