<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;DEUMRXo8fip7ImA9WhRaE0U.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818</id><updated>2012-02-16T09:58:04.476Z</updated><category term="SOLID" /><category term="kata" /><category term="IE9" /><category term="stuff" /><category term="VS 2010" /><category term="Jon Skeet" /><category term="Package management" /><category term="community" /><category term="DDD SW" /><category term="validation" /><category term="InternetExplorer" /><category term="presentation" /><category term="NDepend" /><category term="TDD" /><category term=".Net 3.5" /><category term="code coverage" /><category term="ddd scot" /><category term="DSL" /><category term="ORM" /><category term="review" /><category term="hotfix" /><category term="work" /><category term="training" /><category term="balance" /><category term="64 bit" /><category term="CSP" /><category term="Manning Books" /><category term="display attributes" /><category term="jQuery" /><category term="retrospective" /><category term="Asp.Net" /><category term="Window Phone" /><category term="XmlSerialization" /><category term="ScottGu" /><category term="IConfigurationManager" /><category term="DDD9" /><category term="Pex" /><category term="kb958484" /><category term="DI" /><category term="koan" /><category term="dojo" /><category term="SimpleMembership" /><category term="team lead" /><category term="opinion" /><category term="code quality" /><category term="unit testing" /><category term="design" /><category term="dotnetdevnet" /><category term="VS" /><category term="Bin Deploy" /><category term="Event" /><category term="Entity Framework" /><category term="Microsoft" /><category term="introduction" /><category term="MVC" /><category term="givecampuk" /><category term="Mango" /><category term="Family" /><category term="burnout" /><category term="Dependency Injection" /><category term=".Net" /><category term="Repository" /><category term="Build" /><category term="conference" /><category term="OSS" /><category term="MEF" /><category term="agile" /><category term="response" /><category term="metrics" /><category term="Linq-to-sql" /><category term="kanban" /><category term="Guathon" /><category term="DAL" /><category term="Windows 7" /><category term="DeveloperDeveloperDeveloper" /><category term="lean" /><category term="Book Review" /><category term="Social" /><category term="tech" /><category term="ajax" /><category term="dōjō" /><category term="Asp.Net Dynamic Data" /><category term="WP7" /><category term="speaker" /><category term="getting started" /><category term="Gems" /><category term="ADO.NET" /><category term="DDDIE" /><category term="C#" /><category term="column order" /><category term="teched" /><category term="passion" /><category term="certification" /><category term="scrum" /><category term="data access" /><category term="Nu" /><category term="C# in Depth" /><category term="management" /><category term="Login" /><title>Design, Code, Release</title><subtitle type="html">If it was only that easy</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>100</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DesignCodeRelease" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="designcoderelease" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">DesignCodeRelease</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;Ak8ERXo6eyp7ImA9WhRbFUw.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-3537855921206381331</id><published>2012-02-06T09:00:00.000Z</published><updated>2012-02-06T09:00:04.413Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-06T09:00:04.413Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NDepend" /><category scheme="http://www.blogger.com/atom/ns#" term="code quality" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>NDepend – final thoughts</title><content type="html">&lt;p&gt;Over the last 4 posts I’ve covered the &lt;a href="http://designcoderelease.blogspot.com/2012/01/introduction-to-ndepend.html"&gt;different editions of NDepend&lt;/a&gt;, &lt;a href="http://designcoderelease.blogspot.com/2012/01/ndependgetting-started.html"&gt;installing and starting off&lt;/a&gt;, the &lt;a href="http://designcoderelease.blogspot.com/2012/02/ndepend-analysis-report.html"&gt;report&lt;/a&gt; and &lt;a href="http://designcoderelease.blogspot.com/2012/02/ndependvisual-ndepend.html"&gt;Visual NDepend&lt;/a&gt; and wanted to just wrap up this series summarising the information and adding some of my own thoughts.&lt;/p&gt;  &lt;h3&gt;The Product&lt;/h3&gt;  &lt;p&gt;I have to say that the fact NDepend offers a free version for individual developers is brilliant, there used to be several tools in the .Net world that did this but gradually they all seem to have become commercial and only offer time limited trial versions.&amp;#160; &lt;/p&gt;  &lt;p&gt;There is a small catch in that the version you download is time limited itself but there is nothing to stop you downloading the another trial edition (web page even tells you when the next free download will be available) but I can imagine this becoming a pain after a while and could lead people to looking for an alternative.&lt;/p&gt;  &lt;p&gt;One thing that surprised me was the amount of help and documentation that is available on the NDepend website ranging from simple FAQ’s to video tutorials which will help with not only how to use NDepend but the information the NDepend provides.&lt;/p&gt;  &lt;h3&gt;The Functionality&lt;/h3&gt;  &lt;p&gt;As I mentioned in my post on the report when you first start using NDepend you are most likely to focus on the data in the report and although it contains a lot of information I still believe that the report is of most benefit in a CI situation allowing you to track the evolution of your code base.&lt;/p&gt;  &lt;p&gt;In day to day work Visual NDepend or the visual studio AddIn is where I believe the most value is to be found for individual developers allowing them to identify the points to focus on. &lt;/p&gt;  &lt;p&gt;Although you can use the stand alone application (Visual NDepend) in my opinion for most developers it is the visual studio integration that will provide the most value since you don’t have to leave the IDE to utilise the functionality.&lt;/p&gt;  &lt;p&gt;The Code Query Language is what differentiates NDepend from other static analysis tools allowing you to understand how it identifies code that violates its rules as well as making it easy to customize existing or create new rules.&lt;/p&gt;  &lt;h3&gt;Configuration/Customization&lt;/h3&gt;  &lt;p&gt;The fact that NDepend provides a way for you to customise the rules that it runs against a code based is, I believe, one of its biggest strengths. You also get fair amount of configuration over how it behaves and looks.&lt;/p&gt;  &lt;p&gt;However, there is no easy way to share this customization/configuration between projects let alone other members of the team.&amp;#160; For me this is probably the biggest failing of NDepend, yes you can manually alter each project and using source control if you add the ndproj file then when the next developer pulls/gets the code they will get the settings. &lt;/p&gt;  &lt;h3&gt;A couple of issues…&lt;/h3&gt;  &lt;p&gt;One issue is that you need to care about what NDepend is showing you about your code base. There is a lot of information it provides and with the amount of help on the website it is fairly easy to understand the various metrics that NDepend rules identify and use.&amp;#160; Even with all this information you have to care about it, for example if you have methods with a high Cyclomatic Complexity although you may understand what it means if you don’t care then the the tool is of little use.&lt;/p&gt;  &lt;p&gt;I feel I have to mention cost, for a larger enterprise organisation the licencing cost is unlikely to be a big issue but for smaller companies &amp;amp; individual developers, or hobbyists, the cost of the professional edition could be just too high.&amp;#160; &lt;/p&gt;  &lt;p&gt;I would also mention that I believe if you want the best results from NDepend you need everybody on your team to have it as just having it on a single machine, even if its the build machine, makes it hard to then follow up and fix violations.&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;As anybody who knows me will know I’m a big fan of SOLID clean code and I like to be able to use metrics to understand my code and where I may need to improve it, I find that NDepend helps me with this.&lt;/p&gt;  &lt;p&gt;It is simple to get started with but there in lies its deceptive nature as it can not only tell you a lot about your code base but you can also learn more about various principles behind good code bases (I learnt all about the efferent &amp;amp; afferent coupling).&lt;/p&gt;  &lt;p&gt;NDepend is a tool that you need to spend time with to understand what it can show you and how to get the most out of it, if you do decide to invest the time I believe it will repay you in cleaner code and increased knowledge.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: I was provided a copy of the professional edition to review back at the beginning of last year, this hasn’t effected what I have said about the product which hopefully you can see in this series of posts.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a style="display: none" href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag"&gt;CodeProject&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/9220389270062827818-3537855921206381331?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/woVRvnSz1qs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/3537855921206381331/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2012/02/ndepend-final-thoughts.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/3537855921206381331?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/3537855921206381331?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2012/02/ndepend-final-thoughts.html" title="NDepend – final thoughts" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0EEQ3s-fyp7ImA9WhRbEkg.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-3848250701058241680</id><published>2012-02-03T09:00:00.000Z</published><updated>2012-02-03T09:00:02.557Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-03T09:00:02.557Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NDepend" /><category scheme="http://www.blogger.com/atom/ns#" term="code quality" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>NDepend–Visual NDepend</title><content type="html">&lt;p&gt;The last post went over the report that NDepend generates, this post is going to focus on Visual NDepend, the stand alone program and the functionality it supports.&lt;/p&gt;  &lt;h3&gt;Interactive&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;The&lt;/strong&gt; difference between the report and Visual NDepend (from now on I’ll just call it NDepend) is that you have much greater ability to drill down into the code base allowing you to jump between various graphs/diagrams, you can then right click on the item and jump to a different view with the specific item the focus of the graph/matrix.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;h3&gt;NDepend Project&lt;/h3&gt;  &lt;p&gt;NDepend, in its various flavours, has its own project file which contains all the settings necessary for NDepend to function. There is no dependency to have the project file sit with code base it related to but I would suggest that it is a good idea to keep it with the solution you are analysing and check it into your VCS as well, especially if you start customising the rules etc.&lt;/p&gt;  &lt;p&gt;Unfortunately because customizations are stored in the individual project files currently it is not easy to share any customizations across projects but in the comments to this &lt;a href="http://danielsaidi.wordpress.com/2011/10/06/ndepend-tweaking-the-cql-rules/"&gt;post&lt;/a&gt; suggest the the makers of NDepend are working on it.&lt;/p&gt;  &lt;h3&gt;Getting started&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-oAg0o7rNhFQ/TysfLqryqqI/AAAAAAAAAI0/UJoce6esab0/s1600-h/NDepend13.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 1px 12px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="NDepend" border="0" alt="NDepend" align="right" src="http://lh5.ggpht.com/-T6qAyu7ilEo/TysfMbHkWHI/AAAAAAAAAI8/XJml5i_xSO8/NDepend_thumb11.png?imgmax=800" width="458" height="279" /&gt;&lt;/a&gt;When you open up NDepend you should feel right at home as it has the distinct look &amp;amp; feel of visual studio.&amp;#160; &lt;/p&gt;  &lt;p&gt;When you first open it you will be presented with a screen that presents you with all the things you are most likely to need – links to videos on the NDepend site, buttons to install the AddIn’s for Visual Studio &amp;amp; Reflector &amp;amp; you will also be able to see if you are running the most up to date version of NDepend.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The left hand area displays recent projects you may have worked on and provides links to create a new project from scratch or analyse existing Visual Studio solution/projects, .Net Assemblies or compare 2 code bases. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-qw8AHzhEYYE/TysfN_-eoEI/AAAAAAAAAJE/ShnhGsMXZaI/s1600-h/image7.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 22px 1px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-q1L5EQWv6eg/TysfO7_Tk6I/AAAAAAAAAJM/AUdHhOPVhHY/image_thumb3.png?imgmax=800" width="530" height="423" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once you’ve selected the solution/project to analyse NDepend will perform the analysis and display the results.&lt;/p&gt;  &lt;p&gt;At this point the information that is being displayed is effectively the same as what is contained in the report, it has the summary which contains the same information as the application metrics on the report, its got all the CQL rules that were ran and an indication if they passed similar to the reports menu listing of the rules.&lt;/p&gt;  &lt;h3&gt;Analysis using graphs&lt;/h3&gt;  &lt;p&gt;At this point you are now able to start moving between the different graph’s and matrices to explore the code base. The report just had the images showing the each of the graphs with no additional information, however in NDepend these are interactive and you can get a lot more information out of them.&lt;/p&gt;  &lt;p&gt;For example in the dependency graph hovering over any dependency will highlight the dependencies for that item and the Info panel on the right hand side will be populated with metrics about that item.&amp;#160; When you right click you can then jump to the another view, such as dependency matrix, to see the analysis in relation to that particular view.&lt;/p&gt;  &lt;h3&gt;Analysis by CQL Rule&lt;/h3&gt;  &lt;p&gt;If you select any of the CQL rules that have been run then all of the graphs/matrix will indicate the various parts of the code base that match the rule providing a visual way to allow you to focus on the items that are violating the rules.&lt;/p&gt;  &lt;p&gt;As well as altering the graph the CQL Query Edit will display the rule and show the classes, methods, properties, etc that have violated the code (assuming you have selected a rule that has been violated) and if you double click that item it will open the solution/project, if not already open, and display the code although this hasn’t always worked for me.&lt;/p&gt;  &lt;p&gt;As you select the various rules and navigate the UI you can see that this way of looking at your code base is much easier as it can allow you to focus on the areas identified rather than simply drilling down into the analysis.&lt;/p&gt;  &lt;h3&gt;CQL Querying&lt;/h3&gt;  &lt;p&gt;As impressive as the analysis is in my opinion the ability to generate your own CQL queries to be able to create your own rules, all you need to be able to do is think about what you want to query.&amp;#160; To make it even easier the query editor also has auto complete to help you to construct the queries and shows you live results as you create the query.&lt;/p&gt;  &lt;p&gt;Any queries that you create are saved in the project file and will be run against the code base the next time that NDepend runs an analysis.&lt;/p&gt;  &lt;h3&gt;Options&lt;/h3&gt;  &lt;p&gt;As you would expect you are also able to configure a lot of the behaviour of NDepend through the GUI, such as whether it runs a full or incremental analysis, if a html report is created &amp;amp; displayed, etc.&lt;/p&gt;  &lt;p&gt;There are configurable options for the majority of the functionality within NDepend even down to the colour scheme of the GUI itself and if you want to use a ribbon rather than a toolbar interface.&lt;/p&gt;  &lt;h3&gt;Visual Studio AddIn&lt;/h3&gt;  &lt;p&gt;As well as the stand alone application there is the AddIn for Visual Studio which adds an additional menu item to access&amp;#160; the functionality that is available in NDepend directly in Visual Studio so you get the graphs/matrix, CQL explorer, CQL Query, etc without having to leave the IDE.&lt;/p&gt;  &lt;p&gt;The one additional thing that the AddIn does that NDepend doesn’t do is to allow you to create a NDepend project for the currently loaded solution and it will add that file to solution for you.&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;What I’ve covered here is really only scratching the surface of what NDepend can do, I haven’t even covered code base comparison or test coverage, both of which are options available to you as well.&lt;/p&gt;  &lt;p&gt;It is this functionality that is of real use to individual developers especially allowing you to jump into the specific bits of code that have been identified as needing attention.&lt;/p&gt;  &lt;p&gt;The ability to create your own CQL queries to investigate your code base is great but the inability to easily share these queries/rules between projects is a issue but hopefully it will be resolved by NDepend soon.&lt;/p&gt;  &lt;h3&gt;What’s next?&lt;/h3&gt;  &lt;p&gt;In my final post I’ll be summarising what I’ve covered and have some general thoughts around NDepend.&lt;/p&gt;  &lt;p&gt;&lt;a style="display: none" href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag"&gt;CodeProject&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/9220389270062827818-3848250701058241680?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/ERJCAtXVPRQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/3848250701058241680/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2012/02/ndependvisual-ndepend.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/3848250701058241680?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/3848250701058241680?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2012/02/ndependvisual-ndepend.html" title="NDepend–Visual NDepend" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-T6qAyu7ilEo/TysfMbHkWHI/AAAAAAAAAI8/XJml5i_xSO8/s72-c/NDepend_thumb11.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEUEQXo7fyp7ImA9WhRbEEQ.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-6202981898212473454</id><published>2012-02-01T10:30:00.000Z</published><updated>2012-02-01T10:30:00.407Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-01T10:30:00.407Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NDepend" /><category scheme="http://www.blogger.com/atom/ns#" term="code quality" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>NDepend – Analysis Report</title><content type="html">&lt;p&gt;In my &lt;a href="http://designcoderelease.blogspot.com/2012/01/ndependgetting-started.html" target="_blank"&gt;last post&lt;/a&gt; I discussed installing NDepend and getting your first report out, this post is about that report.&lt;/p&gt;  &lt;p&gt;I’m not intending to go into every single aspect of the report as it contains a huge amount of information and the report itself provides help and assistance on nearly everything that it contains by linking to resources on the NDepend website.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: All details discussed are in relation to the Professional edition of NDepend, it is possible you will not see all this functionality if you are only using the trial edition&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;The Report&lt;/h3&gt;  &lt;p&gt;As I mentioned at the end of the last post with the Visual Studio AddIn in place when you build your application NDepend will automatically kick in, analyse the code and create a report for you detailing metrics, adherence to some standard developer rules, graphs displaying further information about the code base in different formats, etc.&amp;#160; Your browser will be launched and the html based report will be displayed but this isn’t a simple static report as it provides the ability to drill down into various sections to look at the analysis data in more detail.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;h3&gt;Sections&lt;/h3&gt;  &lt;p&gt;The standard NDepend report contains the following sections:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Summary – application name,&amp;#160; report date, etc &lt;/li&gt;    &lt;li&gt;Diagrams – dependency, treemap, etc &lt;/li&gt;    &lt;li&gt;Application Metrics – LoC, no. of classes, etc &lt;/li&gt;    &lt;li&gt;     &lt;div align="left"&gt;CQL Rules Summary – &lt;strong&gt;C&lt;/strong&gt;ode &lt;strong&gt;Q&lt;/strong&gt;uery Language rules that the application has broken&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;In addition to these sections you also have a menu that provides access to further information about your code including an easy way to navigate the CQL Rules, I’ll go into more depth on CQL in a bit.&lt;/p&gt;  &lt;h4&gt;Summary &lt;/h4&gt;  &lt;p&gt;This section contains pretty standard stuff such as the date the report was generated, version of NDepend used, and other information about the report rather than the code.&amp;#160; You will also find it contains links to resources specifically for beginners to help understand the report, quick tips (which seems to basically tell you to use Visual NDepend) and a link to the NDepend website.&lt;/p&gt;  &lt;p&gt;When running the report interactively I tend to doubt if this section adds a lot of value as you most likely know everything that it mentions, however, where this section comes into its own is when you generate the report from a CI server and this then allows you to track information about the report making it easier to link report to build and refer back to it at a later date.&lt;/p&gt;  &lt;h4&gt;Diagrams&lt;/h4&gt;  &lt;p&gt;The diagrams that are included in the report are images which helps you to visualize different aspects of the code base such as its dependencies, how abstract it is, etc but that is as far as it goes as the diagrams don’t offer any type of drill down functionality.&lt;/p&gt;  &lt;h4&gt;Application Metrics&lt;/h4&gt;  &lt;p&gt;The metrics contained in this section are things such as &lt;strong&gt;L&lt;/strong&gt;ines &lt;strong&gt;o&lt;/strong&gt;f &lt;strong&gt;C&lt;/strong&gt;ode, number of methods, number of classes, etc all fairly basic metrics and again if you are running it interactively may not be of much interest to you but when you have it generated from a CI build&amp;#160; you can look back over reports and track how a codebase has evolved over time.&lt;/p&gt;  &lt;h4&gt;CQL Rules Summary&lt;/h4&gt;  &lt;p&gt;Code Query Language is unique to NDepend, it is a DSL that allows you to query your code in a similar way that you can write SQL to query databases.&amp;#160; The report comes with many predefined rules that are executed against your codebase and with a simple green, yellow and red indicates the number of rules you’ve passed, violated or have violated a critical rule.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;A quick aside a critical rule is a normal CQL query that you have marked specifically as critical and when integrated into a CI server will cause the build to break if it is violated.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;For me this is the most useful section as it lists all of the rules that you have violated and provides links which take you to details of the rule, the CQL executed and a list of the items that violate the rule be it fields, methods, classes or assemblies.&lt;/p&gt;  &lt;h4&gt;Menu&lt;/h4&gt;  &lt;p&gt;On the left hand side of the report you will also find a menu that allows you to quickly jump to various pieces of information, some of which cannot be accessed elsewhere on the report e.g. Dead Code&lt;/p&gt;  &lt;p&gt;For me one of the nicest things in the menu is a way to move through the various groups of rules and being quickly able to see the number of rules passed/violated in each group and to be able to drill down to any sub/child rules contained within the group. &lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;When you first run NDepend and see the report it offers help for the beginner and it looks fantastic so you delve into it, however, once you’ve been using NDepend for a while for as a single user the report doesn’t offer anywhere near the level of functionality that Visual NDepend or the Visual Studio AddIn provides and I can see the report being largely ignored.&lt;/p&gt;  &lt;p&gt;As I mentioned a couple of times where I believe the report is of real use is when it is generated from a CI server and provides a really good way to track how a code base evolves over time, as well as ensuring that the quality of the code base meets defined rules.&amp;#160; I’m not intending to cover how to integrate NDepend with your CI Server as the NDepend website has really good details on how to do it &lt;a href="http://www.ndepend.com/Tips.aspx#CI" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;So you can see what a report looks like I’ve created a report based on my &lt;a href="http://designcoderelease.blogspot.com/2011/12/solid-data-access-layer.html" target="_blank"&gt;ADO.NET DAL&lt;/a&gt; and you can download the files from &lt;a href="http://nrg.im/NDependReport" target="_blank"&gt;here&lt;/a&gt;, then all you have to do is unzip to a folder and open the NDependReport.html.&lt;/p&gt;  &lt;h3&gt;What’s next?&lt;/h3&gt;  &lt;p&gt;In my next post I’m now going to look at Visual NDepend and go through the functionality that it provides.    &lt;br /&gt;&lt;a style="display: none" href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag"&gt;CodeProject&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/9220389270062827818-6202981898212473454?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/bKoCTF9pLvM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/6202981898212473454/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2012/02/ndepend-analysis-report.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/6202981898212473454?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/6202981898212473454?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2012/02/ndepend-analysis-report.html" title="NDepend – Analysis Report" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DkEEQXk5fyp7ImA9WhRUE0w.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-4345457282462623371</id><published>2012-01-23T10:30:00.000Z</published><updated>2012-01-23T10:30:00.727Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-23T10:30:00.727Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NDepend" /><category scheme="http://www.blogger.com/atom/ns#" term="getting started" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>NDepend–getting started</title><content type="html">&lt;p&gt;In my last &lt;a href="http://designcoderelease.blogspot.com/2012/01/introduction-to-ndepend.html" target="_blank"&gt;post&lt;/a&gt; I outlined the various editions of NDepend that were available, in this post I’m going to go through the install process and first steps with NDepend&lt;/p&gt;  &lt;h3&gt;Installing&lt;/h3&gt;  &lt;p&gt;Open up the Extension Manager in Visual Studio (Tools –&amp;gt; Extension Manager) and search for NDepend,&amp;#160; you should then see the following:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-QhImevYNuOk/Txx8klEDSYI/AAAAAAAAAII/ogUx-EREGc4/s1600-h/NDepend_ExtManager5.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="NDepend_ExtManager" border="0" alt="NDepend_ExtManager" src="http://lh4.ggpht.com/-y1YW8Uthbwk/Txx8lm_hZhI/AAAAAAAAAIQ/km6TuoCNtls/NDepend_ExtManager_thumb3.png?imgmax=800" width="544" height="350" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;Unfortunately if you click the button you won’t get an installer open to install NDepend instead your browser will open on the download page of the &lt;a href="http://www.ndepend.com/NDependDownload.aspx" target="_blank"&gt;website&lt;/a&gt; where you will need to provide an email address to download the trial edition or the Licence ID that you have received to enable you to download the Professional edition.&lt;/p&gt;  &lt;p&gt;When you have provided your email or your licence then you will download a zip file which contains everything you need, all you need to do is extract the files to your location of choice.&lt;/p&gt;  &lt;h3&gt;Configuration&lt;/h3&gt;  &lt;p&gt;Whilst you are now able to use NDepend standalone to get the most out of it you need to enable integration with Visual Studio.&amp;#160; To do this run VisualNDepend.exe and select “Install Visual Studio Addin”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-6RY7dfCQoQw/Txx8ma-OAKI/AAAAAAAAAIY/tlOoWMs2tWA/s1600-h/NDependGUI_addin4.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="NDependGUI_addin" border="0" alt="NDependGUI_addin" src="http://lh5.ggpht.com/-3-7Cie6-y7M/Txx8nSDTndI/AAAAAAAAAIg/5Udz7SE9H4Q/NDependGUI_addin_thumb2.png?imgmax=800" width="449" height="408" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;When you click this you will be shown a dialog that will allow you to select which editions of Visual Studio you want to install the AddIn for and the AddIn will then be installed into the appropriate versions of Visual Studio and that is NDepend configured and ready for use.&lt;/p&gt;  &lt;p&gt;Sharp eyed readers will notice the button “Install Reflector AddIn” which, if you have &lt;a href="http://www.reflector.net/" target="_blank"&gt;Reflector&lt;/a&gt; installed, will add an AddIn to reflector which will add a couple of context menu items in reflector allowing you to jump between Visual NDepend and Reflector to explore the code.&amp;#160; Unfortunately I’ve not had a lot of success with this AddIn and am currently in contact with NDepend support to try and rectify the issues I’m experiencing.&lt;/p&gt;  &lt;h3&gt;Getting started&lt;/h3&gt;  &lt;p&gt;With NDepend on your machine and the AddIn installed when you open Visual Studio you will find NDepend as a menu item, this will provide you with one of the main ways to interact with NDepend.&lt;/p&gt;  &lt;p&gt;To now try out NDepend simply open any project you have and then go to the NDepend menu item and select “Attach New NDepend Project to current VS solution”, this will open a dialog with the current project already added, simply click Ok.&lt;/p&gt;  &lt;p&gt;NDepend will start up and run an analysis of the project creating a html report with the results which it will then display in your default browser along with a dialog that offers advice for new users and suggest what you might want to look at next. You’ll also find that the dialog provides a snippet of information about the options to help you decide.&lt;/p&gt;  &lt;h3&gt;Summary&lt;/h3&gt;  &lt;p&gt;Installing NDepend is very easy with very little to go wrong&lt;/p&gt;  &lt;p&gt;My one criticism is that it isn’t an integrated process, you have to download it, then open the application and select to install the VS AddIn I know its not exactly a difficult to do this but It would be really good to be able to do the whole install from the VS Extension manager, including the VS Add-in.&lt;/p&gt;  &lt;h2&gt;What’s next?&lt;/h2&gt;  &lt;p&gt;Next I’m going to go through the report and look at what the report shows you and the information it contains.&lt;/p&gt;  &lt;br /&gt;  &lt;br /&gt;&lt;a style="display: none" href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag"&gt;CodeProject&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-4345457282462623371?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/p6FHi8uJpN4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/4345457282462623371/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2012/01/ndependgetting-started.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4345457282462623371?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4345457282462623371?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2012/01/ndependgetting-started.html" title="NDepend–getting started" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-y1YW8Uthbwk/Txx8lm_hZhI/AAAAAAAAAIQ/km6TuoCNtls/s72-c/NDepend_ExtManager_thumb3.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEUEQX4-fip7ImA9WhRVF0Q.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-2090364790436942879</id><published>2012-01-17T10:30:00.000Z</published><updated>2012-01-17T10:30:00.056Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T10:30:00.056Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="introduction" /><category scheme="http://www.blogger.com/atom/ns#" term="NDepend" /><category scheme="http://www.blogger.com/atom/ns#" term="metrics" /><category scheme="http://www.blogger.com/atom/ns#" term="code quality" /><category scheme="http://www.blogger.com/atom/ns#" term="review" /><title>An introduction to NDepend</title><content type="html">If you are anything like me then you love to have information about the code you write whether its test coverage, cyclomatic complexity, or other metrics that can give you some insight into your code.&lt;br /&gt;
&lt;br /&gt;
Before the shouting starts I’m not talking about metrics as KPI’s or using them for targets that developers have to meet, I’m simply talking about information &lt;i&gt;you&lt;/i&gt; can use to better understand your code which may in turn help you to improve the code.&lt;br /&gt;
&lt;br /&gt;
If you are lucky enough to have the Premium or Ultimate edition of VS2010 or VS2008 Team Suite/Developer then you get this functionality as part of visual studio, if not then you need another tool to provide you with this information. Even if you do have the native VS analysis functionality you may find that there are tools out there that provide a lot more information that the built in tools.&lt;br /&gt;
&lt;h3&gt;
NDepend&lt;/h3&gt;
&lt;a href="http://nrg.im/AE4KHF" target="_blank"&gt;NDepend&lt;/a&gt; is one such tool it provides metrics on your code but that isn’t all, it will allow you to delve inside the architecture of your application, allow you to diff the code, has test coverage analysis and build server integration built in.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
NDepend will also work with VS2005 upwards and as it can be used independently of Visual Studio you can actually use it even if you only have the Express editions of Visual Studio.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Disclaimer: I do &lt;b&gt;not &lt;/b&gt;work for NDepend but I was lucky enough to be provided the software to “play with”, my opinion in this and any subsequent post is my opinion and nobody else’s.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
I'm going to put together a series of posts, this being the first, on NDepend trying to give you an idea of the product and what you can, and can't, do with it.&lt;br /&gt;
&lt;br /&gt;
 In this post I’m going to talk about the different editions of NDepend and give some information on each of them:&lt;br /&gt;
