<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Coding Craft</title>
	<atom:link href="http://codingcraft.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://codingcraft.wordpress.com</link>
	<description>Microsoft.Net and the craft of Coding</description>
	<lastBuildDate>Sun, 18 Dec 2011 23:37:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='codingcraft.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Coding Craft</title>
		<link>http://codingcraft.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://codingcraft.wordpress.com/osd.xml" title="Coding Craft" />
	<atom:link rel='hub' href='http://codingcraft.wordpress.com/?pushpress=hub'/>
		<item>
		<title>BDD with SpecFlow</title>
		<link>http://codingcraft.wordpress.com/2011/12/17/bdd-with-specflow/</link>
		<comments>http://codingcraft.wordpress.com/2011/12/17/bdd-with-specflow/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 05:11:20 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[BDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=297</guid>
		<description><![CDATA[Behavior Driven Development (BDD) is about defining the system as a collection of behaviors and then let these behaviors drive rest of the development work. Building on my previous post , this post will have us dive deeper into the concepts of BDD. In order to understand BDD better and see the some of the concepts around it in real [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=297&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Behavior Driven Development (BDD) is about defining the system as a collection of behaviors and then let these behaviors drive rest of the development work. Building on my <a href="http://codingcraft.wordpress.com/2011/11/12/bdd-get-your-tdd-right/">previous post </a>, this post will have us dive deeper into the concepts of BDD. In order to understand BDD better and see the some of the concepts around it in real action, we will use a popular tool called <a href="http://www.specflow.org/">SpecFlow</a> from <a href="http://www.techtalk.at/">TeckTalk</a>. Tools like SpecFlow facilitate communication between the business experts and the developers by allowing them to use a common platform to define executable system behaviors.</p>
<p>Before we jump into SpecFlow, let us get some of the terms and nomenclatures around this tool straightened. We will be using some of these terms over and over again in the course of this post. Two such very important terms are <em>Feature</em> and <em>Scenario</em>.</p>
<p><em>Feature</em> &#8211; a logical unit of functionality which has a business value. For example, the ability to add a customer to the system is a feature, or the ability to send an email with the product catalog to a customer can also thought to be another feature. Creation of the &#8220;CUSTOMER_MASTER&#8221; table in the database in not a feature.</p>
<p><em>Scenarios</em> &#8211; different conditions around a feature and the system&#8217;s expected behavior against these conditions. For example, if the customer is successfully added to the system, the user should be taken to customer-list page. If the customer is not successfully added then the user should remain in the same page and the reason of failure must be displayed.</p>
<p>In order to understand the idea of Feature and Scenario better, let us use an overly simplified feature for an example. Let us assume that we want to build a feature called &#8220;Customer Addition&#8221;. As the name suggests, we intend to develop a Feature which will allow the user to add a customer to the system. Let&#8217;s say we come up with two scenarios &#8211; First, when the user is successfully added to the system, and second when the user is not successfully added to the system.</p>
<p>SpecFlow uses  english-like language called <a href="https://github.com/cucumber/cucumber/wiki/Gherkin">Gherkin</a> to write these Features and Scenarios. Gherkin is a <a href="http://en.wikipedia.org/wiki/Domain-specific_language">DSL(Domain Specific Language)</a> and hence can be understood by the Business folks and the SMEs quite easily. Gherkin uses .feature file to specify a Feature. The Feature keyword marks the beginning of a feature. For more details on the syntax of Feature see this <a href="https://github.com/cucumber/cucumber/wiki/Feature-Introduction">link</a>. This descriptive text in nature and is used to describe what the feature is supposed to do. It need not necessarily follow a particular convention or pattern. SpecFlow recommends using the following template though.</p>
<table width="98%" border="1" cellpadding="0">
<tbody>
<tr>
<td width="90%"><em>In order to [reason]</em><br />
<em>As a [role]</em><br />
<em>I want to [functionality]</em></td>
</tr>
</tbody>
</table>
<p>A Feature typically consists of one or more Scenarios. The scenarios must follow the <a href="https://github.com/cucumber/cucumber/wiki/Given-When-Then">Given-When-Then</a> syntax,</p>
<table width="98%" border="1" cellpadding="0">
<tbody>
<tr>
<td width="90%"><em>Given &#8211; precondition or the state of the System (Under Test) prior to the action</em><br />
<em>When &#8211; action taken</em><br />
<em>Then &#8211; result or the state of the System (Under Test) after the action</em></td>
</tr>
</tbody>
</table>
<p>Okay! Back to our &#8220;Customer Addition&#8221; feature. SpecFlow installs few templates in the Visual Studio. One such template is called <em>SpecFlow Feature File</em> and has the .feature extension. Let us create our feature using the SpecFlow Feature File and name it CustomerAddition.feature. In light of the conventions discussed earlier in the post, the feature should look something like this,</p>
<table width="98%" border="1" cellpadding="0">
<tbody>
<tr>
<td width="90%"><span style="color:#0000ff;">Feature:</span> Add a Customer<em>In order to maintain the customer&#8217;s information</em><br />
<em>As the authorized user of the system</em><br />
<em>I want to add a customer to the system</em><span style="color:#0000ff;">Scenario:</span> Customer Added successfully<br />
<span style="color:#0000ff;">Given</span> the following customer<br />
|<span style="color:#800000;"><em>Name</em>  </span>|<span style="color:#800000;"><em>Phone </em> </span>|<span style="color:#800000;"><em>Address</em>    </span>|<br />
<span style="color:#000000;">|Rob  |678-826-6675 |514 M cricle, Atlanta, GA 30328 |</span><br />
<span style="color:#0000ff;">When</span> I click &#8220;Add&#8221;<br />
<span style="color:#0000ff;">Then</span> go to the customer-list page and display the added customer</p>
<p><span style="color:#0000ff;">Scenario:</span> Customer not Added successfully<br />
<span style="color:#0000ff;">Given</span> the following customer<br />
|<span style="color:#800000;"><em>Name</em>  </span>|<span style="color:#800000;"><em>Phone</em>  </span>|<span style="color:#800000;"><em>Address </em>   </span>|<br />
<span style="color:#000000;">|Jane|678-826-6675 |120 Park Dr, GA 30300 |</span><br />
<span style="color:#0000ff;">When</span> I click &#8220;Add&#8221;<br />
<span style="color:#0000ff;">Then</span> stay in the same page and display the error</td>
</tr>
</tbody>
</table>
<p>What is actually happening here is that every time the Feature file is saved, SpecFlow parses it and generates a code-behind file for it. Under the hood, all this generated piece of code essentially does is call few methods (tests) for these <em>Given, When </em>and<em> Then</em> statements. If we go ahead and try to run our Feature file (using MSTest or NUnit) at this point, we will see that SpecFlow is complaining that it does not find a matching step definition for the <em>Given, When </em>or<em> Then</em> statements.</p>
<table width="98%" border="1" cellpadding="0">
<tbody>
<tr>
<td width="90%">   <br />
No matching step definition found for the step. Use the following code to create one:<br />
    [Binding]<br />
    public class StepDefinitions<br />
    {<br />
        [Given(@"the following customer")]<br />
        public void Given(Table table)<br />
        {<br />
            ScenarioContext.Current.Pending();<br />
        }<br />
    } </td>
</tr>
</tbody>
</table>
<p>Let&#8217;s go ahead and add something called the <em>SpecFlow Step Definition</em> file from the Visual Studio. A Step Definition File tells the runtime which method (step) should be executed for a <em>Given</em> or <em>When</em> or the <em>Then</em> statement. This wiring up is done by the [Binding] attribute that decorates the StepDefinition class. If our Step Definition Class were called the CustomerAdditionStep, then using the generated code in the error message we can create a class which would look like the following,</p>
<table width="98%" border="1" cellpadding="0">
<tbody>
<tr>
<td width="90%">   <br />
    [Binding]<br />
    public class CustomerAdditionStep<br />
    {<br />
        [Given(@"the following customer")]<br />
        public void Given(Table table)<br />
        {            <br />
            // &#8230;..<br />
            //Implement the tests and asserts here<br />
         }<br />
    }<br />
 </td>
</tr>
</tbody>
</table>
<p>We can write tests and assertions using these methods and automate a business scenario using these step definitions.</p>
<p>This is a very simple demonstration of how a tool (SpecFlow in this example) can be used to provide a common platform for both business and the development folks to be able to collaborate, develop a shared understanding of the system and then be able to automate that shared understanding. In other words, SpecFlow allows the devs and the BAs to collaborate and define executable behaviors for the system (in terms of scenario) and then let these set of behaviors drive the development of rest of the system.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/297/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=297&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2011/12/17/bdd-with-specflow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>
	</item>
		<item>
		<title>Get Your TDD Right with BDD</title>
		<link>http://codingcraft.wordpress.com/2011/11/12/bdd-get-your-tdd-right/</link>
		<comments>http://codingcraft.wordpress.com/2011/11/12/bdd-get-your-tdd-right/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 13:47:28 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[BDD]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=282</guid>
		<description><![CDATA[If you have been using TDD (Test Driven Development) or even maintaining unit-tests at some level, then probably you have already been using these tests as a means to express the business requirement. Writing unit tests before writing the actual implementation code is undoubtedly a very good exercise to brainstorm and understand problem before making an attempt [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=282&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you have been using TDD (Test Driven Development) or even maintaining unit-tests at some level, then probably you have already been using these tests as a means to express the business requirement. Writing unit tests before writing the actual implementation code is undoubtedly a very good exercise to brainstorm and understand problem before making an attempt to solve it. But for developers who are writing these tests, there is always a chance of missing out something of business importance or misinterpreting a business requirement. In other words, though these tests might be good for many things but they hardly make any attempt to bridge the age old gap between the business needs and the code development.</p>
<p>Another ailing thing about TDD is the name itself. &#8216;Test&#8217; driven development is hardly about testing. It has never been about doing the tester&#8217;s job. Many people would say TDD is and has always been about <a href="http://codingcraft.wordpress.com/2010/10/16/code-for-testability/">good design</a>. I do not completely agree with that either. Good design is a very good by-product of TDD, but that&#8217;s not the primary purpose of TDD. The very name and the nomenclature around it, words like <em>Test</em>, <em>Assertion</em> etc, influences the brain (<a href="http://en.wikipedia.org/wiki/Linguistic_relativity">Sapir–Whorf hypothesis</a>) compels it to think that TDD has got something to do with testing.</p>
<p>TDD also requires a fundamental shift in focus as a developer. For decades we developers have been thinking about those grand software designs up-front, creating the databases, the data-access classes, the business facades, re-usable components and what not before addressing the actual business needs in small bits. TDD done right demands for a drastic change in this mindset. It requires the developer to think about the business needs first. Pick a very tiny slice from it which still has a business value and write only as much code that is required to implement this piece of business value. Really, this might not be the most intuitive thing to do for most of the developers. Moreover, this &#8216;no up-front design&#8217; idea (though I do not completely agree with it) does not work in the best interest of someone like me who sell themselves as &#8216;Architects&#8217;. Pun intended!</p>
<p>No wonder so many teams struggle to get TDD right.</p>
<p>Due to some of these inherent problems with TDD and the huge gray area without sufficient guidelines on what and how much to test, people like <a href="http://dannorth.net/">Dan North</a> came out with the idea of BDD a.k.a. Behavior Driven Development. The idea behind BDD is pretty simple. The idea is to provide a common tool and guideline to both the business and development folks. This tool/guideline would allow the business analysts and SME&#8217;s to write the business requirements (in a specified format) using english-like language. They would write the different business scenarios around the requirement. In other word, they would define the &#8216;Behavior&#8217; of the system. The same tool would be able to generate or at least guide developers write the test-cases from these scenarios. The developers would implement these test-cases one by one and make all the tests go green. And TADA! In a perfect world, you have a business requirement translated into a working code.</p>
<p>With BDD the point really is to be able to write tests which are more relevant. Tests which matter. Tests which are derived right out of the business requirements and scenarios, coming right out of the horses mouth. BDD is about putting some more structure and discipline into the Test Driven practices you already claim to do.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/282/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/282/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/282/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=282&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2011/11/12/bdd-get-your-tdd-right/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>
	</item>
		<item>
		<title>Tale of a Pragmatic Team</title>
		<link>http://codingcraft.wordpress.com/2011/10/30/no-universal-key/</link>
		<comments>http://codingcraft.wordpress.com/2011/10/30/no-universal-key/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 02:47:06 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=269</guid>
		<description><![CDATA[Take the world as it is, not as it ought to be                                                                                                   &#8211; German Proverb With the passing every single year in the world of software development I find myself more and more convinced of the fact that every project and every team is unique. They have unique situations and requirements. One should accept and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=269&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><em>Take the world as it is, not as it ought to be</em></strong><br />
                                                                                                  &#8211; German Proverb</p>
<p>With the passing every single year in the world of software development I find myself more and more convinced of the fact that every project and every team is unique. They have unique situations and requirements. One should accept and adopt tools and processes only to the extent that fits the personality and culture of the project team and caters to the needs of the project. Let me share a tale of a team that I worked with in recent times.</p>
<p>The team was maintaining a suit of unit-tests around the code. Though the code coverage was decent, the execution coverage was really poor. If you ran the test-suit, at any given point, many if not most tests would fail. Not a happy situation to be in, especially, if you are willing to leverage the benefits of units tests. One of the most important benefits of having a unit tests around your code is to provide you with the courage and the confidence to refactor your code fearlessly. You should be able to make a change in the code and run the tests to make sure everything is alright. And this is what the team was badly missing with it&#8217;s tests. Any “red” test that we came across would not clearly conclude that weather the test failed because of bad data or the functionality was actually broken. We dug into the each and every unit-test. To our relief we found almost all the failing tests were failing because bad test-data and not broken logic. Believe me or not this is the case with many teams claiming to maintain unit-tests.</p>
<p>We fixed the test-data, created dummies, mocks and stubs where required and made the test-suite hundred percent pass. We would setup data before running the tests and undo the changes to the database (or other states) after the tests ran. Hence, the test-suit always remained automated.</p>
<p>The next logical question then was how are we going to make sure that the tests we fixed this time around would not run into the same issue in the future. The answer was obvious &#8211; Continuous Integration (CI). With Microsoft&#8217;s Team Foundation Server (TFS), it was fairly easy to set up the build for Continuous Integration. Once we configured the CI, we realized that the builds were heavy and slow as many of these tests talked to the database. It was turning out to be an overkill for the return we were achieving. Again, we followed the &#8220;horses for courses&#8221; strategy. The pragmatic solution that we all agreed upon was that instead of queuing a build at every check-in, we should trigger the test-run only in the nightly builds. That way we were sure that code integrates at least once every day. Something we happily lived with.</p>
<p>The idea behind telling the story is that tools, process and best-practices are not meant to be followed like commandments. One should certainly look out for and be aware of what’s working for most teams out there, borrow the idea as and when necessary but should not impose them on the team. They should be adopted and accepted according to the teams comfort and adopted as per the teams need.</p>
<p>As you would have already understood that what we followed was not even close to be called TDD. We just maintained unit tests. But at the end of the day we delivered, and delivered well. Isn&#8217;t that all that matters? Isn&#8217;t it more important to do what <em>works</em> than what is <em>right</em>? After all, isn&#8217;t it true that there is no single key for every lock?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/269/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/269/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/269/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=269&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2011/10/30/no-universal-key/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>
	</item>
		<item>
		<title>Story about User Stories</title>
		<link>http://codingcraft.wordpress.com/2011/07/21/story-about-user-stories/</link>
		<comments>http://codingcraft.wordpress.com/2011/07/21/story-about-user-stories/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 19:48:24 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=228</guid>
		<description><![CDATA[It’s amazing how people somehow manage to figure out ways to abuse systems that they once so passionately fought to bring in. I recently came across a user story card which had the whole sequence diagram scribbled on it in an extremely small fonts. Interesting work-around, isn&#8217;t it? For those who have not seen one, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=228&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It’s amazing how people somehow manage to figure out ways to abuse systems that they once so passionately fought to bring in. I recently came across a user story card which had the whole sequence diagram scribbled on it in an extremely small fonts. Interesting work-around, isn&#8217;t it? For those who have not seen one, a user story card is typically a 3×5 index card used by many organizations to represent a user story.  The small size has been selected for a reason. The idea behind having a 3×5 index card is to constraint the user story to short and simple.</p>
<p><img class="aligncenter size-medium wp-image-229" title="UserStoryCard" src="http://codingcraft.files.wordpress.com/2011/07/userstorycard.jpg?w=300&#038;h=154" alt="" width="300" height="154" /></p>
<p>But user story card is just a part of the story. Let us try look at the whole story itself. Please allow me to tell you the story of user stories.</p>
<p>A user story describes desired functionality from the <em>business</em> perspective; it is the user’s story. A good user story describes the desired functionality, who wants it, and how and why the functionality will be used. I completely agree with <a href="http://blog.mountaingoatsoftware.com/">Mike Cohn&#8217;s</a> favourite <a href="http://blog.mountaingoatsoftware.com/advantages-of-the-as-a-user-i-want-user-story-template">Template</a> for writing user story which are short and simple,</p>
<p>As a [user role]</p>
<p>I want [functionality]</p>
<p>So that [reason]</p>
<p> A user story is comprised of:</p>
<p><strong>1. Card</strong> &#8211; the written description of the story, serves as and identification, reminder, and also helps in planning.</p>
<p><strong>2. Conversation</strong> &#8211; this is the meat of the story; the dialogue that is carried out with the users; recorded notes; mockups; documents exchanged.</p>
<p><strong>3. Confirmation</strong> &#8211; the acceptance test criteria that the user will utilize to confirm that the story is completed.</p>
<p>A very good guideline for writing good user stories is the <a href="http://en.wikipedia.org/wiki/INVEST_(mnemonic)">INVEST</a> model</p>
<p><em>Independent</em> &#8211; One user story should be independent of another (as much as possible). Dependencies between stories make planning, prioritization, and estimation much more difficult. Often enough, dependencies can be reduced by either combining stories into one or by splitting the stories differently.</p>
<p><em>Negotiable</em> &#8211; A user story is negotiable. The &#8220;Card&#8221; of the story is just a short description of the story which do not include details. The details are worked out during the &#8220;Conversation&#8221; phase. A &#8220;Card&#8221; with too much detail on it actually limits conversation with the customer.</p>
<p><em>Valuable</em> &#8211; Each story has to be of value to the customer (either the user or the purchaser). One very good way of making stories valuable is to get the customer to write them. Once a customer realizes that a user story is not a contract and is negotiable, they will be much more comfortable writing stories.</p>
<p><em>Estimable</em> &#8211; The developers need to be able to estimate (at a ballpark even) a user story to allow prioritization and planning of the story. Problems that can keep developers from estimating a story are: lack of domain knowledge (in which case there is a need for more Negotiation/Conversation); or if the story is too big (in which case the story needs to be broken down into smaller stories).</p>
<p><em>Small</em> &#8211; A good story should be small in effort, typically representing no more, than 2-3 person weeks of effort. A story which is more than that in effort can have more errors associated with scoping and estimation.</p>
<p><em>Testable</em> &#8211; A story needs to be testable for the &#8220;Confirmation&#8221; to take place. Remember, we do not develop what we cannot test. If you can&#8217;t test it then you will never know when you are done. An example of non-testable story: &#8220;software should be easy to use&#8221;.</p>
<p>So the moral of the story is this. User Stories being the cornerstones for <a href="http://codingcraft.wordpress.com/2009/03/04/in-love-with-agile/">Agile</a> development, deserve their fair share of time, effort and most importantly prudence to be &#8220;invested&#8221; in them in order to lay a strong foundation for project.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/228/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/228/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/228/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=228&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2011/07/21/story-about-user-stories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>

		<media:content url="http://codingcraft.files.wordpress.com/2011/07/userstorycard.jpg?w=300" medium="image">
			<media:title type="html">UserStoryCard</media:title>
		</media:content>
	</item>
		<item>
		<title>IOC Containers Demystified</title>
		<link>http://codingcraft.wordpress.com/2011/07/10/ioc-containers-demystified/</link>
		<comments>http://codingcraft.wordpress.com/2011/07/10/ioc-containers-demystified/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 02:56:00 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Object Orientation]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=174</guid>
		<description><![CDATA[When I first came across this big buzz called IOC Containers, I found it very close to a factory class in its essence and philosophy. As I dig deeper into these Containers, I find myself more and more convinced that an IOC Container is nothing more than a “Fancy Factory”. Amid all the mumbo-jumbo around it, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=174&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>When I first came across this big buzz called IOC Containers, I found it very close to a factory class in its essence and philosophy. As I dig deeper into these Containers, I find myself more and more convinced that an IOC Container is nothing more than a “Fancy Factory”.</p>
<p>Amid all the mumbo-jumbo around it, I find these IOC Containers very simple at their hearts. IOC Containers are essentially a tool for <a href="http://codingcraft.wordpress.com/2011/06/23/dependency-injection-simplified/">Dependency Injection</a>. The idea behind is to <em>invert</em> the flow of program <em>control</em> in a manner that maximum amount loose coupling can be achieved. Hence the name IOC (Inversion Of Control) Container.</p>
<p>Sounds vague? Let us jump into some code in order to understand this. Allow me to use the example of my favorite &#8216;PizzaStore&#8217; class.</p>
<p><code><br />
Public class PizzaStore<br />
{<br />
   Public ChickenPizza Prepare()<br />
   {<br />
      ChickenPizza pizza = new ChickenPizza();<br />
      pizza.Prepare();<br />
   }<br />
}<br />
</code></p>
<p>In the light of <a href="http://codingcraft.wordpress.com/2011/03/30/the-s-o-l-i-d-code/">Dependency Inversion Principle (DIP)</a> , this is not the right way of doing it. For every new Pizza class that is created in the system there needs to be a new PizzaStore class. This is because the PizzaStore class depends upon the Pizza class. A desirable design goal (according to DIP) here would be that the Pizza and the PizzaStore class should be decoupled in a manner that same PizzaStore class should be able to work with different types of Pizza. In other words, the <em>dependency</em> between Pizza and PizzaStore should be so <em>inverted</em> that PizzaStore should not directly depend on Pizza class. As a matter of fact, according to DIP, it should depend on an <em>abstraction</em> (IPizza interface in this case).</p>
<p><code><br />
Public class PizzaStore<br />
{<br />
   Public ChickenPizza Prepare(IPizza  pizza)<br />
   {<br />
      pizza.Prepare();<br />
   }<br />
}<br />
</code></p>
<p>The client program must take pass the right dependency (instance of pizza) to the IPizza. This tecnique of <em>injecting</em> the <em>dependency</em> from outside is called <a href="http://codingcraft.wordpress.com/2011/06/23/dependency-injection-simplified/">Dependency Injection</a>.</p>
<p>If we separate out the piece of code that assumes the responsibility of <em>inverting</em> the flow of <em>control</em> of the system in comparison to procedural programming using the technique of Dependency Injection, we would call this piece of code an IOC Container. </p>
<p>An IOC container, at the very basic should be able to do two things<br />
• <em>Register</em> a Dependency<br />
• <em>Resolve</em> a Dependency</p>
<p>For the ease of understanding, let us start with the <em>Resolve</em> part. Take a look at the following code,</p>
<p><code><br />
public class PizzaStore<br />
{<br />
   Public IPizza Prepare()<br />
   {<br />
      Return Container.Resolve&lt;IPizza&gt;();<br />
   }<br />
}<br />
</code></p>
<p>Here the Container determines and returns the right instance of the Pizza. Hence, whenever an instance of the type Pizza is required by the PizzaStore class, it will request the Container to <em>resolve</em> and return the right instance for the Pizza. This means that it is the responsibility of the Container to instantiate a class. This also means that the Container needs to have the information about what instance should it return for a given type. This is when the <em>Register</em> part comes into picture. The Register method tells the Container what object should be returned for a given type.</p>
<p><code><br />
ChikenPizza chkPizza = new ChikenPizza();<br />
Container.Register&lt;IPizza&gt;(chkPizza);<br />
</code></p>
<p>Or sometimes,</p>
<p><code><br />
Container.Register&lt;IPizza&gt;(ChikenPizza);<br />
</code></p>
<p>Most of the existing IOC containers allow an ability to Register through configuration also. A typically full-blown IOC Container also provide with other sophistications like managing the scope and lifetime of the instance. For example, would you like your object to be instantiated on per call basis, or per thread basis or should your instance be a singleton instance.</p>
<p>In a nutshell, all that an IOC Container essentially does is know what instance to be retuned for a given type and then return that instance through an abstraction (generally interface) using dependency Injection.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/174/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/174/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/174/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=174&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2011/07/10/ioc-containers-demystified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>
	</item>
		<item>
		<title>Dependency Injection Simplified</title>
		<link>http://codingcraft.wordpress.com/2011/06/23/dependency-injection-simplified/</link>
		<comments>http://codingcraft.wordpress.com/2011/06/23/dependency-injection-simplified/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 04:04:33 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[Design Pattern]]></category>
		<category><![CDATA[Object Orientation]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=142</guid>
		<description><![CDATA[A lot is being said and written about Dependency Injection(DI) these days. Its amazing how most of these current literature make DI sound so complicated. In reality though the concept is really simple. Powerful but yet simple. DI is based on one of the SOLID principles called the Dependency Inversion Principle (DIP) propagated by Uncle Bob. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=142&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A lot is being said and written about Dependency Injection(DI) these days. Its amazing how most of these current literature make DI sound so complicated. In reality though the concept is really simple. Powerful but yet simple. DI is based on one of the <a href="http://codingcraft.wordpress.com/2011/03/30/the-s-o-l-i-d-code/">SOLID principles</a> called the Dependency Inversion Principle (DIP) propagated by <a href="http://en.wikipedia.org/wiki/Robert_C._Martin">Uncle Bob</a>. The principle states:</p>
<p><em><br />
HIGH LEVEL MODULES SHOULD NOT DEPEND UPON LOW LEVEL MODULES. BOTH SHOULD DEPEND UPON ABSTRACTIONS.<br />
ABSTRACTION SHOULD NOT DEPEND UPON DETAILS. DETAILS SHOULD DEPEND UPON ABSTRACTION.<br />
</em><br />
Let’s try to understand this with an example. As I write this post on a Sunday evening enjoying a Four-cheese pizza slice (yummy!), all I can think of for an example is pizzas. Let’s assume a class called PizzaStore, which has a specialty in Grilled Chicken pizzas. Hence it sells only this Grilled Chicken pizza. Let’s call this class as ChickenPizza.<br />
<code><br />
public class PizzaStore<br />
{<br />
    public void CreatePizza()<br />
    {<br />
        ChickenPizza pizza = new ChickenPizza();<br />
        pizza.Prepare();<br />
    }<br />
}<br />
</code></p>
<p>Here the PizzaStore class is said to be the higher-level class and ChickenPizza class is the lower-level class. Hence we have a high-level class depend upon the low- level class. But so far, this is perfectly fine and acceptable as there is just one type of pizza to prepare.</p>
<p>Time passes, and our little PizzaStore becomes more popular. The business grows and so the demands. Its time that they add some more veriety to the kind of pizzas they sell. The Pizza store introduces a new pizza &#8211; the famous Chicago Deep Dish pizza. Lets this be called the DeepDishPizza.</p>
<p>This will require the high-level PizzaStore class to change a little to accomodate this new low-level DeepDishPizza class.<br />
<code><br />
public class PizzaStore<br />
{<br />
   public void CreatePizza(string pizzaType)<br />
   {<br />
      if (pizzaType == "DeepDishPizza")<br />
      {<br />
          DeepDishPizza pizza = new DeepDishPizza();<br />
          pizza.Prepare();<br />
      }<br />
      else<br />
      {<br />
          ChickenPizza pizza = new ChickenPizza();<br />
          pizza.Prepare();<br />
      }<br />
   }<br />
}<br />
</code></p>
<p>This means every time a new Pizza type is introduced, the PizzaStore class will need to change. That is, the high-level class will need to change if a low level class changes. With increase in number of these pizza classes the coupling will keep on increasing. Plugging in a new type of pizza will not very easy, even for this overly simplified PizzaStore.</p>
<p>Let&#8217;s try analyze if DI can come to the rescue as far as our little PizzaStore is concerned.</p>
<p>In order to implement DI here, we will need to abstract out the commonalities of these pizza classes in an abstract class called Pizza class.<br />
<code><br />
public abstract class Pizza<br />
{<br />
   public virtual void Prepare();<br />
}<br />
</code></p>
<p>Let all the pizza classes inherit from this class and implement their own version of Prepare() method.<br />
<code><br />
public class ChickenPizza: Pizza<br />
{<br />
   public override void Prepare()<br />
   {<br />
      ...<br />
   }<br />
}</code></p>
<p>&nbsp;</p>
<p><code><br />
public class DeepDishPizza: Pizza<br />
{<br />
   public override void Prepare()<br />
   {<br />
      ...<br />
   }<br />
}<br />
</code></p>
<p>And the PizzaStore class will work only with the abstraction of Pizza<br />
<code><br />
Public class PizzaStore<br />
{<br />
   private Pizza _pizza;<br />
   public PizzaStore(Pizza pizza)<br />
   {<br />
       _pizza = pizza;<br />
   }<br />
   public void CreatePizza()<br />
   {<br />
       _pizza.Prepare();<br />
   }<br />
}<br />
</code></p>
<p>This technique of passing (or injecting) the instance (Dependency) on to the depending class (PizzaStore) class is called Dependency Injection.</p>
<p>The technique is simple but very powerful to achieve the ultimate design goal – “Loose Coupling”.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/142/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/142/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/142/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=142&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2011/06/23/dependency-injection-simplified/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>
	</item>
		<item>
		<title>The S.O.L.I.D code</title>
		<link>http://codingcraft.wordpress.com/2011/03/30/the-s-o-l-i-d-code/</link>
		<comments>http://codingcraft.wordpress.com/2011/03/30/the-s-o-l-i-d-code/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 20:10:07 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[Object Orientation]]></category>
		<category><![CDATA[Design Principles]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=109</guid>
		<description><![CDATA[As they say, &#8220;A picture is worth a thousand words&#8221;. Just came across some motivational posters on Uncle Bob&#8217;s SOLID Principles on software design. If you are a software developer who likes to keep an eye on what’s going on in the object -oriented (OO) development fraternity, chances are that you would have come across [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=109&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As they say, &#8220;A picture is worth a thousand words&#8221;. Just came across some <a href="http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/">motivational posters</a> on Uncle Bob&#8217;s <a href="http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf">SOLID Principles</a> on software design. If you are a software developer who likes to keep an eye on what’s going on in the object -oriented (OO) development fraternity, chances are that you would have come across the famous <a href="http://blog.brianhartsock.com/2009/01/31/superbowl-weekend-uncle-bob-vs-joel/">clash</a> of OO titans (Joel vs UncleBob). Interesting perspectives, but that’s a different story altogether and will get into that some other time.</p>
<p>Uncle Bob&#8217;s SOLID principles are a collection of five OO design principles. These are:</p>
<p>1. Single Responsibility Principle (SRP)<br />
2. Open Closed Principle (OCP)<br />
3. Liskov Substitution Principle (LSP)<br />
4. Interface Segregation Principle (ISP)<br />
5. Dependency Inversion Principle (DIP)</p>
<ul><strong>DIP</strong></ul>
<p>THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE.<br />
<img src="http://codingcraft.files.wordpress.com/2011/03/srp.jpg?w=692" alt="http://codingcraft.files.wordpress.com/2011/03/dip.jpg" /></p>
<ul>
<strong>OCP</strong></ul>
<p>SOFTWARE ENTITIES (CLASSES, MODULES, FUNCTIONS, ETC.) SHOULD BE OPEN FOR EXTENSION BUT CLOSED FOR MODIFICATION.<br />
<img src="http://codingcraft.files.wordpress.com/2011/03/ocp.jpg?w=692" alt="http://codingcraft.files.wordpress.com/2011/03/ocp.jpg?w=692" /></p>
<ul>
<strong>LSP</strong></ul>
<p>FUNCTIONS THAT USE REFERENCES TO BASE CLASSES MUST BE ABLE TO USE OBJECTS OF DERIVED CLASSES WITHOUT KNOWING IT.<br />
<img src="http://codingcraft.files.wordpress.com/2011/03/lsp.jpg?w=692" alt="http://codingcraft.files.wordpress.com/2011/03/lsp.jpg?w=692" /></p>
<ul>
<strong>ISP</strong></ul>
<p>CLIENTS SHOULD NOT BE FORCED TO DEPEND UPON INTERFACES THAT THEY DO NOT USE.<br />
<img src="http://codingcraft.files.wordpress.com/2011/03/isp.jpg?w=692" alt="http://codingcraft.files.wordpress.com/2011/03/isp.jpg?w=692" /></p>
<ul>
<strong>SRP</strong></ul>
<p>HIGH LEVEL MODULES SHOULD NOT DEPEND UPON LOW LEVEL MODULES. BOTH SHOULD DEPEND UPON ABSTRACTIONS.<br />
ABSTRACTION SHOULD NOT DEPEND UPON DETAILS. DETAILS SHOULD DEPEND UPON ABSTRACTION.<br />
<img src="http://codingcraft.files.wordpress.com/2011/03/dip.jpg?w=692" alt="http://codingcraft.files.wordpress.com/2011/03/dip.jpg?w=692" /></p>
<p>Irrespective of whether you are on Uncle Bob&#8217;s side or Joel&#8217;s side, these principles to me are great pointers to a good software design. Of course, like any other engineering principles, these should not be treated as commandments. Rather the requirements of the project should dictate the degree of relevance of these principles in their case. That is where <em>Coding</em> becomes a <em>Craft</em> and not mere a discipline of science. </p>
<p>With that said, having the mind laden with these principles will definitely put ones thinking in the right direction. In the direction in which the fundamental requirement of all good software design can be achieved &#8211; &#8220;Loose Coupling&#8221;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=109&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2011/03/30/the-s-o-l-i-d-code/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>

		<media:content url="http://codingcraft.files.wordpress.com/2011/03/srp.jpg" medium="image">
			<media:title type="html">http://codingcraft.files.wordpress.com/2011/03/dip.jpg</media:title>
		</media:content>

		<media:content url="http://codingcraft.files.wordpress.com/2011/03/ocp.jpg" medium="image">
			<media:title type="html">http://codingcraft.files.wordpress.com/2011/03/ocp.jpg</media:title>
		</media:content>

		<media:content url="http://codingcraft.files.wordpress.com/2011/03/lsp.jpg" medium="image">
			<media:title type="html">http://codingcraft.files.wordpress.com/2011/03/lsp.jpg</media:title>
		</media:content>

		<media:content url="http://codingcraft.files.wordpress.com/2011/03/isp.jpg" medium="image">
			<media:title type="html">http://codingcraft.files.wordpress.com/2011/03/isp.jpg</media:title>
		</media:content>

		<media:content url="http://codingcraft.files.wordpress.com/2011/03/dip.jpg" medium="image">
			<media:title type="html">http://codingcraft.files.wordpress.com/2011/03/dip.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Code for Testability</title>
		<link>http://codingcraft.wordpress.com/2010/10/16/code-for-testability/</link>
		<comments>http://codingcraft.wordpress.com/2010/10/16/code-for-testability/#comments</comments>
		<pubDate>Sat, 16 Oct 2010 06:44:13 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[TDD]]></category>
		<category><![CDATA[Unit Test]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=88</guid>
		<description><![CDATA[Testability is the degree of ease with which a piece of code can be tested. Anything that makes a piece of code harder to test reduces Testability. This gives the bugs an opportunity to hide for longer and conceal themselves better. Hence, it is always advisable to design and code with Testability in mind. I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=88&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Testability is the degree of ease with which a piece of code can be tested. Anything that makes a piece of code harder to test reduces Testability. This gives the bugs an opportunity to hide for longer and conceal themselves better. Hence, it is always advisable to design and code with Testability in mind.</p>
<p>I always used to wonder that why should somebody like me who is more responsible for coding and designing part of the software development process be concerned about Testability? Why should I take the pain to coding for testability? What does it bring to the table for somebody like me?</p>
<p>Well! The answer is, “better design”.</p>
<p>In order to make a code more testable, the classes must have the ability to be tested in isolation. This means more mockable classes. It is easier to mock classes which are interface driven (Yes, we are talking about <a href="http://en.wikipedia.org/wiki/Design_by_contract">Design by contract </a>here). Also, in order to make classes easily mockable, they must be as loosely coupled as possible. The dependencies must be abstracted out. Hence, good design practices like <a href="http://www.objectmentor.com/resources/articles/dip.pdf">Dependency Inversion Principle</a> becomes an obvious candidate for consideration.</p>
<p>To achieve high testability, i.e. degree of ease with which a piece of code can be tested, the classes must be smaller, focused and cohesive in nature. That is, they should focus on one or few related piece of functionality. Such classes are easier to maintain and tend to have neater <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">Separation of Concerns</a>. Such classes are closer to <a href="http://www.oodesign.com/single-responsibility-principle.html">Single Responsibility Principle</a> at their hearts.</p>
<p>The more testable the code is, the more coverage it tends to have. This is because of a simple reason that writing more and more tests for such code is easier. This allows the developers more cushion to refactor those pieces of code which has become obsolete and ugly over a period of time.</p>
<p>Hence, coding for Testability is all about writing more maintainable, flexible and robust code. Code which has a solid foundation and code which can withstand the only constant of software development life – change.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/88/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/88/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/88/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=88&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2010/10/16/code-for-testability/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>
	</item>
		<item>
		<title>SOA – The Four Commandments</title>
		<link>http://codingcraft.wordpress.com/2010/02/19/soa-%e2%80%93-the-four-commandments/</link>
		<comments>http://codingcraft.wordpress.com/2010/02/19/soa-%e2%80%93-the-four-commandments/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 08:09:41 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[SOA]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=73</guid>
		<description><![CDATA[Recently, I got an opportunity to meet and chat with some very able and talented developers and architects here at our .Net user group &#8211; KolkataNet. As usual, we got into discussing technology. This time around the buzzword was SOA (Service Oriented Architecture). To my utter surprise, none of them (including me) were not able [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=73&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, I got an opportunity to meet and chat with some very able and talented developers and architects here at our .Net user group &#8211; <a href="http://kolkatanet.com/">KolkataNet</a>. As usual, we got into discussing technology. This time around the buzzword was SOA (Service Oriented Architecture). To my utter surprise, none of them (including me) were not able to come up with a decently ‘complete’ definition for SOA. I must confess here that deep down inside I was not very unhappy about it. I was glad to find that when it comes to SOA, I am not the only confused bloke (lol).</p>
<p>This set me out to dig deeper into this highly hyped term. And really, the crux of finding was that the so highly hyped SOA is nothing but just a natural growth of the craft of developing software. The craft has come up a long way from procedural to object-orientation to component-based and now to service-orientation. Of course, every stage has had its own compelling drivers to take it to the next one. Hence, SOA is no revolution, it is just an evolution. There are business (rather marketing, lol) aspects to SOA too. But let us limit our focus to SOA as software development approach.</p>
<p>So what is SOA? In order to qualify itself as an SOA, an architecture must adhere to the infamous Four Tenants of SOA. Which are:</p>
<p><strong>Boundaries are explicit</strong>. Developers should define explicitly what methods/properties are going to expose to the client.</p>
<p><strong>Services are autonomous</strong>. Services and the consumer application are independent. So in future if we need to modify or enhance the services feature then we can take the services offline and work with that. So this won’t affect the consumer application.</p>
<p><strong>Share Schema/Contract not class implementation</strong>. We need to share only the schema to our clients. If should not share any implementation information in to our clients. For example, we should not ask them to give any connection string info in the attribute level, which will expose what database we are using for our service.</p>
<p><strong>Compatibility based on policy</strong>. The services should define all the requirements in order to use the services. We should not have person &#8211; to &#8211; person communication about the services.</p>
<p>So next time when you profess to have implemented SOA, check against these tenants to make sure that you are not exaggerating.</p>
<p>Cheers.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=73&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2010/02/19/soa-%e2%80%93-the-four-commandments/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>
	</item>
		<item>
		<title>Get rid of the &#8220;Manager&#8221; syndrome.</title>
		<link>http://codingcraft.wordpress.com/2010/02/01/get-rid-of-the-manager-syndrome/</link>
		<comments>http://codingcraft.wordpress.com/2010/02/01/get-rid-of-the-manager-syndrome/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 14:51:38 +0000</pubDate>
		<dc:creator>Anshuman</dc:creator>
				<category><![CDATA[Object Orientation]]></category>
		<category><![CDATA[Design Principles]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://codingcraft.wordpress.com/?p=59</guid>
		<description><![CDATA[Are you one of those coders who often find themselves stuck on deciding a meaningful, explanatory name for their newly created classes? Do you frequently end up creating some &#8220;Manager&#8221; or &#8220;Master&#8221; class? If so, then beware! There is something wrong going in there with the vision and perception of your classes. Perhaps, you are asking your nice little [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=59&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Are you one of those coders who often find themselves stuck on deciding a meaningful, explanatory name for their newly created classes? Do you frequently end up creating some &#8220;Manager&#8221; or &#8220;Master&#8221; class? If so, then beware! There is something wrong going in there with the vision and perception of your classes. Perhaps, you are asking your nice little classes to do too many things for you; they probably are losing their focus and are perplexed about their existance. Perhaps, you burden these poor fellows with too many responsibilities.</p>
<p>Is anything wrong about having a class to do more than one thing? Well, the <span style="text-decoration:underline;"><a href="http://www.oodesign.com/single-responsibility-principle.html">Single Responsibility Principle (SRP)</a></span> says &#8220;Yes&#8221; there is.</p>
<p>Consider the following class:</p>
<table style="border-color:Blue;border-width:thin;" border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<table style="height:100%;" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="5" bgcolor="lightgray"> </td>
<td bgcolor="lightgray">GiveMeName<br />
{<br />
public void Save(Employee emp){&#8230;}<br />
public List Get(){&#8230;}<br />
public double CalculateGross(double basic){&#8230;}<br />
public void NotifyEmployee(Employee emp){&#8230;}<br />
}</td>
<td width="5" bgcolor="lightgray"> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p>This is the what the class does for you:</p>
<p>1. Saves the newly created employee object to the database,</p>
<p>2. gets the list of employees in the database,</p>
<p>3. calculates the Gross from the basic using the business rule,</p>
<p>4. Sends email Notifications to the employees.</p>
<p>Now if you were to give a meaningful, unambiguous and self-explanatory name to the class <em>GiveMeName</em>, what would you name it? Well, <em>confusing</em> &#8230; isn&#8217;t it?  The <em>confusion</em> is a very good indicator of the fact that we are doing something unfair to the class here. We are making the poor guy cater to too many responsibilities.  I bet the best name you can think (like me) would be Employee or EmployeeManager. This is where we lose the trick.</p>
<p>Try breaking the GiveMeName class into three small classes:</p>
<table style="border-color:Blue;border-width:thin;" border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<table style="height:100%;" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="5" bgcolor="lightgray"> </td>
<td bgcolor="lightgray">EmployeeDb<br />
{<br />
public void Save(Employee emp){&#8230;}<br />
public List Get(){&#8230;}<br />
}</td>
<td width="5" bgcolor="lightgray"> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table style="border-color:Blue;border-width:thin;" border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<table style="height:100%;" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="5" bgcolor="lightgray"> </td>
<td bgcolor="lightgray">EmployeeGrossCalculator<br />
{<br />
double Calculate(double basic);<br />
}</td>
<td width="5" bgcolor="lightgray"> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<table style="border-color:Blue;border-width:thin;" border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>
<table style="height:100%;" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="5" bgcolor="lightgray"> </td>
<td bgcolor="lightgray">EmployeeNotifier<br />
{<br />
public void Notify();<br />
}</td>
<td width="5" bgcolor="lightgray"> </td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p>These classes are much more focused and their names are beautifully self-explanatory and suggestive of their purpose and meaning of existence. They tell you why were they born and why do they exist. Thus there would be one and only reason for any of these classes to change, for, there is one and only one responsibility these classes cater. This will ensure <a href="http://www.codinghorror.com/blog/archives/001244.html" target="_blank">Orthogonal</a> code and hence maintainability of your code. It will help your code to stay closer to universal principle of programming -<a href="http://davidhayden.com/blog/dave/archive/2004/12/10/680.aspx" target="_blank"> Tight Cohesion and Loose Coupleing</a>.</p>
<p>So next time when you create a class and find that it’s name doesn’t come obviously to you, and you have to satisfy yourself with some &#8220;Manager&#8221; kind of name with your class, think twice, think if you have taken a leaf out of the book of <a href="http://www.oodesign.com/single-responsibility-principle.html">SRP</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/codingcraft.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/codingcraft.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/codingcraft.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/codingcraft.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/codingcraft.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/codingcraft.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/codingcraft.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/codingcraft.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/codingcraft.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/codingcraft.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/codingcraft.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/codingcraft.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/codingcraft.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/codingcraft.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=codingcraft.wordpress.com&amp;blog=9074348&amp;post=59&amp;subd=codingcraft&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://codingcraft.wordpress.com/2010/02/01/get-rid-of-the-manager-syndrome/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/842914d93ce2358f846afbdcfda7a84e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">codingcraft</media:title>
		</media:content>
	</item>
	</channel>
</rss>
