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

<channel>
	<title>pushbomb &#187; Software Factories</title>
	<atom:link href="http://team.pushbomb.com/category/software-as-strategic/software-factories/feed/" rel="self" type="application/rss+xml" />
	<link>http://team.pushbomb.com</link>
	<description>tv programmed by the collective</description>
	<lastBuildDate>Tue, 05 Jan 2010 22:49:48 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='team.pushbomb.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/a08732ed34e6814d5a5513fe8cde5696?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>pushbomb &#187; Software Factories</title>
		<link>http://team.pushbomb.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://team.pushbomb.com/osd.xml" title="pushbomb" />
	<atom:link rel='hub' href='http://team.pushbomb.com/?pushpress=hub'/>
		<item>
		<title>Visual Studio 2010 Gets Serious about Visual Metrics &#8211; Screen Shots Here Look Promising but still no NDepend&#8230;.</title>
		<link>http://team.pushbomb.com/2008/10/13/new_screen_shots_visual_studio_2010/</link>
		<comments>http://team.pushbomb.com/2008/10/13/new_screen_shots_visual_studio_2010/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 02:03:46 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Class Diagram]]></category>
		<category><![CDATA[NDepend]]></category>
		<category><![CDATA[Sequence Diagram]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/10/13/new_screen_shots_visual_studio_2010/</guid>
		<description><![CDATA[Modeling that Works with Code For most businesses only about 20% of the code being written today is for new applications; (DDN: Not true 100% however that is about right for budgets which is likely what they meant anyway).
the majority of work is being done on existing code bases. A typical issue encountered when working on existing code is not having good tools to help the architect or developer understand the system.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1024&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f10%2f13%2fnew_screen_shots_visual_studio_2010%2f"><img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f10%2f13%2fnew_screen_shots_visual_studio_2010%2f" /></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p><img style="border-bottom:0;border-left:0;display:block;float:none;border-top:0;border-right:0;margin:0 auto;" title="bb725993.LayerDiagram(en-us,MSDN.10)" border="0" alt="bb725993.LayerDiagram(en-us,MSDN.10)" src="http://dcarr.files.wordpress.com/2008/10/bb725993layerdiagramenusmsdn102.jpg?w=595&#038;h=398" width="595" height="398" /></p>
<p>&#160;</p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn102.jpg"></a></p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993layerdiagramenusmsdn103.jpg"></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn102.jpg"></a></p>
<p>&#160;</p>
<p><img style="border-bottom:0;border-left:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;" title="bb725993.ArcExpl01(en-us,MSDN.10)" border="0" alt="bb725993.ArcExpl01(en-us,MSDN.10)" src="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn103.jpg?w=589&#038;h=394" width="589" height="394" /></p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn104.jpg"></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn104.jpg"></a></p>
<p align="center"><em></em></p>
<p align="center"><em>The new Architecture Explorer enables individuals to create a visual representation of existing code assets.</em></p>
<p align="center"><em></em></p>
<p align="center"><em></em></p>
<p>From MSDN (with added commentary….)</p>
<h3>&#160;</h3>
<h3>Modeling that Works with Code</h3>
<p>&#160;</p>
<p>For most businesses only about 20% of the code being written today is for new applications;</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>(DDN: Not true 100% however that is about right for budgets which is likely what they meant anyway).</h3>
<p>&#160;</p>
<p>&#160;</p>
<p>the majority of work is being done on existing code bases. A typical issue encountered when working on existing code is not having good tools to help the architect or developer understand the system.</p>
<p>&#160;</p>
<p>(DDN: Uh.. How about no <a target="_blank" href="http://en.wikipedia.org/wiki/Regression_testing">regression tests</a>? How about no mandate for reuse, framework API quality, etc. etc.? Sure lets not talk about the why, just the ways we can profit from it)</p>
<p>&#160;</p>
<p>&#160;</p>
<p>This can make it challenging to not only understand what needs to be done to make the required changes, but it makes it equally challenging to understand the broader impact of the changes. Often it isn’t until much later that an unexpected bug is discovered as a result of a change.</p>
<p>Our modeling tools have tight integration into the actual code of the application. This means that a developer or architect can use models to explore existing code assets.</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>Ugh.. Rational Round Trip UML nightmare but this should be part of your world at a minimum from code to view.</h3>
<p>&#160;</p>
<p>&#160;</p>
<p>The new Architecture Explorer in Visual Studio Team System gives developers and architects the capability of creating a full architectural picture of existing code; understanding how they fit together; understanding how they “work.” This leads to better information about how to use, re-use, or even whether or not to discard existing code. The Architecture Explorer provides architects and developers a mechanism for visualizing code assets in a number of ways including graphs, stacked diagrams and dependency matrices.</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>DDN: OK now I am officially getting scared… I can see all the developers saying ‘look ma! I’m an architect!’</h3>
<p>&#160;</p>
<p>&#160;</p>
<p>The introduction of the Architecture Layer Diagram means that a developer or architect can use models to enforce constraints on code as well. The Architecture Layer Diagram can be coupled to code making it an active diagram that can be used for validation.</p>
<p>For example, when an architect designs a system where the presentation layer should not talk to the data layer, you want to be able to enforce that model at check-in.</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>DDN: Oh my god was that last sentence serious? As if that would be a real interesting case?</h3>
<p>&#160;</p>
<p>&#160;</p>
<p>VSTS 2010 can do that. These capabilities delivered in VSTS 2010 are part of the Microsoft’s overall modeling story.</p>
<p>Learn more about modeling by watching the <a id="ctl00_mainContentContainer_ctl02" href="http://download.microsoft.com/download/8/a/5/8a5cddff-e76f-4a41-927f-db1accbd9e00/Modeling%20Webcast%209.12.08.wmv">Trends in Software Modeling</a> webcast featuring Jeffrey Hammond (Forrester Research), Cameron Skinner (Microsoft, Visual Studio Team System), and Clemens Reijnen (Sogeti).</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4c1a473e-b916-427b-953d-75884c544bd6" class="wlWriterSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Visual+Studio+2010" rel="tag">Visual Studio 2010</a>,<a href="http://technorati.com/tags/UML" rel="tag">UML</a>,<a href="http://technorati.com/tags/Class+Diagram" rel="tag">Class Diagram</a>,<a href="http://technorati.com/tags/Sequence+Diagram" rel="tag">Sequence Diagram</a>,<a href="http://technorati.com/tags/SilverLight" rel="tag">SilverLight</a>,<a href="http://technorati.com/tags/NDepend" rel="tag">NDepend</a>,<a href="http://technorati.com/tags/C%23" rel="tag">C#</a>,<a href="http://technorati.com/tags/2010" rel="tag">2010</a></div>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7d8f632d-16da-4bfb-b749-d88355671050" class="wlWriterSmartContent">del.icio.us Tags: <a href="http://del.icio.us/popular/Visual+Studio+2010" rel="tag">Visual Studio 2010</a>,<a href="http://del.icio.us/popular/UML" rel="tag">UML</a>,<a href="http://del.icio.us/popular/Class+Diagram" rel="tag">Class Diagram</a>,<a href="http://del.icio.us/popular/Sequence+Diagram" rel="tag">Sequence Diagram</a>,<a href="http://del.icio.us/popular/SilverLight" rel="tag">SilverLight</a>,<a href="http://del.icio.us/popular/NDepend" rel="tag">NDepend</a>,<a href="http://del.icio.us/popular/C%23" rel="tag">C#</a>,<a href="http://del.icio.us/popular/2010" rel="tag">2010</a></div>
<h3>Related Posts</h3>
<div class="wlw_related_posts">from tag <a href="http://del.icio.us/damoncarr/C#">C#</a>
<ul>
<li><a href="http://technorati.com/posts/TFQtx20taGKRBpdjrmUT9WJQc%2BRnMKMOJPttqoST4nQ%3D">Technorati: Discussion about “JetBrains Releases ReSharper 4.01 Beta 1 as EAP Build 917 – Download Here”</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/08/11/undocumented-linq-net-35-sp1-gold-forgot-to-mention-these-critical-changes-that-might-break-your-code/">Undocumented Linq! .NET 3.5 SP1 Gold Forgot to Mention these Critical Changes that might Break your Code « ubiquitous fluency</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/">NHibernate 2.0 gold Released – Must Wait for ‘Linq to NHibernate’ « ubiquitous fluency</a> </li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms229042.aspx">Design Guidelines for Developing Class Libraries</a> </li>
<li><a href="http://desktop.google.com/feeds/gadgets.xml?hl=en&amp;type=rss">Google Desktop&#8217;s Latest Gadgets</a> </li>
<li><a href="http://damon.agilefactor.com/2008/06/27/master-generic-type-constrains-a-critical-success-factor-in-linq-development/">Master Generic Type Constrains : A critical success factor in Linq Development</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/08/22/linq-to-financial-markets-optimizing-provider-to-real-time-quotes-analytics-and-silverlight-wpf-visualization/">Linq to Financial Markets : Optimizing Provider to Real-Time Quotes, Analytics, and Silverlight-WPF Visualization « ubiquitous fluency</a> </li>
<li><a href="http://feeds.feedburner.com/DanielCazzulino">Daniel Cazzulino&#8217;s Blog</a> </li>
<li><a href="http://damon.agilefactor.com/2007/10/collision-of-software-project.html">The Collision of Software Project Management and Agile</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/09/20/fusion_c_sharp_wrapper_for_linq_to_gac_access/">Linq to Gac : Use Linq to Power Query your Gac via this C# Bridge to Fusion « team domain.dot.net</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/09/08/the_fastest_dot_net_hash_set_collection_with_linq_extended_features/">Expose New Linq Operations from the Fastest Collection Type in .NET Ever « team domain.dot.net</a> </li>
<li><a href="http://damon.agilefactor.com/2008/05/27/advanced-c-30-part-3-new-language-features-as-domain-specific-as-well-as-general-purpose-extensions/">Advanced C# 3.0: Part 3 &#8211; New Language Features as ‘Domain Specific’ as well as General Purpose Extensions « damon wilder carr</a> </li>
</ul>
<p><a href="http://del.icio.us/damoncarr/C#">(more..)</a></p>
</p></div>
<div class="wlw_related_posts"></div>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f10%2f13%2fnew_screen_shots_visual_studio_2010%2f&amp;title=Visual+Studio+2010+Gets+Serious+about+Visual+Metrics+%e2%80%93+Screen+Shots+Here+Look+Promising+but+still+no+NDepend%e2%80%a6."><img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /></a></div>
<br />Posted in Framework Design, Industry News, Software Factories, Software Futures, Visual Studio 2010 Tagged: 2010, C#, Class Diagram, NDepend, Sequence Diagram, SilverLight, UML, Visual Studio 2010 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1024/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1024/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1024/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1024/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1024/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1024&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/10/13/new_screen_shots_visual_studio_2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://download.microsoft.com/download/8/a/5/8a5cddff-e76f-4a41-927f-db1accbd9e00/Modeling%20Webcast%209.12.08.wmv" length="5042356" type="video/x-ms-wmv" />
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f10%2f13%2fnew_screen_shots_visual_studio_2010%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/10/bb725993layerdiagramenusmsdn102.jpg" medium="image">
			<media:title type="html">bb725993.LayerDiagram(en-us,MSDN.10)</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn103.jpg" medium="image">
			<media:title type="html">bb725993.ArcExpl01(en-us,MSDN.10)</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>Framework API Development Best Practices using C# 3.0</title>
		<link>http://team.pushbomb.com/2008/05/15/domain-driven-framework-development-c-net-35-extension-methods-lambada-empowerment/</link>
		<comments>http://team.pushbomb.com/2008/05/15/domain-driven-framework-development-c-net-35-extension-methods-lambada-empowerment/#comments</comments>
		<pubDate>Thu, 15 May 2008 21:24:52 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[agile practices]]></category>
		<category><![CDATA[resharper]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[API Design]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Extension Methods]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Generics]]></category>
		<category><![CDATA[Lambada]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/05/15/domain-driven-framework-development-c-net-35-extension-methods-lambada-empowerment/</guid>
		<description><![CDATA[This content assumes you understand the basics of the new C# 3.0 language features in .NET 3.5. I use a 'pretend pair programming' approach with continued refactoring as this is how I would discuss it if you were coding with me.

I'll start with a fairly trivial, yet important example (I use it every day). Many times when comparing Strings I want to ignore case and culture (the InvariantCulture). This is provided by an overload as such as you likely know:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=188&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<h2 style="text-align:left;">PART 1</h2>
<p style="text-align:left;"><a href="http://dcarr.files.wordpress.com/2008/05/image31.png"><img class="alignright" style="border-width:0;margin:5px;" src="http://dcarr.files.wordpress.com/2008/05/image3-thumb.png?w=1024&#038;h=220" alt="image" height="220" /></a></p>
<p style="text-align:left;">This content assumes you have an introductory knowledge of C# 3.0 language features in .NET 3.5 and mastery of legacy C# 2.0 Generics, Generic Type Constraints, Anonymous Delegates and related material.</p>
<p>I use a &#8216;pair programming&#8217; approach with continued refactoring as this is how I would discuss it if you were coding with me, with an unfortunate one-way delivery.</p>
<h3 style="text-align:left;">The Brief Strategic View</h3>
<p style="text-align:left;">Microsoft has slowly been moving C# in a very productive direction (this is not new, as these features existed in 2.0 although not nearly as well integrated) to provide &#8216;Functional Language&#8217; features. If you don&#8217;t know or care about language semantics, just know that Linq and especially Lambada Expressions are about empowering you to use executable code like a variable, aka to leverage the power of functional programming. For more on this, read this <a href="http://msdn.microsoft.com/en-us/magazine/cc507636.aspx">MSDN article</a> by <a href="http://msdn.microsoft.com/en-us/magazine/cc301175.aspx">Joel Pobar (former CLR Team)</a> or read the next set of posts (part 2 onward) as I will go into the depths of this.</p>
<table style="text-align:left;height:153px;" border="1" cellspacing="0" cellpadding="2" width="399">
<tbody>
<tr>
<td width="543" valign="top">
<p align="center">I think of Lambadas as an incredibly focused and powerful domain specific language for delegates.</p>
<p>In this sense they are quite similar to Regular Expressions in that they are really good at their focus area.</p>
<p align="center">What do I mean by good?</p>
<ul>
<li>
<div>Terse yet Understandable / Maintainable</div>
</li>
<li>
<div>Syntax tailored to the need, not the other way around.</div>
</li>
<li>
<div>Highly effective for problems that are orders of magnitude more difficult without them (a simple 10% improvement would not cut it)</div>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h2 style="text-align:left;">Painless Intro</h2>
<p style="text-align:left;">I&#8217;ll start with a fairly trivial, yet important example (I use it every day). Many times when comparing Strings I want to ignore case and culture (the InvariantCulture). This is provided by an overload as such as you likely know:</p>
<p>[Test,Category("BaselineCore")]<br />
public void shouldAsserStringCloneInvokeEqual() {</p>
<p>var baselineString = &#8220;This is a TEST CASE to IgnOrE Casing&#8221;;</p>
<p>var stringUpper = baselineString.ToUpperInvariant();</p>
<p>Assert.IsTrue(baselineString.Equals(stringUpper,<br />
StringComparison.InvariantCultureIgnoreCase));</p>
<p style="text-align:left;">The test results are shown above. Pass. Ok so I really like short, concise code that is understandable at a glance. Also it&#8217;s a pain to always (even with ReSharper) use this (and I have seen people use RegEx for this! RegEx is awesome but overkill for this issue).</p>
<p style="text-align:left;">Refactoring</p>
<ul style="text-align:left;">
<li>Create an extension method on String</li>
<li>Decide on a good name for the method (this is SO important and for most an afterthought!)</li>
</ul>
<p style="text-align:left;">I&#8217;ve settled on calling this new method on String &#8216;EqualsCore&#8217; as that is what we are doing, making the conditions for a match &#8217;simpler&#8217; and seeing &#8216;just the core values&#8217; are the same (anyway it makes sense to me)., I suppose this could be &#8216;EqualsRelaxed&#8217; or whatever..</p>
<p style="text-align:left;">Here is the test case (no code yet):</p>
<p>[Test, Category("BaselineCore")]<br />
public void shouldAsserStringsEqualUsingExtension() {<br />
var baselineString = &#8220;This is a TEST CASE to IgnOrE Casing&#8221;;<br />
Assert.IsTrue(baselineString. EqualsSimple(baselineString.ToUpperInvariant())); }</p>
<p style="text-align:left;">Now we write the code. Here is the container for the extension method:</p>
<p>public static class StringExtensions {</p>
<p>public static bool EqualsSimple(this string sTarget, string compare) {</p>
<p>return sTarget.Equals(compare, StringComparison.InvariantCultureIgnoreCase); }</p>
<p>}</p>
<p style="text-align:left;">Indeed they both pass:</p>
<p style="text-align:left;"><a href="http://dcarr.files.wordpress.com/2008/05/image25.png"><img class="alignright" style="float:right;border-width:0;" src="http://dcarr.files.wordpress.com/2008/05/image25-thumb.png?w=455&#038;h=255" alt="image25" width="455" height="255" align="left" /></a></p>
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">Since every type inherits from Object, and Equals is defined on Object, all instances should support this approach, and I could be early bound by using Generics&#8230;. Hmm&#8230;</p>
<p style="text-align:left;">I tried this (note: I gave it a new new &#8216;EqualsThis&#8217; to separate them.</p>
<p>public static bool EqualsThis&lt;TTarget&gt;(this TTarget sTarget, TTarget compare){</p>
<p>return sTarget.Equals(compare);</p>
<p>}</p>
<p style="text-align:left;">Functionally not that interesting at all, but a test. So I typed in the following and wow&#8230; It works from Intellisense&#8217;s view&#8230; Ok it compiled! Wait&#8230;..FAIL! But why:?</p>
<p style="text-align:left;">OK here is the new test:</p>
<p>[Test, Category("BaselineCore")]</p>
<p>public void shouldAsserANYTHINGEqualUsingExtension() {</p>
<p>const String baselineString =&#8221;This is a TEST CASE to IgnOrE Casing&#8221;;</p>
<p>var sb = new StringBuilder(baselineString);</p>
<p>Assert.IsTrue(sb.EqualsThis(new StringBuilder(sb.ToString())));</p>
<p>}</p>
<p style="text-align:left;">
<p style="text-align:left;">Interesting&#8230;</p>
<p style="text-align:left;">Here is the documentation for what Equals means by default from Microsoft:</p>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="2" width="396">
<tbody>
<tr>
<td width="394" valign="top">
<p align="center">Returns: true if objA is the same instance as objB or if both are null references or if objA.Equals(objB) returns true; otherwise, false.</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align:left;">So our code fails using the extension yet this returns true:</p>
<p>[Test] public void shouldAssertStringBuilderExplicit() {</p>
<p>const String baselineString = &#8220;This is a TEST CASE to IgnOrE Casing&#8221;;</p>
<p>var sb = new StringBuilder(baselineString);</p>
<p>var sb2 = new StringBuilder(baselineString); Assert.IsTrue(sb.Equals(sb2));</p>
<p>}</p>
<p style="text-align:left;">So Reflector to the rescue once again. I could see in Reflector what I believed the issue was. Indeed the StringBuilder class has an overloaded Equals, and even making the extension method cast to the generic type directly was a no go.</p>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="2" width="400">
<tbody>
<tr>
<td width="400" valign="top">
<p align="center">So what do you think? Why would this compile fine with absolutely no problems (and that is correct it turns out), but FAIL at runtime on the assertion when the same line above passes? Skip ahead and reply with the answer if you know it&#8230;.</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align:left;">This exposes one of the dangers that we must be incredibly careful with. It has always been poor design in my opinion to encourage developers to override common methods such as ToString() and Equals(object X) with their own behaviors as you force consumers of the API to understand IMPLEMENTATION. You cannot ensure your OK simply from a contract. This is known to be evil&#8230;.</p>
<p style="text-align:left;">Of course this is a legacy style and will be slowly phased out.</p>
<p style="text-align:left;">Spin up reflector and look at the code for the OVERLOAD that StringBuilder has:</p>
<div style="text-align:left;">public bool Equals(StringBuilder sb){if (sb == null) return false;</p>
<p>return (((this.Capacity == sb.Capacity) &amp;&amp; (this.MaxCapacity == sb.MaxCapacity))<br />
&amp;&amp;<br />
this.m_StringValue.Equals((string) sb.m_StringValue));</p>
<p>}</p></div>
<div style="text-align:left;">
<p style="text-align:left;">Of course! How else could a StringBuilder claim to be &#8216;Equal&#8217; to another&#8230; In fact it is perfectly reasonable but again shows the danger of late binding, making assumptions about how any &#8216;object&#8217; type will perform.</p>
</div>
<div style="text-align:left;">
<p style="text-align:left;">So there was no real way for our extension to call the &#8216;correct&#8217; equals. It called the base definition given above which is obvious now why it failed.</p>
<p style="text-align:left;">
<p style="text-align:left;">So how do we fix this for the general case?</p>
<div style="text-align:left;">
<p style="text-align:left;">Here is the test case which I got working.. If your not familiar with this style of code,</p>
</div>
<div style="text-align:left;">This is the foundation we build layer after layer on and illustrates the core of this post.</div>
<p>[Test] public void shouldAsserANYTHINGEqualUsingExtension() {</p>
<p>const String baselineString = &#8220;This is a TEST CASE to IgnOrE Casing&#8221;;</p>
<p>var sb = new StringBuilder(baselineString);</p>
<p>var sb2 = new StringBuilder(baselineString);</p>
<p>Assert.IsTrue(sb.EqualsThis(x =&gt; x.Equals(sb2)));</p>
<p>}</p>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="2" width="438">
<tbody>
<tr>
<td width="436" valign="top">
<p align="center">Lambadas are like an incredibly focused and powerful domain specific language for delegates. In this sense they are quite similar to Regular Expressions in that they are really good (and to quantify good, I mean clear yet precise, not overly verbose yet highly effective for problems that are more difficult without them).</p>
</td>
</tr>
</tbody>
</table>
<div style="text-align:left;">So what about the implementation? Here it is:</div>
<p>public static bool EqualsThis&lt;TTarget&gt;(this TTarget sTarget,</p>
<p>Predicate&lt;TTarget&gt; EqualsDelegate) {</p>
<p>return EqualsDelegate.Invoke(sTarget);</p>
<p>}</p>
<div style="text-align:left;">It&#8217;s all about Expressions! Think of them as varied ways to receive executable code that you can &#8216;invoke&#8217; literally, that must meet the contract you define.</div>
<div style="text-align:left;">This is so basic after we cover what the really useful applications are. However remember this has nothing to do with the examples, only the concepts they represent.</div>
<h1 style="text-align:left;"></h1>
<table style="text-align:left;" border="1" cellspacing="0" cellpadding="2" width="632">
<tbody>
<tr>
<td width="400" valign="top">
<div></div>
<ol>
<li>Combine Generics and Generic Constraints to your Extension Methods but BE CAREFUL and ensure you are covered by unit tests</li>
<li>Try to always think a level of abstraction above where your immediate need is to see if your solution indeed has wider and perhaps far more valuable contribution.</li>
<li>Hide complexity behind your Framework API, and focus on crafting work that others will easily consume.</li>
</ol>
</td>
</tr>
</tbody>
</table>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/188/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/188/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/188/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/188/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/188/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=188&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/05/15/domain-driven-framework-development-c-net-35-extension-methods-lambada-empowerment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/05/image3-thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/05/image25-thumb.png" medium="image">
			<media:title type="html">image25</media:title>
		</media:content>
	</item>
		<item>
		<title>The Collision of Software Project Management and Agile</title>
		<link>http://team.pushbomb.com/2008/05/08/the-collision-of-software-project-management-and-agile/</link>
		<comments>http://team.pushbomb.com/2008/05/08/the-collision-of-software-project-management-and-agile/#comments</comments>
		<pubDate>Thu, 08 May 2008 06:00:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[agile practices]]></category>
		<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Culture]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Statistics]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2007/10/24/the-collision-of-software-project-management-and-agile/</guid>
		<description><![CDATA[“How do we get people to commit to something when everyone has a different perspective based on role or even political leanings for larger companies”“Nobody will commit to a final decision for fear they will not be able to modify it!"<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=91&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p align="left"><a href="http://dcarr.files.wordpress.com/2008/04/chart.png"><img class="alignright size-medium wp-image-165" style="width:149px;height:162px;" height="256" alt="" src="http://dcarr.files.wordpress.com/2008/04/chart.png?w=256&#038;h=256" width="256" /></a><a href="http://dcarr.files.wordpress.com/2008/04/chart.png"></a></p>
<p align="left">&nbsp;<strong>How do we get people to commit to something when everyone has a different perspective based on role or even political leanings for larger companies&rdquo;</strong> <strong>&ldquo;Our stakeholders are petrified to commit to a final stake in the ground for fear they will not be able to modify it based on I.T.&#8217;s inflexibility and inability to change&#8221;</STRONG> </P><br />
<P align="left">&nbsp;</P><br />
<P align="left">I though perhaps these were problems we had overcome in our industry, as the solutions are fairly well understood. I was wrong. What is the bottom line break-down between I.T. and the Business? That is a long and colorful debate. However I offer this: </P><br />
<UL><br />
<LI><br />
<DIV align="left">Most organizations punish those who are bad at PREDICTING THE FUTURE in software engineering. Of course these are smart people but they continue to demand clairvoyance with a lack of statistics.</DIV></LI><br />
<LI><br />
<DIV align="left">What happens? Padding of the schedule and bitter fights for every last month, when nobody has any idea what the effort is, not can they quantify the quality, and more importantly maintainability requirements around a software initiative.</DIV></LI><br />
<LI><br />
<DIV align="left">The fact is you cannot know at a micro level about a project until you are well into building it. This is something I have never met a receptive audience for, however it proves itself time and time again.</DIV></LI><br />
<LI><br />
<DIV align="left">&#8220;How do we give people the freedom to change their minds, yet deliver concrete estimates on time and cost to our managers?&#8221;</DIV></LI><br />
<LI><br />
<DIV align="left">&#8220;How much will this cost us and how can we estimate it knowing we will likely change our minds during the project based on previous projects, and how can we get early and consistent involvement in the development process?&#8221;</DIV></LI><br />
<LI><br />
<DIV align="left">&#8220;How can we ensure that necessary quality is met when we always enter risk mode at the end and quality goes out the window? Can&rsquo;t we manage with quality at every single stage, even every day?!&#8221;</DIV></LI></UL><br />
<P class="msonormal" style="text-align:center;" align="left"><STRONG>Whatever you do (in my opinion anyway) Don&rsquo;t say Agile&hellip;Nobody on the business side cares. In fact for whatever reason, software causes perfectly rational people to loose their mind (I cannot really blame them).</STRONG></P><br />
<P class="msonormal" align="left"><br />
<P class="msonormal" align="left"><br />
<P class="msonormal" align="left"><br />
<P class="msonormal" align="left">What I have to say on the matter is accompanied by deep battle-scars. What I have to say is definitely not what most want to hear, and even the technologists want to argue that they CAN come close to prediction. However what I say has the &lsquo;added moral quality of being true&rsquo;. This is hard to argue in light of the facts. That still often changes nothing, as companies firmly plant their head in the sand again and hope for the best with no real way of knowing what will happen and no practical way of really tracking in real time how their exposure to risk is changing.<br />
<P class="msonormal" align="left"><br />
<P class="msonormal" align="left"><br />
<P class="msonormal" align="left"><br />
<P class="msonormal" align="left">I know&hellip; I know&hellip; Agile is 100% about that but not in the way (typically) this group wants to hear, no that is why a knockout one-two punch is as follows (to be insanely overly simplistic):</P><br />
<P class="msonormal" align="left"><br />
<P class="msonormal" align="left"><br />
<P class="msolistparagraphcxsplast" style="margin-left:0.75in;text-indent:-0.25in;" align="left">1) Heavy Statistical Metrics for the &lsquo;Planning&rsquo; View Inclined</P><br />
<P class="msolistparagraphcxsplast" style="margin-left:0.75in;text-indent:-0.25in;" align="left">2) Of course, Agile Practices to Provide the Inputs to (1) and to Optimize your Chances on the Execution Side</P><br />
<P class="msonormal" style="margin-left:0.25in;" align="left"><br />
<P class="msonormal" align="left">This article is about some detail around (1) that far too many miss in my opinion and why it doesn&rsquo;t serve you to mix the terminology of these two groups (one of the only occurrences where I recommend that as I am typically the one pushing everyone into &lsquo;one common Domain Driven language&rsquo;)</P><br />
<P class="msonormal" style="margin-left:0.25in;" align="left"><br />
<H2 align="left"><STRONG>The Four Critical Dimensions</STRONG></H2><br />
<P align="left"><A href="http://dcarr.files.wordpress.com/2008/05/drivers.png"><IMG class="aligncenter size-medium wp-image-185" height="231" alt="" src="http://dcarr.files.wordpress.com/2008/05/drivers.png?w=300&#038;h=231" width="300"></A> </P><br />
<P class="MsoNormal" align="left">When addressing the concerns of a new custom software project these are the four key elements that must always be addressed (there are others such as security, scalability, etc. but those are included in &lsquo;Scope&#8217; as functional and non-functional requirements):</P><br />
<UL><br />
<LI class="MsoNormal"><br />
<DIV align="left">Time (cannot be made)</DIV></LI><br />
<LI class="MsoNormal"><br />
<DIV align="left">Scope/Features (you cannot know it until your done, so now what?</DIV></LI><br />
<LI class="MsoNormal"><br />
<DIV align="left">Quality (not typically discussed, as who wants &lsquo;bad or sort of low&rsquo; quality)</DIV></LI><br />
<LI class="MsoNormal"><br />
<DIV align="left">Cost (Since you have almost nothing to go on here, what to do? Your agile consultant says the system is &lsquo;done when it is done, not when some arbitrary date is set&rsquo; and he is 100% correct. However the business gets to decide when it is &lsquo;done enough&rsquo; not I.T. (with exceptions of course)</DIV></LI></UL><br />
<P class="MsoNormal" align="left">As Quality is not usually debated (I have never had a client say that the software could be poor quality), that leaves Time, Scope and Cost as the main moving parts to work with.</P><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" style="margin-top:15pt;" align="left">The diagram above is where many stop. That is missing the entire point, as the DRIVERS that facilitate your ability to do well are missing. For example:</P><br />
<P class="MsoNormal" style="margin-top:15pt;" align="left"><STRONG>1) A lack of a continuous integration environment with regression tests will severely hurt your ability to achieve quality (all things being equal)</STRONG></P><br />
<P class="MsoNormal" style="margin-top:15pt;" align="left"><STRONG>2) A bad process / culture kills just about all of it</STRONG></P><br />
<P class="MsoNormal" style="margin-top:15pt;" align="left"><STRONG>3) Bad team morale is the same coin, different side.</STRONG></P><br />
<P class="MsoNormal" style="margin-top:15pt;" align="left"><STRONG>4) A process that cannot manage the inevitable change in scope as we &#8216;discover&#8217; what the project is all about, will kill just about all of it.</STRONG></P><br />
<P class="MsoNormal" style="margin-top:15pt;" align="left"><STRONG>5) A team lacking in solid design skills (design for change) such as a mastery of the important design patterns (Strategy Pattern Anyone?) as well as a lack of a Dependency Injection Container (there is just no good reason not to use one)</STRONG></P><br />
<P class="MsoNormal" style="margin-top:15pt;" align="left"><STRONG>6) Lack of an Object to Relational Mapping Abstraction Layer. Deal Breaker as of today (perhaps not a year ago).</STRONG></P><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left">There is no real doubt by anyone (except for a few people who also are not so sure on the whole evolution thing) that Agile practices provide the common sense way to address the same concerns most of us have around software.</P><br />
<P class="MsoNormal" style="margin-left:0.25in;" align="left"><br />
<P class="MsoNormal" style="margin-left:0.25in;" align="left"><br />
<P class="MsoNormal" style="margin-left:0.25in;" align="left">You know it, I know it, we all know it. However they don&rsquo;t care (and really have likely heard some bad things about it).</P><br />
<P class="MsoNormal" style="margin-left:0.25in;" align="left"><br />
<P class="MsoNormal" style="margin-left:0.25in;" align="left">My assumption is you are a person on the software side in a managerial capacity of some sort. I made this mistake for you many times. Resist the urge to &lsquo;set them straight&rsquo; or to explain the wonders of Agile when asked these questions (or even when not) and instead&hellip; I&rsquo;ll be getting to that&hellip;.</P><br />
<P class="MsoNormal" style="margin-left:0.25in;" align="left"><br />
<P class="MsoNormal" style="margin-left:0.25in;" align="left"><br />
<P class="MsoNormal" align="left">Anyway, they would probably just think &lsquo;how 2004&rsquo; and ask about SOA or something&hellip;.</P><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left">There are some real deal-breaker assumptions around project planning with or without Agile execution (and without agile is very well might be an execution.. OK enough biased injection for one article).</P><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left">There is often an unspoken (and unrecognized) characteristic that you should be able to &lsquo;tell the future&rsquo;. And many will think that the worse you are at it, the more likely it is you just might be lazy and/or stupid. I&rsquo;ve seen it over and over and over. Those who spin, those who pad, those who create fluff to buy time win. Those who really try and don&rsquo;t play games get nailed to the wall.</P><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left">Count me in the &lsquo;dumb and lazy&rsquo; group because I am terrible at predicting the future.</P><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left">In high school I was certain this really cute cheerleader would accept my invitation to the prom. I was also certain a few years ago that a system could be built for W dollars, in X months with Y people and Z quality. After all, that is all I could get from the customer as they were taking no input from vendors. Sure it was aggressive but we were so smart! We could do anything!</P><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left">Both had similar endings.</P><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext;border-top:windowtext;border-left:windowtext;border-bottom:windowtext;padding:0;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext;border-top:windowtext;border-left:windowtext;border-bottom:windowtext;text-align:center;padding:0;" align="left">&ldquo;In order to succeed in complex software planning, just like in Agile, you have to give up. You have to completely accept the fact that you cannot possible know what you are really doing until you are already well into a solution, at least not at any detailed level&rdquo;</P><br />
<P class="MsoNormal" style="border-right:windowtext;border-top:windowtext;border-left:windowtext;border-bottom:windowtext;text-align:center;padding:0;" align="left">&nbsp;</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Sound familiar? But you know you need these Agile ideas on the &lsquo;other side&rsquo; and you also know it would be self-defeating to wave that flag..</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Nobody wants to admit they lack power, especially in areas they have devoted their life to mastering. But why does this not only empower you, but create the bedrock of extreme competence and success? Is this like the alcoholic finally admitting he is powerless over the bottle? Only then can things get better? I doubt it. This is only software.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.25in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoListParagraphCxSpMiddle" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&middot;</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;text-align:center;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;text-align:center;padding:1pt 4pt;" align="left"><br />
<H1 style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">The Monetary Stakeholders</H1><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">And for they people either funding and/or profiting from this exercise the concerns can be quite different.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&#8220;How can we ensure profitability on our work when we know change will occur? (For internal IT they may be managed and accountable for profitability if they are run like a profit center). If not profitability then &#8220;How can we possibly commit to a date and cost when we know this will be a moving target as we evolve the solution?&#8221;</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&#8220;We have an abysmal record of missed deadlines, cost over-runs, quality problems and our users not being happy with our delivered systems. What can we do to improve this?&#8221;</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&#8220;How do we manage the scope changes and &lsquo;feature creep&#8217; placed on us by the business people/stakeholders? This is what typically destroys our profits and/or time commitments and cost commitments, often resulting is a severe quality issues as well. How can we give people what they want but manage this change?&#8221;</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">This article is about bring these two groups together and keeping them just apart enough. This article is targeted to the people who must deliver software to their clients (be it internal IT or an outside Agile consulting firm doing the work). I assume these concepts would work in a non-Agile Process environment but I have cannot remember much luck (or for anyone I knew) in those days without resorting to what I call &lsquo;white tricks&rsquo; so I will not comment.</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">A Framework for Project Statistical Success Optimization</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">We know that these two very distinct groups will need to work closely together in an Agile environment if we want to optimize our chances. The days of separating the business experts from IT is long gone. In fact, for an Agile project to succeed it is typical to actually have a business domain expert on the development team as a fully fledged member.</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&lsquo;High Ceremony&#8217; software processes may work (it is really dependent on who is doing the work as an amazing team will almost always succeed &ndash; see Peopleware by DeMarco and Lister) but at a large opportunity cost in almost all cases.</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Any assigned domain expert should have the reach to get answers to questions quickly outside their domain knowledge when required. For a non-trivial project it will likely cover many domains and it may not be possible for that individual to have a mastery of all of them, however this person should be able to expeditiously get answers from others when required, This is a critical success factor to any Agile project.</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">I have evolved over many years this approach to software profitability and risk management in a very well tested and disciplined way. It has evolved since 1998 when I was CTO of a niche financial services software firm, which was sold in 2004. I then started the firm agilefactor and significantly evolved these ideas further as I still do literally almost every day! It&rsquo;s 2007 and there are many war wounds.</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">If any of this content seems like &#8216;academia&#8217; or &#8216;theory&#8217; I can assure you these are all proven real-world strategies, having been applied by myself and many others for years and years.</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">At the most basic, one could say everything eventually comes down these four critical dimensions&#8230;</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">It is CRITICAL you never let a client box you in on all of the three of these items if it can be avoided or you may have to &#8216;walk away&#8217; from a project (many in internal IT do not have that luxury but at least this article will show you how to push back in a way that is hard to be disputed by the forces trying to box you in to possible assured failure).</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Your client gets to drive only two of the three items at most (such as Time and Cost), while you driven the third (Scope in this example) or the remaining items you control (you must always have at least one that the client explicitly gives you control over).</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">This is critical to profitable software sales both for commercial and custom one-off development but many fail in this area in their eagerness to close deals (this is especially a problem with salespeople who are not put in check on what they can promise the client, and will promise you right into a massive loss &#8211; a lesson I learned firsthand early in my career).</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">For example, if a client says:</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msolistparagraph" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&middot; We are allowing vendors to work until October 1st to achieve these 120 individual scope items in the attached 600 page scope document we have assembled (the first major sign of trouble).</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msolistparagraph" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&middot; Vendors have $1,900,000 to build this system. This is non-negotiable and the software must be extreme production quality, with severe contractual penalties for down-time, with scaling up to 10000 concurrent sessions per machine with an average response time of one second or less &#8220;</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Do we walk away? My initial reaction is absolutely..</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">This violates the principle described above as you are not in control of any of the four critical elements. The answer is sometime you must walk away!</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">I will describe here a way to help determine if you should and how you can effectively push back on this, as we know there will be significant deltas on that scope document (both academically from studies and practically from our experience).</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">We really have no idea if we should accept these terms. There are ways however where we can at least assess the risk and possible accept the terms when we learn these tools.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">We all know it is an agile imperative deliver a working build to your stakeholders for each iteration that is &lsquo;real production&rsquo; although a subset most of the time</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">The client drives at most two dimensions, and you must drive the third (again ignoring the Quality variable) or you risk a disaster for everyone.</P><br />
<DIV style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Any changes to a &#8216;fixed price&#8217; must be done with an incredibly rigorous &#8216;change order&#8217; process where all changes from the plan are scoped, priced and the impact is presented to the customer so they can decide if it is worth it. Even then these &lsquo;mini projects&rsquo; must be managed with the same techniques as if they were anything else. In fact they are no different, and we always assume there will be lots of them (unless we offer a lower risk/higher reward scenario). I often would meet with the client described above and say &lsquo;OK we can do this but it will cost $50,000 and delay us two weeks. How would you like to proceed? Reactions vary but if you didn&rsquo;t educate the customer on these matters, if it is negative you have nobody to blame but yourself. You knew this was coming. </DIV><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">And after all, THEY are deviating from &lsquo;the plan&rsquo; they committed to with confident assurances that there would be little to no need for &lsquo;change orders&rsquo; (this is a common occurrence in my experience with a correlation to the larger the company the most convinced they are the scope will not change.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Establish Risk Tolerance Before Defining the Time, Scope and Cost Constraints</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Based on the extensive research and project database built by the industry luminaries and incredibly esteemed experts Tom DeMarco and Tim Lister, we now know what the probability distribution curve is for new custom software projects. It is lognormal with a high peak and a long curve to the right. This is absolutely critical for everyone to understand and I highly recommend you read the book &#8220;Waltzing with Bears&#8221; for a detailed discussion (see the end of this chapter for more information).</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">This is the probability distribution curve we must embrace:</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><A href="http://www.agilefactor.com/img/0465adf5e6bf_cfd/image001.jpg"><IMG style="border-width:0;" height="419" alt="image001" src="http://www.agilefactor.com/img/0465adf5e6bf_cfd/image001_thumb.jpg" width="546" border="0"></A></P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">You establish the client&#8217;s willingness to accept the unavoidable possibility of failure across any of the four dimensions (we cannot predict the future) and then find that point on the curve moving up from the X axis point you have for the client (the X axis is probability of success) and take the area to the left of that point.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">The total area under the curve is 100% so the farthest right point would indicate 100% confidence (again basically impossible to achieve where most organizations assume 100% by default, something that must change if our industry will ever &lsquo;grow up&rsquo;. As we cannot control the future, we can only manage it and the risks, we must know how &#8216;risky&#8217; the client wants to be (again by asking them or inferring it ourselves &#8211; often manifested in a &#8216;public&#8217; date and an &#8216;internal&#8217; date which is past the public date if we know the client will not cancel the project or penalize us tangibly for missing the public date).</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">It is a typical &#8216;risk/reward&#8217; situation. If the customer takes on more risk we might save them money, or deliver early. If they want less risk, we must significantly increase our cumulative resources attached to a project with the knowledge that &#8216;adding people to a late project makes it later&#8217;. This we know as fact so adding people is really only an option in the early phases. This has a large impact on early project planning.</P><br />
<P class="MsoListParagraphCxSpFirst" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&middot; We need to understand if a customer is OK assuming a 15% risk of failure for example.</P><br />
<P class="MsoListParagraphCxSpMiddle" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&middot; After all, don&rsquo;t all future events have unknown outcomes?</P><br />
<P class="MsoListParagraphCxSpLast" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&middot; Is the client willing to as much as double their budget for a say 10% increase to 95% probability of future success across all dimensions?</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">A 95% success promise is not only near reckless to offer, it is an incredible shifting of risk anyone should demand a rich reward for taking on.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Studies are behind me on this as well with the well established fact that the best developers are as much as 28 x more productive then the worst). It quite literally is often a 100% increase in total resources allocated for a project to move from 85% to 95% even though it is a 10% gain in probability, hence the very long tail. The highest I have ever had a client go is 90% and we actually had two teams in two locations for redundancy (they didn&rsquo;t know about each other). One team almost failed but delivered a solution, however the other team&rsquo;s solution was superior so that is what we went with. This gave us our high probability due to the redundancy and the client paid dearly for this safety.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">For example, the development team may say:</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&#8220;We had a terrible two weeks. Our lead Cryptography expert was sick so we moved those features into the next iteration and we severely underestimated the complexity of the mainframe integration and User Profile Customization.</p>
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">
<p class="msonormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Therefore we could only achieve 50% of what we had planned for this iteration. I would say from our agreed upon 85% confidence we are now closer to 75%. We can see if we make it up in the next iteration or we can take measures A, B and C to get back to 85%. What do you want to do?&#8221;</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;text-align:center;padding:1pt 4pt;" align="left">A better question I have for you is, would you rather not know this? Almost all organizations are nowhere near this level of integrated risk assessment, quantitative measurement and adjusting action execution.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">This is typically a decision for a high level individual (typically the project manager with the optional input of the customer) and hopefully with input from as many people as possible covering all dimensions.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Adding people will typically hurt you, not help you. You should already have done the obvious things like have moved the team into a &lsquo;war room&rsquo; setting (almost always a sure way to improve productivity) or many other solutions, so if you missed any do it now as these techniques are proven and it is much more painful to fail.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">As for the client, they can also be blissfully unaware of how we manage the process of our internal development, but this well established process makes it incredibly hard to fail.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Here is an example with risk tolerance. Based on negotiations with the client they have agreed to a risk tolerance of 85% (a 15% risk of failure). Based on this, you can now estimate knowing your margin for error. The customer has scope requirements, and cost requirements but is fairly open to time.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">You come back to the client and say:</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&#8220;Based on an 85% confidence we feel we can deliver your scope at the cost you describe at some point between April 1 2006 and July 1 2006&rsquo;&#8221;. The client may protest, saying (for the first time) they were hoping for a March 1 delivery. You confer with your colleagues and respond that this would be possible at a 70% Confidence (30% chance of failure). And so the negotiations follow&#8230;But at least now you have very concrete &#8216;dials to turn&#8217; and it is hard for the customer to argue with the fact base supporting you.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">I assert that custom software is a &#8216;wicked problem&#8217; (to see a great definition of &#8216;wicked problem&#8217; see http://www.cognexus.org/id42.htm or the text at the end of this article.</P><br />
<H1 style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Conclusion</H1><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">To help ensure a positive outcome for your client and for your development effort it is critical to consider first the Risk Tolerance of your client, and then negotiate the one dimension you typically have control over after the client informs you of the two (two from Time, Scope and Cost). In some cases you must walk away and this article should help you determine when that is the case.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">For a much more detailed discussion of these topics and what this author considers critical:</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">&#8220;Waltzing with Bears&#8221;, Dorset House Publishing Company, Incorporated (March, 2003), ISBN: 0932633609</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Supplemental Material: Wicked Problems</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left"><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">A wicked problem is one for which each attempt to create a solution changes the understanding of the problem. Wicked problems cannot be solved in a traditional linear fashion, because the problem definition evolves as new possible solutions are considered and/or implemented. The term was originally coined by Horst Rittel.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Wicked problems always occur in a social context &#8212; the wickedness of the problem reflects the diversity among the stakeholders in the problem.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Most projects in organizations &#8212; and virtually all technology-related projects these days &#8212; are about wicked problems. Indeed, it is the social complexity of these problems, not their technical complexity, that overwhelms most current problem solving and project management approaches. (See graphic of wicked problem solving process below.)</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-top:15pt;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">Some specific aspects of problem wickedness include:</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">1. You don&#8217;t understand the problem until you have developed a solution. Indeed, there is no definitive statement of &#8220;The Problem.&#8221; The problem is ill-structured, an evolving set of interlocking issues and constraints.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">2. Wicked problems have no stopping rule. Since there is no definitive &#8220;The Problem&#8221;, there is also no definitive &#8220;The Solution.&#8221; The problem solving process ends when you run out of resources.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">3. Solutions to wicked problems are not right or wrong, simply &#8220;better,&#8221; &#8220;worse,&#8221; &#8220;good enough,&#8221; or &#8220;not good enough.&#8221;</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">4. Every wicked problem is essentially unique and novel. There are so many factors and conditions, all embedded in a dynamic social context, that no two wicked problems are alike, and the solutions to them will always be custom designed and fitted.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">5. Every solution to a wicked problem is a &#8220;one-shot operation,&#8221; every attempt has consequences. As Rittel says, &#8220;One cannot build a freeway to see how it works.&#8221; This is the &#8220;Catch 22&#8243; about wicked problems: you can&#8217;t learn about the problem without trying solutions, but every solution you try is expensive and has lasting unintended consequences which are likely to spawn new wicked problems.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;margin-left:0.5in;border-left:windowtext 1pt solid;text-indent:-0.25in;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">6. Wicked problems have no given alternative solutions. There may be no solutions, or there may be a host of potential solutions that are devised, and another host that are never even thought of.</P><br />
<P class="MsoNormal" style="border-right:windowtext 1pt solid;border-top:windowtext 1pt solid;border-left:windowtext 1pt solid;border-bottom:windowtext 1pt solid;padding:1pt 4pt;" align="left">(from Rittel and Webber, 1973)</P></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/91/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/91/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/91/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=91&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/05/08/the-collision-of-software-project-management-and-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/04/chart.png?w=256" medium="image" />
	</item>
		<item>
		<title>Framework Usage Patterns &#8211; Next Generation Software Engineering</title>
		<link>http://team.pushbomb.com/2008/04/14/framework-usage-patterns-next-generation-software-engineering/</link>
		<comments>http://team.pushbomb.com/2008/04/14/framework-usage-patterns-next-generation-software-engineering/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 02:52:01 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[resharper]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[JetBrains]]></category>
		<category><![CDATA[Software Innovation]]></category>
		<category><![CDATA[Software Next Generation]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/?p=162</guid>
		<description><![CDATA[Language Oriented Programming or LOP is a novel software development approach which employs domain specific languages. A domain specific language is a language which is designed to deal with one specific kind of tasks within a specific domain. One of the patterns of LOP usage, namely "framework-usages" is discussed. <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=162&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sergeydmitriev.com/mps/doc/article/article.html">http://www.sergeydmitriev.com/mps/doc/article/article.html</a></p>
<p> </p>
<p>This is fantastic stuff coming from one of my all-time favorite companies, JetBrains. Here is a start:</p>
<h1><span style="font-size:small;">Framework-usage pattern in MPS</span></h1>
<p><span style="font-size:xx-small;"><a href="mailto:Cyril.Konopko@jetbrains.com">Cyril Konopko</a>, <a href="mailto:Konstantin.Solomatov@jetbrains.com">Konstantin Solomatov</a> </span></p>
<p> </p>
<p> </p>
<div style="margin-top:50px;margin-left:100px;margin-right:100px;text-align:center;"><strong>Language Oriented Programming or LOP is a novel software development approach which employs domain specific languages. A domain specific language is a language which is designed to deal with one specific kind of tasks within a specific domain. One of the patterns of LOP usage, namely &#8220;framework-usages&#8221; is discussed. </strong></div>
<h2><a id="intro">Introduction</a></h2>
<p>Language Oriented Programming or LOP is a software development approach which employs domain specific languages, or DSLs for short. A domain specific language, in contrast to general purpose languages, is a language which is designed to deal with one specific kind of tasks or with several related task kinds within a specific domain. For example, SQL is a DSL in a domain of database queries. LOP solves your main problem by dividing it into several subproblems in different domains, then each subproblem is solved using an appropriate DSL. In rather big projects, LOP can reduce singificantly the amount of work which has to be done.</p>
<p>In this article we will speak about JetBrains MPS, being developed by JetBrains, Inc., which is a so-called &#8220;language workbench&#8221;, i.e. a tool that helps you to use LOP in practice. You can read more about language workbenches on <a href="http://www.martinfowler.com/articles/languageWorkbench.htm">Martin Fowler&#8217;s site</a> and about LOP in <a href="http://www.onboard.jetbrains.com/is1/articles/04/10/lop/">Sergey Dmitriev&#8217;s article</a>.</p>
<p>A lot of people who heard about MPS don&#8217;t realize how it&#8217;s possible to take advantage of it. The current state of MPS is far from the point where you can throw away your Java or C# IDE and start writing everything in MPS with LOP, however it&#8217;s possible to use LOP and simplify some tasks significantly today. Actually, you probably use in your current project some kind of poor man&#8217;s LOP, techniques which make it possible to create small sublanguages in the program written on a language like Java, C#, or Ruby (Martin Fowler called such sublanguages Internal DSLs). This article explains the pattern that can employ MPS in its current state, describes prevalent poor man&#8217;s LOP tricks and presents several examples of it.</p>
<h2>&#8230;.</h2>
<p> </p>
<p>Seriously, check this out. Download the EAP, start using&#8230;..</p>
<p> </p>
<p>Thanks,</p>
<p>Damon</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/162/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/162/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/162/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/162/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/162/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=162&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/04/14/framework-usage-patterns-next-generation-software-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>
	</item>
		<item>
		<title>Fix for EnvDTE Bug in Versioning &#8211; Visual Studio Extensibility Common Issue Fix</title>
		<link>http://team.pushbomb.com/2007/12/22/visual-studio-automation-and-extensibility/</link>
		<comments>http://team.pushbomb.com/2007/12/22/visual-studio-automation-and-extensibility/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 20:57:09 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[resharper]]></category>
		<category><![CDATA[EnvDTE]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[VSLangProj]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2007/12/22/here-is-a-good-gotcha-that-some-have-not-found-yet/</guid>
		<description><![CDATA[If you create a project that references one or more of the VSLangProj assemblies and the EnvDTE assembly, you can occasionally get the following error at runtime:“Unhandled Exception: System.IO.FileNotFoundException: Error while loading file ‘EnvDTE, Version=7.0.3300.0″This error is due to a runtime type resolution conflict. That is, the version of EnvDTE that is included with Visual Studio 2005 is 8.0.xx, but the project’s configuration reference is looking for an earlier version of this assembly, version 7.0.xx. To fix this problem, you must add a binding redirect for the newer version of EnvDTE to your project’s configuration (.config) file. This will enable Visual Studio to load the newer version of EnvDTE and prevent the error from occurring.To do this, add an “Application Configuration File” to your project and then replace its contents with the following:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=108&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class="snap_preview">
<p align="left">This is known by many who have been doing VSX for a while, but I ran into it again recently and thought since many are no getting into this fresh, more sources are good.</p>
<p align="left"> </p>
<div class="majorTitle">
<h2>Visual Studio Automation and Extensibility</h2>
</div>
</div>
<div class="title">
<h4><a href="http://msdn2.microsoft.com/en-us/library/ms228768.aspx">Error When EnvDTE Is Used with VSLangProj Assemblies</a></h4>
</div>
<div class="introduction">If you create a project that references one or more of the VSLangProj assemblies and the EnvDTE assembly, you can occasionally get the following error at <a href="http://www.answers.com/topic/runtime?nafid=22">runtime</a>:</div>
<blockquote>
<div class="introduction"><strong>“Unhandled Exception: System.IO.FileNotFoundException: Error while loading file ‘EnvDTE, Version=7.0.3300.0″</strong></div>
</blockquote>
<div class="introduction">This error is due to a runtime type resolution conflict. That is, the version of EnvDTE that is included with Visual Studio 2005 is 8.0.xx, but the project’s <a href="http://www.answers.com/topic/configuration?nafid=22">configuration</a> reference is looking for an earlier version of this assembly, version 7.0.xx.</div>
<div class="introduction">To fix this problem, you must add a binding redirect for the newer version of EnvDTE to your project’s configuration (.config) file. This will enable Visual Studio to load the newer version of EnvDTE and prevent the error from occurring.To do this, add an “Application Configuration File” to your project and then replace its contents with the following:This error occurs only if you are building an <a href="http://www.answers.com/topic/extendicare-inc?nafid=22">EXE</a>, since <a href="http://www.answers.com/topic/data-link-layer?nafid=22">DLL</a>’s do not have config files.</div>
<p> </p>
<pre>&lt;configuration&gt;</pre>
<pre>&lt;runtime&gt;</pre>
<pre>&lt;assemblyBinding xmlns="urn:schemas-microsoft- com:asm.v1"</pre>
<pre>appliesTo="v2.0.50318"&gt;</pre>
<pre>&lt;dependentAssembly&gt;</pre>
<pre>&lt;assemblyIdentity name="EnvDTE" publicKeyToken= "b03f5f7f11d50a3a"/&gt;</pre>
<pre>&lt;bindingRedirect oldVersion="7.0.3300.0" newVersion="8.0.0.0"/&gt;</pre>
<pre>&lt;/dependentAssembly&gt;</pre>
<pre>&lt;/assemblyBinding&gt;</pre>
<pre>&lt;/runtime&gt;</pre>
<pre>&lt;/configuration&gt;</pre>
<p> </p>
<p align="center"><a href="http://dcarr.files.wordpress.com/2007/12/techsmithword0a1.png"></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/108/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/108/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/108/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=108&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2007/12/22/visual-studio-automation-and-extensibility/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>
	</item>
		<item>
		<title>NHibernate Custom Collections Supporting Lazy Loading with IPersistentCollection &amp; DomainPersistentGenericBag</title>
		<link>http://team.pushbomb.com/2007/11/07/nhibernate-custom-collections/</link>
		<comments>http://team.pushbomb.com/2007/11/07/nhibernate-custom-collections/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 05:44:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[resharper]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[agile practices]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[Collections]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2007/07/23/nhibernate-custom-collections-supporting-lazy-loading-with-ipersistentcollection-domainpersistentgenericbag/</guid>
		<description><![CDATA[In NHibernate, to write a custom persistable collection you must inherit from PersistentGenericBag which has no empty constructors (therefore you cannot use this to inherit on your main collection (!) as you MUST have an empty constructor for NHibernate to use it). FUN!
When you inherit from the concrete List as well as IUserCollectionType and (after finally getting it to work perhaps) wonder why they get casting exceptions when using a lazy loaded collection (the default now with 1.2.0) it is more then a pain....<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=83&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><span style="color:#ff0000;"><strong>NOTE: This is now being updated to cover NHibernate 2.0.0.X so please check back if interested in new approaches to this. The previous solution posted is now outdated and I do not recommend using it.</strong></span></p>
<p style="text-align:center;"><strong></strong></p>
<p style="text-align:center;">I will soon be posting a new article which (in my opinion) could be far more useful to every<a href="http://dcarr.files.wordpress.com/2008/04/chart.png"><img class="alignright size-medium wp-image-165" style="float:right;border-width:0;margin:5px;" src="http://dcarr.files.wordpress.com/2008/04/chart.png?w=256" alt="" height="212" /></a>one then this article ever was as it:</p>
<ul>
<li>Has far greater scope and use as Is a &#8216;domain collection&#8217; engine and I believe the first solution to something I have been struggling with for years: The pain of building clean, quick web views in the world of Ajax, controls that expect datasets, and programmers not understanding ORM. It so far works with <a href="http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx">NHIbernate </a>(and <a href="http://using.castleproject.org/display/AR/An+introduction">ActiveRecord</a>) and I am finalizing Linq to Entity support</li>
<li>Leverages advanced .NET intrinsic&#8217;s (CustomTypeDescriptors, etc&#8230;) that are leveraged by the third-part component community</li>
<li>
<p style="text-align:left;">Support any &#8216;domain projection/entity set&#8217; operation &#8211; the same engine backs both bindable sets and non-bindable sets.. You just pass the HQL into the user control in VS 2005/2008</p>
</li>
</ul>
<p style="text-align:center;">
<p><span id="more-83"></span><strong></strong>Also stop by the new global repository I am bringing up with some others around &#8216;best practices&#8217; for domain driven (obsessed) work. This has a .NET 3.5 focus (as we will deeply discuss linq I am planning) however it is an architects site, so we will cover mono, java, and likely 50% of the content will be platform agnostic.More to come!</p>
<div style="text-align:center;"><span style="color:#666699;"></p>
<div style="text-align:center;"><strong></strong></div>
<p></span></div>
<p style="text-align:center;">
<div><span style="color:#666699;"></p>
<div style="text-align:center;"><strong><span style="color:#0000ff;">UPDATE: Billy McCafferty has done a fantastic job picking up where I barely get started.</span></strong></div>
<p><strong></strong></p>
<p></span></p>
<div><span style="color:#666699;"><strong><span style="color:#0000ff;"></p>
<div style="text-align:center;"><a href="http://devlicio.us/blogs/billy_mccafferty/archive/2007/12/03/custom-collections-with-nhibernate-part-i-the-basics.aspx">Go here for the must read posts.</a></div>
<div style="text-align:center;"> </div>
<div style="text-align:center;"> </div>
<p><font color="#666699"><strong><font color="#0000ff"> </p>
<p></font></strong></font></span> </p>
<p></strong></span><strong></strong></p>
</div>
</div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/83/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/83/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=83&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2007/11/07/nhibernate-custom-collections/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/04/chart.png?w=256" medium="image" />
	</item>
		<item>
		<title>Software as a Service and Service Oriented Architecture &#8211; Why they fail to meet the hype in execution</title>
		<link>http://team.pushbomb.com/2007/10/01/software-as-a-service-its-all-about-the-words/</link>
		<comments>http://team.pushbomb.com/2007/10/01/software-as-a-service-its-all-about-the-words/#comments</comments>
		<pubDate>Mon, 01 Oct 2007 02:30:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Proof Driven Development]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[agile practices]]></category>
		<category><![CDATA[.NET Web Services]]></category>
		<category><![CDATA[Communication Foundation]]></category>
		<category><![CDATA[Domain Model]]></category>
		<category><![CDATA[Entity Model]]></category>
		<category><![CDATA[Evolution of Software]]></category>
		<category><![CDATA[Philosophy]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Semantics]]></category>
		<category><![CDATA[Service Oriented Architecture]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Softwre as a Service]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2007/10/01/software-as-a-service-its-all-about-the-words/</guid>
		<description><![CDATA[The hype factor has done it again. We are all left starting at each other for just what in the world we all mean by SOA. ENOUGH! It's not that hard, and consultants, (myself being one so I will not be overly critical), vendors, the media, etc. have DESTROYED yet again any meaning in language. N-Tier, Message Bus, etc. etc. it goes back 20 years! The pattern never ends..<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=90&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>The hype factor has done it again. We are all left starting at each other for just what in the world we all mean by SOA. ENOUGH! It&#8217;s not that hard, and consultants, (myself being one so I will not be overly critical), vendors, the media, etc. have DESTROYED yet again any meaning in language. N-Tier, Message Bus, etc. etc. it goes back 20 years! The pattern never ends..</p>
<p>Not to be a terrible bore, but brush up on your <a href="http://en.wikipedia.org/wiki/Ludwig_Wittgenstein">Wittgenstein</a> lately?! Ok don&#8217;t go that far just yet&#8230;(grin).</p>
<p> First, a <a href="http://en.wikipedia.org/wiki/Pattern_language">Pattern Language</a> (P.L.) is not some academic concept, although many would like you to believe that.</p>
<p> </p>
<div>
<table border="0" cellspacing="0" cellpadding="2" width="262" align="right">
<tbody>
<tr>
<td width="77" align="right" valign="top"><a title="pdf-icon" href="http://www.flickr.com/photos/93223205@N00/1468114276/"><img src="http://static.flickr.com/1150/1468114276_f1d15541e6.jpg" border="0" alt="pdf-icon" width="31" height="31" /></a></td>
<td width="183" align="right" valign="top"><a href="http://www.agilefactor.com/SaasPatternLanguage.pdf">&#8216;Software as a Service &#8211; The Pattern Language Approach&#8217;</a></td>
</tr>
<tr>
<td width="77" align="right" valign="top"><a title="ie-icon" href="http://www.flickr.com/photos/93223205@N00/1468122752/"><img src="http://static.flickr.com/1196/1468122752_7267762646.jpg" border="0" alt="ie-icon" width="31" height="32" /></a></td>
<td width="183" align="right" valign="top"><a href="http://www.agilefactor.com/SaasPatternLanguage_files/fullscreen.htm#slide0001.htm">&#8216;Software as a Service &#8211; The Pattern Language Approach&#8217;</a></td>
</tr>
<tr>
<td width="77" align="right" valign="top"><a title="icon-set2-firefox" href="http://www.flickr.com/photos/93223205@N00/1468130216/"><img src="http://static.flickr.com/1259/1468130216_a701773dab.jpg" border="0" alt="icon-set2-firefox" width="31" height="31" /></a></td>
<td width="183" align="right" valign="top"><a href="http://www.agilefactor.com/SaasPatternLanguage.htm">&#8216;Software as a Service &#8211; The Pattern Language Approach&#8217;</a></td>
</tr>
</tbody>
</table>
</div>
<p><a title="SaaS" href="http://www.flickr.com/photos/93223205@N00/1465323619/"></a></p>
<p>NOTE: I take issue with the word design below&#8230; It should be far more broad in most cases, but it often gets boxed into the design aspect of a problem. I would say &#8216;best practices&#8217; which brings up its own semantic mess&#8230;</p>
<blockquote>
<p style="text-align:left;">A pattern language is a structured method of describing [best] good design practices within a field of expertise. It is characterized by</p>
<ol>
<li>Noticing and naming the common problems [and positively executed solutions proven over time] in a field of interest [domain in my words]</li>
<li>Describing the key characteristics of effective solutions for meeting [one or more] some stated goal[s], [Often patterns are combined and are multi-faceted]</li>
<li>Helping the designer [domain stakeholder] move from problem to problem [and challenge to challenge] in a logical way, [in an attempt to reduce and even eliminate ambiguity] and allowing for many different paths through the design process.</li>
</ol>
<p>- Wikipedia </p></blockquote>
<ol>
<li>This ties in perfectly with my claim that complex software engineering is a &#8216;wicked problem&#8217;. If you disagree then you can stop reading, as none of my assumptions will work. However, I would love to hear your arguments since only around 20-30% of all software projects &#8217;succeed&#8217;&#8230;. There is no doubt there is dreadful crisis which I know you know about so enough said.</li>
</ol>
<p>If the fundamental issue here is NOT that people cannot/will not see software engineering for what it is, then what?!</p>
<p><a href="http://en.wikipedia.org/wiki/Wicked_problems">Wicked Problem</a></p>
<p>FYI: This is also why your pretty much nuts to not be Agile at this point, with some critical exceptions.</p>
<p>OK just to get you started chew on these 10 basic characteristics and tell me how any of them and the failure of senior stakeholders to understand that indeed software fits these characteristics is likely a key systemic disaster which we see and live every day in this industry.<a href="http://damon.agilefactor.com/software-is-a-wicked-problem-2/"> Click here for more.</a></p>
<p> Before I was able to &#8216;take this deck on the road&#8217; which I have done now with success (and why I am revisiting this post to offer insights), I had to get the audience (I hate to call them that&#8230; The collaborators is better) knowing (for example) that SOA was not a damn bunch of web services! I had to get people understanding exactly how distributed objects and components ARE NOT THE SAME but are similar. etc. etc.</p>
<p>That ASMX pages in .NET are not even close to what you want to be doing, even with WSE 3.0 and &#8216;Contract First&#8217; techniques (most notably the WSCF add-in from the always amazing <a href="http://www.thinktecture.com/">thinktecture</a>).</p>
<blockquote><p>There is nothing more necessary than truth, and in comparison with it everything else has only secondary value.<br />
This absolute will to truth: what is it? Is it the will to not allow ourselves to be deceived? Is it the will not to deceive?<br />
One does not want to be deceived, under the supposition that it is injurious, dangerous, or fatal to be deceived.</p>
<p>Friedrich Nietzsche, 1890</p></blockquote>
<p>Thanks Herr Nietzsche&#8230; None of us want that. So &#8220;Listen for the speakers intended meaning, not your perceived definition&#8221;.</p>
<p>In this rather philosophical vein, I offer you here an attempt at the beginnings of a unified P.L. covering many best practices we have evolved in the SOA/SaaS space.</p>
<p>As stated, this presentation is born from necessity as it has become almost impossible to have a meaningful conversation on many topics in this domain due to &#8216;definition overloading&#8217;.</p>
<p>This presentation not only attacks that issue, it also brings together into a cohesive pattern language Object Orientation, Distributed Objects, Components and Services while being careful to not make overly broad generalizations that would harm any SaaS initiative.</p>
<p>For example, it is a best practice to evolve a Domain Driven API which is (at a minimum) the core APU which your services will use to fulfil their contracts.</p>
<p>The presentation is here and feedback is encouraged. This also assumes you have embraced either the SCA environment (for Java development) or WCF for .NET. These are (in our guidance to clients) the only relevant implementation frameworks for strategic large scale organizational transformations to SaaS.</p>
<p>Otherwise in real-world terms there are not resources (developers, or the dramatically increased effort with very little benefit) available to support other approaches. Many &#8216;purists to the extreme&#8217; might attempt a hand-crafted &#8216;build it all over again&#8217; approach with hand-crafted contracts (typically XSDs).</p>
<p>As these environments support full extensibility, indeed it is incredibly rare that one of these environments will not completely address your needs. Of course there are always exceptions, but this is addresses to 95% of the market.</p>
<p>Due to the immaturity of this space, it is alarming how many companies believe they are not part of that 95%!! Typically they are being driven by parties (internal or external) that have motivations not in line with the business drivers.</p>
<p> </p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/90/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/90/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=90&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2007/10/01/software-as-a-service-its-all-about-the-words/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://static.flickr.com/1150/1468114276_f1d15541e6.jpg" medium="image">
			<media:title type="html">pdf-icon</media:title>
		</media:content>

		<media:content url="http://static.flickr.com/1196/1468122752_7267762646.jpg" medium="image">
			<media:title type="html">ie-icon</media:title>
		</media:content>

		<media:content url="http://static.flickr.com/1259/1468130216_a701773dab.jpg" medium="image">
			<media:title type="html">icon-set2-firefox</media:title>
		</media:content>
	</item>
		<item>
		<title>The Modeling PowerToys Visual Studio 2008 Support on CodePlex</title>
		<link>http://team.pushbomb.com/2007/08/27/the-modelingpowertoys-release-on-codeplex/</link>
		<comments>http://team.pushbomb.com/2007/08/27/the-modelingpowertoys-release-on-codeplex/#comments</comments>
		<pubDate>Mon, 27 Aug 2007 23:31:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Domain.Driven.NET]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[Modeling]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[PowerToy]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[VS2005]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2007/08/27/the-modelingpowertoys-release-on-codeplex/</guid>
		<description><![CDATA[Another Update:
we are customizing this for SilverLight
Stay tuned..
UPDATE!
5/14/2008 (it&#8217;s been up for a while however)
This was hard to find for a while but here it is&#8230;..
ModelingPowerToys release on CodePlex
http://www.codeplex.com/modeling
Project Description
This set of add-ins augments existing functionality in the Visual Studio Class Designer and the Distributed Systems Designers. It now supports Visual Studio 2005, Visual Studio [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=85&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Another Update:</p>
<p>we are customizing this for SilverLight</p>
<p>Stay tuned..</p>
<p>UPDATE!</p>
<p>5/14/2008 (it&#8217;s been up for a while however)</p>
<p>This was hard to find for a while but here it is&#8230;..</p>
<p><strong><span style="font-size:130%;">ModelingPowerToys release on CodePlex</span></strong></p>
<p><a href="http://www.codeplex.com/modeling">http://www.codeplex.com/modeling</a></p>
<blockquote><address><strong>Project Description</strong></address>
<p>This set of add-ins augments existing functionality in the Visual Studio Class Designer and the Distributed Systems Designers. It now supports Visual Studio 2005, Visual Studio 2008. The Design Tools Enhancements add-in provides a common set of features that can be used by both the Class Designer and the Distributed System Designers, such as pan/zoom window and rich formatting commands. The Class Designer Enhancements add-in provides additional functionality for the Visual Studio Class Designer, such as HTML export and nested type creation commands. This download includes all necessary source code and a Visual Studio project template for creating your own add-ins for the Visual Studiodesigners. The Class Designer is a developer productivity tool available in Visual Studio Standard Edition and above, which allows developers to easily visualize, design, refactor, and document their code. The Distributed System Designers enable software architects, operations managers, and developers to visually design service-oriented solutions and validate them at design time against their operational environments. The Distributed System Designers are a core component of Visual Studio Team Edition for Software Architects and the Visual Studio Team System.</p></blockquote>
<p>Here is a list of features provided by the add-ins (you can find more detailed description in the documentation installed by the download):</p>
<p>Design Tools Enhancements<br />
- Diagram Search<br />
- Formatting Commands<br />
- Floating Property Grid<br />
- Pan/Zoom Window<br />
- Design Surface Scrolling Improvements<br />
- Create Comments with Double-Click<br />
- Design Surface Grid</p>
<p>Class Designer Enhancements<br />
- Export Diagrams for Web<br />
- Display Xml Comment Command<br />
- Documentation Tool Window<br />
- Filtering Appearance<br />
- Filtering Lines<br />
- Filtering Members<br />
- MSDN Help on System Types<br />
- Fast Navigation<br />
- Interface Lollipop Labels Commands<br />
- Inheritance Visualization Commands<br />
- Show Type Command<br />
- Association and Inheritance Line Dongles<br />
- Create Tests Command<br />
- Type Creation Commands<br />
- Add Member Commands<br />
- Synchronization with Code Definition Window<br />
- View Class Diagram Command Improvements<br />
- Creating Custom Add-ins</p>
<p>It appears code is even available under the project: modeling.</p>
<p>Damon</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/85/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/85/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=85&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2007/08/27/the-modelingpowertoys-release-on-codeplex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>
	</item>
		<item>
		<title>Object/Relational Tools &#8211; NHibernate and Microsoft ADO.NET Entity Framework</title>
		<link>http://team.pushbomb.com/2006/09/09/objectrelational-tools-nhibernate-and-microsoft-adonet-entity-framework/</link>
		<comments>http://team.pushbomb.com/2006/09/09/objectrelational-tools-nhibernate-and-microsoft-adonet-entity-framework/#comments</comments>
		<pubDate>Sat, 09 Sep 2006 20:48:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[Domain.Driven.NET]]></category>
		<category><![CDATA[dsl]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2006/09/09/objectrelational-tools-nhibernate-and-microsoft-adonet-entity-framework/</guid>
		<description><![CDATA[Updated 6/26/2008
Microsoft had executed so well with Linq but to counter that, it&#8217;s now apparent EVEN WITHIN MICROSOFT that what will be shipped in the only &#8216;real ORM&#8217; sense they might offer will fundamentally be a non-starter (at least as the people who care about ORM are concerned).
Even Microsoft key staff agree. I was shocked [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=71&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Updated 6/26/2008</p>
<p><strong>Microsoft had executed so well with Linq but to counter that, it&#8217;s now apparent EVEN WITHIN MICROSOFT that what will be shipped in the only &#8216;real ORM&#8217; sense they might offer will fundamentally be a non-starter (at least as the people who care about ORM are concerned).</strong></p>
<p>Even Microsoft key staff agree. I was shocked to see this:</p>
<p><a href="http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/">ADO .NET Entity Framework Vote of No Confidence</a></p>
<blockquote><p>The signatories of this letter are unanimous in expressing concern for the welfare of software projects undertaken in the Microsoft customer community that will make use of the forthcoming ADO .NET Entity Framework.<br />
Over the past year, Microsoft and the Entity Framework team have received a tremendous amount of feedback from experts in entity-based applications and software architectures on the .NET platform. While Microsoft’s announcement of its intention to provide framework support for entity architectures was received with enthusiasm, the Entity Framework itself has consistently proved to be cause for significant concern.</p></blockquote>
<p>And they are right on the money. There is no point is doing things well from a design perspective with ORM using the entity framework as is would counteract any benefit.</p>
<p>I hoped we could have a valid alternative as that could only benefit all of us, but we will not, at least for version 1.0</p>
<p>Long story short?</p>
<table style="height:43px;" border="1" cellspacing="0" cellpadding="2" width="414">
<tbody>
<tr>
<td width="667" valign="top">
<p align="center">We recommend the adoption of NHIbernate (you decide the version according to risk tolerance) with a strong recommendation to leverage the Linq provider. There is no other logical choice at this time we firmly believe. This will likely change however as Microsoft has shown they learn and adopt and (eventually) can get things right.</p>
</td>
</tr>
</tbody>
</table>
<p>To do quality &#8216;large scale enterprise&#8217; software of the type say the Java community for example has been delivering, the use of the Entity Framework would  harm your ability to adapt to change to the point of near uselessness.,</p>
<p>That being said here is my information set of links:</p>
<h3><a href="http://www.hibernate.org/343.html">NHibernate &#8211; Release Version 1.2.1 GA</a></h3>
<p><a href="http://www.castleproject.org/activerecord/index.html">with optional Castle ActiveRecord &#8211; RC3</a> (stable and OK for production use in my opinion &#8211; wrapper on NHibernate)</p>
<p><a href="http://sourceforge.net/projects/nhibernate/"><br />
</a></p>
<p><a href="http://sourceforge.net/projects/nhibernate/"> </a><a href="http://sourceforge.net/projects/nhibernate/">NHibernate &#8211; Pre Release 2.0.X</a></p>
<p><a href="http://nhibernate.svn.sourceforge.net/viewvc/nhibernate/">SVN Trunk is</a>: https://nhibernate.svn.sourceforge.net/svnroot/nhibernate</p>
<p><a href="http://www.castleproject.org/activerecord/documentation/trunk/index.html">Castle ActiveRecord Trunk </a>(evolving with NHIbernate 2.0.X)</p>
<h3><a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;displaylang=en">Microsoft Linq to Entities &#8211; Pre Release</a></h3>
<p>Make sure you understand what Linq is and is not. For example, here is one Microsoft clarification:</p>
<ol>
<table border="1" cellspacing="0" cellpadding="2" width="612">
<tbody>
<tr>
<td width="610" valign="top">
<li>
<div>Linq to SQL, released with the Visual Studio 2008, is designed to provide strongly-typed LINQ access for rapidly developed applications across the Microsoft SQL Server family of databases.</div>
</li>
<li>
<div>Linq to Entities, to be released in an update to Visual Studio 2008 in the first half of 2008, is designed to provide strongly-typed LINQ access for applications requiring a more flexible Object Relational mapping, across Microsoft SQL Server and third-party databases.Here I only discuss Linq to Entities</div>
</li>
</td>
</tr>
</tbody>
</table>
</ol>
<p>In 4/5 options NHIbernate is involved, however I LOVE LINQ and it would be fantastic if today we had a way to FULLY leverage it (we can use it to enumerate data as a full set of course). There is a very compelling effort to provide Linq to NHibernate which I have reviewed extensively, and this just provides more incentive to use a pre-release NHIbernate (not sure if it works on 1.2, will check however).</p>
<p>So the decision is further refined to:</p>
<h1>Decision Point: How will you leverage Linq?</h1>
<h2>Use Linq &#8216;persistence optimized&#8217; expressions</h2>
<p align="right">
<p>Linq to Entities &#8211; Pre Release using a Provider for your DB</p>
<p>NHIbernate Combined with <a href="http://www.ayende.com/Blog/archive/2007/03/17/Implementing-Linq-for-NHibernate-A-How-To-Guide--Part.aspx">Evolving Linq to NHIbernate Provider</a></p>
<li>Check <a href="http://ayende.com/Blog/archive/2007/03/16/Linq-for-NHibernate.aspx">this Linq (no pun intended) for this exciting work.</a></li>
<li>If you prefer not to build anything try: <a href="http://www.ayende.com/projects/scratch-pad.aspx">here</a></li>
<h2>Linq as Linq to Objects / Non-intelligent provider</h2>
<h1>Linq to Entities</h1>
<p>This is a big unknown for now. Sure Linq is fantastic but this is completely a new area for Microsoft and don&#8217;t make the common mistake of thinking Linq = ORM. THEY ARE TOTALLY DIFFERENT however Linq is a nice platform to build ORM on top of (as stated people have done).</p>
<li><a href="http://msdn.microsoft.com/en-us/data/aa937723.aspx">http://msdn.microsoft.com/en-us/data/aa937723.asp</a>You can download <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;displaylang=en">beta 3 here</a>Team Blog is here: <a href="http://blogs.msdn.com/adonet/archive/tags/Entity+Framework/default.aspx">http://blogs.msdn.com/adonet/archive/tags/Entity+Framework/default.aspx</a>Hibernate is the default choice and is proven in hundreds (if not thousands) of very large production systems in both Java and the .NET world.
<p>Microsoft holds the Linq card however as that is likely the future of .NET development in many ways..</p>
<h1>NHibernate</h1>
</li>
<li>The easy winner for now as not only is safety there by exposing the code, it is PROVEN. I am so amazed by the ill-advised companies that create &#8216;no open source&#8217; policies&#8230; DUH! The alternative is better for you?! You&#8217;d rather:1) Place an arbitrary constraint on your ability to innovate and operate effectively in software2) Execute in a manner that today is proven to be characterized as more expensive, of lower quality, with higher risk, etc. etc. simply because it is not a locked down proprietary offering??!!Learn more about NHIbernate? <a href="http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx">START HERE.</a>
<ul>
<li>DOWNLOAD:
<ul>
<li><a href="http://www.hibernate.org/343.html">http://www.hibernate.org/343.html</a></li>
</ul>
</li>
<li>Quick Starts:
<ul>
<li><a href="http://www.hibernate.org/362.html">http://www.hibernate.org/362.html</a></li>
</ul>
</li>
<li>Great Resources:
<ul>
<li><a href="http://www.hibernate.org/365.html">http://www.hibernate.org/365.html</a></li>
</ul>
</li>
</ul>
<p>For those getting started I HIGHLY recommend you start with ActiveRecord from the Castle project. For more information see: <a href="http://www.castleproject.org">http://www.castleproject.org</a> and <a href="http://www.domaindotnet.com">http://www.domaindotnet.com</a> . Also make sure you check out Castle ActiveWriter! It&#8217;s great to get started.</p>
<p>The domaindotnet site is specifically setup to discuss issues such as this, but in much greater detail and with code samples. However here are some samples that I have found critical in fine tuning the architecture for domain-development.</p>
<p>1) Don&#8217;t fall into the trap of coupling the &#8216;CRUD&#8217; work (or any modifications for that matter) with what you define as your &#8216;core entities&#8217;.</p>
<p>An example would be a &#8216;Customer&#8217; domain object. Use the &#8217;strategy&#8217; pattern to inject in a service which provides the &#8216;DAO&#8217; service if you will. Use ORM technology ON THE SERVICE not the entity. Use a container for injecting services like Windsor or Spring.NET.</li>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/71/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/71/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/71/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/71/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/71/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=71&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2006/09/09/objectrelational-tools-nhibernate-and-microsoft-adonet-entity-framework/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>
	</item>
	</channel>
</rss>