&lt;h3&gt;

Editions&lt;/h3&gt;
Currently there are 3 editions of NDepend:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Trial/Open-Source/Academic Edition &lt;/li&gt;
&lt;li&gt;Professional Developer Edition &lt;/li&gt;
&lt;li&gt;Professional Build Machine Edition &lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;

Trial/Open-Source/Academic Edition&lt;/h4&gt;
The Trial/Open-Source/Academic Edition, referred to as Trial from this point, is a good starting place for anybody interested in trying NDepend.&lt;br /&gt;
&lt;br /&gt;
As you may expect though this edition has limited functionality but to be fair to NDepend it provides the majority of features that the Professional Developer edition does so you can get a really good idea of what you can do though there are limitations imposed on the level of functionality supported for each feature.&lt;br /&gt;
&lt;br /&gt;
You are able to use the trial version freely for non-commercial software but it is time limited (current downloadable version will stop working 12th March 2012) although you are able to download another version once the software has past its expiry date. The site provides &lt;a href="http://www.ndepend.com/NDependDownload.aspx" target="_blank"&gt;guidance&lt;/a&gt; on using the trial version so you can decide if you really should be using it or not.&lt;br /&gt;
&lt;h4&gt;

Professional Developer Edition&lt;/h4&gt;
This is the full version that you’ll really want if you like NDepend, not only does it provide unfettered access to the majority of the functionality in the software (more on this in a bit) but also comes with additional features:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Test coverage import – happy to use NCover or Visual Studio Coverage &lt;/li&gt;
&lt;li&gt;Reflector integration – provides an addin to reflector to allow you to jump into NDepend from a context menu entry&lt;/li&gt;
&lt;li&gt;Build Comparison/Code Diff -&amp;nbsp; provides a way to diff code &amp;amp; builds to understand what’s changed &lt;/li&gt;
&lt;/ul&gt;
This edition is the one you’d most likely use day to day to check on how your code is doing and to be able to target any areas that you can see could do with some attention.&lt;br /&gt;
&lt;h4&gt;

Professional Build Machine Edition&lt;/h4&gt;
If you have a Continuous Integration server then you can enhance it with this edition that will allow you to generate reports from NDepend in your build process on the quality of the code when compared with the metrics you’ve defined.&lt;br /&gt;
&lt;br /&gt;
This integration will &lt;b&gt;not&lt;/b&gt; stop your build, it will only generate the report that you have configured.&lt;br /&gt;
&lt;h3&gt;

Edition summary&lt;/h3&gt;
Above I’ve given you a run down of some of the differences between the versions and what they do a full comparison can be found &lt;a href="http://www.ndepend.com/Editions.aspx" target="_blank"&gt;here&lt;/a&gt; on the &lt;a href="http://nrg.im/AE4KHF" target="_blank"&gt;NDepend&lt;/a&gt; site.&lt;br /&gt;
&lt;br /&gt;
As I eluded to the professional version doesn’t appear to support some of the features that the trial version does namely those related to build server integration.&lt;br /&gt;
&lt;br /&gt;
I can understand why this has been done as it allows people to download a single version of the software and try out both the interactive and build integration facets of the application.&lt;br /&gt;
&lt;br /&gt;
It would be nice though to be able to get the Professional edition to do this functionality even if only for trial purposes, it is possible it already does this but the aforementioned comparision chart seems to indicate that it doesn't have those features.&lt;br /&gt;
&lt;br /&gt;&lt;h3&gt;

What’s next?&lt;/h3&gt;
The next post will probably just be a short one as I’m going to be looking at the installation of NDepend.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-2090364790436942879?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/X2IHMnpjqFE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/2090364790436942879/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2012/01/introduction-to-ndepend.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/2090364790436942879?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/2090364790436942879?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2012/01/introduction-to-ndepend.html" title="An introduction to NDepend" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CkUMSXsycCp7ImA9WhRWFUQ.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-4667396498462285407</id><published>2012-01-03T10:30:00.000Z</published><updated>2012-01-03T11:31:28.598Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-03T11:31:28.598Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="retrospective" /><category scheme="http://www.blogger.com/atom/ns#" term="stuff" /><title>2011 into 2012</title><content type="html">Just as I did in last years &lt;a href="http://designcoderelease.blogspot.com/2011/01/that-was-2010-here-comes-2011.html" target="_blank"&gt;post&lt;/a&gt; this post is effectively a &lt;a href="http://en.wikipedia.org/wiki/Retrospective" target="_blank"&gt;retrospective&lt;/a&gt; on 2011, including looking at whether I achieved what I wanted to achieve, and some goals for this year.
&lt;br /&gt;
&lt;h3&gt;


2011…&lt;/h3&gt;
&lt;h4&gt;


Goals&lt;/h4&gt;
In my post from last year my goals were:&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;More user group presentations &lt;/li&gt;
&lt;li&gt;More book reviews &lt;/li&gt;
&lt;li&gt;CSP application approval &lt;/li&gt;
&lt;li&gt;Increase amount of code I write&amp;nbsp; including look at Ruby &amp;amp; F# &lt;/li&gt;
&lt;li&gt;Continuous Integration &lt;/li&gt;
&lt;li&gt;Earn MVP &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;


So how did I do?&lt;/h4&gt;
&lt;u&gt;More user group presentations&lt;/u&gt;&lt;br /&gt;
After being selected for DDD9 I then went on to present at almost every DDD event during the year only missing out on DDD Belfast and DDD Dundee. I also got to present at a couple of user groups it may have been more but being honest I don’t think I put enough effort into letting people who run the groups know that I was available.&lt;br /&gt;
&lt;br /&gt;
One event that I did participate in, and hadn’t anticipated being part of, was the &lt;a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dot-net-tutorials-2011" target="_blank"&gt;Progressive.Net Tutorials&lt;/a&gt; at &lt;a href="http://skillsmatter.com/" target="_blank"&gt;Skills Matter&lt;/a&gt; where I presented &lt;a href="http://skillsmatter.com/podcast/open-source-dot-net/you-think-you-know-agile" target="_blank"&gt;So you think you know agile&lt;/a&gt; which I enjoyed immensely.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Book reviews&lt;/u&gt;&lt;br /&gt;
I only managed to do a single book review last year on the excellent &lt;a href="http://designcoderelease.blogspot.com/2011/04/book-review-dependency-injection-in-net.html" target="_blank"&gt;Dependency Injection in .Net&lt;/a&gt; but for reasons that will become apparent I never managed to find the time to do any more reviews.&lt;br /&gt;
&lt;br /&gt;
Unfortunately I didn’t manage to do a lot of reading this year only perhaps having read 3 books the whole year.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;CSP Application approval&lt;/u&gt;&lt;br /&gt;
My application was approved, I am now both a Certified Scrum Master and Certified Scrum Professional the latter to me being more important as it demonstrates an actual working knowledge and experience of Scrum rather than having just taken a course.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Increase amount of code I write&lt;/u&gt;&lt;br /&gt;
I can confidently say I succeeded in this, partly because I changed job again this year, which for me is very unusual to stay in a job for such a short period of time, and my focus changed from team leadership/management to near enough pure development.&amp;nbsp; This change in job did mean that I no longer commuted by train I had so I lost that time.&lt;br /&gt;
&lt;br /&gt;
I also worked on my own code that I pushed to GitHub and much to my surprise and delight a couple of my repo’s have been forked by other people so it would seem I may be dong something right.&lt;br /&gt;
&lt;br /&gt;
One thing I didn’t spend any time on this year was the OSS project I mentioned in the 2010 post and this will be because of the other code I worked on during the year.&lt;br /&gt;
&lt;br /&gt;
I never managed to look at either Ruby or F# my time being taken up with the code I wrote and pushed to GitHub and also because I simply forgot that I had set myself that goal.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Continuous Integration&lt;/u&gt;&lt;br /&gt;
When I moved jobs I got the opportunity to start using CI and moved from simply automating builds to build and test then build, test &amp;amp; deploy and finally added in the in built code coverage support to show the test coverage of the project being built.&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
My experience has solely been with Team City because I found it very easy to work with, especially with help from &lt;a href="http://bit.ly/tHMGLO" target="_blank"&gt;Paul Stack&lt;/a&gt; when I ran into a few issues who helped me sort them out and get everything moving smoothly.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Earn MVP&lt;/u&gt;&lt;br /&gt;
Well I failed at this utterly. I have no idea how you get onto the MVP program and didn’t even attempt to find out.&lt;br /&gt;
&lt;h4&gt;






What else went on?&lt;/h4&gt;
&lt;u&gt;This Blog&lt;/u&gt;&lt;br /&gt;
When I look back at the blog I noticed that I posted far more posts in 2010 than I did in 2011 30 vs 52 but interestingly from the limited metrics that blogger provides the traffic has increased (I have Google analytics in place now but still won’t give me a full years stats).&amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
The blog also changed from being purely a brain dump to expressing an opinion on a subject, such as &lt;a href="http://designcoderelease.blogspot.com/2011/07/software-developer-zen-warrior.html" target="_blank"&gt;Software Developer != Zen Warrior&lt;/a&gt;, and telling people about the code I started to push onto GitHub.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Give Camp UK&lt;/u&gt;&lt;br /&gt;
This was a massive event, where developers gave up a weekend to create software for charity. A note here is nowhere near enough to cover it but hopefully my &lt;a href="http://designcoderelease.blogspot.com/2011/11/givecampukone-very-busy-weekend.html" target="_blank"&gt;post&lt;/a&gt; has sufficient detail.&lt;br /&gt;
&lt;h3&gt;






… into 2012&lt;/h3&gt;
I’m again looking to the future here to set myself some goals to try and achieve during the year and this time I’m keeping a note of them on my own kanban board so I can track how I’m getting on.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Blog posts – I’m looking to continue writing blog posts with a series of posts on NDepend coming up soon.&lt;/li&gt;
&lt;li&gt;Read books – I have a list of books that I want to read and am going to try and make time to do so&lt;/li&gt;
&lt;li&gt;Presentations – I have a couple of presentations I want to write and am looking for inspiration for other subjects &lt;/li&gt;
&lt;li&gt;MVP – even if I’m not able to earn one I’ll at least look into how you go about becoming eligible for one.&lt;/li&gt;
&lt;li&gt;Coding – I’m splitting my goals into will do and nice to do:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Will Do&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Concerted effort to finish the OSS project I started about 2 years ago&lt;/li&gt;
&lt;li&gt;Improve my JavaScript – looking at the future of development I know I need to improve my JavaScript skills&lt;/li&gt;
&lt;li&gt;Continue working on my ADO.NET DAL, I have some ideas about it including changing the API&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Nice to do&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Nuget – I would love to put a Nuget package together and get it published&lt;/li&gt;
&lt;li&gt;Learn PowerShell – it seems PowerShell could be massively useful so if I’m able to incorporate learning it in my normal coding activities then I’ll do so.&lt;/li&gt;
&lt;li&gt;Learn Python – over the last year I have seen more and more articles, tweets, etc about python so fancy having a go at coding with it.&lt;/li&gt;
&lt;li&gt;Develop WP7 apps – having purchased a WP7 I would love to be able to develop applications for it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
Now looking at the list I’m already thinking I’m going to be very busy and will need to get some brownie points in with the other half to try and get some time to do all this.&lt;br /&gt;
&lt;br /&gt;
So if you’ve read this far you know what I’m going to be doing in 2012 but what will you be up to?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-4667396498462285407?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/UZiyGDBIPpI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/4667396498462285407/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2012/01/2011-into-2012.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4667396498462285407?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4667396498462285407?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2012/01/2011-into-2012.html" title="2011 into 2012" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0QER3o_eip7ImA9WhRWFUk.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-7887728839960505629</id><published>2011-12-31T21:37:00.001Z</published><updated>2012-01-02T23:01:46.442Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-02T23:01:46.442Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linq-to-sql" /><category scheme="http://www.blogger.com/atom/ns#" term="Repository" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Entity Framework" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><category scheme="http://www.blogger.com/atom/ns#" term="ORM" /><title>A generic repository</title><content type="html">Way back in &lt;a href="http://designcoderelease.blogspot.com/2011/01/that-was-2010-here-comes-2011.html" target="_blank"&gt;January&lt;/a&gt; I said that I was going to post on a generic repository, due to various other diversions during the year I never managed to get around to completing this work but on the last day of the year it is finally all done and to tick off one of my goals here is the post about it.&lt;br /&gt;
&lt;h3&gt;


What’s it all about?&lt;/h3&gt;
When talking about both Linq to Sql (L2S) and Entity framework (EF) you will frequently hear developers saying that they will be using a &lt;a href="http://martinfowler.com/eaaCatalog/repository.html" target="_blank"&gt;repository&lt;/a&gt; to encapsulate the ORM interactions, what this means in practice is hiding the actual ORM functions and providing a abstract class or interface you can mock to make it easier to test your applications.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
The simplest way of doing this is simply creating a class per entity that implements an interface and allows you to mock/stub/fake the interactions with the ORM allowing for easier unit testing of logic. &lt;br /&gt;
&lt;h4&gt;


Hasn’t this been done before?&lt;/h4&gt;
Yes it has. There are lots of articles on the web in relation to creating repositories and in particular generic repositories.&lt;br /&gt;
The majority of the articles I found were around EF but there were also versions for L2S and NHibernate.&lt;br /&gt;
&lt;h4&gt;


