<?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>system.data.objects dev guy : Book Report</title><link>http://blogs.msdn.com/dsimmons/archive/tags/Book+Report/default.aspx</link><description>Tags: Book Report</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Book report: Agile Principles, Patterns, and Practices in C# by Martin &amp; Martin</title><link>http://blogs.msdn.com/dsimmons/archive/2007/05/02/book-report-agile-principles-patterns-and-practices-in-c-by-martin-martin.aspx</link><pubDate>Wed, 02 May 2007 10:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2370627</guid><dc:creator>dsimmons@microsoft.com</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/dsimmons/comments/2370627.aspx</comments><wfw:commentRss>http://blogs.msdn.com/dsimmons/commentrss.aspx?PostID=2370627</wfw:commentRss><description>&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Several weeks ago (in &lt;A href="http://blogs.msdn.com/dsimmons/archive/2007/03/28/a-delay-before-i-write-more-about-persistence-ignorance.aspx"&gt;&lt;FONT color=#669966&gt;this post&lt;/FONT&gt;&lt;/A&gt;), I said that there would be a delay before I wrote more about the topic of persistence ignorance and the entity framework because I wanted to spend some time learning more about the viewpoint of those folks asking for persistence ignorance.&amp;nbsp; As seems always to be the case, lots of things have intruded and the delay is growing longer than I'd like, but I have made some progress.&amp;nbsp; One part of that has been to read the book &lt;U&gt;Agile Principles, Patterns, and Practices in C#&lt;/U&gt; by Martin &amp;amp; Martin (and to purchase a stack of additional books on related subjects that I intend to read).&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Even this initial foray has been very informative, and when I was finished I wrote up the following report to share with folks on my team.&amp;nbsp; It occurred to me that others might find some value in it as well.&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Note that this is something of a "no holds barred" review.&amp;nbsp; Please don't read too much into any criticism.&amp;nbsp; Overall I found the book definitely a worthwhile read, and I highly recommend it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Agile Principles, Patterns, and Practices in C#&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt; by Martin &amp;amp; Martin&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;This book starts off with a section that is a general overview of the ideas and principles behind Agile methodologies which I found very helpful--in about 50 pages there's a good overview, and then there's this fairly extensive (another 50 pages or so) case study that is a story of how to developers followed an Agile process to build a program to track bowling scores.&amp;nbsp; This case study doesn't just talk about how they worked together but it focuses a lot on the design and how it started and evolved and what they finally ended up with.&amp;nbsp; The pattern of principles followed by case studies is used throughout the book, and it's an interesting one, but I have to admit that I didn't get as much from the case studies--I felt like I was able to glean the important points by reading the sections on principles and then at most skimming the case studies. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;The second section of the book (approx. 75 pages) was also very informative.&amp;nbsp; It talks about design principles and patterns that are generally good design for any methodology but are especially highly valued in agile.&amp;nbsp; In many cases these are relatively common sense kinds of things we would just consider good design practices but they have been better named and codified here which makes it more likely that folks will apply them in all the places they would be useful.&amp;nbsp; In a few cases there are principles that are new to me, and I'm still mulling over what I think about them. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Next there's a fairly large section (another 75 pages or so) on UML which I found not terribly helpful given my familiarity with UML from other sources.&amp;nbsp; This is followed by a very interesting case study about designing a solution for the control system of a coffee maker.&amp;nbsp; The interesting part about this study is that it starts out with an initial design many people might come up with for such a system and then demonstrates the ways in which that design does not follow the design principles.&amp;nbsp; So they go on to describe a much better design that follows the principles but which would not be the first intuitive approach most folks would take unless they were concentrating on the principles.&amp;nbsp; This example may be a bit longer than necessary, but it provides good motivation for the overall design principles. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;The final sections (approx. 375 pages) cover a very large and involved case study around a payroll system and interleave case study discussion with general design info.&amp;nbsp; I was not ready to invest what it would take to really get a lot of value out of the payroll case study, but skimming through the interleaved chapters on principles did seem useful. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;B&gt;&lt;U&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;Agile Development&lt;/SPAN&gt;&lt;/U&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;While I have mixed reactions to the use of "agile methods" at Microsoft based on some very light exposure to folks who either didn't understand or articulate well the principles or who in general were perverting the process, as with many things the underlying ideas seem to be very sound and worth considering.&amp;nbsp; There are a set of 4 values that inspire 12 principles (largely copied directly from the book).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;Values:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Individuals and interactions&lt;/B&gt; over processes and tools.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Working software&lt;/B&gt; over comprehensive documentation.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Customer collaboration&lt;/B&gt; over contract negotiation.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo1; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Responding to change&lt;/B&gt; over following a plan.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;Principles:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo2; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Highest priority is to satisfy the customer through early and continuous delivery of valuable software.&lt;/B&gt;&amp;nbsp; Studies show that the less functional the initial delivery, the higher the quality in the final delivery and the more frequent the deliveries, the higher the final quality.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo3; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-weight: bold; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Welcome changing requirements, even late in development.&lt;/B&gt;&amp;nbsp; Harness change for the customer's competitive advantage.&amp;nbsp; This means you must adopt a lot of other practices and work hard to make sure that everything is flexible so that change can happen inexpensively.&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo4; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;Deliver working software frequently, from a couple of weeks to a couple of months (preferably weeks).&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo5; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;Businesspeople and developers must work together daily throughout the project.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo6; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;Build projects around motivated individuals.&amp;nbsp; Give them the environment and support they need, and trust them to get the job done.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo7; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo8; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;Working software is the primary measure of progress.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo9; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;Agile processes promote sustainable development.&amp;nbsp; The sponsors, developers and users should be able to maintain a constant pace indefinitely.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo10; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;Continuous attention to technical excellence and good design enhances agility.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo11; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;Simplicity--the art of maximizing the amount of work not done--is essential.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo12; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;The best architectures, requirements, and designs emerge from self-organizing teams.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo13; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;FONT face=Calibri size=3&gt;At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;One kind of agile development is extreme programming which involves a series of practices including pair programming (which in this sense is not just working in pairs but also involves an open work environment, rotating partners and changing ownership over sections of the code), test-driven development, continuous integration, etc.&amp;nbsp; This work style clearly seems aimed at a particular kind of end-user application (like many business applications which probably make up 95% of all software in the world) where a development team is trying to write business software for an audience of domain experts who will use it.&amp;nbsp; Key parts of this story involve short cycles (iterations or sprints) and some specific practices around how to decide what goes into each iteration--these are planned each time using data about how things went the last time.&amp;nbsp; I think this style of development could work very well for the kinds of applications and teams that they are targeting (which almost certainly includes various projects at Microsoft).&amp;nbsp;&amp;nbsp; For many MS projects delivering platforms with broader scale, longer timeframes, less direct customer connection, a variety of individuals of differing abilities and contribution types, etc., though, these practices as described are probably too narrow to follow to the letter of the law.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In any case, though, there are certainly some ideas to consider.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;Test-driven development is described in some detail.&amp;nbsp; This is not new to me, but every time I read about it I get a stronger feel for how right it is and why.&amp;nbsp; Some amount of reiteration is probably good to help all of us get off our rears and start doing it.&amp;nbsp; Some other interesting points are the impact on planning ahead for testability will have on designs and&amp;nbsp;the value of investigating and employing specific technologies which can help here like mock objects.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;There's also a discussion about refactoring, but I found Fowler’s book on that topic which I read a while back more enlightening (if anyone’s interested, I can probably dig out and post a report on that book as well).&amp;nbsp; I will, however, throw in one quote from this book which I particularly like:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt"&gt;&lt;I&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Refactoring is like cleaning up the kitchen after dinner.&amp;nbsp; The first time you skip cleaning up, you are done with dinner sooner.&amp;nbsp; But the lack of clean dishes and clear working space makes dinner take longer to prepare the next day.&amp;nbsp; This makes you want to skip cleaning again.&amp;nbsp; Indeed, you can always finish dinner faster *today* if you skip cleaning.&amp;nbsp; But the mess builds and builds.&amp;nbsp; Eventually, you are spending an inordinate amount of time hunting for the right cooking utensils, chiseling the encrusted dried food off the dishes, scrubbing them down so they are suitable to cook with, and so on.&amp;nbsp; Dinner takes forever.&amp;nbsp; Skipping the cleanup does not relaly make dinner go more quickly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt"&gt;&lt;I&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The goal of refactoring… is to clean your code every day, every hour, and every minute.&amp;nbsp; We don't want the mess to build.&amp;nbsp; …&amp;nbsp; I can't stress this enough.&amp;nbsp; All the principles and patterns in this book come to naught if the code they are used within is a mess.&amp;nbsp; Before investing in principles and patterns, invest in clean code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;B&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Agile Design&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;This is the really interesting part of the book, and off-and-on, it's the primary theme for the remainder of the text.&amp;nbsp; First, though, there's a discussion of "design smells" which is familiar from the refactoring book.&amp;nbsp; Here's the list for this book:&lt;B&gt;&lt;U&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/U&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo14; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Rigidity&lt;/B&gt;.&amp;nbsp; The tendency for software to be difficult to change, even in simple ways.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo14; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Fragility&lt;/B&gt;.&amp;nbsp; The tendency of a program to break in many places when a single change is made.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo14; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Immobility.&lt;/B&gt;&amp;nbsp; When a design contains parts that could be useful in other systems, but the effort and risk involved with separating those parts from the original system are too great.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo14; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Viscosity&lt;/B&gt;.&lt;B&gt;&amp;nbsp; &lt;/B&gt;Generally, changes can be made in multiple ways--some which preserve the design, and some which are hacks.&amp;nbsp; If it is easy to do the wrong thing but difficult to do the right thing, that's viscosity in design.&amp;nbsp; Similarly, viscosity can show up in the development environment when tools or processes are inefficient--this can cause developers to batch changes to minimize the impact of long compile times (which goes in the face of refactoring and other good practices), etc.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo14; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Needless Complexity.&amp;nbsp; &lt;/B&gt;Often caused by attempts to anticipate future requirements.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo14; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Needless Repetition.&amp;nbsp; &lt;/B&gt;Cut &amp;amp; paste is disastrous in code.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo14; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Opacity&lt;/B&gt;.&amp;nbsp; The tendency of a module to be difficult to understand.&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;Changing requirements are often blamed for software rot, but agile teams thrive on change.&amp;nbsp; They invest little up front so they are not vested in an aging initial design; they keep the design of the system as clean and simple as possible and back it up with lots of unit and acceptance tests.&amp;nbsp; This keeps the design flexible and easy to change.&amp;nbsp; The team then takes advantage of that flexibility in order to continuously improve the design.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;SPAN style="BACKGROUND: yellow; mso-highlight: yellow"&gt;&lt;FONT face=Calibri size=3&gt;This quote is probably the biggest insight of the book for me:&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt"&gt;&lt;I&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The attitude that agile developers have toward the design of the software is the same attitude that surgeons have toward sterile procedure.&amp;nbsp; Sterile procedure is what makes surgery *possible*.&amp;nbsp; Without it, the risk of infection would be far too high to tolerate.&amp;nbsp; Agile developers feel the same way about their designs.&amp;nbsp; The risk of letting even the tiniest bit of rot begin is too high to tolerate.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;Later in the book there's a case study that shows how an initial design had to undergo radical change to support some new requirements.&amp;nbsp; The conclusion had another telling quote:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt"&gt;&lt;I&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;…it is tempting to blame the problem on insufficient analysis.&amp;nbsp; Poppycock!&amp;nbsp; There is no such thing as *enough* analysis.&amp;nbsp; No matter how much time you spend trying to figure out the perfect software structure, you will always find that the customer introduces a change that violates that structure.&amp;nbsp; There is no escape from this.&amp;nbsp; There are no perfect structures.&amp;nbsp; There are only structures that try to balance the current costs and benefits.&amp;nbsp; Over time, those structures must change as the requirements of the system change.&amp;nbsp; The trick to managing that change is to keep the system as simple and as flexible as possible.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;I'm still pondering how this plays out in the world of frameworks like what we on the ado.net/entity framework team are building, but it clearly makes sense in the world of applications where most of our customers live.&amp;nbsp; Everything we can do to assist them in building simple, clean, flexible solutions is super valuable, and anytime our framework forces requirements upon them which violate the principles, we have a problem.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;B&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Design Principles&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo15; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Single-Responsibility Principle (SRP)&lt;/B&gt; - A class should have only one reason to change.&amp;nbsp; If you can think of more than one motive for changing a class, that class has more than one responsibility.&amp;nbsp; Persistence is one of the key examples given as a common violation of SRP where classes end up containing both business rules and persistence control.&amp;nbsp; Business rules tend to change frequently, persistence changes as well (maybe not frequently, but it does change) and does so on a completely asynchronous schedule.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo16; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-weight: bold; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Open/Closed Principle (OCP)&lt;/B&gt; - Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification.&amp;nbsp; That is, the behavior can be extended as requirements change, but extending the behavior does not result in changes to the source, or binary, code of the module.&amp;nbsp; Abstraction is the key, but it should be applied only to those parts of the system that exhibit frequent change.&amp;nbsp; Resisting premature abstraction is as important as abstraction itself.&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo17; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-weight: bold; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Liskov Substitution Principle (LSP)&lt;/B&gt; - Subtypes must be substitutable for their base types.&amp;nbsp; A symptom of violated LSP is runtime type checking by consumers of a class hierarchy.&amp;nbsp; This principle leads to a very important conclusion:&lt;I&gt; A model, viewed in isolation, cannot be meaningfully validated.&amp;nbsp; The validity of a model can be expressed only in terms of its clients.&lt;/I&gt;&amp;nbsp; This principle is one of the prime enablers of the previous principle (OCP).&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo18; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-weight: bold; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Dependency-Inversion Principle (DIP)&lt;/B&gt; - &lt;I&gt;High-level modules should not depend on low-level modules.&amp;nbsp; Both should depend on abstractions.&amp;nbsp; Abstractions should not depend upon details.&amp;nbsp; Details should depend upon abstractions.&lt;/I&gt;&amp;nbsp; To make this more concrete, instead of an object which implements business logic depending on lower-level components for persistence (as we might normally expect with high-level components at the top of a layered stack--procedural style design), we should work to isolate those objects with interface contracts so that changes to persistence code will not affect the important business logic asset.&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo19; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-weight: bold; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Interface Segregation Principle (ISP)&lt;/B&gt; - &lt;I&gt;Clients should not be forced to depend on methods they do not use.&lt;/I&gt;&amp;nbsp; Class surface area should be broken into client-specific interfaces.&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 27pt; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.25in; LINE-HEIGHT: normal; mso-list: l0 level2 lfo20; tab-stops: list 1.0in"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-family: Symbol; mso-bidi-font-weight: bold; mso-fareast-font-family: Symbol; mso-bidi-font-size: 11.0pt"&gt;&lt;SPAN style="mso-list: Ignore"&gt;·&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;Package/Component Design Principles:&amp;nbsp; &lt;/B&gt;There are a series of related design principles around how to set component boundaries…&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.75in; LINE-HEIGHT: normal; mso-list: l0 level3 lfo21; tab-stops: list 1.5in; mso-text-indent-alt: -.25in"&gt;&lt;B&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;i.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Reuse/Release Equivalence Principle (REP)&lt;/B&gt; - &lt;I&gt;The granule of reuse is the granule of release.&lt;/I&gt;&amp;nbsp; &lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.75in; LINE-HEIGHT: normal; mso-list: l0 level3 lfo22; tab-stops: list 1.5in; mso-text-indent-alt: -.25in"&gt;&lt;B&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;ii.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Common Reuse Principle (CRP)&lt;/B&gt; - &lt;I&gt;The classes in a component are reused together.&amp;nbsp; If you reuse one of the classes in a component, you reuse them all.&lt;/I&gt;&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.75in; LINE-HEIGHT: normal; mso-list: l0 level3 lfo23; tab-stops: list 1.5in; mso-text-indent-alt: -.25in"&gt;&lt;B&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;iii.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Common Closure Principle (CCP)&lt;/B&gt; - &lt;I&gt;The classes in a component should be closed together against the same kinds of changes.&amp;nbsp; A change that affects a component affects all the classes in that component and no other components.&lt;/I&gt;&lt;B&gt;&amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.75in; LINE-HEIGHT: normal; mso-list: l0 level3 lfo24; tab-stops: list 1.5in; mso-text-indent-alt: -.25in"&gt;&lt;B&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;iv.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Acyclic Dependencies Principle (ADP)&lt;/B&gt; - &lt;I&gt;Allow no cycles in the component dependency graph.&lt;/I&gt;&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt 0.75in; VERTICAL-ALIGN: middle; TEXT-INDENT: -0.75in; LINE-HEIGHT: normal; mso-list: l0 level3 lfo25; tab-stops: list 1.5in; mso-text-indent-alt: -.25in"&gt;&lt;B&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;v.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B&gt;The Stable-Abstractions Principle (SAP)&lt;/B&gt; - &lt;I&gt;A component should be as abstract as it is stable.&lt;/I&gt;&amp;nbsp; That is, a stable component should also be abstract so that its stability does not prevent it from being extended.&amp;nbsp; On the other hand, an instable component should be concrete, since its instability allows the concrete code within it to be easily changed.&lt;B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;B&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;A Detour into UML&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;UML is a tool and nothing more.&amp;nbsp; Use it to envision code and communicate.&amp;nbsp; Do not use it for CASE, etc.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There was a lot more in this section, but it seemed to me a pretty standard treatment of the topic.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;B&gt;&lt;U&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Patterns&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;Next in the book is a series of chapters which describe and give examples of various patterns which may be used in support of the design principles.&amp;nbsp; These included Command and Active Object, Template Method, Strategy, Singleton and Monostate, Null Object, Factory, Composite, Observer, Abstract Server, Adapter, Bridge, Proxy and Gateway, Extension Object, Visitor, Decorator, Façade, Finite State Machines, Model/View/Presenter, etc.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;FONT face=Calibri size=3&gt;By and large the discussions of these patterns are detailed with very good motivations for when to use them as well as thorough code samples of them in action (all written in C#).&amp;nbsp; In some cases, there is specific discussion of database persistence strategies and even mention of ado.net.&amp;nbsp; Often the pattern descriptions refer back to the design principles so they also help reinforce and explain them.&amp;nbsp; In general, though, the pattern content is more a compendium of tricks to have up your sleeve rather than fundamental principles that apply most everywhere, so I'll refer you to the book (as well as to other pattern books) for more details.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 1pt 0in 11pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2370627" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/dsimmons/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/dsimmons/archive/tags/ADO.Net/default.aspx">ADO.Net</category><category domain="http://blogs.msdn.com/dsimmons/archive/tags/Book+Report/default.aspx">Book Report</category><category domain="http://blogs.msdn.com/dsimmons/archive/tags/Agile/default.aspx">Agile</category></item></channel></rss>