<?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>J.D. Meier's Blog : Architecture</title><link>http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx</link><description>Tags: Architecture</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Now Available: patterns &amp; practices Application Architecture Book</title><link>http://blogs.msdn.com/jmeier/archive/2009/11/05/now-available-patterns-practices-application-architecture-book.aspx</link><pubDate>Thu, 05 Nov 2009 18:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9918149</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9918149.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9918149</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/NowAvailablepatternspracticesApplication_9A5D/AAG2FrontCover-Small_2.png" mce_href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/NowAvailablepatternspracticesApplication_9A5D/AAG2FrontCover-Small_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px" title=AAG2FrontCover-Small border=0 alt=AAG2FrontCover-Small align=right src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/NowAvailablepatternspracticesApplication_9A5D/AAG2FrontCover-Small_thumb.png" width=184 height=225 mce_src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/NowAvailablepatternspracticesApplication_9A5D/AAG2FrontCover-Small_thumb.png"&gt;&lt;/A&gt; The Microsoft Application Architecture Guide, 2nd edition, is &lt;A href="http://www.amazon.com/Microsoft%C2%AE-Application-Architecture-Patterns-Practices/dp/073562710X" target=_blank mce_href="http://www.amazon.com/Microsoft%C2%AE-Application-Architecture-Patterns-Practices/dp/073562710X"&gt;now available on Amazon&lt;/A&gt; and should be available on the shelf at your local bookstores soon.&amp;nbsp; The PDF was downloaded ~180,000 times.&amp;nbsp; This is the Microsoft platform playbook for application architecture.&amp;nbsp; You can think of it as a set of blueprints, and as your personal mentor for building common types of applications on the Microsoft platform:&amp;nbsp; mobile, RIA, services, and Web applications.&lt;/P&gt;
&lt;P&gt;The backbone of the guide is an information model for the application architecture space.&amp;nbsp; It’s a durable and evolvable map to give you a firm foundation of principles, patterns, and practices that you can overlay the latest technologies.&amp;nbsp; It’s your “tome of know-how.”&amp;nbsp; While it’s not a step-by-step for building specific applications, it is a pragmatic guide for designing your architecture, with quality attributes, key software principles, common patterns, and architectural styles in mind.&amp;nbsp; It’s holistic and focused on the key engineering decisions where you face your highest risks and most important choices.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Key Features of the Book &lt;BR&gt;&lt;/STRONG&gt;The book has several compelling features for slicing and dicing the application architecture body of knowledge:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Canonical Frame.&amp;nbsp; &lt;/STRONG&gt;This&lt;STRONG&gt; &lt;/STRONG&gt;describes at a meta-level, the tiers and layers that an architect should consider. Each tier/layer will be described in terms of its focus, function, capabilities, common design patterns and technologies.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Application Types&lt;/STRONG&gt;.&amp;nbsp; These are canonical application archetypes to illustrate common application types: Mobile, Rich Client, RIA, Services, and Web applications.&amp;nbsp; Each archetype is described in terms of the target scenarios, technologies, patterns and infrastructure it contains. Each archetype is mapped to the canonical app frame. They are illustrative of common application types and not comprehensive or definitive.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Quality attributes&lt;/STRONG&gt;.&amp;nbsp; This is a set of qualities and capabilities that shape your application architecture: performance, security, scalability, manageability, deployment, communication, etc.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Cross-cutting concerns&lt;/STRONG&gt;.&amp;nbsp; This is a common set of categories for hot spots for key engineering decisions: Authentication, Authorization, Caching, Communication, Configuration Management, Exception Management, Logging and Instrumentation, State Management, and Validation.&lt;/LI&gt;
&lt;LI&gt;Step-by-Step Design Approach.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Principles, patterns, and practices&lt;/STRONG&gt;.&amp;nbsp;&amp;nbsp; Using the application types, canonical frame, and cross-cutting concerns as backdrops, the guide provides an overlay of relevant principles, patterns, and practices.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Technologies and capabilities&lt;/STRONG&gt;.&amp;nbsp; The guide provides an overview and description of the Microsoft custom application development platform and the main technologies and capabilities within it.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Contents at a Glance &lt;BR&gt;&lt;/STRONG&gt;The full &lt;A href="http://msdn.microsoft.com/en-us/library/dd673617.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd673617.aspx"&gt;Microsoft Application Architecture Guide is available for free on MSDN&lt;/A&gt; in HTML.&amp;nbsp; This is the contents of the guide at a glance:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658126.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658126.aspx"&gt;Foreword by S. Somasegar&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658097.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658097.aspx"&gt;Foreword by Scott Guthrie&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658082.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658082.aspx"&gt;Preface by David Hill&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Chapters&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658098.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658098.aspx"&gt;Chapter 1: What is Software Architecture?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658124.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658124.aspx"&gt;Chapter 2: Key Principles of Software Architecture&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658117.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658117.aspx"&gt;Chapter 3: Architectural Patterns and Styles&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658084.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658084.aspx"&gt;Chapter 4: A Technique for Architecture and Design&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658109.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658109.aspx"&gt;Chapter 5: Layered Application Guidelines&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658081.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658081.aspx"&gt;Chapter 6: Presentation Layer Guidelines&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658103.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658103.aspx"&gt;Chapter 7: Business Layer Guidelines&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658127.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658127.aspx"&gt;Chapter 8: Data Layer Guidelines&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658090.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658090.aspx"&gt;Chapter 9: Service Layer Guidelines&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658121.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658121.aspx"&gt;Chapter 10: Component Guidelines&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658100.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658100.aspx"&gt;Chapter 11: Designing Presentation Components&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658102.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658102.aspx"&gt;Chapter 12: Designing Business Components&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658106.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658106.aspx"&gt;Chapter 13: Designing Business Entities&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658122.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658122.aspx"&gt;Chapter 14: Designing Workflow Components&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658119.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658119.aspx"&gt;Chapter 15: Designing Data Components&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658094.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658094.aspx"&gt;Chapter 16: Quality Attributes&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658105.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658105.aspx"&gt;Chapter 17: Crosscutting Concerns&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658118.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658118.aspx"&gt;Chapter 18: Communication and Messaging&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658120.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658120.aspx"&gt;Chapter 19: Physical Tiers and Deployment&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658104.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658104.aspx"&gt;Chapter 20: Choosing an Application Type&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658099.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658099.aspx"&gt;Chapter 21: Designing Web Applications&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658087.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658087.aspx"&gt;Chapter 22: Designing Rich Client Applications&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658083.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658083.aspx"&gt;Chapter 23: Designing Rich Internet Applications&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658108.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658108.aspx"&gt;Chapter 24: Designing Mobile Applications&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658114.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658114.aspx"&gt;Chapter 25: Designing Service Applications&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658110.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658110.aspx"&gt;Chapter 26: Designing Hosted and Cloud Services&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658085.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658085.aspx"&gt;Chapter 27: Designing Office Business Applications&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658091.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658091.aspx"&gt;Chapter 28: Designing SharePoint LOB Applications&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Appendices&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658101.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658101.aspx"&gt;Appendix A: The Microsoft Application Platform&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658088.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658088.aspx"&gt;Appendix B: Presentation Technology Matrix&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658113.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658113.aspx"&gt;Appendix C: Data Access Technology Matrix&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658095.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658095.aspx"&gt;Appendix D: Integration Technology Matrix&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658123.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658123.aspx"&gt;Appendix E: Workflow Technology Matrix&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658115.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658115.aspx"&gt;Appendix F: patterns &amp;amp; practices Enterprise Library&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/ee658089.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ee658089.aspx"&gt;Appendix G: patterns &amp;amp; practices Pattern Catalog&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;The Team &lt;BR&gt;&lt;/STRONG&gt;Here is the team that brought you the guide:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Core Dev Team&lt;/STRONG&gt;: J.D. Meier, Alex Homer, David Hill, Jason Taylor, Prashant Bansode, Lonnie Wall, Rob Boucher Jr, Akshay Bogawat&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Test Team&lt;/STRONG&gt; - Rohit Sharma, Praveen Rangarajan, Kashinath TR, Vijaya Jankiraman&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Edit Team&lt;/STRONG&gt; - Dennis Rea&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;External Contributors/Reviewers&lt;/STRONG&gt; - Adwait Ullal; Andy Eunson; Brian Sletten; Christian Weyer; David Guimbellot; David Ing; David Weller; Derek Greer; Eduardo Jezierski; Evan Hoff; Gajapathi Kannan; Jeremy D. Miller; John Kordyback; Keith Pleas; Kent Corley; Mark Baker; Paul Ballard; Peter Oehlert; Norman Headlam; Ryan Plant; Sam Gentile; Sidney G Pinney; Ted Neward; Udi Dahan&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Microsoft Contributors / Reviewers&lt;/STRONG&gt; - Ade Miller; Amit Chopra; Anna Liu; Anoop Gupta; Bob Brumfield; Brad Abrams; Brian Cawelti; Bhushan Nene; Burley Kawasaki; Carl Perry; Chris Keyser; Chris Tavares; Clint Edmonson; Dan Reagan; David Hill; Denny Dayton; Diego Dagum; Dmitri Martynov; Dmitri Ossipov; Don Smith; Dragos Manolescu; Elisa Flasko; Eric Fleck; Erwin van der Valk; Faisal Mohamood; Francis Cheung; Gary Lewis; Glenn Block; Gregory Leake; Ian Ellison-Taylor; Ilia Fortunov; J.R. Arredondo; John deVadoss; Joseph Hofstader; Koby Avital; Loke Uei Tan; Luke Nyswonger; Manish Prabhu; Meghan Perez; Mehran Nikoo; Michael Puleio; Mike Francis; Mike Walker; Mubarak Elamin; Nick Malik; Nobuyuki Akama; Ofer Ashkenazi; Pablo Castro; Pat Helland; Phil Haack; Rabi Satter; Reed Robison; Rob Tiffany; Ryno Rijnsburger; Scott Hanselman; Seema Ramchandani; Serena Yeoh; Simon Calvert; Srinath Vasireddy; Tom Hollander; Wojtek Kozaczynski&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Application Architecture Knowledge Base &lt;BR&gt;&lt;/STRONG&gt;The guide was developed in conjunction with our &lt;A href="http://apparch.codeplex.com/" target=_blank mce_href="http://apparch.codeplex.com/"&gt;Application Architecture Guide v2.0 Knowledge Base Project&lt;/A&gt;. The knowledge base project was used to inform and steer the guide during its development. The Application Architecture Knowledge Base includes a large amount of material that expands on specific topics in the main guide. It also includes draft material from the main guide that is targeted and packaged for more specific audiences, such as the Pocket Guide series.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://apparch.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=17700" target=_blank mce_href="http://apparch.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=17700"&gt;Overview Slides&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://apparch.codeplex.com/wikipage?title=Video:%20Train%20the%20Trainer%20-%20Application%20Architecture%20Guide%202.0&amp;amp;referringTitle=Home" target=_blank mce_href="http://apparch.codeplex.com/wikipage?title=Video:%20Train%20the%20Trainer%20-%20Application%20Architecture%20Guide%202.0&amp;amp;referringTitle=Home"&gt;Train the Trainer&lt;/A&gt; (Video)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://apparch.codeplex.com/wikipage?title=Pocket%20Guides&amp;amp;referringTitle=Home" target=_blank mce_href="http://apparch.codeplex.com/wikipage?title=Pocket%20Guides&amp;amp;referringTitle=Home"&gt;Pocket Guides&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://apparch.codeplex.com/wikipage?title=Video%20Index&amp;amp;referringTitle=Home" target=_blank mce_href="http://apparch.codeplex.com/wikipage?title=Video%20Index&amp;amp;referringTitle=Home"&gt;Videos&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://apparch.codeplex.com/wikipage?title=Slide%20Index&amp;amp;referringTitle=Home" target=_blank mce_href="http://apparch.codeplex.com/wikipage?title=Slide%20Index&amp;amp;referringTitle=Home"&gt;Slides&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://apparch.codeplex.com/wikipage?title=Visio%20Index&amp;amp;referringTitle=Home" target=_blank mce_href="http://apparch.codeplex.com/wikipage?title=Visio%20Index&amp;amp;referringTitle=Home"&gt;Figures (Visios)&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Key Links at a Glance &lt;BR&gt;&lt;/STRONG&gt;Here are the key links at a glance:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd673617.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd673617.aspx"&gt;Microsoft Application Architecture Guide&lt;/A&gt; (MSDN)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.amazon.com/Microsoft%C2%AE-Application-Architecture-Patterns-Practices/dp/073562710X" target=_blank mce_href="http://www.amazon.com/Microsoft%C2%AE-Application-Architecture-Patterns-Practices/dp/073562710X"&gt;Microsoft Application Architecture Guide&lt;/A&gt; (Amazon)&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://apparch.codeplex.com/" target=_blank mce_href="http://apparch.codeplex.com/"&gt;Application Architecture Knowledge Base&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918149" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/patterns+and+practices/default.aspx">patterns and practices</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/AppArch/default.aspx">AppArch</category></item><item><title>Lessons in Software from Alok Srivastava</title><link>http://blogs.msdn.com/jmeier/archive/2009/06/29/lessons-in-software-from-alok-srivastava.aspx</link><pubDate>Mon, 29 Jun 2009 21:20:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9808803</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9808803.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9808803</wfw:commentRss><description>&lt;p&gt;I have a guest post, &lt;a href="http://shapingsoftware.com/2009/06/29/lessons-in-software-from-alok-srivastava/" target="_blank"&gt;Lessons in Software from Alok Srivastava&lt;/a&gt;, on &lt;a href="http://shapingsoftware.com/" target="_blank"&gt;Shaping Software&lt;/a&gt;.&amp;#160; Alok is a solution architect at Microsoft with several years of experience in large scale, distributed systems.&amp;#160; In this post, he shares his lessons learned in software.&amp;#160; Here is a summary of his lessons: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Lesson 1. Software development is a team sport. &lt;/li&gt;    &lt;li&gt;Lesson 2. More lines-of-code does not mean better software. &lt;/li&gt;    &lt;li&gt;Lesson 3. The Cloud is an inflection point. &lt;/li&gt;    &lt;li&gt;Lesson 4. Scalability, performance and diagnostic ability are better achieved at design time. &lt;/li&gt;    &lt;li&gt;Lesson 5. User experience and user expectation change continuously that is why UI projects are never done. &lt;/li&gt;    &lt;li&gt;Lesson 6. Software maintainability is a key to longer life for any software. &lt;/li&gt;    &lt;li&gt;Lesson 7. Development process should help development produce good quality software, if it comes in your way change it. &lt;/li&gt;    &lt;li&gt;Lesson 8. Take agility with a grain of salt; result &amp;#8211;oriented software development is what agility should help you gain. &lt;/li&gt;    &lt;li&gt;Lesson 9. A great software engineer never stops working. &lt;/li&gt;    &lt;li&gt;Lesson 10. Know the keys to writing great software; magic isn&amp;#8217;t one of them. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can read an explanation of the lessons in his post, &lt;a href="http://shapingsoftware.com/2009/06/29/lessons-in-software-from-alok-srivastava/" target="_blank"&gt;Lessons In Software from Alok Srivastava&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9808803" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>A Language for Architecture</title><link>http://blogs.msdn.com/jmeier/archive/2009/04/25/a-language-for-architecture.aspx</link><pubDate>Sat, 25 Apr 2009 22:11:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9568389</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9568389.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9568389</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/ALanguageforArchitecture_AB60/ALanguageForArchitecture_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="232" alt="ALanguageForArchitecture" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/ALanguageforArchitecture_AB60/ALanguageForArchitecture_thumb.png" width="404" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;My Architecture Journal article is live, &lt;a href="http://msdn.microsoft.com/en-us/architecture/aa699449.aspx" target="_blank"&gt;A Language for Architecture&lt;/a&gt;.&amp;#160;&amp;#160; I wrote the article to share the map of application architecture we created during our &lt;a href="http://www.codeplex.com/AppArchGuide" target="_blank"&gt;patterns &amp;amp; practices Application Architecture Guide 2.0 project&lt;/a&gt;.&amp;#160; It's a simple language for helping you get in the ballpark when you're traversing the very large space of software architecture.&amp;#160;&amp;#160; By framing and naming the space, we can more effectively share our principles, patterns, and practices for application architecture.&amp;#160;&amp;#160; This also helps consolidate all the great information spread over time and space and threads and heads.&amp;#160;&amp;#160; More importantly, if we simplify how we talk about architecture, we can move up the stack as well as pave paths for others and help mentor others in our field.&amp;#160; Instead of asking basic questions like what is architecture, we can ask things like how do we define archetypes for the cloud or how do improve product line engineering for common systems and application types? In our case, we're using the language to help rationalize our portfolio of assets in our patterns &amp;amp; practices product line.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why the Map&lt;/strong&gt;    &lt;br /&gt;There's an explosion of concepts in the architecture space.&amp;#160; While working on the Application Architecture 2.0 Guide, we needed a simple, but effective bird's-eye view of the space.&amp;#160; By framing and naming the space, we created a shared vocabulary, helped avoid information overload, and made it easier to find, organize, and share principles, patterns, and practices with customers, field, and product teams.&amp;#160; It's good for the ecosystem.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Usage Scenarios      &lt;br /&gt;&lt;/strong&gt;Here's some usage scenarios:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Heat Map&lt;/strong&gt;.&amp;#160; If you do product planning or competitive analysis you can use the map and language to create heat maps and create a &amp;quot;consumer reports&amp;quot; for the space you are in.&amp;#160; You can identify key hot spots and quickly drill in or evaluate the level of maturity in that domain.&amp;#160; You can use the map to find the most important areas to invest.&amp;#160; That's key, especially in today's economic landscape.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Hot Spots&lt;/strong&gt;.&amp;#160;&amp;#160; By mapping out hot spots you build a catalog of your key engineering decisions.&amp;#160; These become your focus points.&amp;#160; By focusing efforts you improve your results.&amp;#160; For example, if cloud computing is a hot spot, you might identify manageability within that and then you might invest your energy in reducing friction or creating opportunity in that hot spot.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Solution Engineering&lt;/strong&gt;.&amp;#160;&amp;#160; If you build applications you can use the map and language for quickly traversing key engineering decisions.&amp;#160; You can use it to quickly identify your key risks as well as explore potential solution options.&amp;#160; It helps you identify what you know, don't know and need to know next.&amp;#160; It also helps you quickly rip through technology decisions.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Architectural Exploration&lt;/strong&gt;.&amp;#160;&amp;#160; You can use the map as a way to explore existing systems.&amp;#160; By chunking up architectures into things like archetypes, qualities, hot spots ... etc. you can drill into them more effectively.&amp;#160; For example, you might go on an architectural expedition to build a catalog of common application patterns for your group.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Whiteboarding&lt;/strong&gt;.&amp;#160;&amp;#160; Effective whiteboarding is an art.&amp;#160; That said, whiteboarding is one of the most important tools in our industry when it comes to sharing knowledge and getting people on the same page.&amp;#160;&amp;#160; You can use the language, maps, and frames to improve your whiteboarding skills by using common elements from the map.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Product-line engineering&lt;/strong&gt;.&amp;#160; If you build software, you can use the map to get more precision over your product line by defining the scenarios, the requirements, the archetypes and hot spots.&amp;#160; You can also use these to differentiate.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Slideware&lt;/strong&gt;.&amp;#160; If you have to build slides, you can use the map, the language, and the visuals to more effectively share what's important.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Prescriptive Guidance&lt;/strong&gt;.&amp;#160;&amp;#160; If you're in the decision improvement business, then using a common map and frames will help you organize and share patterns and practices more effectively.&amp;#160; What if we could easily traverse the common data access patterns for RIA applications from a security, performance or manageability perspective?&amp;#160; We get closer to the capability when we share common maps.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Key Concepts      &lt;br /&gt;&lt;/strong&gt;Here's some key concepts behind the map and language: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Hot Spot driven&lt;/strong&gt;.&amp;#160; Rather than exhaustive, the maps, language, and frames are hot spot driven.&amp;#160; If you can see the forest from the trees, you have a better vantage point and can more selectively drill down or elaborate as needed.&amp;#160;&amp;#160; Hot spots are also where the action is.&amp;#160; See &lt;a href="http://shapingsoftware.com/2009/03/09/security-hot-spots/" target="_blank"&gt;Security Hot Spots&lt;/a&gt; and &lt;a href="http://shapingsoftware.com/2009/04/13/performance-hot-spots/" target="_blank"&gt;Performance Hot Spots&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Expandable by design&lt;/strong&gt;.&amp;#160; The maps are expandable by design.&amp;#160;&amp;#160; You can unfold, elaborate or expand each area as needed.&amp;#160;&amp;#160; You can tailor it for your context.&amp;#160; The maps gives you a baseline of hot spots to start from so you don't have to start from scratch. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Overlays&lt;/strong&gt;.&amp;#160;&amp;#160; The maps, language, and frames are backdrops.&amp;#160; This means we can overlay principles, patterns, and practices.&amp;#160; This also means we can overlay products or technologies or solution assets, such as reusable code.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Whiteboard oriented&lt;/strong&gt;.&amp;#160;&amp;#160;&amp;#160; The maps, language and frames are oriented towards whiteboard usage, simply because it's one of the most universal tools in our field.&amp;#160; By optimizing around whiteboard usage and humans over tools, we reduce friction around sharing basic information.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Plays well with others&lt;/strong&gt;.&amp;#160;&amp;#160; No matter what your favorite framework or mental models are, you can leverage the maps, language and frames.&amp;#160; We didn't set out to build an exclusive set.&amp;#160; Instead, we set out to map out an inclusive set of concepts that can easily stretch to fit.&amp;#160; It's platform agnostic and if anything, it's most tightly bound to the knowledge areas of software architecture.&amp;#160; In the words of Bruce Lee, &amp;quot;absorb what is useful.&amp;quot;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Real-world over academic&lt;/strong&gt;.&amp;#160;&amp;#160; We chose to optimize around the language, maps, and frames we see in practice.&amp;#160; We needed it to be simple to explain whether we're in a team full of developers or a doing a presentation for business decision makers.&amp;#160; It's a simple way to look at the legos and&amp;#160; organize them in a meaningful way.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;The Map     &lt;br /&gt;&lt;/strong&gt;The key components of the language include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;User, Business, and System Perspective.&lt;/strong&gt;&amp;#160;&amp;#160; Architecture is a constant balance of user, business, and technical concerns.&amp;#160; For example, the user wants a response time of x, but the cost and impact on the system side have to make business sense.&amp;#160; When you group by user, business, and system stories you get more precision around the drivers and goals and you can include the right people for the right decisions, as well as keep checks and balances.&amp;#160; See &lt;a href="http://shapingsoftware.com/2008/06/01/what-are-the-user-business-and-system-goals/" target="_blank"&gt;What are the User, Business, and System Goals&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Architecture Frame&lt;/strong&gt;.&amp;#160; This is the main map that includes the context, the app types, the architectural styles, and the application feature frame.&amp;#160; The context is expressed with scenarios, requirements / constraints, and quality attributes.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Application Archetypes (App Types)&lt;/strong&gt;.&amp;#160; Application Types are simply blueprints for classes of applications.&amp;#160; In our Application Architecture Guide 2.0, we called out mobile, RIA, Web, Rich Client, and Services.&amp;#160; Those are technical types.&amp;#160; You could also call out a set of business types. or a set of core system archetypes.&amp;#160; The key is to identify a set of types for your business so you can think in terms of a product-line.&amp;#160; See &lt;a href="http://shapingsoftware.com/2008/06/01/app-types-archetypes/" target="_blank"&gt;Application Types&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Quality Attributes&lt;/strong&gt;.&amp;#160;&amp;#160; This includes system, run-time, design, and user qualities.&amp;#160; For example, a run-time quality would be availability, while a design quality would be conceptual integrity.&amp;#160; See &lt;a href="http://shapingsoftware.com/2008/06/01/quality-attribute-list/" target="_blank"&gt;Quality Attribute List&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Scenarios&lt;/strong&gt;.&amp;#160; You can't design or evaluate an architecture in a vacuum.&amp;#160; Scenarios give you the context.&amp;#160; The scenarios are a really important element.&amp;#160; In terms of architecture, the architecturally significant use cases are vital to making the right trade-offs.&amp;#160; You can find architecturally significant scenarios by looking at the intersections of quality attributes or hot spots with application features.&amp;#160; See &lt;a href="http://shapingsoftware.com/2008/06/01/app-types-verticals-and-scenarios/" target="_blank"&gt;App Types, Verticals, and Scenarios&lt;/a&gt; and &lt;a href="http://shapingsoftware.com/2008/10/11/whats-a-scenario/" target="_blank"&gt;What's a Scenario?&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Architectural Styles&lt;/strong&gt;.&amp;#160; Architectural styles are simply sets of principles that shape the software.&amp;#160; We grouped styles by&amp;#160; big decision areas: communication, deployment, domain, interaction and structure.The beauty of architectural styles is we can talk about higher-level goals before getting into specific technologies.&amp;#160; For example, if you choose SOA as your architectural style for your communication, you can then evaluate whether WCF or ASMX helps you implement those principles.&amp;#160; Every app is a mash up of styles.&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Requirements and Constraints&lt;/strong&gt;.&amp;#160;&amp;#160; Requirements and constraints are simply what's required of the system.&amp;#160; Again, this is where user, business, and system perspectives matter.&amp;#160; We called out functional, non-functional, technological, and constraints.&amp;#160; Non-functional would include quality attributes and constraints would include organizational and industry compliance.&amp;#160; See &lt;a href="http://shapingsoftware.com/2008/06/01/requirements-types/" target="_blank"&gt;Requirements Types&lt;/a&gt; and&amp;#160; &lt;a href="http://shapingsoftware.com/2008/06/09/user-requirements-vs-system-requirements/" target="_blank"&gt;User Requirements vs. System Requirements&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Application Feature Frame&lt;/strong&gt;.&amp;#160;&amp;#160; This is a set of hot spots focused on a common set of key engineering decisions.&amp;#160; We called out Caching, Communication, Concurrency and Transactions, Configuration Management, Coupling and Cohesion      &lt;br /&gt;Data Access, Exception Management, Layering, Logging and Instrumentation, State Management, Structure, Validation, and Workflow.&amp;#160; These are&amp;#160; the types of decisions you don't want to make up on the fly and you want to avoid do-overs.&amp;#160; You'll also notice our industry is rich with principles, patterns, and practices in these categories, as well as reusable components.&amp;#160; For example, you can overlay Enterprise Library on several of these areas.&amp;#160;&amp;#160; See &lt;a href="http://shapingsoftware.com/2008/06/01/app-infrastructure-frame/" target="_blank"&gt;Application Infrastructure Frame&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Application Frames&lt;/strong&gt;.&amp;#160;&amp;#160; These are hot spots based on a given application type.&amp;#160; For example, for Web applications, we defined Authentication, Authorization, Caching, Exception Management, Logging and Instrumentation, Navigation, Page Layout (UI), Page Rendering, Presentation Entity, Request Processing, Service Interface, Session Management, Validation.&amp;#160; Notice that the map has a lot of similar categories to the core application infrastructure frame.&amp;#160; The key is context.&amp;#160; Now we are talking about validation within Web applications.&amp;#160; Also notice that some hot spots are more Web centric such as page layout and page navigation.&amp;#160; Also notice that we can overlay key Web patterns on these hot spots.&amp;#160; Instead of a laundry list of patterns, we can find, organize, and share key patterns for these hot spots.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Layers, Components, and Tiers&lt;/strong&gt;.&amp;#160; We called out layers, components, and tiers so that we could have a common backdrop with the various existing bodies of work.&amp;#160;&amp;#160; We kept layers logical and tiers physical (a precedent set back in 2001 to help untangle confusion.)&amp;#160; We called out the presentation, business, data, and service layers.&amp;#160; You can extend that for things like productivity layers or manageability layers.&amp;#160; Keep in mind that layers are fractal, in other words you might have a service that has a presentation, business, and data layer within it.&amp;#160; Effectively you can think in terms of macro and micro levels.&amp;#160; For components we called out presentation components (user interface, user process), business components (application facade, business, business entity, business workflows), data layer components (data access logic, data helpers/utilities, service agents), and service layer components (service interfaces, message types).&amp;#160; For tiers, we called out 2-tier, 3-tier, and N-tier.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Pattern Maps&lt;/strong&gt;.&amp;#160; We created pattern maps based on the frames.&amp;#160; For example, for each application type (Web, RIA, Mobile ... etc.) we used the hot spots to overlay relevant patterns.&amp;#160; This helped us surface up the most important patterns for a given topic and avoid information overload.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Product and Technology Maps&lt;/strong&gt;.&amp;#160;&amp;#160; We created product and technology maps organized by scenarios, application types, and hot spots.&amp;#160; The key here was making it easy to traverse the problem space and overlay the solution space.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9568389" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/AppArch/default.aspx">AppArch</category></item><item><title>Agile Architecture Method Revisited</title><link>http://blogs.msdn.com/jmeier/archive/2009/03/02/agile-architecture-method-revisited.aspx</link><pubDate>Mon, 02 Mar 2009 18:49:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9454612</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9454612.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9454612</wfw:commentRss><description>&lt;p&gt;I posted an update to the &lt;a href="http://shapingsoftware.com/2009/03/02/agile-architecture-method/" target="_blank"&gt;Agile Architecture method&lt;/a&gt; on &lt;a href="http://ShapingSoftware.com" target="_blank"&gt;Shaping Software&lt;/a&gt;.&amp;#160; When I originally posted about the Agile Architecture method, I took some things for granted.&amp;#160; I thought the mapping to agile practices was more obvious than it turned out to be.&amp;#160; After taking more customers through the approach, I realized some things are worth more elaboration.&amp;#160; Here's some of the key things that stood out among the conversations:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Whiteboard technique&lt;/strong&gt;.&amp;#160; You can use the Agile Architecture method as a simple technique to quickly sketch out your solutions on a whiteboard.&amp;#160; It's a guided process for rapid prototyping.&amp;#160; The value is that it helps you identify hot spots for technical risks more quickly than ad-hoc or random approaches.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Hot Spots&lt;/strong&gt;.&amp;#160;&amp;#160; Thinking of the cross-cutting concerns and quality attributes as hot spots seems to stick.&amp;#160;&amp;#160; The intersection of the hot spots and stories is a key way to drive architectural concerns.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Prioritized scenarios&lt;/strong&gt;.&amp;#160;&amp;#160; The user, business, and system stories are a way to help focus and prioritize which hot spots matter most.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Mapping to agile practices&lt;/strong&gt;.&amp;#160;&amp;#160; You can use the Agile Architecture method to shape your candidate architecture, as well as prioritize technical risks and guide your architectural spikes for iteration 0.&amp;#160; For iterations 1 - N, you can use the Agile Architecture method to guide your design, implementation, and deployment inspections as well as identify hot spots in your design.&amp;#160; You can also use it to help you periodically refactor your design to meet your objectives for your various quality attributes, such as performance, security ... etc.&amp;#160; Most importantly, you can use the Agile Architecture method as a structured approach for addressing cross-cutting concerns and baking quality throughout the life cycle.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Just in Time Architecture&lt;/strong&gt;.&amp;#160;&amp;#160; One of the most important points about the Agile Architecture method is that it's just enough architecture and just in time architecture.&amp;#160; When you're creating your baseline or candidate solutions, it's a structured approach to help you prioritize technical risk and find the key hot spots.&amp;#160; During iterations, it's a way to provide just in time architecture by mapping relevant hot spots against your prioritized stories.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9454612" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx">Agile</category></item><item><title>Architectural Styles</title><link>http://blogs.msdn.com/jmeier/archive/2009/02/10/architectural-styles.aspx</link><pubDate>Tue, 10 Feb 2009 19:23:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9410811</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9410811.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9410811</wfw:commentRss><description>&lt;p&gt;I wrote a post on &lt;a href="http://shapingsoftware.com/2009/02/09/architectural-styles/" target="_blank"&gt;Architectural Styles&lt;/a&gt; on &lt;a href="http://ShapingSoftware.com" target="_blank"&gt;Shaping Software&lt;/a&gt;.&amp;#160; I tried to distill what I've learned on presenting architectural styles to various folks.&amp;#160; Architectural styles are basically sets of principles that shape an application.&amp;#160; By using architectural styles, you can abstract the conversation from the technologies.&amp;#160; For example, you can talk about SOA and key principles, before getting into debates over whether WCF or ASMX is the right technology.&amp;#160; In fact, I would argue that architectural styles are the backdrop that you overlay technologies on.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9410811" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Grady Booch on the Microsoft Application Architecture Guide 2.0</title><link>http://blogs.msdn.com/jmeier/archive/2008/12/31/grady-booch-on-the-microsoft-application-architecture-guide-2-0.aspx</link><pubDate>Wed, 31 Dec 2008 23:10:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9258877</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9258877.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9258877</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Grady_Booch" target="_blank"&gt;Grady Booch&lt;/a&gt; blogged about our &lt;a href="http://www.codeplex.com/AppArchGuide" target="_blank"&gt;patterns &amp;amp; practices Application Architecture Guide 2.0&lt;/a&gt;, which is our Microsoft playbook for the application platform.&amp;#160; It's a thoughtful post and he obviously took the time to figure out the structure of the guide.&amp;#160;&amp;#160; The guide is probably particularly relevant for him since he's working on his &lt;a href="http://www.handbookofsoftwarearchitecture.com" target="_blank"&gt;Handbook of Software Architecture&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Booch on the Application Architecture Guide 2.0     &lt;br /&gt;&lt;/strong&gt;Here's what Booch has to say:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;quot;I find this work to be very interesting (and useful). Architecture is all about making significant design decisions, and this guide focuses on a number of such decision points, including caching, communication, concurrency and transactions, configuration management, coupling and cohesion, data access, exception management, layering, logging and instrumentation, state management, structure, validation, and workflow (collectively, Microsoft calls these &amp;quot;architectural frames&amp;quot;). Full of best practices and patterns, I particularly liked the enumeration of architectural styles the authors have collected: client-server, component-based, layered, message-bus, model-view-controller, n-tier, object-oriented, and service-oriented. Congruent with these styles is their concept of application archetypes, which include mobile, rich client, rich internet, services, and web. Combine the these styles and archetypes, and you have an interesting language for describing a large class of applications. While I don't necessarily agree that these styles and archetypes are orthogonal (nor are the lists complete) for the general domain of software architecture, for Microsoft's purposes, these styles offer an excellent operating model into which one can apply their patterns and practices.&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;For whatever reason, I can't figure out how to link to the individual post, so I'm linking to the page that includes &lt;a href="http://www.handbookofsoftwarearchitecture.com/index.jsp?page=Blog" target="_blank"&gt;Grady's post on the Microsoft Application Architecture Guide&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My Take&lt;/strong&gt;    &lt;br /&gt;I agree with Grady that the list of application archetypes and arch styles is not complete (at least the versions that we've shared online).&amp;#160; We only shared a subset.&amp;#160; We do have some pretty rich Mind Maps that are more exhaustive, but they're somewhat unwieldy.&amp;#160; It's a trade-off.&lt;/p&gt;  &lt;p&gt;We basically forked the app types.&amp;#160; The app types that we shared are optimized around technical types that customers quickly identify with.&amp;#160; We also have a set of business types, but the problem is these are more long-tail and there was less agreement on naming.&amp;#160; Worse, customers couldn't quickly identify with them.&amp;#160; There was a slight learning curve.&amp;#160; I think we can potentially tune them and share them downstream, more as a visual catalog.&lt;/p&gt;  &lt;p&gt;On the arch styles, they're not necessarily orthogonal, but we found it helpful to first identify the overall app type (web, RIA, ... etc.) and then shape the app with the arch styles.&amp;#160; For precision, I think of the architecture styles as sets of principles that shape an important dimension of the application (such as deployment, structure, domain, communication ... etc.)&amp;#160; It's like a bunch of martial arts systems for different styles of fighting.&amp;#160; They have their pros and cons, but you can only evaluate them in context and measure effectiveness.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Key Take Aways     &lt;br /&gt;&lt;/strong&gt;Here's my key take aways:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Architecture Frames.&lt;/strong&gt;&amp;#160; The arch frames are useful for cataloging the patterns and practices into actionable categories: caching, communication, concurrency ... etc.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Architecture Styles&lt;/strong&gt;.&amp;#160; The arch styles include client-server, component-based, layered, message-bus, model-view-controller, N-tier, object-oriented, and service-oriented.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Application Archetypes&lt;/strong&gt;.&amp;#160; The application archetypes are a language for describing classes of apps: mobile, rich client, RIA, services and Web.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Someday, I'd like to synch with Grady and show him all the stuff we haven't exposed at this time, including our technical capability maps, pattern capability maps, application patterns, quality attribute maps, ... etc.&amp;#160; While a lot of it is half-baked, we have some good foundations for elaboration.&amp;#160; Unfortunately, there's only so much we could share in a six month project where the dominant focus is writing a book.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9258877" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/AppArch/default.aspx">AppArch</category></item><item><title>Scenario-Based Architecture Evaluation Methods</title><link>http://blogs.msdn.com/jmeier/archive/2008/09/25/scenario-based-architecture-evaluation-methods.aspx</link><pubDate>Thu, 25 Sep 2008 22:19:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8965436</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8965436.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8965436</wfw:commentRss><description>&lt;p&gt;I'm a fan of scenarios.&amp;#160; Whether you use scenarios for scenario-driven development,&amp;#160; scenario-based evaluations, competitive assessments or for shaping products ...&amp;#160; scenarios are where the rubber meets the road.&amp;#160; I think scenarios are particularly effective for evaluating architectures and for making architecture trade-off decisions.&amp;#160; I wrote a short post on &lt;a href="http://shapingsoftware.com/" target="_blank"&gt;Shaping Software&lt;/a&gt; that reiterates a mantra I frequently use ... &lt;a href="http://shapingsoftware.com/2008/09/25/you-cant-evaluate-architecture-in-a-vacuum/" target="_blank"&gt;you can't evaluate architecture in a vacuum&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8965436" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Model-Driven Approaches</title><link>http://blogs.msdn.com/jmeier/archive/2008/08/01/model-driven-approaches.aspx</link><pubDate>Fri, 01 Aug 2008 19:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8800539</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8800539.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8800539</wfw:commentRss><description>&lt;P&gt;When people ask me my take on model-driven approaches, I think of two ends of the spectrum -- human and the machine. 
&lt;P&gt;&lt;STRONG&gt;Key Points&lt;/STRONG&gt;&amp;nbsp; 
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Model for humans&lt;/STRONG&gt;.&amp;nbsp; For humans, I find using a whiteboard (whiteboard modeling) works well -- it's universal. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Model for machines&lt;/STRONG&gt;.&amp;nbsp; For machines, I find speaking closer to the code is a good thing and design is rarely a clean model. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Model to learn&lt;/STRONG&gt;.&amp;nbsp; I've found modeling more useful when you throw it away -- it's a learning tool.&amp;nbsp; Model so you get it, then go to it.&amp;nbsp; I think the key is that the model is a map, not the actual territory.&amp;nbsp; The usefulness of a map is actually decoupling from the complexity and creating a simpler lens. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Model to share&lt;/STRONG&gt;.&amp;nbsp; I think the real value of models is when you create a way to share the problem or solution in a simplified way.&amp;nbsp; This helps for sharing a vision of the end in mind, as well as getting more sustained thinking around the problem.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Model-Driven Code&lt;BR&gt;&lt;/STRONG&gt;I've never experienced an effective modeling approach that turns visuals of systems into code, where the model doesn't get in the way.&amp;nbsp; At some point, the model stops being useful for humans or stops being useful to the machine.&amp;nbsp; As a result, I've never really been a fan of model-driven approaches that are coupled to code in practice, although they're always interesting in theory.&amp;nbsp;&amp;nbsp; While I'm open to the idea, I just haven't seen it.&amp;nbsp; Am I missing out?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Effective Modeling for Shaping Software&lt;BR&gt;&lt;/STRONG&gt;While I'm not a fan of most visual modeling tools, there’s some very real modeling approaches I find to be effective (which is more about modeling for the humans to understand what matters.)&amp;nbsp; I find that light-weight, human-oriented models are particularly effective for shaping software around quality attributes.&amp;nbsp; For example:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Performance&lt;/STRONG&gt;.&amp;nbsp; For performance design, I've found Performance Modeling to be effective.&amp;nbsp; See &lt;A href="http://msdn.microsoft.com/en-us/library/ms998537.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms998537.aspx"&gt;patterns &amp;amp; practices Performance Modeling&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Security&lt;/STRONG&gt;.&amp;nbsp; For security design, I've found Threat Modeling to be effective.&amp;nbsp; See &lt;A href="http://msdn.microsoft.com/en-us/library/ms978516.aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms978516.aspx"&gt;patterns &amp;amp; practices Threat Modeling&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Reliability&lt;/STRONG&gt;.&amp;nbsp; For reliability design, I've found Fault-tree modeling to be effective.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;My Related Posts&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/jmeier/archive/2005/12/01/what-makes-a-good-threat-model.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2005/12/01/what-makes-a-good-threat-model.aspx"&gt;What Makes a Good Threat Model&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/jmeier/archive/2007/02/02/how-i-explain-threat-modeling-to-customers.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2007/02/02/how-i-explain-threat-modeling-to-customers.aspx"&gt;How I Explain Threat Modeling to Customers&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8800539" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Design/default.aspx">Design</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Architecture/default.aspx">Architecture</category></item></channel></rss>