So why did you create one?&lt;/h4&gt;
At the time I started to create my own generic repository I had been using L2S for a while but found it frustrating that although it was useful it made testing very difficult as there was no easy way to mock/stub/fake it.&lt;br /&gt;
So I decided to try and create my own, yes I could have just used one that was already on the internet but doing that I wouldn’t have &lt;i&gt;really&lt;/i&gt; thought about what was needed or what issues I could encounter.&lt;br /&gt;
It would be very churlish of me to pretend that I hadn’t looked at other peoples implementations especially since the issues I was running into may have already been solved by other people (this &lt;a href="http://goneale.com/2009/07/27/linq-to-sql-generic-repository/" target="_blank"&gt;post&lt;/a&gt; in relation to the L2S implementation and this &lt;a href="http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/" target="_blank"&gt;post&lt;/a&gt; in relation to the EF implementation).&lt;br /&gt;
&lt;h4&gt;


Does this code offer anything different?&lt;/h4&gt;
My code has been designed to work with dependency injection and because of this each repository class does not create the context it needs rather it expects it to be injected into it. Its not revolutionary but does allow the developer to control the lifetime of the context rather than relying on the repository to do so.&lt;br /&gt;
The implementations for L2S &amp;amp; EF have been designed to work with entities that have been disconnected from a context rather than simply expecting all the interactions to be done within the scope of a single context which is often an issue in    &lt;br /&gt;
n-tier applications.&lt;br /&gt;
A fair number of the generic repository implementations I found on the web expected you to not only specify the type but also the primary key, my implementations will attempt to determine the primary key of the entity itself removing the need to specify this.&lt;br /&gt;
&lt;h3&gt;


Why use generic repositories?&lt;/h3&gt;
&lt;h4&gt;


The advantages&lt;/h4&gt;
Generic repositories are perfect when building applications using TDD and you need to be able to mock/stub/fake the ORM as a dependency.&amp;nbsp; It is also possible to take a lot of boiler plate code (such as updating changes in a disconnected scenario) and push it into the repository so keeping the code DRY and adhering to SOLID principles.&lt;br /&gt;
The other major advantage is the ability to inject the ORM dependency into other classes allowing you utilise IoC containers to construct whatever object graph is required.&lt;br /&gt;
&lt;h4&gt;


The disadvantages&lt;/h4&gt;
The generic repository as I, and most other examples, have implemented it is a &lt;a href="http://en.wikipedia.org/wiki/Leaky_abstraction" target="_blank"&gt;leaky abstraction&lt;/a&gt; as the entities in the ORM are what the rest of the code uses thereby creating a tight coupling between the application code and the specific ORM.&amp;nbsp; This may or may not be an issue for you depending on whether you are happy to be bound to any specific ORM or if you truly want persistent ignorance.&lt;br /&gt;
Although the generic repository offers a lot of control if your entities contain child objects you still don’t have control over it when how those are loaded, they are still loaded by the ORM and potentially if the entity has been disconnected you could have errors to contend with as it tries to load them without a context.&lt;br /&gt;
By encapsulating the ORM behind a facade interface it is possible you will lose some (all?) of the in built functionality that the ORM provides (self tracking entities is one possible loss) which could render the advantages of using an ORM null and void.&lt;br /&gt;
&lt;h3&gt;


Summary&lt;/h3&gt;
Whilst writing this code it struck me that the generic repository is an imperfect solution to the problem of mocking/stubbing/faking an ORM to reduce the coupling between the layers and since I first starting looking at this various solutions have come about – EF Code First, micro-ORM’s (Massive, Dapper, Simple.Data) and these provide a better solution BUT they rely on dynamic and if you are still working with .Net 3.5 this isn’t available.&lt;br /&gt;
So if you’re on .Net 4 (or above) then look to one of the newer version of ORM or micro-ORM that will easily allow you to mock/stub/fake the data access without the need for this additional coding, however, if you are working with .Net 3.5 then a generic repository may just be what you need to enable you to utilise an ORM, unit test the code and use IoC to create your object graph.&lt;br /&gt;
The code itself is available to download from my GitHub, please go &lt;a href="http://nrg.im/uRHf9r" target="_blank"&gt;here&lt;/a&gt; to download it.&lt;br /&gt;
Note: the code has been written in .Net 4.0 whilst L2S is happy to convert to .Net 3.5 the EF implementation will need rewriting to work.&lt;br /&gt;
&lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-7887728839960505629?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/6KagSAdLSv4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/7887728839960505629/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/12/generic-repository.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/7887728839960505629?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/7887728839960505629?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/12/generic-repository.html" title="A generic repository" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;A0UASH4yeyp7ImA9WhRQEUo.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-5087406512296287540</id><published>2011-12-06T10:00:00.000Z</published><updated>2011-12-06T13:47:29.093Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-06T13:47:29.093Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ADO.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="DAL" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><category scheme="http://www.blogger.com/atom/ns#" term="SOLID" /><category scheme="http://www.blogger.com/atom/ns#" term="data access" /><title>A S.O.L.I.D data access layer</title><content type="html">A while back I had reason to look at one of my assemblies in my “toolbox” which wrapped the System.Data.SqlClient assembly and as often happens when you look at old code you cringe and wonder what you were thinking when you wrote it, so I decided to refactor the code using &lt;a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod" target="_blank"&gt;S.O.L.I.D principles&lt;/a&gt; to make the code easier to understand, test, maintain and extend and so &lt;a href="http://nrg.im/ubLPU8" target="_blank"&gt;ADO.NET DAL&lt;/a&gt; was born.&lt;br /&gt;
&lt;br /&gt;
For those of you who follow on me on Twitter you’ll know I spent a long time trying to ensure that the library had 100% code coverage but unfortunately I never made it, one method still eludes me but 99% coverage is pretty good &lt;img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://lh4.ggpht.com/-6XqW26Nm7Dk/Tt1RaL0enYI/AAAAAAAAAH0/IU8ghxC4z-g/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;.&lt;br /&gt;
&lt;h3&gt;

&lt;/h3&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;h3&gt;

A data access layer? really?&lt;/h3&gt;
In this age of ORM’s, micro-ORM’s and &lt;a href="https://github.com/markrendle/Simple.Data" target="_blank"&gt;Simple.Data&lt;/a&gt; are people still using ADO.Net directly? are people writing data access layers which don’t return a fully populated POCO? I can safely say yes to both of those questions having seen code with numerous native ADO.NET calls and various blog and tweets from people that don’t like or want to use an ORM.&lt;br /&gt;
&lt;br /&gt;
For some people ORM’s are seen as an &lt;a href="http://seldo.com/weblog/2011/06/15/orm_is_an_antipattern" target="_blank"&gt;anti-pattern&lt;/a&gt; which actually hinder development as a project becomes more complex, for other people they may be dealing with legacy software that uses ADO.NET extensively and this use of native ADO.NET makes the code hard to test and often the amount of effort required to refactor it is so large it is just left as it is.&lt;br /&gt;
&lt;h3&gt;

Why should I use it?&lt;/h3&gt;
If you are working on legacy software which has ADO.NET code scattered throughout the codebase you’re working on this library should make it easy for you to refactor the code without taking a lot of time, allowing you to write tests for it, and making the code a lot cleaner in the process.&lt;br /&gt;
&lt;br /&gt;
If you don’t want to use an ORM then this library has wrapped the ADO.NET functionality in a nice package that you can just use meaning you don’t have to worry about connection handling, transactions or creation of parameters.&lt;br /&gt;
&lt;h3&gt;

What does it do for me?&lt;/h3&gt;
As mentioned above the library is designed to deal with connection handling, all that you need to do is to provide the Sql, or name of the stored procedure, you want to execute to the appropriate method and the library create the command object, configure it and execute it for you.&lt;br /&gt;
&lt;br /&gt;
The intention behind the code is to simplify the use of ADO.NET by wrapping the boiler plate code and just exposing the core functionality through a &lt;a href="http://en.wikipedia.org/wiki/Facade_pattern" target="_blank"&gt;facade&lt;/a&gt; meaning you can focus on the what you want your code to do rather than the how.&lt;br /&gt;
&lt;br /&gt;
If you have native ADO.NET in your classes you can simply replace blocks of code with calls to the appropriate methods, this means you need make only the minimum of changes to the overall structure of your code without worrying about side effects.&lt;br /&gt;
&lt;br /&gt;
The library is test friendly making it easy to mock/stub/fake the interaction between your code and the database and by ensuring that the code can be tested it is also easy to inject into any classes that may need it using your favourite Inversion of Control container.&lt;br /&gt;
&lt;br /&gt;
To further help with testing the public API uses the &lt;a href="http://msdn.microsoft.com/en-us/library/9tahwysy.aspx" target="_blank"&gt;System.Data.Common&lt;/a&gt; namespace which is designed to work with various data providers and all support generic interfaces that can again be mocked/stubbed/faked.&lt;br /&gt;
&lt;h3&gt;

