<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-8061517553075354641</id><updated>2009-11-14T22:43:36.440+05:30</updated><title type='text'>IUnknown.QueryRandomThoughts()</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-7874821797810460906</id><published>2009-03-29T22:09:00.000+05:30</published><updated>2009-03-29T22:15:25.141+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Personal Development'/><title type='text'>Should you move on?</title><content type='html'>&lt;p&gt;In the current economic gloom, it's probably preposterous to even broach the subject of leaving a job&amp;nbsp; but I was wondering if there was a methodical system to decide if the time had come to switch jobs. &lt;/p&gt; &lt;p&gt;All of us have an inbuilt compass that decides whether the time has come to look for opportunities outside the realm of the current company. It could be for various reasons - lack of role definition, lack of challenging opportunities, unsatisfactory work conditions/compensation or a manager that we just don't get along with etc. &lt;/p&gt; &lt;p&gt;Apart from the "gut system", is there an objective way to decide to look outside? It turns out there is. One can figure out the answer if was one was to earnestly answer the below 12 questions - &lt;/p&gt; &lt;ol&gt; &lt;li&gt;Do I know what is expected of me at work?&lt;/li&gt; &lt;li&gt;Do&amp;nbsp; I have the materials and equipment I need to do my work right?&lt;/li&gt; &lt;li&gt;At work, do I have the opportunity to do what I do best everyday?&lt;/li&gt; &lt;li&gt;In the last seven days, have I received recognition or praise for good work?&lt;/li&gt; &lt;li&gt;Does my supervisor, or someone at work, seem to care about me as a person?&lt;/li&gt; &lt;li&gt;Is there someone at work who encourages my development?&lt;/li&gt; &lt;li&gt;At work, do my opinions seem to count?&lt;/li&gt; &lt;li&gt;Does the mission/purpose of my company make me feel like my work is important?&lt;/li&gt; &lt;li&gt;Are my co-workers committed to doing quality work?&lt;/li&gt; &lt;li&gt;Do I have a best friend at work?&lt;/li&gt; &lt;li&gt;In the last six months, have I talked with someone about my progress?&lt;/li&gt; &lt;li&gt;At work, have I had opportunities to learn and grow?&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;I wish I had come up with these questions but I just happen to stumble upon them while reading "&lt;strong&gt;First, break all the rules&lt;/strong&gt;" by Marcus Buckingham and Curt Coffman. &lt;/p&gt; &lt;p&gt;The questionnaire is put in such an articulate and simple manner that it helps you bring out the truth out of the closet regarding whether you belong in a specific place, are in a position to contribute and grow professionally. You immediately know the path you have to take if the answers are predominantly towards "Disagree" or "Strongly Disagree". By the way, they suggest that all the questions should be answered on the scale of "Strongly Disagree", "Disagree", "Neutral", "Agree" and "Strongly Agree". &lt;/p&gt; &lt;p&gt;To digress a little, the book was about the fact that individuals leave managers and not organizations. I'm sure you can clearly see that all the areas in the questionnaire can be directly addressed by an individual's manager thus I'm not surprised about their findings. After reading the book, I'm thoroughly convinced that individuals leave because of their managers. I hate to admit but I've had some smart individuals leave when they were reporting to me and now I can clearly see their reasons. I could pass the buck on to the organizational operative context but at the end of day I didn't do enough to realize their potential. &lt;/p&gt; &lt;p&gt;I hope this questionnaire helps everyone who have started to feel iffy about their current position but don't know what should they really do. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-7874821797810460906?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/7874821797810460906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=7874821797810460906' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7874821797810460906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7874821797810460906'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/03/should-you-move-on.html' title='Should you move on?'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-6490448015039249701</id><published>2009-03-25T09:14:00.000+05:30</published><updated>2009-03-25T14:06:17.750+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Faux Pas</title><content type='html'>&lt;p&gt;I didn't realize my blog was completely broken until late evening yesterday. I was using a borrowed blogger template from another site and the lazy me completely forgot to download the images, css and javascript from their site. The ignorant me didn't have a clue that they had bandwidth restrictions for their photobucket account where all the images were hosted. &lt;/p&gt; &lt;p&gt;It was awful to look at the blog and see all the nasty photobucket images asking to upgrade the account as the download bandwidth had been exceeded. Eeeww! I really apologize to all my readers(okay, sorry, I really meant 3 people who visit my blog everyday) who had to put up with this. With my credible intelligence level, I'm glad that on one thought that this was my new experiment in blog aesthetics. Hehee...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-6490448015039249701?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/6490448015039249701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=6490448015039249701' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/6490448015039249701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/6490448015039249701'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/03/blog-faux-pas.html' title='Faux Pas'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-7470074585209836207</id><published>2009-03-19T23:07:00.001+05:30</published><updated>2009-03-20T08:22:23.677+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Crisis Driven Development</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Warning: &lt;/strong&gt;Satire at work!&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_AnWe5Uu-jHM/ScKFaGA0iaI/AAAAAAAAAMk/Vc-KyNaAQF8/s1600-h/crisis%5B2%5D.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="91" alt="crisis" src="http://lh4.ggpht.com/_AnWe5Uu-jHM/ScKFbA0ZHzI/AAAAAAAAAMo/9iQWMLhpOAI/crisis_thumb%5B2%5D.jpg?imgmax=800" width="134" align="right" border="0"&gt;&lt;/a&gt; I'm one of the blessed souls to have been part of some software teams that leveraged &lt;strong&gt;C&lt;/strong&gt;risis &lt;strong&gt;D&lt;/strong&gt;riven &lt;strong&gt;D&lt;/strong&gt;evelopment methodology. There has to be certain magnetic force that draws me in to these kind of software engagements. Um...Did I mention I was blessed? Yes, I did. &lt;/p&gt; &lt;p&gt;On second thoughts, it really has to be - &lt;/p&gt; &lt;ul&gt; &lt;li&gt;the sheer charm of working late hours and weekends so that I get to know the value of family. It truly works on the principle of &lt;em&gt;distance makes heart grow fonder&lt;/em&gt;. It tests the strength of all the personal bonds and see whether they are worth keeping. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;the lure of being randomised by always working on some burning issue that needs immediate attention as it affects 0.02% of the users. It truly tests whether everyone in the development team is customer centric and whether they are connected to every single user in the product ecosystem. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The high of being used just like any other hardware resource till I last my usefulness. It is a test of endurance, how long can one survive a burnout. I would like all the athletes vying for the Olympic gold to be part of such teams. Heck, Roger, if you are listening for ways to beat Nadal, this is it. Vamos, Roger! &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The thought of never getting appreciated for all the hard work that I put in for all the "so-called" crisis. It gets you ready for the real world and makes you thick skinned. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Having all the crisis attributed to the community of Developers Shavelopers. It doesn't matter whether requirements were changed only 100 times in the process but it should have worked flawlessly once the final requirements were handed over just in time - I meant a day before the final delivery. It teaches the principles of accountability and how to build highly flexible systems that can read the minds of people running the business and calibrate accordingly. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Okay, enough satire but the fact of the matter is that it is extremely disheartening to see projects function like this. What does anyone get by randomising their team all the time? Only a bad product. &lt;/p&gt; &lt;p&gt;I'm not sure if these teams get anything done the right way. The management only stands to lose if the team is always in the crisis mode but they don't see through it. They think the team is fixing issues and rolling out functionality to fix the crisis whereas they are oblivious that it always results in creating more bugs and unmaintainable code base as no one really had the time to think through and do a proper triage. &lt;/p&gt; &lt;p&gt;One needs to learn that building high quality software takes time and the developers need to be given the right tools, the right frame of mind and just enough space to unleash their creativity to create the best of the best. &lt;/p&gt; &lt;p&gt;Have you ever been part of such teams? Would you like to share your experience?&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Related Post&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://tarunkohli.blogspot.com/2007/07/managers-are-from-mars-developers-are.html"&gt;Managers are from Mars, Developers are from Venus&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-7470074585209836207?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/7470074585209836207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=7470074585209836207' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7470074585209836207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7470074585209836207'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/03/crisis-driven-development.html' title='Crisis Driven Development'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-1313110887344246922</id><published>2009-03-19T21:39:00.000+05:30</published><updated>2009-03-19T22:09:19.484+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Leadership'/><title type='text'>Analysis Paralysis</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_AnWe5Uu-jHM/ScJtrKHPuVI/AAAAAAAAAMc/3VsY14RX8Oo/s1600-h/analysisparalysis3.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="81" alt="analysis-paralysis" src="http://lh6.ggpht.com/_AnWe5Uu-jHM/ScJtsGyzcUI/AAAAAAAAAMg/iSjDmpc3Ci0/analysisparalysis_thumb1.png?imgmax=800" width="244" align="right" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You know what is worse than taking a bad decision? Yes, you guessed it, not taking one. I've come across some very intelligent individuals who just couldn't make a decision and vacillated between alternatives, even when they did make a decision.&lt;/p&gt; &lt;p&gt;The thing which baffles me the most is that some of them are highly experienced, worldly wise and extremely intelligent individuals. I could spend hours with them talking about anything and everything under the sun and would come out of the discussion learning new things. But, I'm not sure what happens the moment they have to make a decision. They would either tend to consult lot of people before making a decision lest they might hurt someone's feelings/pride or would have their mental tectonic plates gyrate passionately on both the sides. &lt;/p&gt; &lt;p&gt;Something just takes over the cerebral faculties and clouds their judgement. Sometimes, these individuals take so much time that the issue becomes irrelevant. On second thoughts, it might not be such a bad thing at all as the issue does get solved :)&amp;nbsp; I'm not sure if it is the case of not feeling empowered enough, fear of failure, over cautiousness, or a mere passion for over analysis but they need to tell themselves that they are in a leadership position because someone thought they deserved it(most of the times, they truly are deserving) and they ought to get things going.&lt;/p&gt; &lt;p&gt;The thing that might work in these cases is constant follow up regarding the pending decision after a resolution deadline has been setup. I know it could be hard and there is a chance that you might offend your peer or senior by the regular follow-ups but I've seen it work sometimes. &lt;/p&gt; &lt;p&gt;What are some of the strategies/suggestions you would recommend to tackle this behaviour?&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Related Post&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://tarunkohli.blogspot.com/2009/02/in-state-of-denial.html"&gt;In State Of Denial&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-1313110887344246922?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/1313110887344246922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=1313110887344246922' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/1313110887344246922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/1313110887344246922'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/03/analysis-paralysis.html' title='Analysis Paralysis'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-1177205742661596923</id><published>2009-03-18T22:52:00.000+05:30</published><updated>2009-03-19T09:49:58.149+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>The Future of Management</title><content type='html'>&lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;a href="http://www.amazon.com/Future-Management-Bill-Breen/dp/1422102505/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1237436321&amp;amp;sr=1-1"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="Future of Management" src="http://lh3.ggpht.com/_AnWe5Uu-jHM/ScHH6qmjE-I/AAAAAAAAAMY/DE1xFWwYNaI/Future%20of%20Management%5B8%5D.jpg?imgmax=800" width="161" align="right" border="0"&gt;&lt;/a&gt; Have you ever felt that modern management practices in mid to large size organizations sometimes fall short on fostering creativity? Do you feel that your organization is not doing enough to harness the talent of all its employees? Is innovation localized to a select group in your company and you think the management is not doing enough to make innovation systemic? Have you ever had a nagging feeling why HR practices try to bring consistency and homogeneity in a heterogeneous environment?&amp;nbsp; Do you think the employees are smart enough to manage themselves and organizations don’t need deep rooted hierarchies to watch over them? Do you think your organization is not nimble enough to adapt to the changing business environment?  &lt;p&gt;Well, the book is for you if you answered in affirmative for any of the above. It is a very insightful book, which is divided in four sections - Why Management Innovation Matters, Management Innovation in Action, Imagining the Future of Management and Building the Future of Management.&amp;nbsp;&amp;nbsp; &lt;p&gt;The book starts with outlining the reasons why should we adopt new set of management principles and how current management practices are not suitable enough for the new knowledge economy. The second section outlines examples of companies which have adopted the new innovative management styles and are extremely successful - Whole Foods, W.L. Gore and Google. The third section outlines the need to first understand why we believe what we believe and then embrace new principles that foster innovation within an organization. The last section shares certain lessons to become a management innovator.  &lt;p&gt;It's a book which would inspire you to challenge certain norms within your organization. I really enjoyed reading the book.    &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-1177205742661596923?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/1177205742661596923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=1177205742661596923' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/1177205742661596923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/1177205742661596923'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/03/future-of-management.html' title='The Future of Management'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-743704896555038998</id><published>2009-03-12T16:04:00.000+05:30</published><updated>2009-03-12T16:04:00.600+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Social Search: AardVark</title><content type='html'>&lt;p&gt;How do we naturally search for information without using google? No, the answer is not Yahoo. I mean to ask without getting help from a search engine. Unfathomable, isn't it? Well, may be not. &lt;/p&gt; &lt;p&gt;Wouldn't you rather rely on someone from your personal network to seek advice on&amp;nbsp; great places to see, the best restaurants to have dinner in, the most engaging movie to watch etc. than getting the information through google? Well, I generally get these kinds of information through like minded folks or "so-called" experts in my network and that's exactly the premise of &lt;a href="http://vark.com/"&gt;AardVark&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;a href="http://vark.com/"&gt;AardVark&lt;/a&gt; is a social search engine designed to get your questions answered from your network though instant messaging products. I never thought there could be another way of searching after google but this definitely seems very promising. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-743704896555038998?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/743704896555038998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=743704896555038998' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/743704896555038998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/743704896555038998'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/03/social-search-aardvark.html' title='Social Search: AardVark'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-482778546360604389</id><published>2009-03-06T15:53:00.000+05:30</published><updated>2009-03-06T16:51:17.260+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>Designing for Performance</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_AnWe5Uu-jHM/SbEGk0Ev3RI/AAAAAAAAAMI/QwTRz0GHMEQ/s1600-h/bB-2StealthBomber%5B7%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="178" alt="bB-2StealthBomber" src="http://lh5.ggpht.com/_AnWe5Uu-jHM/SbEGm0KoqBI/AAAAAAAAAMM/hGmJsEnnLds/bB-2StealthBomber_thumb%5B5%5D.jpg?imgmax=800" width="260" align="right" border="0"&gt;&lt;/a&gt; Do you think performance is tuned after the code has been written or is it one of those obvious quality attributes that has to be considered as part of the functional requirements of the system? Considering performance as an afterthought and deciding to tune your software towards the end of the development can only help so much. You really need to consider performance at every stage of software development life cycle. The system's responsiveness needs to be measured and calibrated at every iteration of your product design and development. &lt;/p&gt; &lt;p&gt;One can definitely design systems with that performance as an afterthought notion but I'm not sure whether they would be widely used. Would Google or Amazon have been that popular if they had taken minutes to search for content or books? I bet not. Would Porsche, Ferrari or Stealth Bomber have been possible with the performance-as- afterthought process? I bet not. They were built ground up for performance and speed and they live up to those standards. Why should you believe me? I've driven every single one of them. In my dreams. Every night. Seriously.&lt;/p&gt; &lt;p&gt;So, how does one approach thinking about performance at the design phase? Does one need to employ different design principles for different delivery channels? Though there are specialized patterns which cater to a specific delivery channel like Web, Mobile or desktop based solution but there are some which are overarching and can be applied regardless the delivery channel. IMHO, one needs to consider the following - &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Caching&lt;/strong&gt; - Caching of data can dramatically increase the responsiveness of any application though certain considerations need to be made before finalizing the strategy. One could follow W3 of Caching - &lt;strong&gt;W&lt;/strong&gt;hat, &lt;strong&gt;W&lt;/strong&gt;hen and &lt;strong&gt;W&lt;/strong&gt;here.&lt;/li&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;W&lt;/strong&gt;hat to Cache - It really depends on the application context but anything that would take inordinate amount of time to retrieve and doesn't change that frequently is a good candidate for caching. I also always think about the memory footprint of the cache. I would look at the size of the every object that needs to be cached by enumerating over its properties and computing the actual memory it is going to consume. This helps in the &lt;em&gt;&lt;strong&gt;Where&lt;/strong&gt;&lt;/em&gt; part of the puzzle. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;W&lt;/strong&gt;hen to Cache - One really has two options around it - &lt;strong&gt;Proactive&lt;/strong&gt; or &lt;strong&gt;Reactive&lt;/strong&gt;. Proactive Caching is generally employed for datasets(Not the ADO.NET DataSet) that get used in the application in most of the scenarios. It is a technique by which one loads the dataset at the start of the application. Reactive Caching is used when one is not sure when a dataset would get used thus it gets cached it after its first retrieval.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;W&lt;/strong&gt;here to Cache - It depends upon how fast the cached dataset needs to be accessed and how big it is? If the cached data doesn't need to be loaded in fractions of milliseconds and is huge then it makes sense to use an Out of Process Cache. But, if the size of the dataset is not that big then one can think about caching the data in the same process. In-process caching gets a little tricky for the web delivery channel when one has a cluster of web servers. As the cache needs to be identical in all the webservers, one has to either develop something in house or use sophisticated products like NCache to replicate the cache state among the clusters.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Data Structures&lt;/strong&gt; - Poor selection of data structures can lead to lot of memory wastage and denegenration of performance. Would you really use a LinkedList for storing all your Customers? Would you use an Array for dataset that is always changing? Probably not. I think one needs to decide early the data structures which would get used in the domain model of the product.&amp;nbsp; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Algorithms&lt;/strong&gt; - One not only needs to use the right data structures to store the data but also use the right algorithms to insert/retrieve the data from them. They are tightly coupled and both of them have to be selected in tandem. If you were to sort your dataset, would you use BubbleSort or QuickSort? You wouldn't care if the dataset is too small but using BubbleSort in large datasets could be an extreme wastage of CPU cycles. The selection of the right algorithm plays a huge part in the responsiveness of your application and it makes sense to give a lot of thought to it. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Asynchronous Behavior&lt;/strong&gt; - I'm not sure whether asynchronous behavior can&amp;nbsp; increase the &lt;em&gt;response times&lt;/em&gt; of your application but they can tremendously increase the &lt;em&gt;responsivess&lt;/em&gt; of your application. In the world of short attention spans and even smaller patience levels, responsiveness means performance. One can use variety of techniques to break the long running transactions and execute them in a step manner while engaging the user. Do you have order processing which runs through a myriad business instructions? Do you have your users see a fascinating marvel called rotating hourglass and twiddle their thumbs after they submit an order? Wouldn't it make sense to break the transaction, put it on a order processing queue and let users know they would be informed when their order is processed? One can easily use some sort of queuing mechanism like MSMQ to decouple the component that submits the order from the service that actually processes the order. In the web scenario, one could use AJAX rather than having the user reload the entire web page again. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Interface Design&lt;/strong&gt; - It makes sense to design &lt;strong&gt;coarse grained&lt;/strong&gt; interfaces a.k.a &lt;strong&gt;Chunky&lt;/strong&gt; Interfaces to reduce the chatter among the software layers. It's best to have calls to retrieve and insert data in chunks rathen than invoking multiple method calls to achieve the same logical unit of work. For example, let's say you had an Order class, which had details about the Order, its LineItems and the details about the Customer. Would you have 3 separate calls to create Order, OrderLineItems and Customer or just have one call to create Order, which would execute a transaction to create the Customer if it doesn't exist and then save the Order and its LineItems. It would be prudent to have only one call rather than making 3 independent service calls to achieve this logical unit of work as it reduces the chatter between service layers and help boost performance. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Data Partitioning&lt;/strong&gt; - As the slowest moving piece of any application is I/O, it makes sense to give a lot of thought to the database design and how the data would be partitioned in it, if needed.&amp;nbsp; There are times when certain datasets get used a lot, think of million of hits per day. In those scenarios, it makes sense to partition these datasets with the help of a partition key. The partition key decides how the data would be split physcially. For example, if you are building a social network and you get equal number of english, french and german speaking users then should you divide the users in different databases? It depends upon the context but one should think about the layout of the data persistence. &lt;a href="http://lh4.ggpht.com/_AnWe5Uu-jHM/SbEGo0PTAmI/AAAAAAAAAMQ/0f8kSLdHRHQ/s1600-h/MetaDatabase%5B4%5D.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="122" alt="MetaDatabase" src="http://lh5.ggpht.com/_AnWe5Uu-jHM/SbEGqk-dh9I/AAAAAAAAAMU/eoNTiQdNMds/MetaDatabase_thumb%5B2%5D.png?imgmax=800" width="244" align="right" border="0"&gt;&lt;/a&gt;In MS SQL Server 2005, one could even partition a table without having the application ever to know about that the data is distributed in different filegroups.&amp;nbsp; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Are there any special design considerations that you know of, which can help boost the performance? &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-482778546360604389?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/482778546360604389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=482778546360604389' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/482778546360604389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/482778546360604389'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/03/designing-for-performance.html' title='Designing for Performance'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-2314950215491104550</id><published>2009-03-04T09:19:00.000+05:30</published><updated>2009-03-05T09:17:36.782+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><title type='text'>Why Technology Startups fail?</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;I was having coffee yesterday with one of the founders of my company and somehow the discussion came around to technology startups. Why do so many of them fail? He said they fail because most of them don't have a strategy for acquiring customers. The idea could be brilliant but it is bound to fail or struggle if the startup doesn't know the go-to market strategy, how would they have the customers buy their products, and the cost of acquisition of these customers. Simple. Insightful. Profound. &lt;/p&gt; &lt;p&gt;The thing which can kill a startup is the cost of customer acquisition. A startup could be raking in millions of dollars but not be making a single penny in profits because of the high cost of acquiring and servicing customers. In the formative months/years, the startups&amp;nbsp; don't mind paying more to acquire customers when compared to customers average spending on their site as it is all about growth and about getting the market to know of their product. But, it has to be backed up by a sound startegy of bringing these costs down over a period of years so that they can start making profits. &lt;/p&gt; &lt;p&gt;Thus, invest in creating a go-to market startegy so that you can understand the potential and limitations of your idea. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-2314950215491104550?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/2314950215491104550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=2314950215491104550' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/2314950215491104550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/2314950215491104550'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/03/why-technology-startups-fail.html' title='Why Technology Startups fail?'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-4642352908950000105</id><published>2009-02-26T23:22:00.001+05:30</published><updated>2009-02-26T23:22:54.423+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>In State Of Denial</title><content type='html'>&lt;p&gt;I was ruminating over the perils for a business entity and figured the thing that can hurt an entity the most is having its management in the state of denial about its health. Heck, this could be true for everything around us - our projects, professional growth, personal relationships etc. Most of us run our businesses/groups with a perception that it is succeeding until we discover that we have landed over on the dark side. It's interesting to see that most of us make believe that it was an overnight phenomenon and it was never meant to happen whereas the reality is that tectonic plates of adversity had started gathering momentum long ago.  &lt;p&gt;Have you ever driven in India? If not, well, first lie in the prostrate position and thank your stars that destiny has chosen you as the lucky one. Well, it's an absolute pandemonium! There are no rules on the road, people cut you off, they are always driving at your tail and the worst, they don't hesitate to unleash an honking avalanche and bury you under the cacophonic sound if you were not to give them way. Crazy, isn’t it? They say one can drive anywhere in the world if one has driven in India. Don't believe me? Wanna try it out? Yeah, I didn't think so :)  &lt;p&gt;Now, the interesting part - One has to look at everyone's animated expression every time there is a fender bender (BTW, which happens every few seconds). People are ALWAYS shocked that they got into such an accident. Well, was it not expected in these driving conditions? One should be thanking the heavenly forces that it didn't happen few days back. But, they don't. Why? They are in the perpetual state of denial about the horrid driving conditions.  &lt;p&gt;In both the above scenarios, there is a state of denial which leads to unpleasant ramifications. The logical choice is to look within and seek bold new initiatives which can challenge the status quo. But, the sad part is that sometimes we are too late in discovering the disconcerting facts about the health of our environment. By that time, the playing field has already changed and one has to work diligently to be part of the race again. Thus, the idea is to observe the business context intently and be nimble enough to make proactive changes.  &lt;p&gt;Thus, always periodically review the progress against the plan, be inquisitive about the plans of your competitors, invest in innovation and nimble enough to adapt to the changing environments.  &lt;p&gt;Related Post&lt;/p&gt; &lt;p&gt;&lt;a href="http://tarunkohli.blogspot.com/2009/02/most-important-management-skill.html"&gt;The Most Important Management Skill&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-4642352908950000105?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/4642352908950000105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=4642352908950000105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/4642352908950000105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/4642352908950000105'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/02/in-state-of-denial.html' title='In State Of Denial'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-5515414642313686981</id><published>2009-02-26T14:07:00.000+05:30</published><updated>2009-03-05T09:21:45.855+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Photography'/><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Sunset at Kirkland</title><content type='html'>&lt;p&gt;I've been to Kirkland many a times and the sunset at this point never ceases to stupefy me.&amp;nbsp; I always experience tranquility while sitting on the pier, hearing the waves crash at the beach and watching the sun rays disappear over the horizon. The opulent hues in the sky over the lake paint the world in such a surreal manner that it dwarfs any of the prolific works of painters of our times. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_AnWe5Uu-jHM/Sa9LyfngPPI/AAAAAAAAALQ/-Xj04EnMxWY/s1600-h/Sunset%20Kirkland.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="200" alt="Sunset Kirkland" src="http://lh6.ggpht.com/_AnWe5Uu-jHM/SaZUyPWfCPI/AAAAAAAAALU/j_51-_RbQMk/Sunset%20Kirkland_thumb.jpg?imgmax=800" width="260" border="0"&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://lh4.ggpht.com/_AnWe5Uu-jHM/Sa9MAdXD10I/AAAAAAAAALc/J4xYEyeYx1E/s1600-h/Sunset_Kirkland_2%5B1%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="200" alt="Sunset_Kirkland_2" src="http://lh4.ggpht.com/_AnWe5Uu-jHM/SaZV7Drx1tI/AAAAAAAAALg/TYsICkkO-oo/Sunset_Kirkland_2_thumb.jpg?imgmax=800" width="260" border="0"&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://lh4.ggpht.com/_AnWe5Uu-jHM/SaZU3Svo2QI/AAAAAAAAALo/jWC73ZXu7iU/s1600-h/Yet%20another%20Sunset%20at%20Kirkland.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="200" alt="Yet another Sunset at Kirkland" src="http://lh6.ggpht.com/_AnWe5Uu-jHM/SaZU4wm0K4I/AAAAAAAAALw/mQ0C-BjRJfQ/Yet%20another%20Sunset%20at%20Kirkland_thumb.jpg?imgmax=800" width="260" border="0"&gt;&lt;/a&gt;&amp;nbsp; &lt;a href="http://lh4.ggpht.com/_AnWe5Uu-jHM/SaZU6jm_euI/AAAAAAAAAL4/BqyzUhksK88/s1600-h/Sunset%20at%20Kirkland.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="200" alt="Sunset at Kirkland" src="http://lh3.ggpht.com/_AnWe5Uu-jHM/SaZU8CUIb3I/AAAAAAAAAMA/MaN-j0Zk7iE/Sunset%20at%20Kirkland_thumb.jpg?imgmax=800" width="260" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Related Post&lt;/strong&gt; - &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.sajay.com/post/2008/11/10/Dawn-in-Kirkland.aspx"&gt;Dawn in Kirkland&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-5515414642313686981?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/5515414642313686981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=5515414642313686981' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/5515414642313686981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/5515414642313686981'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/02/sunset-at-kirkland.html' title='Sunset at Kirkland'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-4215726291479352298</id><published>2009-02-25T23:34:00.000+05:30</published><updated>2009-02-25T23:35:39.757+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>The Most Important Management Skill</title><content type='html'>&lt;p&gt;Listening. Period. It has to be by far the most important trait that any manager needs to have. By the way, I'm not only talking about listening as in hearing but also interpreting their vernacular through their expression of speech and body language. We sometimes forget that verbal expressing is just one miniscule part of the overall communication and a major part has to do with the body language, posture, and facial expressions through which a person expresses their thought process. &lt;/p&gt; &lt;p&gt;I'm not sure why some of us are not good at it but the reality is we most of the times are caught up in our web of thoughts or already have preconceived notions about the individual conveying the message. Thus, we tune out somewhere in the middle of the message and don't give a fair chance to that specific message. It could be in a hurry to end the conversation because of some prejudice against that person/topic or our mind has already come up with some smart retort. &lt;/p&gt; &lt;p&gt;I wonder how one could manage effectively with a listening impediment. My sense is that one can't. A manager's job is, well, to manage the team. In my field, the success of the project is also governed by the cohesiveness of the team i.e. the social engineering aspect of it. Also, how motivated and aligned every team member is towards the success of the project?&lt;/p&gt; &lt;p&gt;Wouldn't someone with listening impediment miss the core issues team members are grappling with? As a manager, one has to weed out all the team issues to make sure the team is aligned with one thing only - success of the project. And, one can only really do it if someone can listen, understand, judge and respond effectively. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Related Post&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://tarunkohli.blogspot.com/2007/07/managers-are-from-mars-developers-are.html"&gt;Managers are from Mars, Developers are from Venus&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-4215726291479352298?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/4215726291479352298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=4215726291479352298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/4215726291479352298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/4215726291479352298'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/02/most-important-management-skill.html' title='The Most Important Management Skill'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-6479546992213451090</id><published>2009-02-24T22:41:00.000+05:30</published><updated>2009-02-24T22:41:00.738+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Funny'/><title type='text'>The Matrix Runs on Windows</title><content type='html'>&lt;p&gt;Yes, for real :) Don't believe me? See it for yourself.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:6fc65fcf-4892-49d8-ba84-df4884d85527" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;div&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yX8yrOAjfKM"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/yX8yrOAjfKM" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-6479546992213451090?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/6479546992213451090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=6479546992213451090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/6479546992213451090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/6479546992213451090'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2009/02/matrix-runs-on-windows.html' title='The Matrix Runs on Windows'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-2989376349539100369</id><published>2008-03-12T17:21:00.000+05:30</published><updated>2008-03-12T17:22:32.481+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='WCSF'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Development'/><title type='text'>ASP.NET MVC vs. WCSF</title><content type='html'>&lt;p&gt;I've been thinking about the best way of building enterprise web applications after creating few sample applications with both ASP.NET MVC framework and WCSF and if I was to look at from a holistic perspective, both the frameworks provide excellent separation of concerns thus enhancing the modularity and testability of the application yet there are differences in their approaches. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.asp.net/downloads/3.5-extensions/"&gt;ASP.NET MVC&lt;/a&gt; provides a new ground-up framework for building web applications that doesn't uses the core ASP.NET framework concepts like PostBacks, ViewState, Code Behind etc. It really enforces the discipline of creating simiplistic views, which are dependent on a controller to handle user events and pass the model to it. It forces one to think of Views as a &lt;strong&gt;pure&lt;/strong&gt; rendering mechanism and doesn't allow the developer to pollute the .aspx files with all the gobbledygook of interactions with services to build a page. It provides a very clean way of handling all the HTTP verbs and provides a pluggable architecture to inject components to handle those requests. All the HTTP calls are routed to a controller which decides the action i.e. method to invoke, gets the right model and passes it to View to render the data. One can build very clean &lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt;REST&lt;/a&gt; based solutions by using ASP.NET MVC framework. To learn more about the framework, I would recommend reading Scott Guthrie's &lt;a href="http://weblogs.asp.net/scottgu/"&gt;blog&lt;/a&gt; and viewing these &lt;a href="http://www.asp.net/learn/3.5-extensions-videos/default.aspx#mvc"&gt;videos&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.codeplex.com/websf"&gt;WCSF&lt;/a&gt; on the other hand builds uses the existing ASP.NET Forms based framework and provides a pattern based approach of building applications. It has guidance bundles which provides the right solution and project structure, code generation recipes, out of the box integration with various application blocks like Security, Exception Handling and Logging. It also provides good separation of concerns by following the MVP design pattern. Thus, a developer doesn't have to learn new patterns of building web applications and can utilize all the core concepts of PostBack,ViewState etc. and on top of it is given pre-configured access to the Logging, Exception Handling and Authorization features. &lt;/p&gt; &lt;p&gt;IMHO, WCSF is a better option if one was looking at capitalizing on ASP.NET strengths and, standardizing web development practices. ASP.NET MVC framework provides utmost flexbiity in creating web solutions but it's a 180 degree change in the way we have been building ASP.NET web applications and I'm not even sure how would it pan out while building enteprise applications. In the coming days, I would publish a detailed comparison of both the technologies. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-2989376349539100369?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/2989376349539100369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=2989376349539100369' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/2989376349539100369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/2989376349539100369'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2008/03/aspnet-mvc-vs-wcsf.html' title='ASP.NET MVC vs. WCSF'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-3581920317809199645</id><published>2008-03-10T19:32:00.001+05:30</published><updated>2008-03-10T19:33:18.771+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='WCSF'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Development'/><title type='text'>Starting out with Web Client Software Factory a.k.a WCSF</title><content type='html'>&lt;p&gt;Lately, I've been completely submerged in Software Factories - &lt;a href="http://www.codeplex.com/websf"&gt;WCSF&lt;/a&gt; and &lt;a href="http://www.codeplex.com/servicefactory"&gt;WSSF&lt;/a&gt;(Web Service Software Factory) and have come to like one of them, &lt;a href="http://www.codeplex.com/websf"&gt;WCSF&lt;/a&gt;. I'm bit surprised about the fact that it hasn't caught on to lot of people's imagination albeit having lots of features to create ASP.NET web applications in a standardized way.&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;What it is? &lt;/strong&gt;&lt;/p&gt; &lt;p&gt;It is designed to help one quickly and consistently create web applications that adhere to well known architecture and design principles and patterns. It is an integrated collection of VS.NET solution and project templates, various code recipes, design patterns and prescriptive guidance about creating large scale modular web sites. It synthesizes ASP.NET, ASP.NET AJAX, MVP Design Pattern, Application Blocks of Enterprise Library, Windows Workflow Foundation and VS.NET Solution templates and wizards to create these modular web sites.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Why should one care about it?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;There are various reasons why one should care about the Client Software Factory but there are few that stand out - &lt;/p&gt; &lt;ul&gt; &lt;li&gt;It provides a sound baseline for creating web applications which provides a mature web solution structure, out of the box integration with various application blocks like Security, Exception Handling and Logging and, good separation of concerns between layers(through Dependency Injection) thus improving the testability of the application.&lt;/li&gt; &lt;li&gt;The Factory allows an organization to customize and extend the code recipes and templates to suit their architectural style.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;What is the best way to get started?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The best way to get started on WCSF is to install it and go through the hands-on lab on codeplex. One needs the following before installing the client factory - &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en"&gt;&lt;strong&gt;G&lt;/strong&gt;uidance &lt;strong&gt;A&lt;/strong&gt;utomation &lt;strong&gt;E&lt;/strong&gt;xtensions&lt;/a&gt; - This would enable the custom recipes of WCSF. Please install this before the GAT.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;&lt;/strong&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=2700ED86-318C-4449-9DD2-5E1B60D1F4A5&amp;amp;displaylang=en"&gt;Guidance Automation Toolkit&lt;/a&gt; (for VS 2005) - This would facilitate customizations. Please follow this &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en"&gt;link&lt;/a&gt; if you have VS 2008 installed&lt;/li&gt; &lt;li&gt;Finally, install WCSF from &lt;a href="http://www.codeplex.com/websf/Release/ProjectReleases.aspx?ReleaseId=11176"&gt;here&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Though there are lot of how-to articles and help on codeplex for WCSF but I've found David Hayden's &lt;a href="http://www.pnpguidance.net/Screencasts.aspx"&gt;Screencasts&lt;/a&gt; an invaluable resource in understanding WCSF. He has brief presentations covering various aspects of WCSF and I would highly recommend viewing all his screencasts before starting out. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-3581920317809199645?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/3581920317809199645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=3581920317809199645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/3581920317809199645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/3581920317809199645'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2008/03/starting-out-with-web-client-software.html' title='Starting out with Web Client Software Factory a.k.a WCSF'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-2572886568049683256</id><published>2008-02-12T19:16:00.001+05:30</published><updated>2008-02-12T19:16:06.022+05:30</updated><title type='text'>Life is an Experiment</title><content type='html'>&lt;p&gt;In the last few days, I've been doing lot of reading around how to blog effectively and have come across lot of interesting articles. Umm..., wouldn't it have been little better if I was doing more writing than reading? Anyways, I've read articles about blogging, making blogging a habit, how to attract visitors on your blog etc but I don't know how I landed on this &lt;a href="http://blogs.msdn.com/jmeier"&gt;J.D. Meier's&lt;/a&gt; article about &lt;a href="http://blogs.msdn.com/jmeier/archive/2007/03/21/life-s-an-experiment.aspx"&gt;Life&lt;/a&gt;. But, I'm thankful I did.&lt;/p&gt; &lt;p&gt;I had heard lot of interesting sayings like that "Life is a journey", "Life is a circle" etc. but never that "Life is an Experiment". What a profound statement! It truly defines us and accurately depicts the frailty of human nature. It lets us take our mistakes and shortcomings in our stride, allows us to be fallible and fills hope that someday we would be much closer to the person we want to be. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-2572886568049683256?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/2572886568049683256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=2572886568049683256' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/2572886568049683256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/2572886568049683256'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2008/02/life-is-experiment.html' title='Life is an Experiment'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-2251160822983472425</id><published>2008-02-03T22:53:00.001+05:30</published><updated>2008-02-03T23:01:46.099+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Infinite choices i.e. The Long Tail</title><content type='html'>&lt;p&gt;&lt;a href="http://lh6.google.com/tarun.kohli/R6X4p8TdfpI/AAAAAAAAACA/HX2zX7PpymQ/longtailcover%5B16%5D"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="173" alt="longtailcover" src="http://lh5.google.com/tarun.kohli/R6X4qsTdfqI/AAAAAAAAACI/NMUJ9XMJJZE/longtailcover_thumb%5B12%5D" width="161" align="left" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;What an insightful book! I just finished reading it cover to cover in a day! It enlightened and helped me see the great success stories of our digital age with a new perspective. I always knew the technical reasons behind the successes of eBay, Amazon, iTunes, Rhapsody and the likes of them but never in a way Chris explained it in this book. &lt;/p&gt; &lt;p&gt;It would help one understand the explosion and successes of the new internet businesses and the reasons behind them. It compares the online business with the traditional retail business and explains their edge because of the following forces - &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Current abundance and affordability of the tools of production.  &lt;li&gt;The dramatic reduction in the cost of distribution in this digital age.  &lt;li&gt;The prevelance of search filters to connect the suppliers and the actual consumers. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Take for an example, Why &lt;a href="http://www.wikipedia.org/"&gt;Wikipedia&lt;/a&gt; is more successful(or, will be) when compared to &lt;a href="http://encarta.msn.com/"&gt;MS Encarta&lt;/a&gt; and &lt;a href="http://www.britannica.com/"&gt;Birtannica&lt;/a&gt; or how &lt;a href="http://www.rhapsody.com/home.html"&gt;Rhapsody&lt;/a&gt;/&lt;a href="http://www.apple.com/itunes/"&gt;iTunes&lt;/a&gt; are more popular when compared to the traditional retail stores for music like Tower Records.&amp;nbsp; &lt;/p&gt; &lt;p&gt;I'm sanguine that the pattern of Long Tail is ubiquitous in the modern times and I could even relate it with our own business model. I work for an Outsourced Product Development company,&lt;a href="http://www.globallogic.com"&gt;GlobalLogic&lt;/a&gt;, and I think we fit in the Long Tail of our market segment. Furthermore, there is a Long Tail within our own revenue model - majority of our revenue is driven by minorty of our partners i.e. The 80/20 rule. &lt;/p&gt; &lt;p&gt;I just feel that it could have been written a tad well as lot of examples have been repeated in the book. I think it could be have been wrapped in 150-170 odd pages rather than its current size of 226 pages. Nonetheless, a must read!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-2251160822983472425?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/2251160822983472425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=2251160822983472425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/2251160822983472425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/2251160822983472425'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2008/02/infinite-choices-ie-long-tail.html' title='Infinite choices i.e. The Long Tail'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-7792859246576041101</id><published>2008-02-03T21:51:00.001+05:30</published><updated>2008-02-03T23:04:51.800+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Thank You, Jacky!</title><content type='html'>&lt;p&gt;I just updated my site with a blogger template from &lt;a href="http://www.jackbook.com/"&gt;Jacky Suit&lt;/a&gt;. It has given my blog a professional and clean look(at least one person in this world thinks so..ahem..me). It was easy to download, the instructions were extremely straightforward and on top of that, it didn't cost me a dime! &lt;/p&gt; &lt;p&gt;The ironic thing is that his own blog didn't have that professional look and it looked like an information clutter house. Hopefully, someday he would become cognizant of his own creativity.&lt;/p&gt; &lt;p&gt;Thanx mucho Jacky!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-7792859246576041101?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/7792859246576041101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=7792859246576041101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7792859246576041101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7792859246576041101'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2008/02/thank-you-jacky.html' title='Thank You, Jacky!'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-1806444174798024866</id><published>2008-01-30T16:20:00.001+05:30</published><updated>2008-02-03T22:56:43.395+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>Alien Abductions</title><content type='html'>&lt;p&gt;&lt;span&gt;I've not been able to read/write anything lately. I wish I could simply put it on some sort of alien abduction or a self-discovery Himalayan trip. Well, not that I don't need a long self-discovery Himalayan trip but that's a matter of another blog entry. Anyways, the fact of the matter is that I've hit some sort of reader/writer block. Hey, is it me or it sounds uncannily like a &lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx"&gt;&lt;span&gt;ReaderWriterLock&lt;/span&gt;&lt;/a&gt;&lt;span&gt;?&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;span style="color: #004080"&gt;Note to Self:&lt;/span&gt; To do something about my sense of humor as it is getting restricted to technology.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;My reading list is growing bigger by every passing week but I just can't seem to muster any strength to read. Trust me, I do have enough interesting books to read but they are just gathering dust on my bookshelf. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;span style="color: #004080"&gt;Note to all the readers from Rest of the World:&lt;/span&gt; When I say dust, I really mean it and I'm not using it as a figure of speech. One of the benefits of living in New Delhi is that one not only gets to live in a true cosmopolitan city but also gets to experience living in a desert like Sahara. Yes, it is that dusty!&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;The same thing applies to writing. I get restricted by my own thought process every time I begin to write anything about software, technology or life in general. Could it be that I'm completely burnt out by working hard over the last few years and I really need that Himalayan trip. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;Burnt Out, Working Hard. C'mon whom are you kidding? Why don't you come out of the land of the exaggerations, Now!&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;On a serious note, I just think it would be futile to write as some other person would have already expressed something similar thus what is the use of me expressing it again i.e. why to get into something called Blog Echo? But, I think I have to get over that notion as I would giving *that* thought a new life by expressing it in my own words. There is a chance that expression of my thought process might be able to showcase a new perspective to someone even though they might have heard the same thing before. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;I heard a wise saying about always making one's goals public. It doesn't mean that one might not fail but it reduces the probability of failure. So here it is, I plan to read and write more.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;Here it is to the possible winds of change! Let's see what happens. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-1806444174798024866?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/1806444174798024866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=1806444174798024866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/1806444174798024866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/1806444174798024866'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2008/01/alien-abductions.html' title='Alien Abductions'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-7675950838178051468</id><published>2007-11-07T23:48:00.001+05:30</published><updated>2008-02-03T17:20:41.340+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Development'/><title type='text'>Marriage of WCF and ASMX</title><content type='html'>&lt;p&gt;&lt;span style="font-size=2;"&gt;I never imagined that writing a simple POX based application with correct interface semantics in the current release of WCF would be such a pain. Wait. It is impossible. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size=2;"&gt;The intent was to expose a WCF service that can return POX when invoked through a regular well-formed URL with Query strings or submit HTML form data to it while doing a HTTP-POST -- Just like we used to do in the good ol' ASMX days. Guess what, this feature is not natively built into the current release of WCF. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size=2;"&gt;Well, the WCF geek would be shrugging his head right now, itching to show me the way to build WCF services that can be consumed by HTTP-GET/POST verbs and can return POX. Not so fast, boy. I'm cognizant that one can build services which can return &lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa395208.aspx"&gt;&lt;span style="font-size=2;"&gt;POX&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size=2;"&gt; but they are loosely typed i.e. they have to declare methods which can only take &lt;em&gt;Message&lt;/em&gt; type as an input. What does one do when one has to define operation contracts that need to define native data types as input parameters in the method signature? &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size=2;"&gt;Okay, I lied. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size=2;"&gt;I know there is yet a better &lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa395208.aspx"&gt;&lt;span style="font-size=2;"&gt;way&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size=2;"&gt; -- To build a router, basically a message inspector, that can route the messages to the right operation contracts by inspecting the kind of action that is desired by the user. But, can you imagine how much code one would have to write to build this router in the context of a gigantic enterprise class application? I think you already know the answer. At least, I don't want to. As a matter of fact, I cringe imagining someone writing that kind of code as it would not be maintainable in the long run. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size=2;"&gt;The good news is that WCF in .NET 3.5 would support the desired feature set out of the box but the bad news is that the upcoming framework is still in beta and to make matters worst, there isn't any confirmed release date. We have to roll out the system in production by January thus couldn't bet on the beta release. Thus, I ended up choosing ASMX to build our service delivery platform. But, I really wanted to harness the power of WCF to build the service delivery platform as it provides options galore to configure and host services. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size=2;"&gt;So, what did I end up doing? Married both the technologies. Our service interfaces have both the &lt;em&gt;WebService&lt;/em&gt; and &lt;em&gt;ServiceContract&lt;/em&gt; Attributes, the methods have both the &lt;em&gt;WebMethod&lt;/em&gt; and &lt;em&gt;OperationContract&lt;/em&gt; Attributes. We ended up created ASP.NET Web Services project and decorated the WCF tags on the services which would allow us to switch to the new framework when it comes out without compiling the code. Of course, we would have to provide the right configuration to host it as a WCF service but still we wouldn't have to touch the code. Here is how a service interface looks like --&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://bp3.blogger.com/_AnWe5Uu-jHM/RzIEAez66VI/AAAAAAAAAAo/WexZc6NoqvY/s1600-h/Services.png"&gt;&lt;span style="font-size=2;"&gt;&lt;img id="BLOGGER_PHOTO_ID_5130167331845761362" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_AnWe5Uu-jHM/RzIEAez66VI/AAAAAAAAAAo/WexZc6NoqvY/s320/Services.png" border="0" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size=2;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size=2;"&gt;This way we de-risk ourselves by not adopting a beta product but still be ready to embrace the new framework. Have you grappled with this problem and have a better solution? I would appreciate if you can take the time out to share your thought process.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-7675950838178051468?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/7675950838178051468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=7675950838178051468' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7675950838178051468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7675950838178051468'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2007/11/marriage-of-wcf-and-asmx.html' title='Marriage of WCF and ASMX'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_AnWe5Uu-jHM/RzIEAez66VI/AAAAAAAAAAo/WexZc6NoqvY/s72-c/Services.png' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-4963297176469091465</id><published>2007-07-18T22:21:00.001+05:30</published><updated>2007-07-20T13:40:33.803+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Development'/><title type='text'>Agile Crazile</title><content type='html'>&lt;p&gt;&lt;font size="2"&gt;Blasphemy! You would say.&lt;/font&gt;&lt;font size="2"&gt;It&amp;nbsp;might be,&amp;nbsp;especially when the whole software world treats agile methodologies as a panacea to all its problems. I have to admit that I've been in a perpetual state of skepticism about the benefits of agility and the fact of the matter is that I haven't found any valid reason to move out of my comfort zone of skepticism.&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;I think it tries hard to solve the problem of showing the ROI faster to the client but in the process ends up creating an even&amp;nbsp; bigger problem -- &lt;strong&gt;Chaos&lt;/strong&gt;. Chaos has ensued in almost all the&amp;nbsp;engagements that we have executed using agile methodology. Some of it definitely comes from our lack of understanding of the agile practices but most of it comes from the way&amp;nbsp;the&amp;nbsp;methodology&amp;nbsp;evangelizes the projects to be executed. IMHO, agility has got benefits but it hasn't matured yet(again, could either be&amp;nbsp;lack of our understanding or dearth of good case studies). Most of the material out there has been written by very gifted writers which ends up seducing everybody to&amp;nbsp;espouse it&amp;nbsp;but I think most of&amp;nbsp;it is bit pedantic and lacks pragmatism. Furthermore, almost all of it&amp;nbsp;has been&amp;nbsp;written&amp;nbsp;by comparing it with the wooly mammoth of Waterfall --&amp;nbsp;Waterfall is bad thus Agile is good, hence proved. Whoa! &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;What leads to this chaos? The culprit, more or less, in all the engagements&amp;nbsp;has been&amp;nbsp;the flux in requirements and the monstrosity&amp;nbsp;involved in&amp;nbsp;managing frequent&amp;nbsp;iterations. I believe the whole notion of succinct user story is somewhat misleading. It doesn't give&amp;nbsp;good enough idea to think about the design holistically and&amp;nbsp;provide enough opportunity to put hooks in place so that the system can evolve over a period of time. Think of products like Operating Systems, Office based applications, your favorite IDE, Amazon.com, eBay, iTunes&amp;nbsp;etc. -- do you really honestly believe that the engineers of these systems would have just gotten user stories, planned&amp;nbsp;them in iterations, did few design spikes, few whiteboard sessions, created "just enough" documentation, planned enough for the first few months&amp;nbsp;and starting churning out code without putting emphasis on rock solid design and what the future holds. Well, I don't think so. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;I don't think one can adopt the agile&amp;nbsp;philosophy to create systems&amp;nbsp;which target millions of users. I believe all the lofty notions of&amp;nbsp;brief user stories, design evolution and&amp;nbsp;"design is code" can be&amp;nbsp;put&amp;nbsp;on a decorative mantle in these cases. While constructing&amp;nbsp;such systems, wouldn't you want to detail out the vision of the system? Wouldn't you want to create detailed use cases from the perspectives of all the users? Wouldn't you want to take your time to design? Wouldn't you want to get submerged in creating&amp;nbsp;comprehensive documentation to convey the thought process to the army of developers rather than doing the "just enough" documentation which can lead to ambiguity? I think the cost of refactoring the design and code and deploying them again is astronomical in this context&amp;nbsp;thus it's better to follow a thorough approach rather than an agile one. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;The other thing which contributes to the crazility is frequent releases. Somehow, the development team always gets bogged down by&amp;nbsp;fixing the&amp;nbsp;critical bugs&amp;nbsp;from the previous iteration's feedback loop. One would think that the choice comes down to working on new set of requirements or bugs from the previous cycle but that generally isn't the case. Why? The thing is the development team has to roll out the agreed upon user stories and the customer also expects&amp;nbsp;the team&amp;nbsp;to fix the bugs thus the team dynamics&amp;nbsp;goes out&amp;nbsp;for a spin.&amp;nbsp;It seems to me they get tied in a vicious cycle where they are always constantly refactoring the design and code to accommodate the new set of changes.&amp;nbsp;It is like a&amp;nbsp;dog chasing its tail. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;The problem worsens when one doesn't have strong program management in place which can't push back and educate the customer about its fallout on the team dynamics. Ultimately the developer team&amp;nbsp;has to work longer hours at work. This defeats one of the core objectives of agile which mandate the developers work only 40 hours week in regular iteration followed by a sprint towards the roll out of the product. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Don't get me wrong, I absolutely love the idea of&amp;nbsp;frequent iterations as it&amp;nbsp;provides real value to the customers as they get to be part of the growth of their software but detest it for its repercussions on team dynamics. I love it as&amp;nbsp;it gives the customer an opportunity to provide early feedback to the team but abhor how the development team has to work long hours to incorporate that feedback. &lt;/font&gt;&lt;font size="2"&gt;I think the core of both the above problems is that agile methodology believes there would be enough time to build the software the right way&amp;nbsp;but the fact of the matter is that&amp;nbsp;software is always conceived by a strong time bound market need and, the software would gather dust if it was to miss that timeline. In my experience, I've&amp;nbsp;not once seen a piece of software being constructed&amp;nbsp;without a &lt;strong&gt;&lt;u&gt;time bound market need&lt;/u&gt;&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;I&amp;nbsp;believe most of the&amp;nbsp;agile practices&amp;nbsp;are best suited for&amp;nbsp;a very ideal software construction setting where the developer works in tandem with the customer and both of them somehow magically agree on all timelines and what features have to be constructed.&amp;nbsp;I&amp;nbsp;think that kind of&amp;nbsp;framework would let developers easily manage the flux in requirements and incorporate the changes from the feedback loop without any added pressure. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Nonetheless, as I said in the beginning, I'm a skeptic,&amp;nbsp;but still working passionately towards&amp;nbsp;to become a believer as there are lot of merits in following agility. Thus, I'm currently reading two of the famous works on Agile which have been recommended to me by people I respect a lot --&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;1. &lt;/font&gt;&lt;a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/ref=pd_bbs_2/105-9912162-3022818?ie=UTF8&amp;amp;s=books&amp;amp;qid=1182146598&amp;amp;sr=8-2"&gt;&lt;font size="2"&gt;Agile Principles, Patterns, and Practices in C#&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; by Robert C. Martin&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;2. &lt;/font&gt;&lt;a href="http://www.amazon.com/Agile-Management-Software-Engineering-Constraints/dp/0131424602/ref=pd_bbs_sr_3/002-4461132-6496063?ie=UTF8&amp;amp;s=books&amp;amp;qid=1184772882&amp;amp;sr=1-3"&gt;&lt;font size="2"&gt;Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; by David Anderson&lt;/font&gt;  &lt;p&gt;&lt;font size="2"&gt;I would love to hear any thoughts on how to execute projects on agile&amp;nbsp;methodology, especially some good case studies of executing large scale enterprise projects. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Got Thoughts?&lt;/font&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font size="2"&gt;&lt;font size="1"&gt;PS - Thanks to my friend Rajeev Singh for coming up with a very creative name for the problems we are facing on daily basis&amp;nbsp;i.e.&lt;/font&gt; Crazy + Agile = Crazile&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-4963297176469091465?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/4963297176469091465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=4963297176469091465' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/4963297176469091465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/4963297176469091465'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2007/07/agile-crazile.html' title='Agile Crazile'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-1377252079016650359</id><published>2007-07-12T15:40:00.001+05:30</published><updated>2007-07-12T15:41:57.229+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='General'/><title type='text'>6th Sense</title><content type='html'>&lt;h6&gt;&lt;font size="2"&gt;Starring: Malcolm Crowe (The Developer), Cole (The Program Manager)&lt;/font&gt;&lt;/h6&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;img src="http://byfiles.storage.msn.com/y1pOI5VtXC7_1IlfDoSTX5P8qHDfiG0OePR9hEAz3TvM0vSYrLp5NwKNSM42QGWVGRJ"&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;"I see dead people!"&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Probably one of the most famous movie lines of all time, isn't it? The movie takes one through the journey of a child psychologist Malcolm Crowe who dedicates himself to heal Cole, a young boy who sees dead people, but in the end Cole ends up healing Malcolm by making him realize that he is dead! – This is something which sets Malcolm free from all the pain he was bringing on himself. Sorry to break the plot to all those who have been living in a cave since the last 8 years and didn't get a chance to see this movie in a hot 'n' happening Caveatre(Theatre in a Cave).&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;You ask what on earth this movie has to do with ".NET Development + Architecture + Perspectives"? Well, it has everything to do with the all-knowing, self-acclaimed superhero we know as software engineer a.k.a Malcolm Crowe. I think the reality that sun is about to set on him is going to hit him hard, the sudden pang of realization that he wouldn't be the reigning king of Softwareopotamia will be a severe blow to his ego. But, the ultimate question is, would this realization set him free or would he imprison himself in the cage of depression? Would he able to overcome that Cole, the Program Manager, is the one who will help him bring his suffering to end?&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Malcolm, who thinks that a software can’t be conceived without him (rightfully so) and he should decide the timelines of constructing one, is in for a surprise. He who elevates himself to the status of a Geek God by spending long hours at work is in for rude awakening. He who thinks that he is&amp;nbsp;know-all and can help Cole is in for shock as the tables are about to be turned on him.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;So, what is going to happen at climax? Well, enters 6th Sense in the next scene. Now, wait a minute, how can a movie itself enter in its own scene? Isn’t it recursive? Betcha! But, I’m not talking about the movie. Please, give me some credit, will you? I’m talking about &lt;/font&gt;&lt;a href="http://www.6thsenseanalytics.com/"&gt;&lt;font size="2"&gt;6th Sense, the Analytics product --&lt;/font&gt;&lt;/a&gt; &lt;p&gt;&lt;font size="2"&gt;“6th Sense Analytics™ is a hosted software solution that automatically and unobtrusively collects the metrics that organizations need to understand the execution of software development projects. Whether the work is onshore, offshore, in-house or outsourced, 6th Sense Analytics brings the software development process into focus, ensuring your projects are on time, on budget, and on target with business goals.”&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;What does this mean for Malcolm? Short answer, this means the big brother a.k.a the Program Manager a.k.a Mr. Cole is going to be watching you!! Long answer, it means that data sensors will be installed on your machine which will monitor your favorite IDE to collect metrics about how you program, when you program, when are you best at programming a.k.a Flow Time and what is your overall velocity? &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Malcolm&lt;/strong&gt;: Say What?&lt;br&gt;&lt;strong&gt;Cole&lt;/strong&gt;: Sorry, I told you that you were in for a rude awakening.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Malcolm&lt;/strong&gt; (panting): How can they?&lt;br&gt;&lt;strong&gt;Cole&lt;/strong&gt;: Well, I can understand but the fact of the matter is that it’s not your hobby project that someone is monitoring. People are investing real money for you to construct software for them. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Malcolm&lt;/strong&gt; (furious now): Software is like an art not a science!! How do you expect me to program when someone is watching over my shoulder?&lt;br&gt;&lt;strong&gt;Cole&lt;/strong&gt;: [Pause], Well, you are right! It does add some extra pressure for one to constantly produce which might affect the overall quality of the software as one might be in the race of being the most productive person. But, in the end, this is being done just to monitor the overall velocity of a developer like you. You can choose not to indulge in the rat race of producing X number lines of code per day. This product would just give you a metric of how much work can you get accomplished per day. This in turn would help you estimate future projects better. Not to mention, it provides lot of transparency to the Program Manager and the customer about all your hard work. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;Malcolm&lt;/strong&gt;: hmm….May be it is for good, I think I would have to try it for myself. So, how does this work again?&lt;br&gt;&lt;strong&gt;Cole&lt;/strong&gt;: Here it is -- &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;img src="http://byfiles.storage.msn.com/y1pOI5VtXC7_1IpTCGiQRpVqpcI-VIjggQ1Q_BuHnwhvJrkHwMk6p8F18gkN37j2hV4"&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;I'm betting that this realization would set Malcolm free and would make him an informed developer if not a better one. I think this in turn will help the entire ecosystem of software engineering companies like ours. So, all the Malcolms in Globallogic, please be ready to embrace the new productivity analytic tool as we have forged an alliance with 6th Sense analytics company to integrate this product in our home grown &lt;/font&gt;&lt;a href="http://www.globallogic.com/globallogic/Forms/WhitepaperDownload.aspx?id=Velocity(1).pdf"&gt;&lt;font size="2"&gt;Velocity Platform&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt; -- &lt;/font&gt;&lt;a href="http://opensource.sys-con.com/read/399503.htm"&gt;&lt;font size="2"&gt;http://opensource.sys-con.com/read/399503.htm&lt;/font&gt;&lt;/a&gt; &lt;p&gt;&lt;font size="2"&gt;So, What is Velocity? -- &lt;br&gt;"The Velocity™ Method is a blueprint of processes, artifacts and role definitions that have been refined over 1,000 product releases to quickly bring high-quality products to market."&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Here is our ideal Velocity configuration --&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;img src="http://byfiles.storage.msn.com/y1pOI5VtXC7_1Jv0E7v4CMOmk3fqnkYPpZcQi-X2wxSll9TgwS4P1Cgg_XT6zOPANrf"&gt;&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;I think this alliance would go a long way in helping us become a leader not only in the quality of Software construction but transparency as well. Now, how much impact does&amp;nbsp;this&amp;nbsp;"&lt;strong&gt;Mr. Big Brother Watching You&lt;/strong&gt;" product&amp;nbsp;has on&amp;nbsp;developer's productivity&amp;nbsp;is&amp;nbsp;need to be seen. &lt;/font&gt; &lt;p&gt;&lt;strong&gt;&lt;font size="2"&gt;Thoughts? &lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-1377252079016650359?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/1377252079016650359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=1377252079016650359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/1377252079016650359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/1377252079016650359'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2007/07/6th-sense.html' title='6th Sense'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-127259887767655539</id><published>2007-07-12T15:36:00.001+05:30</published><updated>2007-07-12T15:36:10.333+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Management'/><title type='text'>Managers are from Mars, Developers are from Venus</title><content type='html'>&lt;p&gt;&lt;font size="2"&gt;Really?&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;It turns out to be true. If you don’t trust me, please check it out in your team, in the team next to your cubicle, in your company or at a local theatre near you.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Be warned that this has been written from a perspective of a developer thus certain language might be unsuitable for managers especially newly conceived managers – This gibberish has been rated &lt;b&gt;MMG&lt;/b&gt;. Thus, &lt;b&gt;M&lt;/b&gt;anager of &lt;b&gt;M&lt;/b&gt;anagers &lt;b&gt;G&lt;/b&gt;uidance might be required while reading it.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;What really makes us different? Don’t our hearts beat in similar fashion, don’t we go through the similar rhythms of life, doesn’t the thought of a chilled Corona with lime on a sunny afternoon evoke a similar&amp;nbsp;response from&amp;nbsp;us, don’t we perceive reality the same way (ya kiddin’ me?), and don’t we communicate and express our thought process alike (you really pushin’ it now)?&lt;/font&gt; &lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;PS – I guess the similarity stopped at our hearts beating in similar fashion.&lt;/font&gt;&lt;/em&gt; &lt;p&gt;&lt;font size="2"&gt;But, most importantly, we have the same lowest common&amp;nbsp;denominator!! Managers were also developers at one point in their lives but, unfortunately, they mutate once they are beamed out of the &lt;em&gt;bit&lt;/em&gt; world. Nonetheless, can peaceful bilateral relationships exist between Mars and Venus, Managers and Developers? Is there hope?&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Short Answer, &lt;b&gt;Yes&lt;/b&gt;.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;Long Answer, &lt;b&gt;Y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&lt;b&gt;e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/b&gt;&amp;nbsp;&lt;b&gt;s&lt;/b&gt; :)&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;If you are a manager and think your developers are on a totally different plane, please read on.So, what kind of attributes can bring you closer to your group of developers? Here is my simple list, please feel free to add/remove or critique it all together -- &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;Technical Competence&lt;/b&gt; – Show me a manager without technical competence and I will show you a manager who is not very well respected among the developers. Well, you may get lot of brownie points for being a great human being or having a charismatic personality but you won’t ever be able to be one of the guys if you don’t have a technical bone in your body. I’m not saying one has to have a degree in computer science but decent understanding about what your team does on a daily basis is definitely a must. Furthermore, how can you really act as a conduit to&amp;nbsp;the success of your kick-ass developers or&amp;nbsp;mouth off&amp;nbsp;their accomplishments in front of your customers and senior management if you don’t understand technology? I believe this attribute also&amp;nbsp;helps you to kick ass when it really comes down to marrying business needs with the technology roadmap.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;s&gt;Autocracy &lt;/s&gt;&lt;b&gt;Democracy&lt;/b&gt; – How hard it is to get rounded decisions by taking a holistic perspective of the team? I think if you are one of the managers who micro manage things or takes decision in autocratic way then you really have to figure out a way to change yourself. There are times when autocratic decisions are required but they should be few and far between. IMHO, one only stands to gain by listening from the people who are in touch with ground reality a.k.a code a.k.a the software.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;Ability to manage ambiguity&lt;/b&gt; – I think majority of the developers are generally much contended with creating bits and lack the overall business perspective somewhat. I think a manager would score really high on the developer’s &lt;i&gt;respect-o-meter&lt;/i&gt; if he can bring in some level of clarity to ever changing business needs and articulate that in technical context. Yes, articulation in technical context. Not sure, how is this possible? Please look at point number 1.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;Playing to their Strengths&lt;/b&gt; – I think one of the reasons project fail or are behind schedule is that developers don’t play according to their skills. I think one can only have a highly productive team and developers with a healthy swagger if one plays according to their strengths. In my experience, most of the managers generally have this attribute imbibed in their DNA as they are born with the natural instinct of mitigating risk. But, if you think you are not one of the lucky ones, then you would have to collaborate with your developers at a deeper level to understand what moves them. In case, you are not in a position to figure out the strengths then I would suggest following &lt;a href="http://www.scottberkun.com/blog"&gt;Scott Berkun’s&lt;/a&gt; advice of asking a developer how you can help them shine or kick-ass in the project.&lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;Growing Talent&lt;/b&gt; – Playing to your team’s strength alone is not enough you really have to help them grow. I don’t mean helping them climb the corporate ladder faster but helping them realize their true potential. It means either mentoring them or helping them find the right mentor. It means helping them to take on lateral tasks which might not be part of their core skill set. I think developers are generally more productive and committed if they think they are following a well laid out plan.&lt;/font&gt; &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;Technical Competence $30 &lt;br&gt;Playing to their Strengths $25 &lt;br&gt;Helping your team grow $25 &lt;br&gt;Ability to manage ambiguity $20 &lt;br&gt;Standing up to defend the rights of your team, Priceless! &lt;/font&gt;&lt;/em&gt; &lt;p&gt;&lt;font size="2"&gt;Before you go on a rant complaining about this, please bear in mind that this has been written by a New Manager&amp;nbsp;On The Block&amp;nbsp;who is still learning the ways of being an effective manager. &lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-127259887767655539?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/127259887767655539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=127259887767655539' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/127259887767655539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/127259887767655539'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2007/07/managers-are-from-mars-developers-are.html' title='Managers are from Mars, Developers are from Venus'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-416428088203286650</id><published>2007-07-12T15:17:00.001+05:30</published><updated>2007-07-12T15:36:37.046+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Development'/><title type='text'>Designing Windows Folder Structure</title><content type='html'>&lt;p&gt;&lt;font size="2"&gt;For the first time, I was let down by my esteemed &lt;strong&gt;GSP(Google Search Professional)&amp;nbsp;&lt;/strong&gt;credentials when I couldn't search for a single white paper or article&amp;nbsp;about data segmentation techniques&amp;nbsp;for storing large number of files on a disk. Thus, I had to spend&amp;nbsp;couple of&amp;nbsp;hours to create a test harness and gather results to figure out the optimal number of files in a folder. &lt;/font&gt; &lt;h5&gt;&lt;strong&gt;The Context&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;&lt;font size="2"&gt;We have&amp;nbsp;tens of millions&amp;nbsp;of files to be served from our media server and we were looking for optimally arranging them in a folder structure so that it doesn't impact performance. The options were either stuffing files on a single folder or creating a hierarchial structure of folders to store these files. If we were to opt for the latter then we had to solve another problem -- the optimal number of folders in a given folder? (It turns out that this really is not a problem as the performance level for files and directories are very comparable) &lt;/font&gt; &lt;h5&gt;&lt;strong&gt;The Approach&lt;/strong&gt;&lt;/h5&gt; &lt;p&gt;&lt;font size="2"&gt;I decided to write a simple program which would create N number of files in a folder and would then try to locate a particular file by its name. It turned out to be very simple program to write but I had lot of "doh" moments while running the program. For creating the files, I just created a simple method to copy an image file and paste it with a unique name -- &lt;/font&gt;&lt;pre class="csharpcode"&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; CreateFiles(&lt;span class="kwrd"&gt;int&lt;/span&gt; numberOfFiles)&lt;br /&gt;   {&lt;br /&gt;        Stopwatch stopWatch = Stopwatch.StartNew();&lt;br /&gt;        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; numberOfFiles; i++)&lt;br /&gt;           File.Copy(sourceFile, path + &lt;span class="str"&gt;"thermometer"&lt;/span&gt; + i + &lt;span class="str"&gt;".jpg"&lt;/span&gt;);&lt;br /&gt;        stopWatch.Stop(); &lt;br /&gt;&lt;br /&gt;        Console.WriteLine(&lt;span class="str"&gt;"It took {0} seconds to create {1} files"&lt;/span&gt;, stopWatch.ElapsedMilliseconds/1000, numberOfFiles);&lt;br /&gt;        Console.Read();&lt;br /&gt;   } &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font size="2"&gt;And, to locate a file -- &lt;/font&gt;&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; LocateFile(&lt;span class="kwrd"&gt;string&lt;/span&gt; filePath)&lt;br /&gt;    {&lt;br /&gt;         Stopwatch stopper = Stopwatch.StartNew();&lt;br /&gt;         &lt;span class="kwrd"&gt;bool&lt;/span&gt; isFound = File.Exists(filePath);&lt;br /&gt;         Console.WriteLine(isFound);&lt;br /&gt;         stopper.Stop(); &lt;br /&gt;&lt;br /&gt;         Console.WriteLine(&lt;span class="str"&gt;"It took {0} milliseconds to find the file"&lt;/span&gt;, stopper.ElapsedMilliseconds);&lt;br /&gt;         Console.Read();&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt;	font-size: small;&lt;br /&gt;	color: black;&lt;br /&gt;	font-family: consolas, "Courier New", courier, monospace;&lt;br /&gt;	background-color: #ffffff;&lt;br /&gt;	/*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt;	background-color: #f4f4f4;&lt;br /&gt;	width: 100%;&lt;br /&gt;	margin: 0em;&lt;br /&gt;}&lt;br /&gt;.csharpcode .lnum { color: #606060; }&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;font size="2"&gt;I ran the program for the following configurations -- &lt;/font&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;1,000 files in a folder&lt;/font&gt; &lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;10,000 files in a folder&lt;/font&gt; &lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;15,000 files in a folder&lt;/font&gt; &lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;18,000 files in a folder&lt;/font&gt; &lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;1,000 files residing in their own unique folders. Thus, it had 1,000 folders.&lt;/font&gt; &lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;10,000 files residing in their own unique folders. Thus, it had 10,000 folders.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h5&gt;&lt;strong&gt;The Results&lt;/strong&gt;&lt;/h5&gt;&lt;br /&gt;&lt;p&gt;&lt;font size="2"&gt;I ran the tests in a single user mode on WindowsXP with 1.6 GHz single core, 1 Gb of RAM laptop having a 5400 RPM disk. I've taken out the results for configuration #5 and #6 as they were identical to #1 and #2 respectively. &lt;/font&gt;&lt;br /&gt;&lt;p&gt;&lt;font size="2"&gt;&lt;img src="http://byfiles.storage.msn.com/y1pOI5VtXC7_1KOmfz_BD2FUkRpl7sKHFtzRJYBQNefCK423POsBOIKyuFtbds5xGSL"&gt; &lt;/font&gt;&lt;br /&gt;&lt;p&gt;&lt;font size="2"&gt;Our overall SLA to serve an image is 500&lt;em&gt;ms&lt;/em&gt; thus we want the image retrieval&amp;nbsp;cost to be&amp;nbsp;within 40-50&lt;em&gt;ms&lt;/em&gt;&amp;nbsp;as the application has to fire business rules before serving an image. According to the test results, I've come to the conclusion that the ideal size for our case is really &lt;strong&gt;10K files in folder&lt;/strong&gt; as the OS was able to serve an image&amp;nbsp;in 37&lt;em&gt;ms&lt;/em&gt; at the first invocation and 6&lt;em&gt;ms&lt;/em&gt; in the subsequent invocations. The overall strategy that has been devised is -- &lt;/font&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;Create a Hash function which can take the name of the image file and output the folder name. The folder name will not be more than 4 digits so that it can support maximum of 10k entries.&lt;/font&gt; &lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;Create folders underneath the hashed folder with the unique ids(For our case, it would never be more than 10K at this level)&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h5&gt;Next Steps&lt;/h5&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;Create an ASP.NET site which would serve the images. &lt;/font&gt;&lt;br /&gt;&lt;li&gt;&lt;font size="2"&gt;Run the ASP.NET site in a program like JMeter to check the results in a multi user mode.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;font size="2"&gt;Please feel free to comment on the above approach and share your experiences in case you have designed for such a scenario. &lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-416428088203286650?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/416428088203286650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=416428088203286650' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/416428088203286650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/416428088203286650'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2007/07/designing-windows-folder-structure_12.html' title='Designing Windows Folder Structure'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8061517553075354641.post-7054416644252000211</id><published>2007-07-12T15:01:00.001+05:30</published><updated>2007-07-12T15:10:53.597+05:30</updated><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Development'/><title type='text'>Attribute Driven Architecture</title><content type='html'>&lt;p&gt;&lt;font size="2"&gt;I think it's an Architect's primary responsibility to come up with the most bizzare and ambiguous terms to define very simple constructs - We somehow have to show that we exist for a reason :). I was recently asked to take a session on Arch. 101 to share the things that we consider before creating architecture. Thus sprung the idea of discussing all the "abilities" and how they act as a conduit to come up with the complete technology roadmap. Here is my perspective on all the design principles that can be followed to promote one ability over another -- &lt;/font&gt; &lt;p align="center"&gt;&lt;font size="2"&gt;&lt;em&gt;&lt;b&gt;Thou shalt not make architecture without having an ability in mind&lt;/b&gt;&lt;/em&gt; &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;What are these so-called abilities and how do they come in play while crafting the blueprint of an application? &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font size="2"&gt;Maintainability &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;Performability(is that even a word?) a.k.a Performance &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;Scalability &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;Reliability &lt;/font&gt; &lt;li&gt;&lt;font size="2"&gt;Flexibility&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;em&gt;&lt;font size="2"&gt;By the way, there are plethora of abilities but I will cover the important ones which come in play&amp;nbsp;often enough. &lt;/font&gt;&lt;/em&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;Maintainability&lt;/b&gt; -- It is defined as an ability of a system to undergo repair and evolution. Following principles can help one achieve this ability –&amp;nbsp; &lt;/font&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Modularization&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;S&lt;/b&gt;ingle &lt;b&gt;R&lt;/b&gt;esponsibility &lt;b&gt;P&lt;/b&gt;rinciple – One should design classes in such a way that there is only a single focus for change. &lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;O&lt;/b&gt;pen-&lt;b&gt;C&lt;/b&gt;losed &lt;b&gt;P&lt;/b&gt;rinciple – One should design frameworks which are open for extension but closed for modification&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;L&lt;/b&gt;iskov &lt;b&gt;S&lt;/b&gt;ubstitution &lt;b&gt;P&lt;/b&gt;rinciple – One should design sub-types which are substitutable for their base types. &lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Guidelines for Writing Good and Readable Code -- I'm cognizant that this is really not a design principle but helps tremendously in creating maintainable applications. &lt;/font&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;i&gt;Performance&lt;/i&gt;&lt;/b&gt; – It is defined as the responsiveness of the system. Keeping the following principles in mind can help build a high performance application --&amp;nbsp; &lt;/font&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Caching – One can follow the W3 principle of Caching – What to cache, When to Cache and Where to Cache.&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Asynchronous Behavior&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Coarse Grained Interfaces – Chunky interfaces always perform better than the Chatty ones. &lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Data Partitioning&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Efficient Resource Management&lt;/font&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;i&gt;Scalability&lt;/i&gt;&lt;/b&gt; – It is defined as the ability to maintain performance while system demand increases. Following design principles can help build a scalable application --&amp;nbsp; &lt;/font&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Layering&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Loose Coupling&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Data Partitioning&lt;/font&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;i&gt;Reliability&lt;/i&gt;&lt;/b&gt; – It is defined as the ability of the system to keep operating over a period of time. Designing the system while keeping the following things in mind promote reliability – &lt;/font&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Robustness&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Clustering&lt;/font&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;&lt;i&gt;Flexibility&lt;/i&gt;&lt;/b&gt; – It is defined as the ease with which a system can be modified for use in applications or environments other than those for which it were specifically designed. Following principles promote flexibility of a system --&amp;nbsp; &lt;/font&gt; &lt;ul&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Layering&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Loose Coupling&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;S&lt;/b&gt;ingle &lt;b&gt;R&lt;/b&gt;esponsibility &lt;b&gt;P&lt;/b&gt;rinciple &lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;O&lt;/b&gt;pen-&lt;b&gt;C&lt;/b&gt;losed &lt;b&gt;P&lt;/b&gt;rinciple&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;Code To Interface&lt;/font&gt;&lt;/p&gt; &lt;li&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;I&lt;/b&gt;nterface &lt;b&gt;S&lt;/b&gt;egregation &lt;b&gt;P&lt;/b&gt;rinciple&lt;/font&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font size="2"&gt;Of course, there are always trade-offs one need to consider when thinking of one ability over another. For example, if one is designing for flexibility that one should be ready to let go of some performance constraints. &lt;/font&gt; &lt;p&gt;&lt;font size="2"&gt;&lt;b&gt;References&lt;/b&gt; – &lt;b&gt;&lt;a href="http://blogs.msdn.com/gabriel_morgan/archive/2007/03/20/implementing-system-quality-attributes.aspx"&gt;Implemeting System Quality Attributes&lt;/a&gt;&lt;/b&gt; by Gabriel Morgan&lt;/font&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8061517553075354641-7054416644252000211?l=tarunkohli.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tarunkohli.blogspot.com/feeds/7054416644252000211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8061517553075354641&amp;postID=7054416644252000211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7054416644252000211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8061517553075354641/posts/default/7054416644252000211'/><link rel='alternate' type='text/html' href='http://tarunkohli.blogspot.com/2007/07/attribute-driven-architecture_12.html' title='Attribute Driven Architecture'/><author><name>Tarun Kohli</name><uri>http://www.blogger.com/profile/01091625286209636583</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01798280771890895958'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>