<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>edjez's WebLog : Off the deep end...</title><link>http://blogs.msdn.com/edjez/archive/tags/Off+the+deep+end_2E002E002E00_/default.aspx</link><description>Tags: Off the deep end...</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Invoking the ghost</title><link>http://blogs.msdn.com/edjez/archive/2006/04/28/InvokingTheGhost.aspx</link><pubDate>Fri, 28 Apr 2006 23:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:586420</guid><dc:creator>edjez</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/edjez/comments/586420.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=586420</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;Let’s say you are talking about a program with someone. Imagine stakes are somewhat high. Suddenly one of these two phrases gets thrown out:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;1. "&lt;I style="mso-bidi-font-style: normal"&gt;It could be faster&lt;/I&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;In any but the healthiest of teams, these are great words to&amp;nbsp;put folks on defensive&amp;nbsp;and stop rational conversations about code.&amp;nbsp;Suddenly the neurons spin (?) and we wonder- is there something we missed? Is my code &lt;I style="mso-bidi-font-style: normal"&gt;wrong&lt;/I&gt;? Did I screw it up &lt;I style="mso-bidi-font-style: normal"&gt;all over the place&lt;/I&gt;? Does this guy/gal have some &lt;I style="mso-bidi-font-style: normal"&gt;privileged&lt;/I&gt; piece of information? When someone tells you "It could be faster" - what's your typical reaction…?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;2. "&lt;I style="mso-bidi-font-style: normal"&gt;It's for security reasons&lt;/I&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;That's another one. And it's funny I even dare to bring this up, being from Microsoft and all that. Who would be brave enough enter a debate about&amp;nbsp;code being written&amp;nbsp;for such an honorable purpose? Who would be enough of a&amp;nbsp;security&amp;nbsp;expert to dare question the existence of code that is there to protect us from evil, shame and regret?&amp;nbsp;Do you&amp;nbsp;want&amp;nbsp;your grandchildren to remember&amp;nbsp;you for being the dude/dudette that left that gaping security hole open? That was exploited by that worm that took civilization back to the 19th century in one fell swoop? I know &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Georgia"&gt;I&lt;/SPAN&gt;&lt;/EM&gt; don't want to be associated with an accidental return to hunter/gatherer lifestyle&amp;nbsp;...so we block the issue in our heads and move on.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;What's going on here?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;These are just two examples of what I call 'invoking ghosts' in discussions about software. We bring up a topic that is vague, crosscutting, obscure, to 1) provide an excuse to do&amp;nbsp;work or not do work, independently of how sensible it is&amp;nbsp;to do it or not&amp;nbsp;2) win a debate against The Other Idea 3) raise FUD levels and gain control of the situation or reduce others' credibility 4) basically steer the conversation away from the code and into people manipulation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;Now, don't get me wrong. Perf and security are important (Doh! I sound like an idiot....I guess you can quote me on that...No, the first phrase) Things &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Georgia"&gt;can&lt;/SPAN&gt;&lt;/EM&gt; be faster and you &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Georgia"&gt;could&lt;/SPAN&gt;&lt;/EM&gt; be doing things for real security measures - but how to tell? What do you do if in a conversation someone invokes these topics as ghosts, and steer it back into a productive place?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;Fortunately, I think there are good patterns and tools to communicate around these issues. A huge one is to be transparent about the goals and unknowns. This basically puts on the table 1. What is it that you are trying to achieve, and 2. An acknowledgment that the understanding of the problem and the shape of the solution are still evolving. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;What has helped me is to get to a shared (implicit or explicit) commitment to an approach:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;1) Establish the needs &amp;amp; the priorities&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;2) Analyze current situation and set a goal for an improvement&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;3) Work on improving the system, checkpoint against goals&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;4) do it all again&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;This actually sounds quite obvious, but it has helped me bring sanity to discussions about quality attributes such as performance &amp;amp; scalability, security, manageability, maintainability, and other areas where 'ghosts' tend to live. Quality attributes tend to be particularly good 'haunted houses' because of their crosscutting, distributed nature, and because we tend to have less than ideal tools to think about tests of success.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;If you look at the 4 steps above the first one is about establishing needs - figuring out your tests, if you will. There has been a lot of work for many years around helping people figure out their tests/needs for quality attributes. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;For security you have Threat Modeling, for manageability you have Health Modeling, for performance you have Perf Modeling, and I hope good frames come up for other quality attributes as well. But what I particularly like about these models is that they aren't models about the solution, but models for &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: Georgia"&gt;tests &lt;/SPAN&gt;&lt;/EM&gt;(and steps 2, 3 &amp;amp; 4&amp;nbsp;are just&amp;nbsp;process guidance to help us make them pass…the “green and refactor” of the “red, green, refactor” cycle). &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;In my opinion the focus on tests first for these complex areas&amp;nbsp;makes these approaches and tools intrinsically suitable for expressing partial, incomplete or overlapping goals (which tends to happen whenever humans are involved..), and helping people iteratively collaborate around defining, verifying and refining them. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;By starting with tests, we support an inductive approach to building the solution, akin to what you do with TDD. Now maybe we still don't have good tools to automatically test our systems based on all these testing models, but I hope that's just&amp;nbsp;a matter of time (base DSL for tests that can be specialized for specific domains, anyone?). Eventually, these tools could become part of the suite of tests that drive the creation of the solution, treated as acceptance tests tied to business needs, and maybe even verifiable against systems at runtime.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;…In the meantime it takes toil, tinkering, and a dabbling with mental experiments. But most of all I think it takes clear communication between people. Here’s some resources around these topics that I’ve used to help me scare the ghosts away from the conversations, and keep them productive, collaborative, and smart:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A HREF="/jmeier/archive/2005/12/01/499078.aspx"&gt;&lt;FONT size=2&gt;What makes a good threat model&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; – by J.D. Meier&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A HREF="/jmeier/archive/2006/04/12/575374.aspx"&gt;&lt;FONT size=2&gt;Performance &amp;amp; Scalability Checkpoint to improve your software engineering&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; – by JD too&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A href="http://msdn.microsoft.com/security/securecode/threatmodeling/default.aspx"&gt;&lt;FONT size=2&gt;MSDN page having lots of things threat model&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; (the generic portal)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A href="http://blogs.gotdotnet.com/ricom/archive/2004/04/28/122503.aspx"&gt;&lt;FONT size=2&gt;Rico Mariani’s blog&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; – Entry with the foreword of the p&amp;amp;p perf &amp;amp; scale guide with a quote of Donald Knuth quoting Tony Hoare saying ‘&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;A href="http://www.microsoft.com/windowsserversystem/dsi/designwp.mspx"&gt;&lt;FONT size=2&gt;Health Modeling&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt; - whitepaper on the Windows Server. They’ve done us all the favor of dumping the health model of a printer in XML. Whee! (But can you write a test runner for it?)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;(Whither my simplicity model paper? Related to maintainability of code? I digress)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;FONT size=2&gt;Kudos: It’s clear that J.D. has done a lot of work in this area. He’s the best I know at distilling these areas in significant, actionable, and insightful ways.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia&gt;&lt;FONT size=2&gt;(OK, My cereal is going something like "Ed - W-T-F-is-this-fluffy-post? Why don't you tell us about&amp;nbsp;dependency injection, aspects, executable models, Object Builder, using XAML to define types dynamically,&amp;nbsp;gps, CAB running in mobile devices, workflow and UI or concurrency or whatever?"&amp;nbsp; A: "I believe writing software is a social activity.&amp;nbsp;I&amp;nbsp;believe that&amp;nbsp;if&amp;nbsp;we learn to communicate, improve how we &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;reason, become more self-aware,&amp;nbsp;and question assumptions in more effective ways we will plain simply write much better software and enjoy it more along the way. Plus -&amp;nbsp;it's my blog. And my doctor&amp;nbsp;told me&amp;nbsp;I shouldn't talk to cereal.)&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Georgia"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Georgia size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=586420" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/_2F00_etc_2F00_other/default.aspx">/etc/other</category><category domain="http://blogs.msdn.com/edjez/archive/tags/Off+the+deep+end_2E002E002E00_/default.aspx">Off the deep end...</category></item><item><title>What's in a name? What's an "Application Block"</title><link>http://blogs.msdn.com/edjez/archive/2006/04/24/WhatsInAName.aspx</link><pubDate>Mon, 24 Apr 2006 18:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:582224</guid><dc:creator>edjez</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/edjez/comments/582224.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=582224</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;Often I get the question 'what is an application block' and 'why that name'? We have lots of articles, &lt;A href="http://msdn.microsoft.com/practices/Webcasts/"&gt;webcasts &lt;/A&gt;etc describing them how we've built them and how to extend them or build your own. Then people&amp;nbsp;ask 'what is the difference between a block or a library or a framework' and I&amp;nbsp;remind them that we use the Application Block name to reflect a set of expectations around packaging, design and how they could be&amp;nbsp;used. &lt;/SPAN&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;Using the word “blocks” was done to evoke a set of patterns about how p&amp;amp;p -and hopefully eventually more of MS - chooses to distribute reusable chunks of bits, without constraining them too much a priori. The approach&amp;nbsp;has allowed our team, communities and others to participate in their evolution rather than try to invent something different altogether. There is an existing&amp;nbsp;taxonomy of chunks of reusable code, and using the word&amp;nbsp;"Blocks" was not done to&amp;nbsp;try to introduce a new item in this taxonomy (that would be arrogant) or redefine existing terms. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;There's plenty that's been written about code libraries (things you can use), frameworks (things that affect the architecture of your code a bit more), app containers and the likes, so I won't go there. I'll just say why I didn't think this would be a good distinction to revolve around when you are creating names for a new&amp;nbsp;product line.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;I&amp;nbsp;believe good names tend to be:&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;- Unspecific enough that you can accept variability of the named thing. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;- Short&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;- Metaphorical. The concept of the name evokes visual, physical/physiological and metabolic actions.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;- Associative and work by metonymy, just like 'White House' represents a government, a president, and a big dome, and not a building.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;I believe a good name does not need to reflect every detail, or every characteristic, or the complete position in the taxonomy, of the thing it describes. For engineers it causes some heartburn (to realize that better names are not necessarily better for classification) but it's easy to embrace once you understand why. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;(If you are interested in this you can read Lakoff or cognitive science papers from the last&amp;nbsp;couple of&amp;nbsp;decades. The one thing that strikes me&amp;nbsp;the most is the impact of physical evolution on the brain's workings, which is one of those conclusions that just strikes me as insightful. What&amp;nbsp;dictates the shape of the box we tend to think in?&amp;nbsp;&amp;nbsp;Thanks &lt;A href="http://c2.com/"&gt;Ward&lt;/A&gt; for recommending this author)&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;Back to code. You can read plenty about&amp;nbsp;the distinctions most of the experts in the community put forward between libraries and frameworks. I will oversimplify, but in the end libraries are things I can use, and frameworks tend to mess with the architecture and design of my own code. Maybe containers implementing DI tend to&amp;nbsp;clarify the edges a&amp;nbsp;little bit, by allowing an otherwise hefty-framework-author have better boundaries between what you use and what affects you. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;The one difficulty I find when trying to classify blocks in terms of "libraries" of "frameworks" is that folks will not understand application architecture in objective ways. For example, enterprise library is IMO a great example of "Library" chunks. However, if you ask around many folks consider EntLib to 'deeply affect the architecture of their app'. One man's library is another man's framework. On the other hand, CAB has lots of pieces which are canonical "framework" chunks and a gentle sprinkling of "library" pieces. It has both gentle and forceful ways of suggesting a design for some areas of your code. I do think we could have packaged CAB up a bit better by breaking out specific pieces, but we all have constraints. &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;So to summarize them, the name "Application Block" does not reflect a precise place in the taxonomy of reuse, rather, a loose metaphor that encompasses a family of assets, and how you use them. Using blocks should be a matter of choice, they work together, they can be piled up, you can use many or a few, they will probably have commonality internally and externally as dictated by efficiency and usability, and they should be fun.&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=582224" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/Off+the+deep+end_2E002E002E00_/default.aspx">Off the deep end...</category></item><item><title>New Blog Section - "Off the deep end..."</title><link>http://blogs.msdn.com/edjez/archive/2006/04/24/OffTheDeepEnd.aspx</link><pubDate>Mon, 24 Apr 2006 18:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:582223</guid><dc:creator>edjez</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/edjez/comments/582223.aspx</comments><wfw:commentRss>http://blogs.msdn.com/edjez/commentrss.aspx?PostID=582223</wfw:commentRss><description>&lt;P&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Georgia"&gt;Disclaimer: JD Meier suggested I get to blogging and after some discussion why I haven't been doing this, I decided to create a section for 'off the deep end' posts. The description is is a reference to &lt;A href="http://en.wikipedia.org/wiki/Godel"&gt;Gödel&lt;/A&gt;: &lt;EM&gt;Thoughts, Ramblings, and content not computable through predicate calculus.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;My hope is that I&amp;nbsp;can put things in this section with an implicit disclaimer. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=582223" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/edjez/archive/tags/Off+the+deep+end_2E002E002E00_/default.aspx">Off the deep end...</category></item></channel></rss>