Show me the code….&lt;/h3&gt;
Here is an example of some pretty standard ADO.NET code that you may find in many code bases:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; &lt;span style="color: blue;"&gt;using&lt;/span&gt; (var connection = &lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;         &lt;span style="color: blue;"&gt;new&lt;/span&gt; SqlConnection(ConfigurationManager.ConnectionStrings[&lt;span style="color: #006080;"&gt;"theDatabase"&lt;/span&gt;].ConnectionString))&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;     var command = &lt;span style="color: blue;"&gt;new&lt;/span&gt; SqlCommand(&lt;span style="color: #006080;"&gt;"GetValue"&lt;/span&gt;, connection);&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     command.CommandType = CommandType.StoredProcedure;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;     command.Parameters.Add(&lt;span style="color: blue;"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #006080;"&gt;"firstParameter"&lt;/span&gt;, parameterValue));&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;     connection.Open();&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;     result = command.ExecuteScalar();&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
The code above also has a dependency on &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx" target="_blank"&gt;ConfigurationManager&lt;/a&gt;, whilst I’m not saying this is always the way the configuration string is provided I’ve seen it more times than I’d care to remember.&lt;br /&gt;
&lt;br /&gt;
So what does this look like with the DAL?&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; result = dataAccess.ExecuteScalar(storedProcedureName,&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;                                   dataAccess.ParameterFactory.Create(&lt;span style="color: #006080;"&gt;"firstParameter"&lt;/span&gt;,DbType.Int32,123));&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
you can accomplish the same in a single line…ok so I cheated a little and missed out the creation of the dataAccess object itself but that is just:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; IDataAccess dataAccess = &lt;span style="color: blue;"&gt;new&lt;/span&gt; DataAccess(connectionString);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
and if you are using dependency injection you’d get your IoC container to do this for you (you are using IoC aren’t you?) which means that you won’t have it scattered throughout the code base.&lt;br /&gt;
&lt;br /&gt;
If you look at the code you’ll see that the main IDataAccess interface has a ParameterFactory object that you use for creation of any parameters that you may need, and because the method calls all take a &lt;a href="http://msdn.microsoft.com/en-us/library/w5zay9db.aspx" target="_blank"&gt;param array&lt;/a&gt; of DbParameters you can simply add more and more in the method call like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; result = dataAccess.ExecuteScalar(storedProcedureName,&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;                                   dataAccess.ParameterFactory.Create(&lt;span style="color: #006080;"&gt;"Parameter1"&lt;/span&gt;,DbType.Int32, 123),&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt;                                   dataAccess.ParameterFactory.Create(&lt;span style="color: #006080;"&gt;"Parameter2"&lt;/span&gt;,DbType.AnsiString,&lt;span style="color: #006080;"&gt;"a"&lt;/span&gt;),&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt;                                   dataAccess.ParameterFactory.Create(&lt;span style="color: #006080;"&gt;"Parameter3"&lt;/span&gt;,DbType.Double,&lt;span style="color: #006080;"&gt;"12.01"&lt;/span&gt;));&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
But equally because its a param array you can call the same method with no parameters at all:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; result = dataAccess.ExecuteScalar(storedProcedureName);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;

Anything else I should know?&lt;/h3&gt;
The library also provides a basic &lt;a href="http://martinfowler.com/eaaCatalog/unitOfWork.html" target="_blank"&gt;unit of work&lt;/a&gt; implementation through normal ADO.NET transactions:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; dataAccess.Transactions.BeginTransaction();&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum2" style="color: #606060;"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum3" style="color: #606060;"&gt;   3:&lt;/span&gt; &lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum4" style="color: #606060;"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum5" style="color: #606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color: blue;"&gt;int&lt;/span&gt; id = dataAccess.ExecuteScalar(doUpdate, dataAccess.ParameterFactory.Create(&lt;span style="color: #006080;"&gt;"1"&lt;/span&gt;,DbType.Int32,1));&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum6" style="color: #606060;"&gt;   6:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum7" style="color: #606060;"&gt;   7:&lt;/span&gt;     dataAccess.ExecuteNonQuery(doUpdate2,dataAccess.ParameterFactory.Create(&lt;span style="color: #006080;"&gt;"id"&lt;/span&gt;,DbType.Int32,id),&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum8" style="color: #606060;"&gt;   8:&lt;/span&gt;                                          dataAccess.ParameterFactory.Create(&lt;span style="color: #006080;"&gt;"value"&lt;/span&gt;,DbType.String,&lt;span style="color: #006080;"&gt;"abc"&lt;/span&gt;));&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum9" style="color: #606060;"&gt;   9:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum10" style="color: #606060;"&gt;  10:&lt;/span&gt;     dataAccess.Transactions.CommitTransaction();&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum11" style="color: #606060;"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum12" style="color: #606060;"&gt;  12:&lt;/span&gt; &lt;span style="color: blue;"&gt;catch&lt;/span&gt; (Exception ex)&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum13" style="color: #606060;"&gt;  13:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum14" style="color: #606060;"&gt;  14:&lt;/span&gt;     dataAccess.Transactions.RollbackTransaction();&lt;/pre&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum15" style="color: #606060;"&gt;  15:&lt;/span&gt;     &lt;span style="color: blue;"&gt;throw&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum16" style="color: #606060;"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
The other feature that you may want to be aware of is that each method has an overload that allows you access to the actual DBCommand that was executed so that if you need to get to the return value, return parameters or anything else on the command you simply provide an out parameter to populate:&lt;br /&gt;
&lt;div id="codeSnippetWrapper" style="background-color: #f4f4f4; border-bottom: silver 1px solid; border-left: silver 1px solid; border-right: silver 1px solid; border-top: silver 1px solid; cursor: text; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 20px 0px 10px; max-height: 200px; overflow: auto; padding-bottom: 4px; padding-left: 4px; padding-right: 4px; padding-top: 4px; text-align: left; width: 97.5%;"&gt;
&lt;div id="codeSnippet" style="background-color: #f4f4f4; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;
&lt;pre style="background-color: white; border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none; color: black; direction: ltr; font-family: 'Courier New', courier, monospace; font-size: 8pt; line-height: 12pt; margin: 0em; overflow: visible; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 100%;"&gt;&lt;span id="lnum1" style="color: #606060;"&gt;   1:&lt;/span&gt; dataAccess.ExecuteNonQuery(&lt;span style="color: blue;"&gt;out&lt;/span&gt; commandToCheck, storedProcedureName);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;

Future plans&lt;/h3&gt;
At the moment the library only supports Sql Server as that was the focus of the original library that I refactored, however, I’m hoping to extend the number of types of database the library supports going forward with the first additional type of database being Sql Compact. &lt;br /&gt;
&lt;br /&gt;
This seemingly simple change will offer plenty of challenges as I would like to keep the public API the same meaning I have to work out which type of database you want under the covers, quite how I’m going to do that I haven’t decided yet.&lt;br /&gt;
&lt;h3&gt;

Feedback please&lt;/h3&gt;
I’d love to hear your thoughts on this, is it something you like? is it something you think you could use? would I be wasting my time extending this further given alternatives that are out there?&lt;br /&gt;
&lt;br /&gt;
Please leave me a comment or contact me about it and feel free to fork the code and have a play.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-5087406512296287540?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/CjXQ2kyrPXM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/5087406512296287540/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/12/solid-data-access-layer.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5087406512296287540?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5087406512296287540?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/12/solid-data-access-layer.html" title="A S.O.L.I.D data access layer" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-6XqW26Nm7Dk/Tt1RaL0enYI/AAAAAAAAAH0/IU8ghxC4z-g/s72-c/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;DUICRnczeSp7ImA9WhRRF08.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-5740255662999376768</id><published>2011-11-29T08:30:00.001Z</published><updated>2011-12-01T08:19:27.981Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-01T08:19:27.981Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mango" /><category scheme="http://www.blogger.com/atom/ns#" term="Window Phone" /><category scheme="http://www.blogger.com/atom/ns#" term="WP7" /><title>Getting to grips with a Windows Phone 7</title><content type="html">Last Wednesday I became the owner of a windows phone 7 (WP7), a HTC Radar to be precise. My current mobile contract had expired and I had been toying with the idea of getting a WP7 for a while.&amp;nbsp; Unfortunately I was dubious about the platform and didn’t really want to take out a long contract and end up with a phone I didn’t want, and as all my attempts to get a free phone failed I decided to try and buy a SIM free phone. A brand new phone was beyond my budget so I turned to eBay and found a few WP7’s listed and managed to pick up a &lt;a href="http://www.techradar.com/reviews/phones/mobile-phones/htc-radar-1038080/review" target="_blank"&gt;Htc Radar&lt;/a&gt; for about £200 which was a result.&lt;br /&gt;
&lt;h3&gt;


Why a WP7?&lt;/h3&gt;
I have already been asked why I’d want to buy a WP7 and the simple answer is that I am a .Net developer and I want to do some mobile development, not just on the emulator but to be able to actually deploy to the device for testing and ultimately the market place.&amp;nbsp; Whilst I’d already got an Android phone (&lt;a href="http://www.techradar.com/reviews/phones/mobile-phones/htc-desire-679515/review" target="_blank"&gt;HTC Desire&lt;/a&gt;) I was faced with having to find time to learn java or find the money to buy &lt;a href="http://android.xamarin.com/" target="_blank"&gt;MonoDroid&lt;/a&gt; neither of which were likely to happen.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;By having a WP7 I should be able to use my existing skills and create mobile applications without a big learning curve or shelling out extra cash which in theory makes it the ideal choice for my first native mobile apps rather than simply a web application that is able to run on mobiles.&lt;br /&gt;
&lt;h3&gt;


Initial impressions&lt;/h3&gt;
The phone itself seems a nice piece of kit, reviews on it generally like the radar but tend to mark it down on storage and speed but so far with what I’ve being doing I’ve not experienced any noticeable performance problems.&amp;nbsp; As I use it more storage may be an issue but with 8Gb internal storage (double my Desire’s standard 4Gb SD card) hopefully it will take me a while to fill it up.&lt;br /&gt;
The setup was easy, walked through a short wizard with my existing SIM and the phone was working! The only thing I didn’t like was the phone “needing” my Windows Live Id to work and then trying to get me to link it to any and all social networks that I may be part of, call me old fashioned but I tend to keep them separate for a reason and don’t really want Windows Live being linked to all of them.&lt;br /&gt;
First thing I wanted to do was customize the phone a little, my own widgets, ringtones, etc. Imagine my disappointment when I found the most I could do was alter what tiles appeared on the first screen and all my other apps appear in list only if I swipe to the left, this certainly wasn’t the user experience I was used to on my desire.&lt;br /&gt;
It felt like that every application I opened wanted to be able to use my location and transmit that information to Microsoft which I didn’t want to do so I kept having to say no.&lt;br /&gt;
I found the WiFi setup and connected to my router and the phone proceeded to download any contacts I had in Windows Live, which is very few to say the least. I then setup my Gmail and the phone also pulled down my contacts and populated my “People” &lt;br /&gt;
&lt;h3&gt;


The Marketplace&lt;/h3&gt;
With basic connectivity and contacts sorted I proceeded to to Microsoft’s Marketplace to try and get the same or similar apps to those that I already had.&amp;nbsp; &lt;br /&gt;
It was at this point the I noticed the first big difference between Android and WP7 in that it seemed the majority of the highest rated apps available were all paid apps. Don’t get me wrong I have no issue in paying for good software its just that my impression with Android is that the majority of the apps I have and use are free.&lt;br /&gt;
It surprised me how many apps were paid apps, I thought (naively) that as Microsoft wanted to grow the platform as quickly as they could they would have followed the Android model instead it seems that they have decided to mirror Apple’s approach.&amp;nbsp; &lt;br /&gt;
&lt;h3&gt;


Apps &amp;amp; Widgets on WP7&lt;/h3&gt;
Once I had found some apps that I wanted, namely a twitter client, I wanted to try them out and this was my second big difference between Android and WP7 apps generally do not auto refresh or notify you if there are updates to information e.g. tweets.&amp;nbsp; To me this seemed like a massive step backwards, I was used to opening a twitter client and new that when new tweets arrived it would provide both audio and visual cues to tell me updates had been received. I know there are some apps that I have been told do have live tile and toast notifications but I haven’t tried them yet.&lt;br /&gt;
I also found that a few of the apps/widgets I use weren’t available such as the power bar, I like to be able to turn the various functions like WiFi, Mobile Internet, Bluetooth,etc on and off as I want them and on my Desire the power bar allows me to do this but unfortunately there doesn’t appear to be anything remotely similar on the Radar.&lt;br /&gt;
I had a brief twitter conversation with &lt;a href="https://twitter.com/philjones88" target="_blank"&gt;Phil Jones&lt;/a&gt; and &lt;a href="http://jonalb.com/" target="_blank"&gt;JonAlb&lt;/a&gt; both of whom own WP7 and John has already developed applications and published on the Marketplace about the situation and it would seem that some of the things I took for granted on my Desire (such as auto refresh of data in the background) aren’t quite there yet on WP7, they are coming but not there yet.&amp;nbsp; John also went on to point out that I am unlikely to be the target market for the phone and that for the majority of people the things I felt were missing wouldn’t even be seen as an issue.&lt;br /&gt;
&lt;h3&gt;


PC Software&lt;/h3&gt;
The phone told me there was an update available for it and it needed to be connected with the PC to enable it to be updated, so the next day I plugged it into my PC and Windows downloaded and installed the Zune software.&lt;br /&gt;
The Zune software seems easy to use and works well with the phone and compared with the HTC sync that I had for the desire I must say I prefer the Zune software.&amp;nbsp; That being said with the Desire I had the opportunity to just mount it as a USB drive which I don’t get with the Radar so the Zune software will need to be good to overcome what I currently see as a limitation.&lt;br /&gt;
&lt;h3&gt;


Using it as a phone&lt;/h3&gt;
I know its sacrilege but I do tend you actually use my phone as a phone to make phone calls and send texts and for doing this I can’t fault the phone, it works very well.&amp;nbsp; The only issue I have with it is that with the power/USB socket being on the side I am unable to use my car phone cradle to hold the phone and connect a charger at the same time. It may just be me but most phones tend to have the socket at the bottom of the phone and so it is a little strange to see it on the side and unfortunately means I either will have to buy a specialist car cradle or simply have the phone lying around the car if I want it to be charging whilst on the move.&lt;br /&gt;
I was also very pleasantly surprised to find that the Radar comes with voice recognition as standard so when driving I can click my Bluetooth headset and just speak the name of the person to ring, then as I was driving to work a text arrived and the phone read it to me and asked if I wanted it re-read in case I missed something, now that I like.&lt;br /&gt;
The one thing that I have been unable to do is to set a custom ring tone based on an MP3 ring tone I had on my desire, now I don’t think that its being overly geeky to want to set a ring tone to an MP3 but after following Microsofts online instructions and then watching a 3rd party &lt;a href="http://www.youtube.com/watch?v=W2G1cMxCpcY" target="_blank"&gt;YouTube video&lt;/a&gt; on how to change the ring tone I still wasn’t able to do it.&amp;nbsp; This seems way to hard for such a simple task and I sincerely hope it become easier in the future.&lt;br /&gt;
&lt;b&gt;Edit: I managed to get my ring tone working, what wasn’t clear was that when you set the genre on the track so that the phone will recognise it it has to be the text ‘ringtone’ if you don’t put that exact text the phone will not see it.&lt;/b&gt;&lt;br /&gt;
&lt;h3&gt;


What’s next?&lt;/h3&gt;
My first thoughts were “I can’t use the phone” but I’m persevering and have been rewarded by discovering things such as the voice recognition, and my thoughts now are that since I’m a developer and I believe there is functionality missing from the phone I’ll need to roll up my sleeves and write the software that I want.&lt;br /&gt;
I plan to write a few more posts on how I find the phone over the next couple of weeks and hopefully soon I’ll be able to post about my experience in creating apps for WP7.&lt;br /&gt;
&lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-5740255662999376768?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/iy4R-XI9-AQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/5740255662999376768/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/11/getting-to-grips-with-windows-phone-7_29.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5740255662999376768?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5740255662999376768?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/11/getting-to-grips-with-windows-phone-7_29.html" title="Getting to grips with a Windows Phone 7" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;A0AEQXY-fSp7ImA9WhRSGUk.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-4447280524617125456</id><published>2011-11-22T08:15:00.000Z</published><updated>2011-11-22T08:15:00.855Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T08:15:00.855Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Login" /><category scheme="http://www.blogger.com/atom/ns#" term="MVC" /><category scheme="http://www.blogger.com/atom/ns#" term="SimpleMembership" /><category scheme="http://www.blogger.com/atom/ns#" term="Bin Deploy" /><title>The resource cannot be found - /Account/Login</title><content type="html">&lt;p&gt;I ran into a problem the other day that I could find very little information about so I thought I’d put a blog post together to &lt;/p&gt;  &lt;p&gt;a) remind me    &lt;br /&gt;b) hopefully help anybody else who runs into this problem.&lt;/p&gt;  &lt;p&gt;I picked the obtuse title as it is very close to the ambiguous error message I got and should hopefully help other people find the solution far faster than I did. &lt;/p&gt;  &lt;p&gt;Recently I was working on a MVC3 application, it was working well and I wanted to sort out dependencies for our CI server so that we didn’t need to have MVC installed on the server for the code to build and intended to do this by adding bin deployable dependencies.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;I made a couple of small changes to views, a controller change to home and then clicked “Add Deployable Dependencies…” and when the dialog appeared I selected ASP.NET MVC&lt;/p&gt;  &lt;p&gt;I then did a quick sanity check of build, run tests and run up the application before checking in only to find that when I ran the site up I got a yellow screen of death:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-cqLpfgIFFiI/TsrVx85rcuI/AAAAAAAAAHU/b5_g5oGhucM/s1600-h/image16.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-YvyAIRKCf6Y/TsrVyqPOopI/AAAAAAAAAHc/ZAlf5R69xcs/image_thumb8.png?imgmax=800" width="646" height="181" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;WTF! the unit tests had all passed and I had been testing the views themselves a moment or two ago by logging in and using the site. Unfortunately I hadn’t just made a single change since I last checked in (my bad) so I went back and checked all my changes one at a time to ensure that none of my changes could be causing the problem and found nothing.&lt;/p&gt;  &lt;p&gt;I then took a closer look at the error and saw that the URL it was trying to request was /Account/Login which was incorrect as the name of the view that handled logging in was called Logon.&amp;#160; I checked the web.config and the found the default values hadn’t been changed:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-EKG3vyJWs9w/TsrVzUfCj7I/AAAAAAAAAHk/yJkRVACo6iM/s1600-h/image3.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-BHjNZrNh9uE/TsrV0DHeu_I/AAAAAAAAAHs/ec4KFTpyyZg/image_thumb1.png?imgmax=800" width="363" height="56" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I then tried changing Account to something as abstract as ABCDEF but got a similar error only instead of the requested URL being /Account/Login it was now /ABCDEF/Login. Something was incorrectly getting involved when redirecting to the loginUrl and altering the route to replace Log&lt;strong&gt;on&lt;/strong&gt; with Log&lt;em&gt;in.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I then turned to Google and found…nothing, well nothing that seemed to apply to me that is.&lt;/p&gt;  &lt;p&gt;This only left me with the unthinkable, could it be something to do with the deployable dependencies? I took a closer look at the assemblies that had been added and saw System.Web.Helpers.dll in the bin deployable folder which I know is linked with Web Matrix. I then did a bit of exploration with Reflector turned up no particular dependency on this assembly to any of the other bin deployable dependencies or any of my referenced assemblies and so I removed it and the site started working again!&lt;/p&gt;  &lt;p&gt;A bit more focused Googling then turned up that the behaviour I was seeing was linked to&amp;#160; SimpleMembership in WebMatrix, I also noticed that&amp;#160; if you look at System.Web.Configuration and the FormsAuthentication class you will find that the property LoginUrl has a default value of login.aspx. I haven’t specifically tracked it back to this but it is suspicious and would certainly fit the behaviour I was seeing.&lt;/p&gt;  &lt;p&gt;In my second Google attempt I had also found that if you don’t want to remove the assembly you can add    &lt;br /&gt;&amp;lt;add key=&amp;quot;enableSimpleMembership&amp;quot; value=&amp;quot;false&amp;quot; /&amp;gt; to the AppSettings of your web config and this will also allow the site to work, but why do you have to add this at all?&lt;/p&gt;  &lt;p&gt;From forum posts and some blog posts I found it appears that you would perhaps use System.Web.Helpers in MVC if you wanted to use one of the helpers that you find in WebMatrix such as the Twitter helper and that the SimpleMembership provider was being called by default rather than the normal authentication mechanism in MVC resulting in the behaviour I was seeing.&lt;/p&gt;  &lt;p&gt;IMHO when you add the bin deployable files in VS that includes System.Web.Helpers it should either:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;a) add the missing web.config AppSetting for you      &lt;br /&gt;b) not add the assembly if its not needed       &lt;br /&gt;c) add the functionality &lt;em&gt;without the need for the setting&lt;/em&gt;       &lt;br /&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;&lt;/ul&gt;  &lt;p&gt;Hopefully this post may help somebody else who stumbles into this issue and save them the time it took me to work out why my working code suddenly became broken.&lt;/p&gt; &lt;a style="display: none" href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag"&gt;CodeProject&lt;/a&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-4447280524617125456?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/fvNGl4lAvfI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/4447280524617125456/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/11/resource-cannot-be-found-accountlogin.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4447280524617125456?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4447280524617125456?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/11/resource-cannot-be-found-accountlogin.html" title="The resource cannot be found - /Account/Login" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-YvyAIRKCf6Y/TsrVyqPOopI/AAAAAAAAAHc/ZAlf5R69xcs/s72-c/image_thumb8.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;CEUEQXo7fSp7ImA9WhRSFE4.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-6833717506993286867</id><published>2011-11-16T08:30:00.000Z</published><updated>2011-11-16T08:30:00.405Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-16T08:30:00.405Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="team lead" /><title>What type of team leader are you?</title><content type="html">&lt;p&gt;For a lot of developers the team leader position is a coveted one, it is as if when you become team leader the business is acknowledging you and your skills, but unfortunately for a lot of developers that reach this position it is not always what it seems.&lt;/p&gt;  &lt;p&gt;From my experience the team leader role will usually fall into one of the 3 following categories:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Team leader as Development manager &lt;/li&gt;    &lt;li&gt;“Normal” Team leader &lt;/li&gt;    &lt;li&gt;Team leader as technical lead/architect &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Lets take a quick look at what each of the categories entails.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;h3&gt;Types of team leader&lt;/h3&gt;  &lt;h4&gt;Team Leader as Development Manager&lt;/h4&gt;  &lt;p&gt;This type of role is often sold as the next type, “Normal” Team Leader, but due to organisational pressures (expectations?) you will find no time available to do any coding, instead you will be pulled into endless meetings, have to deal with process, policy, HR, etc.&lt;/p&gt;  &lt;p&gt;If you decide you want to take a more managerial career path this role will suit you down to the ground, with communication often being the main skill you will need as you will most likely be expected to act as translator to the business in relation to software development and how it benefits/impacts the business.&lt;/p&gt;  &lt;p&gt;On the other hand for those developers that love to code this is the worst type of role they could end up in and will quickly destroy their morale and crush their soul.&lt;/p&gt;  &lt;h4&gt;“Normal” Team Leader&lt;/h4&gt;  &lt;p&gt;The “normal” team leader is where you are told that the role is 50-50 with half your time being spent doing managerial tasks and the other half coding.&lt;/p&gt;  &lt;p&gt;This is often seen as a good compromise by developers as they go into the role expecting to be able to keep hands on coding but accepting the need to perform management related work as a necessary evil.&lt;/p&gt;  &lt;p&gt;Frequently though this role turns out to be a little unbalanced in relation to the amount of “management” that is needed and it may become 70-30 or even 80-20 in relation to managerial work vs coding.&lt;/p&gt;  &lt;h4&gt;Team leader as technical lead/architect&lt;/h4&gt;  &lt;p&gt;The nirvana of developer jobs, all of the prestige, all the authority but no management related work.&lt;/p&gt;  &lt;p&gt;This type of role with near 100% coding (not 100% as we all end up in meeting of one sort or another) is, in my experience, very rare. &lt;/p&gt;  &lt;p&gt;A technical lead role is often an additional responsibility that is given to a senior developer in relation to a project, not a promotion with appropriate salary and benefits. An architect role usually needs the person to be spending a lot of their time talking to people either in a technical or business capacity which will reduce the amount of time they can code (but I firmly believe that architects &lt;strong&gt;&lt;em&gt;should&lt;/em&gt;&lt;/strong&gt; code with the team).&lt;/p&gt;  &lt;h3&gt;What’s my experience?&lt;/h3&gt;  &lt;p&gt;In my career I have experienced both the “Normal” team leader role and the Team leader as Development manager and it was my experience with the latter role that prompted me to take a step back from the managerial career path. I found that to keep my enthusiasm and morale I had to do a lot more coding in my own time which was to me a clear indicator of what I actually enjoyed doing.&lt;/p&gt;  &lt;h3&gt;Do you recognise your role?&lt;/h3&gt;  &lt;p&gt;Have I captured your role in the 3 types above or do you have a completely different role? If you have a different type please leave a comment with the details.&lt;/p&gt;  &lt;p&gt;So, what type of team leader are &lt;strong&gt;you&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/9220389270062827818-6833717506993286867?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/z2HE_oCawrw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/6833717506993286867/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/11/what-type-of-team-leader-are-you.html#comment-form" title="9 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/6833717506993286867?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/6833717506993286867?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/11/what-type-of-team-leader-are-you.html" title="What type of team leader are you?" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>9</thr:total></entry><entry gd:etag="W/&quot;DkQGQHs-eip7ImA9WhRTEk8.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-7717903230710207117</id><published>2011-11-02T08:58:00.001Z</published><updated>2011-11-02T08:58:41.552Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-02T08:58:41.552Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event" /><category scheme="http://www.blogger.com/atom/ns#" term="givecampuk" /><category scheme="http://www.blogger.com/atom/ns#" term="community" /><title>GiveCampUK–one very busy weekend</title><content type="html">&lt;p&gt;So the weekend of the 21st of October saw me attending the inaugural Give Camp UK event organised in the main by &lt;a href="http://nrg.im/tHMGLO" target="_blank"&gt;Paul Stack&lt;/a&gt; and &lt;a href="http://nrg.im/sv5Nkg" target="_blank"&gt;Rachel Hawley&lt;/a&gt; to provide bespoke software solutions to charities.&lt;/p&gt;  &lt;p&gt;The challenge was to be able to create the necessary software during the weekend and if possible get it live for the charities to be able to use.&amp;#160; The event was to start at around 5pm on the Friday night and coding to finish at 12pm on the Sunday when the teams would then present the software they had created to the other teams.&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;Friday 21st&lt;/h2&gt;  &lt;p&gt;I travelled into the event with my co-worker &lt;a href="http://nrg.im/vPK9vx" target="_blank"&gt;Johan Barnard&lt;/a&gt;, we had no idea of what we would need to do or what sort of software was needed but we were looking forward to the challenge!&lt;/p&gt;  &lt;p&gt;We arrived at UCL just after 4pm and after registering we meet some other developers we knew including our other colleague from &lt;a href="http://nrg.im/sSuugV" target="_blank"&gt;Dot Net Solutions&lt;/a&gt;, &lt;a href="http://nrg.im/rHcSrH" target="_blank"&gt;Mark Rendle,&lt;/a&gt; and waited for the kick off.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;Around 5pm we all made our way through to a lecture theatre, unfortunately Paul was battling the London traffic so wasn’t able to kick off the event but Rachel handled it seamlessly welcoming us to Give Camp and then getting each of the charities to introduce themselves explaining why they were there and what they needed.&amp;#160; Rachel then proceeded to introduce the wildcard project which was to create a OSS CRM system specifically for charities; during the preparation for the event it had come to the attention of both Paul &amp;amp; Rachel that the cost of existing software for this purpose was often beyond what most charities could afford so they wanted to create a free version to help as many charities as possible.&lt;/p&gt;  &lt;p&gt;Rachel then introduced the team leads for each of the projects, the roving experts and finished up by asking for people to indicate by show of hands the skills they had so that other people would know who to find if they ran into a problem.&lt;/p&gt;  &lt;p&gt;With all the introductions over we then proceeded back to the hall where we would be working for the next couple of days to pick the team that we wanted to work on.&amp;#160; This was a harder decision than it sounds as each team was potentially using different technology to resolve the charities requirements.&lt;/p&gt;  &lt;p&gt;In the end all of us from Dot Net Solutions decided to work on the wildcard project which was being lead by Give Camp veteran &lt;a href="http://nrg.im/vzwlq1" target="_blank"&gt;Kendal Miller&lt;/a&gt; and the added bonus was that one of Mark’s previous jobs had been writing CRM software.&lt;/p&gt;  &lt;p&gt;Once the team was assembled we quickly made a decision to use github as our source control (which was possibly a decision we make &lt;em&gt;too&lt;/em&gt; quickly) and then we set about sorting out what needed to be done using a few notes that Paul had put together as our requirements. This meeting was a little difficult due to the noise level in the hall and some of the team had problems hearing what Kendall and other members of the team were saying. Whilst the team discussed what was needed I pestered Paul for GitHub &amp;amp; LeanKit Kanban access and sorted out creation of necessary user accounts, Kanban card board and coerced Mark to sort the GitHub repo due to his experience through Simple.Data.&lt;/p&gt;  &lt;p&gt;It was at this point that GiveCRM was born, originally just the name of the team it soon became the name of the product! &lt;/p&gt;  &lt;p&gt;Paul and Rachel's organisation of coffee, soft drinks, tea, etc. was fantastic not to mention the fantastic food that arrived as we were organising who was going to do what in the team.&lt;/p&gt;  &lt;p&gt;The team was divided itself into smaller sub-teams to handle the various functionality that we had identified needed to be developed such as data access, admin site, main site and an excel import/export facility to make life easy for the users to get data into and out of the system.&lt;/p&gt;  &lt;p&gt;Johan and I took on the challenge of creating the excel import/export as we had recently spiked this sort of functionality whilst in work and so had a head start on the other team members.&lt;/p&gt;  &lt;p&gt;It wasn’t long before our decision to use GitHub started to present problems for the team.&amp;#160; It turned out that most people had never used it and soon there was confusion over how to push, pull, branch etc. but we appeared to have sorted that out and started being productive.&lt;/p&gt;  &lt;p&gt;Finally about 1am Saturday morning I had to try and get some sleep and so went to set up my air mattress and sleeping bad. Now I usually don’t go camping as I hate it but for Give Camp I was willing to give it a go, unfortunately it didn’t go well, it didn’t go well at all.&amp;#160; It must have been fairly comical to watch as my supposed luxury of an air mattress keep deflating itself which meant I had to pump it up about every hour until I gave up around 7am.&lt;/p&gt;  &lt;h2&gt;Saturday 22nd&lt;/h2&gt;  &lt;p&gt;So I had a bad night sleep, but when I came back to the hall where we were working I found several people who hadn’t bothered to sleep at all and had worked all through the night! &lt;/p&gt;  &lt;p&gt;I quickly remedied my situation by booking a hotel room for that evening and then cracked on with the code.&amp;#160; By this time we had an excel export working and were finishing a xls import before moving on to being able to handle xlsx.&lt;/p&gt;  &lt;p&gt;Breakfast arrived in the form of bacon or sausage sarnies which were quickly devoured by the hungry devs before pushing on.&lt;/p&gt;  &lt;p&gt;One thing that was commented on was the fact we were writing tests and pairing but that was just how Johan and I rolled &lt;img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Winking smile" src="http://lh4.ggpht.com/-jpxEZpDYAeY/TrEGPMbOSJI/AAAAAAAAAG0/qzN0OeZSChk/wlEmoticon-winkingsmile2.png?imgmax=800" /&gt; as we didn’t have any real UI to test what we were developing, and since this was going to be a long lasting (hopefully) piece of software, we wanted to ensure that the code we wrote was correct.&lt;/p&gt;  &lt;p&gt;It became apparent as Saturday progressed that our pain with Git and GitHub was not only still there but if anything growing. People were trying to pull recent changes whilst other pushed and soon we had to call a moratorium on git push/pull to enable the repository to be sorted out. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-EwnlP4UygpU/TrEGPgBQzaI/AAAAAAAAAG4/sTaZCk_5O4M/s1600-h/IMAG04065.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 13px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="IMAG0406" border="0" alt="IMAG0406" align="left" src="http://lh3.ggpht.com/-jF712PR3we0/TrEGQCIVDxI/AAAAAAAAAHA/yBZKrZv2vLM/IMAG0406_thumb6.jpg?imgmax=800" width="85" height="124" /&gt;&lt;/a&gt;We identified that the main cause of the pain was changes to solution or project files which then in turn lead to the decision to have a token that you would have to have if you wanted to push any changes to solution or project files, this token took the form of “the pill” which was provided by the Site Doctor.&lt;/p&gt;  &lt;p&gt;From that point forward you would frequently hear calls of “who's got the pill?” or “give me the pill I need it!” as the various team members updated the repository.&lt;/p&gt;  &lt;p&gt;About midday Johan and I finally pushed working code that would allow the import and export of xls files into the main repo to allow the teams on the admin and user sites to integrate it allowing them to be able to use it.&amp;#160; As soon as we had done so a change was required to the API to make it easier to import the data and provide it in a friendly way to Simple.Data for inserting into the database.&lt;/p&gt;  &lt;p&gt;Mid afternoon the altered API was completed and after merging it into the main repository I took a quick break to book into the hotel I had arranged earlier.&lt;/p&gt;  &lt;p&gt;When I came back I found the team pushing on and joined Johan in progressing with the xlsx import and export functionality which we worked on for the rest of that day.&amp;#160; Around 11pm the team had a meeting and did a walk through of the demo we would be doing on Sunday to identify where we needed to focus our efforts to get the code done so that it would work.&lt;/p&gt;  &lt;p&gt;About 12am I headed back to the hotel to get some sleep leaving some of the guys still furiously coding.&lt;/p&gt;  &lt;h2&gt;Sunday 23rd&lt;/h2&gt;  &lt;p&gt;After a good nights sleep I got back to UCL about 8am and with Johan finished and merged the xlsx functionality into the main repo (with a brief pause for a bacon butty for breakfast), with all coding to stop at 12 we only had limited time left to complete our work.&lt;/p&gt;  &lt;p&gt;After talking to Kendall it was decided to not worry about implementing a xlsx exporter at this point as there was other more pressing functionality required, such as authorization.&lt;/p&gt;  &lt;p&gt;Johan jumped onto that but quickly ran into issues with the way the code had been structured making what we had all believed to be a fairly trivial task more complex and actually in doubt for completion.&lt;/p&gt;  &lt;p&gt;I had to leave Johan to that code as the guys using the excel export had discovered and issue that needed to be resolved in relation to the output of the spreadsheet.&lt;/p&gt;  &lt;p&gt;We all paused at about 10:30 to walk through the demo again and to decide what we would and wouldn’t work on now to try and ensure a stable product.&amp;#160; It was at this point that the inclusion of authorisation was dropped, whilst we would continue to work on it it would be in a separate branch for inclusion into the main repository after the event.&lt;/p&gt;  &lt;p&gt;12 midday quickly arrived and with it the code freeze.&amp;#160; We then sorted out merging the code to the repository and ensuring it all built before downing tools.&lt;/p&gt;  &lt;p&gt;At this point we had an admin site that allowed charities to register and import data via excel and a “normal” site that allowed the charities to work out who they want to include in any campaigns by a custom search screen where they can build up the criteria that the members of the charity need to match before exporting to excel to use in word mail merge or outlook mail shot.&lt;/p&gt;  &lt;p&gt;Here’s the team that did all this in such a short space of time:&lt;/p&gt;  &lt;p&gt;&lt;a title="The GiveCRM team, on Bert Craven&amp;#39;s Flickr Stream" href="http://www.flickr.com/photos/bertcraven/6273304619/in/photostream"&gt;&lt;img title="The GiveCRM team" alt="The GiveCRM team" src="http://farm7.static.flickr.com/6105/6273828732_f67b4b3ce4_z.jpg" /&gt; &lt;/a&gt;    &lt;br /&gt;&lt;span style="font-size: small"&gt;L-R: &lt;a href="http://www.twitter.com/anthonysteele"&gt;Anthony Steele&lt;/a&gt; , &lt;a href="http://www.twitter.com/lethrir"&gt;Kim Richmond&lt;/a&gt; , &lt;a href="http://www.twitter.com/chrisjdiver"&gt;Chris Diver&lt;/a&gt; , &lt;a href="http://www.twitter.com/saqibs"&gt;Saqib Shaikh&lt;/a&gt; , &lt;a href="http://www.twitter.com/robinem"&gt;Robin Minto&lt;/a&gt; , &lt;a href="http://www.twitter.com/kendallmiller"&gt;Kendall Miller&lt;/a&gt; , &lt;a href="http://www.twitter.com/adrianbanks"&gt;Adrian Banks&lt;/a&gt; , &lt;a href="http://www.twitter.com/alastairs"&gt;me (Alastair Smith)&lt;/a&gt; , &lt;a href="http://www.twitter.com/johanbarnard"&gt;Johan Barnard&lt;/a&gt; , &lt;a href="http://www.twitter.com/markrendle"&gt;Mark Rendle&lt;/a&gt; , &lt;a href="http://www.twitter.com/nbarnwell"&gt;Neil Barnwell&lt;/a&gt; , &lt;a href="http://www.twitter.com/nathangloyn"&gt;Nathan Gloyn&lt;/a&gt; . Photo copyright © &lt;a href="http://www.flickr.com/photos/bertcraven/"&gt;Bert Craven&lt;/a&gt; 2011. Used with permission. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;After some brief photo’s of each team, all attendees and the organisers we all tucked into a fantastic hog roast that Paul had arranged, and it was absolutely fantastic!&lt;/p&gt;  &lt;p&gt;We helped tidy up the hall and then all moved to the Cruciform building across the road for the presentations by the various teams on what they had done for their respective charities.&lt;/p&gt;  &lt;p&gt;I thought that we had done well to create all the functionality we had but some of the other teams had really excelled, especially &lt;a href="http://nrg.im/v26nFw" target="_blank"&gt;Dylan Beattie&lt;/a&gt;’s team who had been working with &lt;a href="http://nrg.im/trdopU" target="_blank"&gt;Scene &amp;amp; Heard&lt;/a&gt; and had in fact put live on &lt;strong&gt;Friday night&lt;/strong&gt; the functionality that they had requested and once that had worked went back to the charity and said what else do you need and proceeded to complete that by Sunday.&amp;#160; The YouCan Hub also went live that weekend I won’t forget and &lt;a href="https://twitter.com/#!/agileguy" target="_blank"&gt;Dan Elliot&lt;/a&gt;’s presentation given in the form of interpretive dance!&lt;/p&gt;  &lt;p&gt;There was also a mountain of swag to give out, the sponsors had been really generous and special thanks must go to &lt;a href="http://www.ctt.org/" target="_blank"&gt;Charity Technology Trust&lt;/a&gt; who provided every attendee with an 80Gb SSD drive.&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;I found it a hard weekend, trying to build so much in such a sort space of time, and with me being ill it didn’t make it any easier.&lt;/p&gt;  &lt;p&gt;So what have I learned? first up I’m not camping again, next Give Camp I’ll have to sort out accommodation before the event.&lt;/p&gt;  &lt;p&gt;Yes I will do it again, I think it provides a great opportunity for the UK development community to help out charities who otherwise wouldn’t be able to afford the software they need.&lt;/p&gt;  &lt;p&gt;I fully expect the next Give Camp to run even smoother, this was the first and Paul and Rachel did an absolutely fantastic job of organising it and if there were problems or pitfalls I don’t think the attendees noticed as they handled everything – well done Paul &amp;amp; Rachel! &lt;/p&gt;  &lt;p&gt;I’ve registered my interest in next year (inadvertently upsetting Paul with my tweet about it – sorry Paul) and will look forward to hearing more about the event as details are released.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.givecrm.org.uk/" target="_blank"&gt;GiveCRM&lt;/a&gt; is still being developed and you can get involved over &lt;a href="https://github.com/GiveCampUK/GiveCRM" target="_blank"&gt;here&lt;/a&gt;, please do check us out and see if you can get involved.&lt;/p&gt;  &lt;h2&gt;Finally - Thanks!&lt;/h2&gt;  &lt;p&gt;No post about the weekend would be complete if I didn’t include links to all the sponsors and other companies that contributed to Give Camp and helped make it a success:&lt;/p&gt;  &lt;h4&gt;Sponsors&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.eduserv.org.uk"&gt;EduServe&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://sqlbits.com"&gt;SQLBits&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.gibraltarsoftware.com"&gt;Gibraltar Software&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.infusion.com"&gt;InFusion&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://redg.at/mnm95h"&gt;Red Gate&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.fusionio.com/"&gt;FusionIO&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.blackmarble.com/"&gt;Black Marble&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.justgiving.com"&gt;JustGiving&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.devexpress.com/"&gt;DevExpress&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.countersoft.com"&gt;CounterSoft&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.jetbrains.com"&gt;JetBrains&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.telerik.com"&gt;Telerik&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.quest.com/"&gt;Quest&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.thoughtworks.com"&gt;ThoughtWorks&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.kentico.com"&gt;Kentico&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Companies that contributed &lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.hasbean.co.uk"&gt;HasBean&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.teapigs.co.uk"&gt;TeaPigs&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.dominos.co.uk/"&gt;Dominos Pizza&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sharpcrafters.com/"&gt;PostSharp&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.leankitkanban.com/"&gt;LeanKitKanban&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.informit.com/index.aspx"&gt;InformIT&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.appharbor.com"&gt;AppHarbor&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.pusher.com/"&gt;Pusher&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.pluralsight-training.net/microsoft/"&gt;PluralSight&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.ssware.com/"&gt;LogicNP&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sqlsentry.com/"&gt;SqlSentry&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.textcontrol.com/"&gt;TX Text Control&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.oreilly.com/"&gt;O'Reilly&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.typemock.com"&gt;TypeMock&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://discountasp.net/"&gt;DiscountASP&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.saasmadeeasy.com"&gt;SaaS Made Easy&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://beanstalkapp.com/"&gt;BeanStalk&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.heroku.com"&gt;Heroku&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.syncfusion.com/"&gt;SyncFusion&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-7717903230710207117?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/_BAkGTRqiXo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/7717903230710207117/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/11/givecampukone-very-busy-weekend.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/7717903230710207117?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/7717903230710207117?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/11/givecampukone-very-busy-weekend.html" title="GiveCampUK–one very busy weekend" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-jpxEZpDYAeY/TrEGPMbOSJI/AAAAAAAAAG0/qzN0OeZSChk/s72-c/wlEmoticon-winkingsmile2.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEUEQHk7fCp7ImA9WhdaEUU.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-8885330190322006710</id><published>2011-10-21T08:30:00.000+01:00</published><updated>2011-10-21T08:30:01.704+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T08:30:01.704+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event" /><category scheme="http://www.blogger.com/atom/ns#" term="givecampuk" /><category scheme="http://www.blogger.com/atom/ns#" term="community" /><title>GiveCamp–what I hope will happen</title><content type="html">&lt;p&gt;So today is the day! &lt;a href="http://nrg.im/k5lSRX" target="_blank"&gt;GiveCamp&lt;/a&gt; is here and the next couple of days are likely to be manic.&lt;/p&gt;  &lt;p&gt;I know what the organisers are hoping but seeing some tweets fluttering about I wanted to record what I hope will happen.&lt;/p&gt;  &lt;p&gt;So, I hope that:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Developers who’ve said they’ll come do come &lt;/li&gt;    &lt;li&gt;We focus on delivery of software for the charities &lt;/li&gt;    &lt;li&gt;We don’t just use the latest tech because “we want to” or its cool &lt;/li&gt;    &lt;li&gt;The charities involved get as much of the functionality in the software as possible &lt;/li&gt;    &lt;li&gt;I meet new people and meet-up with existing friends/acquaintances &lt;/li&gt;    &lt;li&gt;Everybody has fun. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Rob Ashton summed it up on twitter nicely saying &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;“Personally at #givecampuk I'm going to try and avoid doing New Things, I want to Deliver, learning will happen even then of course”&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you’re a reader of this blog and you are going to givecamp if we haven’t met before come up and say hi, will be good to meet you.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-8885330190322006710?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/A9bULjWBAh8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/8885330190322006710/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/10/givecampwhat-i-hope-will-happen.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/8885330190322006710?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/8885330190322006710?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/10/givecampwhat-i-hope-will-happen.html" title="GiveCamp–what I hope will happen" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0MCQ3o8fCp7ImA9WhdQF0k.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-5926272391208724454</id><published>2011-08-19T09:09:00.001+01:00</published><updated>2011-08-19T09:11:02.474+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-19T09:11:02.474+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="response" /><title>Art of Estimation–my thoughts</title><content type="html">&lt;p&gt;I read this &lt;a href="http://geek.ianbattersby.com/2011/08/18/art-of-esimtation-in-development-team"&gt;post&lt;/a&gt; by &lt;a href="http://twitter.com/#!/cranialstrain"&gt;Ian Battersby&lt;/a&gt; about estimation and started leaving a comment but it kept expanding so I decided to put it into a post.&lt;/p&gt;  &lt;p&gt;Estimation is a very contentious area and fraught with pitfalls both inside and outside of the team.&lt;/p&gt;  &lt;p&gt;In my experience developers aren't bad at doing estimating as long as they are fully aware of the domain, the codebase and the actual business requirement not necessarily what they've been asked to estimate, which of course we always know all the time.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;Ian seem to be linking estimation of time to do a job with time elapsed rather than time spent on the job due to some of the factors he listed such as fire-fighting, low staff morale, etc.&amp;#160; This is a normal trap to fall into and one that non-technical management frequently do as they equate actual hours with development hours and when given an estimate they don't hear estimate they hear commitment. This can be combatted in various ways the most accurate can be recording actual time spent during a day, I know as dev's we hate to fill in timesheets but in the past I have used it to help teams prove that the estimates being given were accurate for work but the elapsed time was different due to outside factors e.g. support.&lt;/p&gt;  &lt;p&gt;This is where points based or relative estimating has been proven to be more accurate than other forms of estimation ( have a look at this study &lt;a href="http://www.duo.uio.no/publ/informatikk/2009/96698/Fredriksen.pdf"&gt;here&lt;/a&gt; and multiple studies listed on slides 19 &amp;amp; 20 &lt;a href="http://www.mountaingoatsoftware.com/system/presentation/file/51/bayXP_070320_PlanningAgileProjects.pdf"&gt;here&lt;/a&gt;) if we all look to use this and educate the rest of the business about what it means we can provide better information to the sales process (more on that in a mo).&amp;#160; Yes there are challenges with calculation of calendar time but with good velocity being recorded or accurate cadence it can be done and then you don't have to guestimate (which IMHO is one of the most dangerous things to do with any business person as that’s the figure they always remember).&lt;/p&gt;  &lt;p&gt;Ian also says:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&amp;quot;Factoring the skill level of our assigned developer against our points-based estimate will certainly provide foresight&amp;quot;&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;which is great except what happens when the developer in mind doesn't get to do that story? the team should point work so that they are happy as a whole as to its size regardless of who is to do it&amp;#160; which helps staff morale as it means that you are unlikely to get staff getting stressed trying to complete a task in a timescale they know they cannot do it in due to their skills/skill level.&lt;/p&gt;  &lt;p&gt;Following agile principles for the costings we don't want to break down the story into tasks as we know that the requirements are highly likely to change and any assumptions made now could cause grief in the future.&amp;#160; It is far better to work in conjunction with sales and your points estimate to work out how long it the team thinks it will take to do the task and then adjust day rate etc appropriately if necessary to enable you to avoid death march projects.&lt;/p&gt;  &lt;p&gt;I like Ian’s approach on having a skills matrix for the team and have done similar in the past utilising the &lt;a href="http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition"&gt;Dreyfus model&lt;/a&gt; of skills acquisition to make this a lot easier.&lt;/p&gt;  &lt;p&gt;I was shaking my head at the recipe, I understand the motivation behind it and why if it works you can provide evidence to management for hiring of more staff or training.&amp;#160; Unfortunately I don’t see as being that easy and stating to management that if you have an increased training budget you can reduce the cycle-time by 30% a very dangerous thing to do, ballsey but dangerous.&amp;#160; Do I have a better idea? To be honest I don’t, I generally like to sit down with the management look to where the Co. wants to go and what is needed to get there.&lt;/p&gt;  &lt;p&gt;That about wraps up my thoughts on Ian’s post which I thought was a good one and Ian is defiantly somebody you should add to your blog list.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-5926272391208724454?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/qAtLy1jcI-c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/5926272391208724454/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/08/art-of-estimationmy-thoughts.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5926272391208724454?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5926272391208724454?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/08/art-of-estimationmy-thoughts.html" title="Art of Estimation–my thoughts" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry><entry gd:etag="W/&quot;Ck8ERXw9eCp7ImA9WhdQFkg.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-7583449770175476210</id><published>2011-08-18T08:00:00.018+01:00</published><updated>2011-08-18T08:00:04.260+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-18T08:00:04.260+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><title>A response to “Agility is not enough: Beyond the manifesto”</title><content type="html">I recently came across &lt;a href="http://nrg.im/nmuB6W" target="_blank"&gt;this&lt;/a&gt; article by &lt;a href="http://twitter.com/#%21/SteveDenning" target="_blank"&gt;Steve Denning&lt;/a&gt; and within reading a few paragraphs I was disagreeing with the majority of what he was saying and I heard echo’s of management from years past, before I become a software developer, when I worked in sales and customer service.&lt;br /&gt;
&lt;br /&gt;
My main point of disagreement, and possibly what Steve got push back on in his session, is around “delighting” the customer. Don’t get me wrong I want to be able to make my “customers” happy but as a software dev/team lead I have multiple customers to satisfy ranging from immediate and upper management through external clients to actual users of the software/website who may (or may not) be customers of the business.&lt;br /&gt;
&lt;br /&gt;
I’ve not gone through Steve’s points in the order that he wrote them more in the order that I was most annoyed about what he had said, I will warn you now that is an extremely long post but hopefully worth the read, if you don’t have the time you could skip to the conclusion at the bottom and my rant &lt;img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://lh5.ggpht.com/-X6hY6F_TKlI/Tkw7_hZOrPI/AAAAAAAAAGc/NHZTHy-YB6E/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;h3&gt;Delighting the customer should be added to definition of done&lt;/h3&gt;Lets start with my biggest bone of contention in Steve’s post that “delighting the customer should be added to definition of done”, I’m sorry but what complete and utter nonsense. The definition of done is a concept introduced to enable business and developers to be happy that the work has been completed which means the team can move onto another story to keep adding value to the business and should ultimately “delight” the customer.&lt;br /&gt;
&lt;br /&gt;
If you added this new dimension how would you be able to work out if its been met? Steve mentions Net Promoter but just who is filling this in? if you have a web site with 100, 1000 or 10000 customers a hour/day who do you ask if they are delighted with a change? do you survey a random number asking them? do you just rely on the product owner (PO), the business stakeholder, the external client? what if there’s no visible evidence of the change at all? who decides that they are delighted over merely happy? and is being happy actually wrong?&lt;br /&gt;
&lt;br /&gt;
In practice you simply cannot include something that isn’t quantifiable and measurable, there is a reason that the user stories have acceptance criteria its so that the people developing the software know they have completed the job and if in Scrum are able to complete the sprint, the side effect of doing this is most likely the team “failing” every sprint and demoralising the team, plus if you have to ask your PO or customer to fill in an online form about how they feel the story/sprint went they you have bigger problems since agile is all about communication and they should be talking to you about the story/sprint so you can have a discussion around it and work out how best to move forward, which leads me onto my next point….&lt;br /&gt;
&lt;h3&gt;Shift from customer satisfaction to customer delight&lt;/h3&gt;Steve says that satisfying the customer is not enough that the customer must be positively surprised and excited.&lt;br /&gt;
&lt;br /&gt;
Whilst a great thing for a manager to say or a CEO to desire, it is unlikely to be something that the developers alone are going to be able to deliver.&amp;nbsp; Perhaps they are aware of some new technology that could help or if working in an enterprise environment have sufficient domain knowledge to be able to suggest some real improvement, but if working in a smaller boutique software development environment on 4-10 week projects it is very unlikely that the developers will have a sufficient level of domain knowledge to make a very meaningful contribution.&lt;br /&gt;
&lt;br /&gt;
In the following articles Steve responds to comments made by KevinRoss one in particular is: &lt;i&gt;“developers may suggest but the product owner decides” we seem to be back in the world of hierarchy, where decisions are based on position, rather than in the world of Toyota and lean startups where the whole thrust is not on a manager deciding on the basis of authority” &lt;/i&gt;and I think that Steve has completely missed the point here. The PO is ultimately responsible for prioritizing/ordering the work to be done by the team and deciding what is of the most value to the business in helping delight customers but its a collaborative process that should involve the whole team and where appropriate also include the customer, but somebody does have to make a decision and that responsibility lies with the PO or PO team (more on that later).&lt;br /&gt;
&lt;br /&gt;
Steve also states that we can gain customer delight by delivering faster or delivering more value, Kevin picks Steve up on this and I wholeheartedly agree the other point about delivering more value makes no sense either, how do we determine what the customer values without talking to them? by the developers attempting to “add value” (read Gold Plating?) they could just be creating waste i.e. feature will simply be removed stopping them from delivering something of actual value.&lt;br /&gt;
&lt;h3&gt;Shift from an implicit goal to an explicit goal&lt;/h3&gt;The way Steve describes this sounds to me like the age old management dictation of ideals frequently pushed into employees objectives but often impossible to actually accomplish by an individual alone.&lt;br /&gt;
&lt;br /&gt;
In my experience this is a very difficult thing to try and achieve and links in with another of Steve’s sections &lt;b&gt;It’s the bottom line for the whole organization;&lt;/b&gt; what you really want is to change the culture of the company which often will necessitate a lot of pain for the business which translates into time &amp;amp; money hence why so few actually manage to achieve it.&amp;nbsp; The easiest way to do this is by the business taking an evolutionary approach to changing, like Kanban advocates, which will allow it to change this takes time but can save on the pain &amp;amp; cost.&lt;br /&gt;
&lt;br /&gt;
Steve mentions Jeff Sutherlands talk in his 2nd follow up: &lt;i&gt;“As Jeff Sutherland was patiently explaining in his session at the Agile 2011 conference on Thursday afternoon (as he has done for a number of years), anyone who is walking around with the infamous iron triangle in his or her head (the supposedly inexorable tradeoffs among cost, quality, speed) is going to have a problem implementing Agile and Scrum successfully” &lt;/i&gt;which may be the case for enterprise based development but I can tell you here and now that if you are a small software house the iron triangle is still very much an issue as clients tend to want to know a) what they’re going to get b) how much it will cost and c) when do they get it.&lt;br /&gt;
&lt;br /&gt;
Contracts for development of software using an agile methodology with a 3rd party are usually fairly difficult to agree, they are not impossible and there have been a few articles about how you can go about this but unless the client is happy with and fully understands agile you are very likely to end up having discussions around the iron triangle and all the issues that entails.&lt;br /&gt;
&lt;h3&gt;Shift from an output to an outcome&lt;/h3&gt;I can see what Steve is saying here but can’t really agree.&amp;nbsp; The user stories that most agile teams already incorporate have this idea in relation to &lt;i&gt;“As a … I want … &lt;b&gt;so that…&lt;/b&gt;”&lt;/i&gt; and it is the &lt;i&gt;&lt;b&gt;so that&lt;/b&gt;&lt;/i&gt; which is key here, it is the outcome that Steve is on about, it is the reason for the story in the first place, it is often what is going to delight the “customer”.&lt;br /&gt;
&lt;h3&gt;The “product owner” in Scrum offers merely contingent value&lt;/h3&gt;I think Steve has again missed the point here, the PO is &lt;i&gt;&lt;b&gt;supposed&lt;/b&gt;&lt;/i&gt; to reflect the customers voice in the 2nd follow up Steve says &lt;i&gt;“The idea that the challenge of figuring out what will delight the customer is the role of a genius product owner, who then gives clear instructions to make it happen, can on occasion result in customer delight, if you happen to have a resident genius as a product owner, perhaps like Steve Jobs at Apple”&lt;/i&gt;, I believe it is part of a PO’s job to understand what it is that users do and what they want/need to do they don’t need to be a genius to do this they simply need to interact with the users get feedback, ask for suggestions, etc. This is why the role is a full time job and why in larger organisations you may have a team of Product Owners collaborating to work out what needs to be done and on larger projects coordinating multiple teams to achieve the goals of the business.&lt;br /&gt;
&lt;h3&gt;Customer delight is measured. e.g. Net Promoter Score&lt;/h3&gt;I touched on this in my reply to &lt;b&gt;Delighting the customer should be added to definition of done &lt;/b&gt;and whilst I don’t agree on it in relation to definition of done nowadays companies need to ensure that they are actively asking for feedback from their customers in regard to how they feel the business is doing but this is exactly what I was just saying about what the PO role is for and should be doing whether its customers through a website or an external client using a software development company. &lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;Looking at Steve’s profile,where his blog is published and the books he has written I can see that perhaps his intended audience was not me but:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&amp;lt;Rant&amp;gt; &lt;/b&gt;&lt;br /&gt;
It is articles like this that can cause agile adoption to fail in an organisation as instead of management working collaboratively with the people producing the product/software/website they end up trying to control/dictate to the team and we are then back into Command &amp;amp; Control territory.&lt;br /&gt;
&lt;br /&gt;
Throughout Steve’s article I have a picture in my head of a manager wanting ‘more’ from the development team – deliver faster, deliver more value, cost me less, etc not believing the "workers" care about what they do and that is not what agile is about, that is old school management &amp;amp; waterfall projects. &lt;br /&gt;
&lt;br /&gt;
Agile was not created by managers it was effectively created by the workers, not in an attempt to do less work or deliver less value but to help their organisations to reliably deliver value and delight their customers, it even has inbuilt mechanisms to improve not only the process they follow but what they are delivering and to try and then start telling the team what they should be doing is plain and simple wrong! &lt;br /&gt;
&lt;b&gt;&amp;lt;/Rant&amp;gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
To go back to Steve’s original topic does the agile manifesto need evolving? perhaps, anything that stays the same and never changes smacks of dogma and leads to stagnation.&lt;br /&gt;
&lt;br /&gt;
Agile is, and always has been, about feedback loops and making changes in a iterative fashion; the manifesto should not be immune to change this but at the same time the changes need to be constructive and deliver value to all who practice agile development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-7583449770175476210?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/mjHBKNHXWVk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/7583449770175476210/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/08/response-to-agility-is-not-enough.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/7583449770175476210?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/7583449770175476210?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/08/response-to-agility-is-not-enough.html" title="A response to “Agility is not enough: Beyond the manifesto”" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-X6hY6F_TKlI/Tkw7_hZOrPI/AAAAAAAAAGc/NHZTHy-YB6E/s72-c/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CU8EQXczcCp7ImA9WhdREUU.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-2455368480501908262</id><published>2011-08-01T08:30:00.000+01:00</published><updated>2011-08-01T08:30:00.988+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T08:30:00.988+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="agile" /><category scheme="http://www.blogger.com/atom/ns#" term="Event" /><category scheme="http://www.blogger.com/atom/ns#" term="kanban" /><category scheme="http://www.blogger.com/atom/ns#" term="scrum" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><title>Progressive.Net Tutorials</title><content type="html">&lt;p&gt;From September 5th to the 7th Skills Matter and London .Net user group are organising The 5th &lt;a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dot-net-tutorials-2011/cs-2382"&gt;Progressive .NET Tutorials&lt;/a&gt; which are being held in at Skills Matter eXchange in London.&lt;/p&gt;  &lt;p&gt;The tutorials are a series of twelve 4-hour hands-on Workshops which provide a deep dive into advanced topics for Agile .NET developers and I’m hosting one of the workshops!&lt;/p&gt;  &lt;p&gt;My workshop is all about agile and given that I’ve got 4 hours you can be certain that I’m going to make sure everybody that attends will leave knowing why we use agile, what it gives us, the various methodologies currently used and the latest thoughts about what we could/should be doing.&lt;/p&gt;  &lt;p&gt;If that wasn’t enough there are a whole host of other fantastic speakers: Christian Hassa, Gaspar Nagy, Ian Cooper, Sebastien Lambla, Dylan Beattie , Simon Brown, Paul Stack, Damjan Vujnovic, Adam Granicz, Ian Robinson, Mark Rendle, Steven Robbins, Jon Skeet and you can be sure that they’ll all be covering their respective subjects in great depth.&lt;/p&gt;  &lt;p&gt;Unfortunately this isn’t a free event and it will cost you £425 for the 3 days but given that all the sessions are going to cover the subjects in great depth and hosted by experts in their fields hopefully you’ll think that its not a bad price for what you’ll learn.&lt;/p&gt;  &lt;p&gt;For full details of the event and to register go &lt;a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dot-net-tutorials-2011/cs-2277" target="_blank"&gt;here&lt;/a&gt; to the Skills Matter website.&lt;/p&gt;  &lt;p&gt;Hopefully I’ll see you there but if not then keep up with what’s going on by following the hash tag #prognet on twitter leading up to and during the event.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-2455368480501908262?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/aiH1yejd42s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/2455368480501908262/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/08/progressivenet-tutorials.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/2455368480501908262?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/2455368480501908262?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/08/progressivenet-tutorials.html" title="Progressive.Net Tutorials" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;A0QDRnc6fyp7ImA9WhdSEEo.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-4698836507256235926</id><published>2011-07-15T08:43:00.002+01:00</published><updated>2011-07-19T13:42:57.917+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T13:42:57.917+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="dōjō" /><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="koan" /><category scheme="http://www.blogger.com/atom/ns#" term="kata" /><category scheme="http://www.blogger.com/atom/ns#" term="dojo" /><title>Software Developer != Zen Warrior</title><content type="html">Over the last few of years we’ve seen the terms katas, dōjō’s and koans enter the vocabulary of software developers, if you spend some time looking into these terms and how they are used in relation to software you’ll find people drawing comparisons between software development and martial arts and I’m telling you here and now that just because you practice software katas in coding dōjō’s and can solve a software koan you are not some sort of software Zen warrior, you are not Neo in the matrix, you’re a software developer. Fact.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;These terms kata, dōjō and koan are loaded with semantic meanings which most developers know nothing about, they are just a “cool” term to use to represent something which could otherwise be seen as boring and unlikely that a lot of developers would actually look at, lets be honest they represent exercises, coding with other developers and guided learning, nothing more.&lt;br /&gt;
The big issue for me with these terms is that if, like me, you have practiced a Japanese martial art that has Kata’s or taken the time to read and perhaps study Zen Buddhism then the way these terms are used in software development are just plain &lt;b&gt;wrong&lt;/b&gt;.&lt;br /&gt;
In this post I’m going to elaborate on try to show that the problem is with these terms, why they shouldn’t be used and propose alternatives that better fit with the intent behind the actual activity.&lt;br /&gt;
&lt;h3&gt;Kata&lt;/h3&gt;&lt;h4&gt;Problem&lt;/h4&gt;Lets take a step back here and look at what a Kata is in martial arts:&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;“detailed choreographed patterns of movements practised either solo or in pairs” &lt;a href="http://en.wikipedia.org/wiki/Kata" target="_blank"&gt;&lt;span style="font-size: xx-small;"&gt;Wikipedia&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;So a kata is a set of movements/techniques that are always practiced together, their primary use in many martial arts is around grading (moving to the next belt), you don’t need to understand what the movements are just that you need to be able to prove you can execute the movements/techniques correctly and in the right order. Katas are most frequently associated with Japanese martial arts particularly Karate, other martial arts such as Wing Chun have forms but these are slightly different to katas in that they are usually seen as a “library” of techniques for you to practice rather than a choreographed pattern.&amp;nbsp; &lt;br /&gt;
It is fairly easy to draw parallels between the software kata’s and Karate katas in that whilst a developer may perform a kata they are effectively repeating techniques that in themselves may have some value but the entire “routine” is frequently a made up situation which has no applicability in your day to day job e.g. &lt;a href="http://katas.softwarecraftsmanship.org/?p=80" target="_blank"&gt;Calculator Kata&lt;/a&gt; – great way to exercise TDD but how often are you asked to build a calculator application?&lt;br /&gt;
&lt;h4&gt;Solution&lt;/h4&gt;Back with the martial arts If you look at a martial art like Muay Thai or look to Mixed Martial Art practitioners they don’t have katas at all, they focus on techniques and how to use them to best effect not wasting time on a choreographed set of movements which offer no practical advantage.&amp;nbsp; The various techniques are combined together in a drill, these drills are not usually standardised or repeated they are created to be used at that moment in training but often would be equally applicable in the ring or for self defence so have value in a wider context.&lt;br /&gt;
Instead of software developers using katas I propose we should be looking more to create our equivalent of the drills, creating software that mimics actual development that you may undertake in your day job, but without the restrictions your job places on you i.e. use whatever technology or techniques you want.&amp;nbsp; Instead of building calculators or Fibonacci number generators create a web site that reads and writes to a database, build a RESTful web service, etc actually exercise and improve the skills you do need for your current, or even future, job. An example of this is a recent post by &lt;a href="http://excid3.com/blog/"&gt;Chris Oliver&lt;/a&gt; about &lt;a href="http://excid3.com/blog/10-ideas-for-beginner-web-developers/"&gt;10 Ideas for Beginner Web Developers&lt;/a&gt; which is exactly the sort of thing I think we should focus on.&lt;br /&gt;
&lt;h3&gt;&lt;i&gt;Dōjō&lt;/i&gt;&lt;/h3&gt;&lt;h4&gt;Problem&lt;/h4&gt;If you thought kata was misused you haven’t heard the half of it, a dōjō is defined as:&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;“Japanese term which literally means ‘place of the way’” &lt;a href="http://en.wikipedia.org/wiki/Dojo" target="_blank"&gt;&lt;span style="font-size: xx-small;"&gt;Wikipedia&lt;/span&gt;&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;A dōjō is at its most basic a training hall, a place you go to train but fundamentally it is somewhere that supposed to be special and only used for the purpose that it was intended i.e. practicing martial arts. I think that you’ll agree this is a pretty clear cut definition of what a dōjō is, whether we adhere to that in the western world is a different story altogether.&lt;br /&gt;
When we look at dōjō in the sense of software it is probably best defined as “bunch of coders get together to work on a programming challenge” and if you look at how its defined &lt;a href="http://codingdojo.org/cgi-bin/wiki.pl?WhatIsCodingDojo" target="_blank"&gt;here&lt;/a&gt; you’ll see that it focus’ on katas.&amp;nbsp; I have 2 problems with the coding dōjō as they stand:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;It doesn’t relate to a training hall, meeting room, or any physical place set aside for the purpose of “training” &lt;/li&gt;
&lt;li&gt;Its perpetuating katas! &lt;/li&gt;
&lt;/ol&gt;&lt;h4&gt;Solution&lt;/h4&gt;To my mind the term dōjō is wrong, what we are trying to get across is its a gathering of developers to write some code and hopefully learn from other people, it is an event that occurs sometimes inside work but most frequently outside of work in your own time.&lt;br /&gt;
What is needed is a term that expresses this and it could be a phrase rather than a single word, why not use “code crunch” “code gathering” “stack” or any other term that you can think up that implies geeks getting together to cut some code and learn new (cool?) stuff.&lt;br /&gt;
These meet ups should also focus on actual techniques that you’ll want to use, it could be TDD one time CQRS another but the code you write/skill you exercise should always have value to you outside of the event.&lt;br /&gt;
&lt;h3&gt;Koans&lt;/h3&gt;&lt;h4&gt;Problem&lt;/h4&gt;Within the software world the use of koans isn’t perhaps as widespread as katas or dōjō’s but its misuse of the concept is much worse than either of the previous terms.&amp;nbsp; To perhaps understand lets look at a definition of what a Zen koan is:&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;“A Koan is a statement, a dialogue, a story or a question which cannot be understood or answered by logical thinking” &lt;span style="font-size: xx-small;"&gt;&lt;a href="http://www.suite101.com/content/koans--a-zen-practice-for-enlightenment-a229635" target="_blank"&gt;suite101&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;After some searching and reading the best definition I could find about koans in software development is about the ruby koans:&lt;br /&gt;
&lt;blockquote&gt;&lt;i&gt;“A Koan in RubyKoans is a small demonstration of a feature of Ruby with something missing. You have to fill in that missing piece in order to move on to the next Koan.” &lt;span style="font-size: xx-small;"&gt;&lt;a href="http://ruby.about.com/od/beginningruby/ss/The-Zen-Of-Learning-Ruby.htm" target="_blank"&gt;About.com Ruby&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;&lt;/blockquote&gt;Now looking at those 2 statements it is very easy to see that they bear absolutely no likeness to each other, a Zen koan cannot be solved with logical thinking whereas the RubyKoan is all about logical thinking and learning.&lt;br /&gt;
&lt;h4&gt;Solution&lt;/h4&gt;In my humble opinion we should stop using the word koan entirely in the software world, lets think about what we are trying to do ,which is effectively guided learning, and again find a word or phrase that better represents what we are trying to achieve.&lt;br /&gt;
You could use a term such as “bread crumbs”, not as &lt;i&gt;cool&lt;/i&gt; as koan but has the connation of following a path and reaching a target or you could have a “trail” with way points you need to pass through, both of these would serve us as far better metaphors than a koan. &lt;br /&gt;
&lt;h3&gt;Summary&lt;/h3&gt;Hopefully I’ve proved what I said originally in that we as software developers should not be using the terms kata, dōjō, or koan and even shown that the way katas as are being currently practiced are in my opinion not the best way for us as individuals or groups to improve our skills.&lt;br /&gt;
As the title of this post says software developers != Zen warriors, lets create our own “cool” vocabulary around these activities to encourage our fellow developers to do them as well, rather than subjugating other terms whose meaning is already well defined and completely different to what we are using them for.&lt;br /&gt;
Instead of practicing katas and holding dōjō’s lets all start creating our own drills and holding “code crunches”, rather than working through koans to achieve enlightenment we could follow a trail to help us reach our destination.&lt;br /&gt;
One last option is that we could throw out all these terms and simply work on exercises, participate in events/gatherings and undertake some guided learning but that wouldn’t be cool now would it?&lt;br /&gt;
&lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-4698836507256235926?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/_Tkjsw_tyUw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/4698836507256235926/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/07/software-developer-zen-warrior.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4698836507256235926?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4698836507256235926?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/07/software-developer-zen-warrior.html" title="Software Developer != Zen Warrior" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;A0IMQn47eip7ImA9WhdSEEo.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-5574626019374173204</id><published>2011-06-21T08:40:00.002+01:00</published><updated>2011-07-19T13:46:23.002+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T13:46:23.002+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="unit testing" /><category scheme="http://www.blogger.com/atom/ns#" term="code coverage" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>100% Coverage is not enough</title><content type="html">Unless you’ve been living under a rock you’ll have heard about code coverage in relation to test driven development or unit tests depending on if your writing the tests first or not.&lt;br /&gt;
&lt;br /&gt;
Now a lot of people who evangelise TDD will often also talk in the same way about code coverage telling you that if you don’t know what code your tests are actually exercising then how can you be sure your code is correct? I have also had conversations with people who believe in TDD but think that code coverage is just a figure and you shouldn’t pay special attention to it.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
What I have found interesting is that in recent months there seems to have been a real move towards people saying that you &lt;i&gt;have&lt;/i&gt; to have &lt;b&gt;100%&lt;/b&gt; code coverage and if you haven’t well then shame on you as you can’t possibly be a good developer can you?&lt;br /&gt;
&lt;h3&gt;What prompted this post&lt;/h3&gt;I’ve recently been working on a project where we have aimed to have 100% coverage but for a couple of reasons we haven’t managed to do so:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;doesn’t make sense – why test a DTO that only holds state/data and has no behaviour? &lt;/li&gt;
&lt;li&gt;its not easy to do so – as an example we’re using EF4 (not code first) and the testing entities with behaviour is hard unless you have a db to exercise it against, yes it can be done but is it worth the effort? &lt;/li&gt;
&lt;/ol&gt;So instead of aiming for 100% coverage across the entire solution we looked to have 100% coverage on the code we could test e.g. controllers, model, etc and as we had dependency injection we could then mock out repositories to help us with the hard to test interactions (which in itself is a whole other discussion).&lt;br /&gt;
&lt;br /&gt;
So we had our 100% coverage and the tests ran in moments and we all felt very pleased with ourselves right up until the moment somebody else testing it by using the software the way it was supposed to be used, no boundary or corner case testing just normal functionality and it broke!&lt;br /&gt;
&lt;br /&gt;
So we went back to our tests and looked at them to find out what we had missed, how was it possible that our tests hadn’t caught the bug? We had our tests and they exercised the code entirely, our code coverage told us so, but when it was run as a complete system it failed as we hadn’t explicitly catered for certain circumstances which were now of course patently obvious. &lt;br /&gt;
&lt;br /&gt;
The reason was simple – data. The possible number of combinations of data were so large that if we wanted to test every possible combination we would have been writing tests for days which just isn’t feasible so we catered for the boundaries and some of the values we knew were in the data set.&lt;br /&gt;
&lt;h3&gt;So what do you do? &lt;/h3&gt;Remember TDD or unit tests only test that the code you have written does what &lt;b&gt;&lt;i&gt;you&lt;/i&gt;&lt;/b&gt; expect it to it doesn’t make it correct, ideally you want to be adding some sort of functional testing via &lt;a href="http://nrg.im/inqQA8" target="_blank"&gt;Selenium&lt;/a&gt;/&lt;a href="http://nrg.im/mDdsEB" target="_blank"&gt;Watin&lt;/a&gt;/&lt;a href="http://nrg.im/mNCFQp" target="_blank"&gt;Project White&lt;/a&gt; to exercise the system end to end and even then it is unlikely that you’ll cover all the scenarios for using the software but you should at least be testing the normal usage of the system.&lt;br /&gt;
&lt;br /&gt;
But what if you don’t have time to&amp;nbsp; write these additional tests? This is then where the “Mark 1 Eyeball” comes into play as one of my old managers used to say. You need to run the software look at it, try to break it, if you are lucky enough to have a tester or test team give to them they’ll soon find ways to break it &lt;img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://lh4.ggpht.com/-0aLintPsIhw/Tf_NnAQkdbI/AAAAAAAAAEo/AtzDHgRwlFE/wlEmoticon-smile2.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;br /&gt;
&lt;h3&gt;100% is only the starting point&amp;nbsp; &lt;/h3&gt;I’m not a TDD zealot but I do believe you want to have tests for your code to be happy that it is doing what you expect it to and yes the tests &lt;b&gt;should&lt;/b&gt; cover that code 100% but, and it is a big but, do not rely on those tests alone you need to back it up with something that actually exercises the entire system the code belongs in including the data it will work with.&lt;br /&gt;
&lt;br /&gt;
Quite simply as the title of this article says 100% coverage is not enough.&lt;br /&gt;
&lt;a href="http://www.codeproject.com/script/Articles/BlogFeedList.aspx?amid=719235" rel="tag" style="display: none;"&gt;CodeProject&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-5574626019374173204?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/6Y0z2ImaFdE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/5574626019374173204/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/100-coverage-is-not-enough.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5574626019374173204?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5574626019374173204?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/100-coverage-is-not-enough.html" title="100% Coverage is not enough" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-0aLintPsIhw/Tf_NnAQkdbI/AAAAAAAAAEo/AtzDHgRwlFE/s72-c/wlEmoticon-smile2.png?imgmax=800" height="72" width="72" /><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;A0EERH46fCp7ImA9WhdSEEo.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-5874701795478627025</id><published>2011-06-15T22:24:00.002+01:00</published><updated>2011-07-19T13:46:45.014+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T13:46:45.014+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event" /><category scheme="http://www.blogger.com/atom/ns#" term="conference" /><category scheme="http://www.blogger.com/atom/ns#" term="community" /><category scheme="http://www.blogger.com/atom/ns#" term="DDD SW" /><title>DDDSW 3</title><content type="html">So Saturday just gone was the 3rd instalment of &lt;a href="http://nrg.im/jHsSVf"&gt;DDD SW&lt;/a&gt; which is held in Bristol at University of West of England where I was lucky enough to have been picked to to give a session on &lt;a href="http://designcoderelease.blogspot.com/2011/06/kanaban-what-is-it-and-how-can-it.html"&gt;Kanban&lt;/a&gt;.&lt;br /&gt;
In previous years the weather has been very hot which has caused its own unique issues but this year although the day was nice it was fairly cool which was a welcome relief.&lt;br /&gt;
This year also saw coffee on arrival along with rather nice danish pastries which was just what was needed to get you going on a Saturday morning.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;Introduction&lt;/h3&gt;The day kicked off in normal DDD style with an introduction to the day given by &lt;a href="http://nrg.im/iw1Tds"&gt;Guy Smith-Ferrier&lt;/a&gt; just telling everybody what to expect during the day and where all the various tracks were located.&lt;br /&gt;
&lt;a href="http://nrg.im/lfBf0l"&gt;Mark Rendle&lt;/a&gt; then told everybody about an application he had created called Heckle which would be available during the day for people to be able to give feedback on sessions and he would be showing people how he’d built it in his talk on ‘Minimalist software development’&lt;br /&gt;
&lt;a href="http://nrg.im/kIjzrs" target="_blank"&gt;Andy Westgarth&lt;/a&gt; also announced the DDD NE would be on 8th October in Newcastle and a site will be up with the details as soon as he is able to build one &lt;img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://lh4.ggpht.com/-giBhFn4BQxk/Tfki80CvfQI/AAAAAAAAAEk/CNnNmJRNAhY/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;br /&gt;
&lt;h3&gt;Session 1: Kanban? what is it and how can it help?&lt;/h3&gt;This was the session that I was presenting and as the title says it was all about Kanban, describing what it was and how you can use it with some animated slides to try and show it ‘in action’ so to speak.&lt;br /&gt;
I thoroughly enjoyed this and the questions were particularly great hopefully allowing a bit more in depth into some of the areas.&lt;br /&gt;
I’m currently waiting on the evaluation results from the session so I’ll find out if people enjoyed it and found it useful.&lt;br /&gt;
A special thank you to &lt;a href="http://nrg.im/k8WZpE" target="_blank"&gt;Gary Park&lt;/a&gt; who did a sterling job as a room monitor ensuring he not only looked after the room but the speaker as well even going so far as to bring genuine Scottish Irn Bru for me to drink.&lt;br /&gt;
&lt;h3&gt;Session 2: Balloon Debate&lt;/h3&gt;I decided to go to the &lt;a href="http://nrg.im/iVobHH"&gt;Balloon Debate&lt;/a&gt; for this session which was around web presentation technologies and was between Asp.Net MVC represented by &lt;a href="http://nrg.im/iiiZLN" target="_blank"&gt;Chris Canal&lt;/a&gt;, “Roll your own” represented by &lt;a href="http://nrg.im/k9cey4" target="_blank"&gt;Steve Sanderson&lt;/a&gt;, PHP represented by &lt;a href="http://nrg.im/iKRCSR" target="_blank"&gt;Gary Short&lt;/a&gt; &amp;amp; Silverlight represented by &lt;a href="http://nrg.im/jXUu44" target="_blank"&gt;Rich Costall&lt;/a&gt;.&lt;br /&gt;
The first round of the debate was looking to lose 2 of the participants and after a series of questions it was put to the vote and the surprise was both MVC &amp;amp; Silverlight were voted off leaving only “Roll your own” and PHP!&lt;br /&gt;
So going into the second round of the debate we are at a conference which is primarily .Net focused and both MS technologies no longer in the running leaving us to question Steve &amp;amp; Gary about the technologies they represented.&amp;nbsp; After a suitable amount of questions we voted again only to find that PHP won!&lt;br /&gt;
&lt;h3&gt;Session 3: The Missing Link - Pushing Through The Pain Of TDD&lt;/h3&gt;This session was given by &lt;a href="http://nrg.im/lghaRe" target="_blank"&gt;Richard Dalton&lt;/a&gt; and as the title suggests was concerned with TDD with Richard sharing his thoughts and approach to doing TDD and giving tips and hints on how to overcome some common issues that you come across.&lt;br /&gt;
&lt;h3&gt;Lunch: Micro presentations&lt;/h3&gt;Even during lunch the sessions didn’t end with with 6 &lt;a href="http://nrg.im/msQaIj" target="_blank"&gt;Pecha Kucha&lt;/a&gt; or 20/20 presentations which unfortunately I managed to miss due to my talking to people who were attending the conference but from what I heard they were all well received and the format is perhaps something we will see more of in the future.&lt;br /&gt;
&lt;h3&gt;Session 4: Why Web Performance Matters&lt;/h3&gt;This session was given by &lt;a href="http://nrg.im/lWtWN3" target="_blank"&gt;Richard Campbell&lt;/a&gt; of &lt;a href="http://nrg.im/koEZLb" target="_blank"&gt;Dot Net Rocks!&lt;/a&gt; fame who in his day job is a consultant with StrangeLoop Networks that deal with helping people get the best performance out of their web site so he came to this talk well qualified to speak about it.&lt;br /&gt;
Richard was a really good presenter holding our attention throughout the session which gave us insight into why some sites are slower than others which then lead to some tips as to what you could do about it.&lt;br /&gt;
&lt;h3&gt;Afternoon tea&lt;/h3&gt;Everything stopped for afternoon tea which last year lead to some logistical problems where not everybody was able to get their cream tea and get back in time for the final session.&lt;br /&gt;
Not this year! it all ran like a finely oiled machine and special thanks must go to Ross Scott for sorting this all out.&lt;br /&gt;
&lt;h3&gt;Session 5: Building seriously scalable websites with ASP.NET with and without Windows&lt;/h3&gt;It was interesting to see this session directly after Richard Campbell's as this was a far more techie session showing the technology you could use as well as discussion about what you needed to do to create a scalable site.&lt;br /&gt;
&lt;a href="http://nrg.im/m19vSZ" target="_blank"&gt;Chris Hay&lt;/a&gt; started by explaining that scaling a site consists of doing various things with each usually becoming more expensive/complicated as you go along.&amp;nbsp; To start he showed how to use &lt;a href="http://nrg.im/mLuD4m" target="_blank"&gt;Node.js&lt;/a&gt;, an open source webserver that runs on Linux,&amp;nbsp; as an alternative to IIS and just how easy it is to setup and use, then Chris demonstrated &lt;a href="http://nrg.im/jT32UJ" target="_blank"&gt;haproxy&lt;/a&gt; in conjunction with Node.js effectively giving you a free load balanced multiple web server setup with little or no configuration.&amp;nbsp; What was especially interesting was the people that are currently using haproxy in a commercial environment e.g. Stack Overflow.&lt;br /&gt;
Chris continued to show us the various techniques you can use in relation to scaling covering still move web servers (such as &lt;a href="http://nrg.im/l2p84a" target="_blank"&gt;nginx&lt;/a&gt;), CDN’s, Reddis and more.&lt;br /&gt;
My only issue with the session is that Chris jumped forwards &amp;amp; backwards through slides a lot and seemingly missed out a few demo’s of what he was talking about but looking at this tweets afterwards it it appears he only skipped 2.&lt;br /&gt;
&lt;h3&gt;Close &amp;amp; Swag&lt;/h3&gt;After all the sessions were completed we all gathered in the largest room for Guy to thank us for attending and for us to thank the organisers.&lt;br /&gt;
Then it was time for the great swag give away with 60 items of swag work in excess of £9000 with the normal method of allocation i.e. if you can get to the swag before somebody else you pick what you want.&lt;br /&gt;
&lt;h3&gt;The Geek Dinner&lt;/h3&gt;As per last year the post conference geek dinner was held at the Water Sky chinese restaurant where there was a lot of discussion of the day, sessions see, new tech, new approaches, etc matched with excellent food.&lt;br /&gt;
&lt;h3&gt;And finally….&lt;/h3&gt;Well that was the day as was, I meant to blog about it sooner but things got in the way.&lt;br /&gt;
A big thanks and congratulations has to go to &lt;a href="http://nrg.im/iw1Tds" target="_blank"&gt;Guy&lt;/a&gt;, &lt;a href="http://nrg.im/mJ3amO" target="_blank"&gt;Chris&lt;/a&gt;, Martyn, &lt;a href="http://nrg.im/ipiC4X" target="_blank"&gt;Jose&lt;/a&gt; and &lt;a href="http://nrg.im/iWbPzQ" target="_blank"&gt;Ross&lt;/a&gt; for organising another fantastic DDD SW and this year managing to work out the kinks with the food delivery, well done chaps!&lt;br /&gt;
Here’s looking forward to DDD SW 4 next year &lt;img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://lh4.ggpht.com/-giBhFn4BQxk/Tfki80CvfQI/AAAAAAAAAEk/CNnNmJRNAhY/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-5874701795478627025?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/2Vm7b2OTeKY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/5874701795478627025/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/dddsw-3.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5874701795478627025?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5874701795478627025?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/dddsw-3.html" title="DDDSW 3" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-giBhFn4BQxk/Tfki80CvfQI/AAAAAAAAAEk/CNnNmJRNAhY/s72-c/wlEmoticon-smile%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkUFR3syfip7ImA9WhdSEEU.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-1327569716891161827</id><published>2011-06-12T20:52:00.003+01:00</published><updated>2011-07-19T13:56:56.596+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T13:56:56.596+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="kanban" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><category scheme="http://www.blogger.com/atom/ns#" term="DDD SW" /><title>Kanban? What is it and how can it help?–DDDSW Presentation</title><content type="html">Yesterday I gave my presentation on Kanban at &lt;a href="http://nrg.im/jHsSVf" target="_blank"&gt;Developer! Developer! Developer! South West&lt;/a&gt; explaining what it is, where it came from, how it could help and how to go about using it.&lt;br /&gt;
This is just a quick post to list the resources I mentioned at the end of my presentation.&lt;br /&gt;
I hope that everybody who saw the presentation enjoyed it and feel free to &lt;a href="http://www.twitter.com/NathanGloyn" target="_blank"&gt;tweet&lt;/a&gt; or &lt;a href="mailto:nathans.dropbox@googlemail.com" target="_blank"&gt;email&lt;/a&gt; me any questions you have.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h4&gt;&lt;u&gt;Books&lt;/u&gt;&lt;/h4&gt;To be perfectly honest there are only 2 books that I know of that are about Kanban in relation to software development, both are listed below.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://nrg.im/mzSeWS" target="_blank"&gt;Kanban - Sucessful Evolutionary Change for Technology Business&lt;/a&gt; – seminal work on this form of Kanban although to my mind the information is slanted more to management than a team.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nrg.im/j96wFF" target="_blank"&gt;Kanban and Scrum – Making the most of both&lt;/a&gt; – Good book, outlines both how both scrum and Kanban work and the differences between the 2.&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;&lt;u&gt;Web Pages&lt;/u&gt;&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blog.crisp.se/henrikkniberg/2009/06/26/1246053060000.html"&gt;One day in Kanban land&lt;/a&gt; – &lt;a href="http://nrg.im/jYiExP" target="_blank"&gt;Henrik Kniberg&lt;/a&gt; showing how a day in Kanban could look&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kanban101.com/"&gt;Kanban&lt;/a&gt;&lt;a href="http://www.kanban101.com/"&gt; 101&lt;/a&gt; – web site providing details about Kanban and advice on how to use it.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nrg.im/klB4YV" target="_blank"&gt;Kanban for support&lt;/a&gt; – a post I did a while ago on using Kanban in a support function&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.agileproductdesign.com/blog/2009/kanban_over_simplified.html"&gt;Kanban&lt;/a&gt;&lt;a href="http://www.agileproductdesign.com/blog/2009/kanban_over_simplified.html"&gt; Development Oversimplified&lt;/a&gt; – really good post about Kanban, where it comes from and how to use it.&amp;nbsp; You’ll find the Prius example I used here as well.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.crisp.se/kanban/kanban-example.pdf"&gt;Kanban&lt;/a&gt;&lt;a href="http://www.crisp.se/kanban/kanban-example.pdf"&gt; kick-start&lt;/a&gt; – pdf showing a card board and providing info in relation to what Kanban is and using it.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nrg.im/lzLmq7" target="_blank"&gt;Limited WIP Society&lt;/a&gt; – Home of Kanban in relation to&amp;nbsp; software engineering.&lt;/li&gt;
&lt;/ul&gt;&lt;h4&gt;&lt;u&gt;Presentation slides&lt;/u&gt;&lt;/h4&gt;The slides for the presentation can be found &lt;a href="https://docs.google.com/leaf?id=0B_hZTmoE5CbqZWI2MjViYzgtMGQxNy00NTYxLWFlZGEtZjg1MGUwZjM4NjJh&amp;amp;hl=en_GB&amp;amp;authkey=CND4-rEF" target="_blank"&gt;here&lt;/a&gt;, I'd recommend downloading them as the Google doc viewer doesn’t display the slides correctly.&lt;br /&gt;
&lt;h4&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-1327569716891161827?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/UJRcPdOU9pQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/1327569716891161827/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/kanaban-what-is-it-and-how-can-it.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/1327569716891161827?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/1327569716891161827?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/kanaban-what-is-it-and-how-can-it.html" title="Kanban? What is it and how can it help?–DDDSW Presentation" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkUHSH86fCp7ImA9WhdSEEU.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-5775612420961730860</id><published>2011-06-07T08:34:00.002+01:00</published><updated>2011-07-19T13:57:19.114+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T13:57:19.114+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Event" /><category scheme="http://www.blogger.com/atom/ns#" term="community" /><category scheme="http://www.blogger.com/atom/ns#" term="Guathon" /><category scheme="http://www.blogger.com/atom/ns#" term="ScottGu" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><title>The Guathon 2011</title><content type="html">This was the first (and only?) guathon of this year with &lt;a href="http://nrg.im/iNFrcv" target="_blank"&gt;Scott Guthrie&lt;/a&gt; providing sessions on &lt;a href="http://nrg.im/kfD1Qg" target="_blank"&gt;Asp.Net MVC3&lt;/a&gt; and &lt;a href="http://nrg.im/iOT0Yu" target="_blank"&gt;Windows Azure&lt;/a&gt; and &lt;a href="http://nrg.im/ixkQWA" target="_blank"&gt;Steve Sanderson&lt;/a&gt; providing sessions on his JavaScript library &lt;a href="http://nrg.im/lU1MyD" target="_blank"&gt;Knockout&lt;/a&gt; and the Async functionality coming in Asp.Net vNext.&lt;br /&gt;
&lt;br /&gt;
The day kicked off with a short introduction from &lt;a href="http://nrg.im/l2CjFY" target="_blank"&gt;Phil Winstanley&lt;/a&gt; about the day and what was being covered and there was a short “pitch” by Paul Stack on &lt;a href="http://nrg.im/k5lSRX" target="_blank"&gt;Give Camp UK&lt;/a&gt; which is a charity event coming up later in the year where developers can pledge time to help create applications for various charities.&lt;br /&gt;
&lt;br /&gt;
With the intro over it was straight into the sessions….&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h3&gt;ASP.Net MVC&lt;/h3&gt;Scot started the day with a presentation about MVC3 and as per his usual presentation style asked the audience for ideas of the type of app to create as part of the demo to which, in todays case the app was about movies in cinemas.&lt;br /&gt;
&lt;br /&gt;
Scott then took us through the creation of an MVC app and along the way showed us new project templates, HTML5 support, Razor view engine and tips for using e.g. helpers, IIS Express and EF code first but to name a few areas he touched on.&lt;br /&gt;
&lt;br /&gt;
For people new to MVC this was a good run through demonstrating the functionality that was available and how it could be used but as I’m currently using this technology for me the real value in the session came through in the questions asked by the attendees, which often went far more in-depth than the presentation content such as “can you do anything in the asp.net view engine that you can’t in Razor?” (the answer by the way is yes a few things such as server controls and some localisation).&lt;br /&gt;
&lt;h3&gt;Dynamic Web UIs with Knockout.js&lt;/h3&gt;After a coffee break Steve Sanderson took to the stage to give us a presentation on Knockout which is concerned with creating rich user interfaces providing.&lt;br /&gt;
&lt;br /&gt;
Steve started with a simple example using Knockout and an overview of the MVVM pattern which is what Knockout uses to introduce everybody to what Knockout could do and a high level overview of how it did it including the core of the “product” which is data binding elements on the page to a model you have server side, Steve used MVC in this example but it isn’t limited to .Net and can be used with anything that will provide/consume a JSON feed.&lt;br /&gt;
&lt;br /&gt;
Steve then moved on to progressively enhance the example showing more &amp;amp; more complex functionality, creating a UI that ran client side and interacted with the server only to request data for display or write data to be persisted.&amp;nbsp; The example in this case was a web mail client showing loading the contents of various folders (inbox, spam, sent, etc.) and ability to view mails.&lt;br /&gt;
&lt;br /&gt;
I must admit to liking Knockout and believe that it can help in the creation of rich UI’s but some developers I talked to were less certain about it citing reservations around accessibility and testability.&amp;nbsp; As I said to them give it a try before dismissing it, you may find you like it. &lt;br /&gt;
&lt;h3&gt;C# 5 and Async Web Applications&lt;/h3&gt;This session was the first after the lunch break so Steve decided to “wake us up” with a truly terrible joke, which was so memorable I can’t even remember it!&lt;br /&gt;
&lt;br /&gt;
The session itself focused on the next version of ASP.Net and asynchronous processing that will be supported.&lt;br /&gt;
&lt;br /&gt;
Steve started out explaining in what I think is a really good metaphor the way normal code runs with the “post office model” – queue for a resource vs. “restaurant model” – service provide when asked for.&lt;br /&gt;
&lt;br /&gt;
He then started by showing how asynchronous code works in MVC3 and the amount of code you have to write and some of the possible issues you could run into, race conditions, etc.&amp;nbsp; Steve then moved on to showing a new base controller type called &lt;span style="font-family: Consolas;"&gt;TaskAsyncController&lt;/span&gt; which then provides additional functionality to allow the code in the controller to be run async just be calling a couple of different methods e.g. instead of DownloadString you use DownloadStringTaskAsync.&lt;br /&gt;
&lt;br /&gt;
Steve then moved on to showing us how to use the new functionality with the &lt;span style="font-family: Consolas;"&gt;Async&lt;/span&gt; and &lt;span style="font-family: Consolas;"&gt;Await&lt;/span&gt; keywords and how you can easily create your own async code by leveraging the &lt;span style="font-family: Consolas;"&gt;TaskCompletionSource&lt;/span&gt; functionality.&lt;br /&gt;
&lt;br /&gt;
All through the session Steve made use of &lt;a href="http://nrg.im/j2nJ7g" target="_blank"&gt;Apache Bench&lt;/a&gt;, which is a command line tool for measuring the performance of web servers, showing the performance for 1 user in 1 session, 10 users in 10 sessions &amp;amp; 50 users in 50 sessions and it was very noticeable of the effect of the async code enhancements.&amp;nbsp; He also used the nuget package &lt;a href="http://nrg.im/ldhmJJ" target="_blank"&gt;SignalR&lt;/a&gt; which appears to hold the majority of functionality that is required in MVC to work async.&lt;br /&gt;
&lt;br /&gt;
Steve then talked about how you can create real time, or near real time, applications (also know as &lt;a href="http://nrg.im/jtJgW8" target="_blank"&gt;COMET&lt;/a&gt;) and the different approaches you can take with the general agreement that sockets is the best approach but that as the spec was still changing probably not the best try and implement it yet.&lt;br /&gt;
Steve ended the session by demonstrating the ease of creating a chat application that would handle multiple clients with the processing being dealt with asynchronously.&lt;br /&gt;
&lt;br /&gt;
For me the only downside is that this functionality is unlikely to actually be available until the next version of MVC and C# 5 is released and there isn’t any dates on that yet, although you could use SignalR and the CTP now if you really wanted to.&lt;br /&gt;
&lt;h3&gt;Cloud Computing with Windows Azure&lt;/h3&gt;We had one last coffee break before the last session of the day and Scott took the reins again to take us through cloud computing, he confirmed that he is now taking responsibility for Azure but was still looking after Asp.Net as well so not just simply disappearing from Asp.Net.&amp;nbsp; He did say that this was the first event he was specifically talking about Azure since he had been given responsibility for Azure.&lt;br /&gt;
&lt;br /&gt;
Scott then went on to discuss how code has evolved and cloud just being the next step in this evolution, then he talked about the Azure platform itself showing where the existing data centres are in the world, the hardware that's used in the data center, what data centre’s look like.&amp;nbsp; I think a lot of people were interested to see the C-Block (basically a cargo container full of servers) that are the cornerstone of the modern data centre's.&lt;br /&gt;
&lt;br /&gt;
Scott then moved on to showing how to create “hello world” in Azure showing how easy it was to create an application that will run on azure. Due to network connectivity he was unable to show deployment of the app but did show one “that he created earlier”.&lt;br /&gt;
&lt;br /&gt;
Scott then talked about how the Azure platform provided hardware redundancy which basically meant if you are running multiple instances you get hardware fault tolerance for free (if you only run one instance they are unable to do this).&amp;nbsp; Coupled with this is the Service Bus concept that allows for the delivery of messages between various parts of a loosely coupled application, to demonstrate this Scott got everybody in the room with internet access to send him a message on Azure via a web site he had hosted on azure which placed the messages on the service bus and he then displayed a command line app connecting to the service bus and reading the messages that were being sent.&lt;br /&gt;
&lt;br /&gt;
After showing the service bus Scott moved on to explaining the various different storage options that are available to you starting with blob storage and how you can store files that can be be available either public or privately; Sql Azure was next explaining how you can use all the power of normal Sql Server in azure. The final storage option is Table Service which is a NoSql implementation running in Azure.&lt;br /&gt;
&lt;br /&gt;
Federated security, utilising &lt;a href="http://nrg.im/lCwV96" target="_blank"&gt;WIF&lt;/a&gt;, demonstrated how you could use Azure Access Control with Facebook, Google, LiveId, your own domain, etc. to verify a users identity as an alternative to you having to create your own user management, which ultimately provides users with a better experience. Scott really did make it seem very easy to set this up utilising Facebook as the identity provider.&lt;br /&gt;
Scott also touched on AppFabric, Caching, CDN and provided a small case study of how &lt;a href="http://nrg.im/l2AfnS" target="_blank"&gt;EasyJet&lt;/a&gt; are currently using Azure to implement the functionality that they require to run the airline on a daily basis.&lt;br /&gt;
&lt;br /&gt;
After some questions Scott thanked us all for coming and the day was over.&lt;br /&gt;
&lt;h3&gt;Summary&lt;/h3&gt;I found it a very long but enjoyable day and must offer many thanks to &lt;a href="http://nrg.im/l2CjFY" target="_blank"&gt;Phil Winstanley&lt;/a&gt;, &lt;a href="http://nrg.im/kKAlQu" target="_blank"&gt;Dave Sussman&lt;/a&gt; and the rest of the DDD team for organising the event as well as to &lt;a href="http://nrg.im/km01tV" target="_blank"&gt;Scott Gu&lt;/a&gt; and &lt;a href="http://nrg.im/kyex4T" target="_blank"&gt;Steve Sanderson&lt;/a&gt; for taking the time to present their sessions to us.&lt;br /&gt;
&lt;br /&gt;
I hope that all the attendees got as much out of it as I did.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-5775612420961730860?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/qoa5K5zyDao" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/5775612420961730860/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/guathon-2011.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5775612420961730860?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5775612420961730860?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/guathon-2011.html" title="The Guathon 2011" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total></entry><entry gd:etag="W/&quot;CkQFQHs-eip7ImA9WhdSEEU.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-5249862040130736633</id><published>2011-06-04T09:30:00.001+01:00</published><updated>2011-07-19T13:58:31.552+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T13:58:31.552+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="balance" /><title>Balance – some closing thoughts</title><content type="html">&lt;blockquote&gt;&lt;i&gt;Better learn balance. Balance is key. Balance good, karate good. Everything good. &lt;/i&gt;      &lt;br /&gt;
&lt;i&gt;Balance bad, better pack up, go home.        &lt;br /&gt;
Mr Miyagi - Karate Kid&lt;/i&gt;&lt;/blockquote&gt;I started the week with this quote and I’ve repeated it here as I do sincerely believe that it sums up balance; be it karate or coding if you don’t sort out how to balance the various forces that act on you then you can quickly find things overwhelming you and it can be difficult to get yourself back on an even keel.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
In the posts I tried to focus on the biggest factors I felt affect us all with one exception money.&amp;nbsp; The reason I didn’t mention money is that it really should just be a &lt;a href="http://nrg.im/jsUvfp" target="_blank"&gt;hygiene factor&lt;/a&gt;, it can have a very obvious effect if you aren’t receiving any as it will throw you completely out of balance until it is rectified but I am assuming that if you have the time to read my posts money issues are unlikely to be your main concern.&lt;br /&gt;
In the course of these posts I’ve tried to show aspects of balance in relating to &lt;a href="http://designcoderelease.blogspot.com/2011/05/balance-family.html" target="_blank"&gt;family&lt;/a&gt;, &lt;a href="http://designcoderelease.blogspot.com/2011/06/balance-social.html" target="_blank"&gt;socialising&lt;/a&gt;, &lt;a href="http://designcoderelease.blogspot.com/2011/06/balance-work.html" target="_blank"&gt;work&lt;/a&gt; and &lt;a href="http://designcoderelease.blogspot.com/2011/06/balance-tech.html" target="_blank"&gt;tech&lt;/a&gt; they are things that you face day-in-day out and offered some thoughts on how you can handle certain situations to help you maintain balance in your life but there is no secret or magic formulae to keep yourself in balance between the various demands on your time, you simply have to work at it and be mindful of anything that threatens to unbalance you.&lt;br /&gt;
So do I live a perfectly balanced life? No.&amp;nbsp; Unless you’re a saint without the pressures of modern living things will go wrong but I believe, as in a lot of things in life, it is knowing you’re out of balance and how you deal with rectifying the situation that matters.&lt;br /&gt;
Quite often you can see issues coming towards you, like waves in the ocean, the hard part is working out how to handle the issue before you get thrown out of balance and wipe out.&lt;br /&gt;
As &lt;a href="http://nrg.im/kUSz4m" target="_blank"&gt;Frank Herbert&lt;/a&gt; said “There’s no secret to balance. You just have to feel the waves”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-5249862040130736633?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/J3omp_SntNI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/5249862040130736633/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/balance-some-closing-thoughts.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5249862040130736633?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/5249862040130736633?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/balance-some-closing-thoughts.html" title="Balance – some closing thoughts" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkQHQ387eCp7ImA9WhdSEEU.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-4320020043927978220</id><published>2011-06-03T09:30:00.001+01:00</published><updated>2011-07-19T13:58:52.100+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T13:58:52.100+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="tech" /><category scheme="http://www.blogger.com/atom/ns#" term="balance" /><title>Balance - Tech</title><content type="html">So I know what you’re thinking “what is he on about? how does balance apply to the technology I use?”, well bear with me and I’ll explain.&lt;br /&gt;
A lot of developers will learn to code on one particular platform be it .Net, Java, Ruby, etc and frequently they’ll only look at one small part of that library and unless they are made to either look at different parts of the platform or use a different technology they will generally stay with what they first learned.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
The only problem with that is its a very unbalanced situation, whilst you may have really good knowledge of what you work with day to day its a bit like having blinkers on and not looking at what other technologies can do and the functionality that they offer.&lt;br /&gt;
&lt;h4&gt;Explore your tech&lt;/h4&gt;If you feel that you really cannot face learning a completely new technology be it because of lack of time or simply not comfortable doing so then try to explore the tech you use.&amp;nbsp; So for example if you work in the .Net world and usually just use MVC or webforms take the time to investigate workflow, azure, compact framework, web matrix etc&amp;nbsp; doing this you will learn more about the capabilities of the platform and very possibly different approaches you could take in relation to your normal day to day work, at the very least you’ll be better informed as to what you &lt;i&gt;could&lt;/i&gt; do if necessary.&lt;br /&gt;
&lt;h4&gt;Leap into the unknown&lt;/h4&gt;If you have the time go look at a platform that is completely different to what you work with, if you use static typed languages look at a dynamic language and vice versa.&lt;br /&gt;
Unless you have a deep seated desire to investigate a specific tech then when you first pick up a new piece of tech you need to put aside your preconceptions and prejudices otherwise you will simply be “well &amp;lt;insert favourite technology here&amp;gt; can do this and &amp;lt;insert new technology here&amp;gt; can’t so its useless”.&lt;br /&gt;
To help you spend a little time looking at the various technologies and pick one that does interest you and perhaps has some specific functionality that you want to play with, and if you’re a developer don’t just limit yourself to programming languages take the time to look at other technology like continuous integration, UI testing or anything else that takes your fancy.&lt;br /&gt;
&lt;h4&gt;But what do I get out of it?&lt;/h4&gt;By looking outside of your normal day to day skill set you may be exposed to different ways of working, different paradigms and my guess is that this extra experience will change the way you look work with your normal technology, and it could very well alter how you look at solving problems due to the extra perspective you have gained.&lt;br /&gt;
&lt;h4&gt;And finally….&lt;/h4&gt;The final post in the series summarises what I’ve covered all week with a few closing thoughts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-4320020043927978220?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/9D5jRdg7CN0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/4320020043927978220/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/balance-tech.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4320020043927978220?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4320020043927978220?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/balance-tech.html" title="Balance - Tech" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUMEQXc8eip7ImA9WhZUEE0.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-6174288554770020359</id><published>2011-06-02T09:30:00.000+01:00</published><updated>2011-06-02T09:30:00.972+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-02T09:30:00.972+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="passion" /><category scheme="http://www.blogger.com/atom/ns#" term="work" /><category scheme="http://www.blogger.com/atom/ns#" term="burnout" /><category scheme="http://www.blogger.com/atom/ns#" term="balance" /><title>Balance – Work</title><content type="html">&lt;h3&gt;Work&lt;/h3&gt;  &lt;p&gt;For many people work/life balance is a constant struggle, in the previous posts on balance I covered balance at home and socially but you need to crack balancing work with everything else since you spend so much of your life in work.&lt;/p&gt;  &lt;p&gt;Because there is so much that I could cover in relation to work I’m just going to focus on a few of things that I feel are important namely your job, passion and burn out.&lt;/p&gt;  &lt;h4&gt;Your Job&lt;/h4&gt;  &lt;p&gt;You spend most of your waking hours at your job and it should be where you get paid to ‘geek out’ and exercise your passion for code. It is important that you enjoy where you work and what you do, if not you’ll most likely find your dissatisfaction spilling over into other aspects of your life.&lt;/p&gt;  &lt;p&gt;I speak here with very real experience where I had a job that I didn’t really enjoy, oh I could do the job perfectly well but I just didn’t get any real enjoyment out of it and it was noticeable both inside and outside of work.&lt;/p&gt;  &lt;p&gt;If you find a job you love it will help with balancing out the other things you need to deal with as it can reduce the amount of coding you feel you &lt;strong&gt;&lt;em&gt;have&lt;/em&gt;&lt;/strong&gt; to do outside of work to keep yourself happy, if you find that you are spending more time out of work doing what you love than in work in my humble opinion I would suggest you need to find a new job to give you time to do other things.&lt;/p&gt;  &lt;h4&gt;Passion&lt;/h4&gt;  &lt;p&gt;So Paul Stack wrote a blog post on &lt;a href="http://bit.ly/dOOLiY" target="_blank"&gt;Passion&lt;/a&gt; a while back about why he likes working with passionate developers and for him what extra they bring to the table over the person that simply views development as a job. I would consider myself a passionate developer, I love coding, even when not coding I am often thinking about coding and although the stuff I'm thinking about is not complex algorithm's or clever solutions to technical challenges I'm still thinking about it in my own time. &lt;/p&gt;  &lt;p&gt;However there is a darker side to passion when it becomes all consuming. A passionate developer can become a thorn in a teams side they may be argumentative, intractable, disruptive and in the worst case bullying. This may be justified by the developer themselves saying that they are only trying to help the other members of the team, they only want the team to do it ‘the right way’, etc.&lt;/p&gt;  &lt;p&gt;Now I’m sure that most passionate developers have been guilty of the darker side at one time or another, the question is how do you deal with it? Hopefully you work in a good team who will tell you when you’re going to far allowing you to ‘dial it back’ since you need to continue to work with them but if you notice you are guilty of ‘the dark side’ and your team aren’t telling you then you may want to look at your behaviour, nobody wants to work with somebody like that and you could find yourself isolated.&lt;/p&gt;  &lt;p&gt;Balance your passion to do good work in the best way with bringing others along for the ride and although not everybody will be happy all of the time you are more likely to have a better working environment.&lt;/p&gt;  &lt;h4&gt;Burn out&lt;/h4&gt;  &lt;p&gt;This a dreaded topic for many geeks, for some its like the bogey man for others its a badge of honour, but whichever one it is its never nice.&lt;/p&gt;  &lt;p&gt;So what is burn out? it will vary from geek to geek but often its when you reach a place where you simply cannot bear to touch a computer or think about coding no matter how passionate you are about it and for some geeks that continue to push it when in this state it could mean ending up having a breakdown, which could very well be game over. A lot of geeks fall into the trap of feeling that they have to “beat the project” and it then becomes a personal challenge to ensure that they “win” but unfortunately this attitude can accelerate you towards burning out.&lt;/p&gt;  &lt;p&gt;I believe I managed to avoid it a few years ago (only my friends and family could tell you if I did or not) when I was on a death march project and attending a computer science course at college part time, it got to the point where I simply didn’t want to be in front of a computer which when you’re job is to develop software is a bit of a problem, luckily for me the project came to an end at roughly the same time as my college course allowing me time to “take my foot of the gas” and when I wasn’t in work just not touch a PC and relax.&amp;#160; &lt;a href="http://nrg.im/lotXhn" target="_blank"&gt;This&lt;/a&gt; Stack Overflow question about what causes burnout elicited some really good answers including some peoples personal experiences of burnout.&lt;/p&gt;  &lt;p&gt;The sad thing is that burn out is completely avoidable, it may be difficult to see it when you’re in the grip of some death march project but if you can see the signs you can do something about it.&lt;/p&gt;  &lt;p&gt;One of the obvious signs is the amount of hours you are working, as these start to rise you are becoming more out of balance, then you have the out of hours working that effects your family and/or social life all signs that things are going wrong and I’m not even considering things like not sleeping well or other physical symptoms.&lt;/p&gt;  &lt;p&gt;So how do you handle this and avoid burn out? well assuming you are working for a company and not yourself you talk to your boss, its not in their interest or yours to have you burn out since hiring a replacement is likely to cost the company more time and money than allowing you to work normal hours plus you working longer hours should be a red flag to management that the project needs looking at. But what do I do if they won’t listen I hear you cry, well then in all seriousness &lt;strong&gt;find another job&lt;/strong&gt;, if the company don’t value you enough to take your concerns seriously and are happy for you to burn yourself out its up to you to look after yourself and vote with your feet.&lt;/p&gt;  &lt;p&gt;If you’re working for yourself its much more difficult but I would suggest that you need to look at your longer term goals as “killing” yourself over a project isn’t going to help your business grow in the future, only by balancing your need to work vs. your need for down time can you make the business a success.&lt;/p&gt;  &lt;h4&gt;Next &lt;/h4&gt;  &lt;p&gt;I turn to the tech you use and how balance can play a part there as well, even if you don’t see how it can.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-6174288554770020359?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/jgz25VZwoWk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/6174288554770020359/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/balance-work.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/6174288554770020359?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/6174288554770020359?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/balance-work.html" title="Balance – Work" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUcEQHs8eyp7ImA9WhZVGUw.&quot;"><id>tag:blogger.com,1999:blog-9220389270062827818.post-4404429420317174396</id><published>2011-06-01T09:30:00.000+01:00</published><updated>2011-06-01T09:30:01.573+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-01T09:30:01.573+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="opinion" /><category scheme="http://www.blogger.com/atom/ns#" term="Social" /><category scheme="http://www.blogger.com/atom/ns#" term="Balance" /><title>Balance – Social</title><content type="html">&lt;p&gt;So you’re a geek but that doesn’t mean you don’t have a social life, sure some of us aren’t great in crowds of people but we all like to get out and enjoy ourselves and should do so to keep us in balance.&lt;/p&gt;  &lt;p&gt;It can be very easy to stay in front of the PC/Laptop and lose yourself in coding or gaming and not actually leave the house much apart from going to work and if you’re single possibly not seeing many people. When I was a lad gaming was generally a solitary past time but nowadays with online gaming you can be part of a much larger community of people and you do get to talk to other people but it isn’t the same as actually interacting with people.&lt;/p&gt;  &lt;p&gt;People need to socialise and various psychological studies have shown this, possibly the best well know is &lt;a href="http://www.abraham-maslow.com/amIndex.asp" target="_blank"&gt;Maslow&lt;/a&gt;s &lt;a href="http://www.abraham-maslow.com/m_motivation/Hierarchy_of_Needs.asp" target="_blank"&gt;“hierarchy of needs”&lt;/a&gt; which usually shown as a pyramid which has 5 levels: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Physiological (base of pyramid) – what you need to live: air, water, food &lt;/li&gt;    &lt;li&gt;Safety – safe place to live, job, etc. &lt;/li&gt;    &lt;li&gt;Social – friendship, belonging to a group &lt;/li&gt;    &lt;li&gt;Esteem – recognition, social status &lt;/li&gt;    &lt;li&gt;Self Actualisation (top of pyramid) – quest to reach your full potential &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Now with Maslows theory you cannot move up the pyramid unless you fulfil the lower levels i.e. unless you fulfil Safety you cannot move to Social. As you can see social is slap bang in the middle of the pyramid, people need to socialise and feel that they belong to a group.&lt;/p&gt;  &lt;p&gt;You’re probably asking yourself ‘and?’, my point is that to have balance in your life you &lt;em&gt;need&lt;/em&gt; to be interacting with other people, to grow as a person both professionally and personally social interaction helps you in many ways such as improving communication skills, empathy, etc these are all things that will help you inside and outside of work.&lt;/p&gt;  &lt;h4&gt;Networking&lt;/h4&gt;  &lt;p&gt;In a recent discussion at DDD Scotland one of the attendees was telling me how he was having to introduce himself as his twitter handle as that was how people knew him. This was backed up later when a comment was made in the “Ask the speakers” session that for a lot of people twitter has become where they most interacted with other people.&lt;/p&gt;  &lt;p&gt;Now there’s nothing wrong with having an online network but if you only rely on this and nothing else then in my opinion I believe you are missing out.&lt;/p&gt;  &lt;p&gt;If you take the time to go to a local user group or alt.beers you get a better balance between the electronic and social networks and you’ll be surprised who you meet.&amp;#160; Attending a group you more likely to grow your network of contacts and you are you’ll get to see good presentations or at the very least get away from a screen and have a beer with like minded geeks and talk tech &amp;amp; gadgets.&lt;/p&gt;  &lt;h4&gt;Focus on who you’re with&lt;/h4&gt;  &lt;p&gt;In my post about balance and family I mentioned a quote by Scott Hanselman’s wife in the disconnecting episode of “&lt;a href="http://bit.ly/gXIMyB" target="_blank"&gt;This Developers Life&lt;/a&gt;” which, paraphrasing,&amp;#160; is about you effectively saying you value the people online more than the people you are with.&amp;#160; This particular quote came back to me at the dinner held before DDD9 when talking to &lt;a href="http://guysmithferrier.com/" target="_blank"&gt;Guy Smith-Ferrier&lt;/a&gt; who observed that he looked around the table and out of the 10 people 8 were on their phones twittering away rather than talking to the person next to them! &lt;/p&gt;  &lt;p&gt;Guy’s point was that people should actually talk to one another when they were together, a sentiment echoed in the comments to &lt;a href="http://tcrn.ch/dPfHWZ" target="_blank"&gt;this&lt;/a&gt; blog post where the blogger believed it perfectly acceptable to effectively ignore the people he was with to “check his phone” but I think you’ll find that the majority of people believe the opposite, just read the comments to see what I mean.&lt;/p&gt;  &lt;p&gt;When you are out with friends/colleagues they may well understand the need to keep up to date with twitter but just do it in moderation and balance it with interacting with the people around you and never whilst in the middle of a conversation.&lt;/p&gt;  &lt;h4&gt;Next…&lt;/h4&gt;  &lt;p&gt;Next up I’m covering balance in work including the subject of burnout.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9220389270062827818-4404429420317174396?l=designcoderelease.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DesignCodeRelease/~4/GXVNXAGufCU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://designcoderelease.blogspot.com/feeds/4404429420317174396/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/balance-social.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4404429420317174396?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/9220389270062827818/posts/default/4404429420317174396?v=2" /><link rel="alternate" type="text/html" href="http://designcoderelease.blogspot.com/2011/06/balance-social.html" title="Balance – Social" /><author><name>Nathan</name><uri>http://www.blogger.com/profile/02284010981286464436</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total></entry></feed>

