<?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 : Agile</title><link>http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx</link><description>Tags: Agile</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><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>Writing Books on Time and on Budget</title><link>http://blogs.msdn.com/jmeier/archive/2009/02/06/writing-books-on-time-and-on-budget.aspx</link><pubDate>Fri, 06 Feb 2009 22:47:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9402771</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9402771.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9402771</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/WritingBooksonTimeandonBudget_A5E1/AppARch2.0_small_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="232" alt="AppARch2.0_small" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/WritingBooksonTimeandonBudget_A5E1/AppARch2.0_small_thumb.jpg" width="180" align="right" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;One of the questions I get asked is how did we execute our &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/24/abstract-for-application-architecture-guide-2-0.aspx"&gt;patterns &amp;amp; practices Application Architecture Guide 2.0 project&lt;/a&gt;, &lt;em&gt;on time and on budget&lt;/em&gt;?&amp;#160; It was a six month project, during which we ....&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Created a language and model for application architecture.&amp;#160; (See &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/12/31/grady-booch-on-the-microsoft-application-architecture-guide-2-0.aspx"&gt;Grady Booch on the Microsoft Application Architecture Guide 2.0&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Wrote a 300+ page book, the &lt;a href="http://www.codeplex.com/AppArchGuide" target="_blank"&gt;patterns &amp;amp; practices Application Architecture Guide 2.0&lt;/a&gt; (affectionately referred to as the &lt;em&gt;Microsoft Playbook for Application Architecture&lt;/em&gt;) &lt;/li&gt;    &lt;li&gt;Created an &lt;a href="http://www.codeplex.com/AppArch" target="_blank"&gt;Application Architecture Knowledge Base (KB)&lt;/a&gt;, with step-by-step How Tos, videos, checklists, slides, and reusable figures. &lt;/li&gt;    &lt;li&gt;Created a series of &lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Pocket%20Guides&amp;amp;referringTitle=Home" target="_blank"&gt;Pocket Guides for Application Architecture&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Created a &lt;a href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=.NET%20Platform%20Overview%20V2&amp;amp;referringTitle=Home" target="_blank"&gt;map of the Microsoft application platform&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Created technology matrixes to organize and navigate technology decisions.&amp;#160; (See the &lt;a href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Cheat%20Sheet%20-%20Presentation%20Technology%20Matrix&amp;amp;referringTitle=Home" target="_blank"&gt;Presentation Technology Matrix&lt;/a&gt;, &lt;a href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Cheat%20Sheet%20-%20Data%20Access%20Technology%20Matrix&amp;amp;referringTitle=Home" target="_blank"&gt;Data Access Technology Matrix&lt;/a&gt;, &lt;a href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Cheat%20Sheet%20-%20Workflow%20Technology%20Matrix&amp;amp;referringTitle=Home" target="_blank"&gt;Workflow Technology Matrix&lt;/a&gt;, and &lt;a href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Cheat%20Sheet%20-%20Integration%20Technology%20Matrix&amp;amp;referringTitle=Home" target="_blank"&gt;Integration Technology Matrix&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Created &lt;a href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Chapter%204%20-%20Designing%20Your%20Architecture&amp;amp;referringTitle=Home" target="_blank"&gt;a systematic approach for the architecture and design of applications&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Created &lt;a href="http://www.codeplex.com/AppArchGuide/Wiki/View.aspx?title=Pattern%20Catalog%20V2&amp;amp;referringTitle=Home" target="_blank"&gt;a patterns catalog for the patterns documented by the patterns &amp;amp; practices team&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Formed, stormed, normed, and created&amp;#160; a performing team. (See &lt;a href="http://en.wikipedia.org/wiki/Forming-storming-norming-performing" target="_blank"&gt;Wikipedia on Forming, Storming, Norming and Performing&lt;/a&gt;.) &lt;/li&gt;    &lt;li&gt;Coordinated among more than 70 internal and external reviewers, across key product groups and with our field, support, and experts.&amp;#160; (See the &lt;a href="http://www.codeplex.com/AppArchGuide" target="_blank"&gt;contributors and reviewers list&lt;/a&gt;.) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;2 Keys to Success&lt;/strong&gt;     &lt;br /&gt;We used two keys to success:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Fix time, Flex scope&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Agile Guidance Engineering&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Fix Time, Flex Scope&lt;/strong&gt;     &lt;br /&gt;One of the most successful patterns I've used for years now is to fix time, and flex scope.&amp;#160; The idea is to deliver incremental value and find a way to flow value along the way rather than wait for one big bang at the end.&amp;#160; This allows you to deliver the most timely and relevant value with a healthy worklife balance.&amp;#160; It helps reduce project risk along the way.&amp;#160; More importantly, it helps get your stakeholders on board, by showing them results versus just trust you to the end.&amp;#160; Scope is the best to flex because there's the least amount of precision or accuracy up front, and it enables you to respond to the market or stakeholder concerns more effectively.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Agile Guidance Engineering      &lt;br /&gt;&lt;/strong&gt;This is the secret sauce.&amp;#160; I call it &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/07/22/agile-guidance.aspx" target="_blank"&gt;Agile Guidance Engineering&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AgileGuidance_8C20/AgileGuidanceEngineering2_2.gif"&gt;&lt;img height="194" alt="AgileGuidanceEngineering2" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AgileGuidance_8C20/AgileGuidanceEngineering2_thumb.gif" width="486" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In a nutshell, Agile Guidance Engineering is about building guidance using nuggets of specific types (how tos, guidelines, checklists ... etc.) and composing them into books.&amp;#160; The books themselves are actually an information model.&amp;#160; The information model is designed to both structure the content as well as structure the problem domain.&amp;#160; We vet the nuggets as we go for feedback, and we prioritize, tune, and improve them along the way.&lt;/p&gt;  &lt;p&gt;I've used Agile Guidance Engineering successfully to build the following Microsoft patterns &amp;amp; practices Blue Books:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/AppArchGuide" target="_blank"&gt;Application Architecture Guide 2.0&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurityGuide" target="_blank"&gt;Improving Web Services Security&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb668991.aspx" target="_blank"&gt;Team Development with Visual Studio Team Foundation Server&lt;/a&gt; (&lt;a href="http://www.amazon.com/Development-Visual-Studio-Foundation-Server/dp/0735625719/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1233948348&amp;amp;sr=1-1" target="_blank"&gt;see Amazon for print version&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb924375.aspx" target="_blank"&gt;Performance Testing Guidance for Web Applications&lt;/a&gt; (&lt;a href="http://www.amazon.com/Performance-Testing-Guidance-Web-Applications/dp/0735625700/ref=sr_1_1?ie=UTF8&amp;amp;qid=1233948310&amp;amp;sr=1-1" target="_blank"&gt;see Amazon for print version&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms998382.aspx" target="_blank"&gt;Security Engineering Explained&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms998530.aspx" target="_blank"&gt;Improving .NET Application Performance and Scalability&lt;/a&gt; (&lt;a href="http://www.amazon.com/Improving-Application-Performance-Scalability-Practices/dp/0735618518/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1233948270&amp;amp;sr=1-1" target="_blank"&gt;see Amazon for print version&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms994921.aspx" target="_blank"&gt;Improving Web Application Security&lt;/a&gt; (&lt;a href="http://www.amazon.com/Improving-Web-Application-Security-Countermeasures/dp/0735618429/ref=sr_1_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1233948233&amp;amp;sr=1-3" target="_blank"&gt;see Amazon for print version&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa302415.aspx" target="_blank"&gt;Building Secure ASP.NET Applications&lt;/a&gt; (&lt;a href="http://www.amazon.com/Building-Microsoft-ASP-NET-Applications-Pro-Developer/dp/0735618909" target="_blank"&gt;see Amazon for print version&lt;/a&gt;) &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/2008/07/22/agile-guidance.aspx"&gt;Agile Guidance Engineering&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2007/12/24/building-books-in-patterns-amp-practices.aspx"&gt;Building Books in patterns &amp;amp; practices&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/24/abstract-for-application-architecture-guide-2-0.aspx"&gt;Abstract for Application Architecture Guide 2.0&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2009/01/09/microsoft-application-architecture-guide-2-0-impact.aspx" target="_blank"&gt;Microsoft Application Architecture Guide 2.0 Impact&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9402771" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Guidance+Engineering/default.aspx">Guidance Engineering</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx">Agile</category></item><item><title>Microsoft patterns &amp; practices Agile Workspace Tour</title><link>http://blogs.msdn.com/jmeier/archive/2009/01/19/microsoft-patterns-practices-agile-workspace-tour.aspx</link><pubDate>Mon, 19 Jan 2009 19:14:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9340263</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9340263.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9340263</wfw:commentRss><description>&lt;p&gt;I posted a visual walkthrough of our &lt;a href="http://shapingsoftware.com/2009/01/19/microsoft-patterns-practices-agile-workspace-tour/" target="_blank"&gt;Microsoft patterns &amp;amp; practices Agile workspace&lt;/a&gt; on &lt;a href="http://ShapingSoftware.com" target="_blank"&gt;Shaping Software&lt;/a&gt;.&amp;#160;&amp;#160; I basically did a lap around the halls and pointed out key things along the way.&amp;#160; Our patterns &amp;amp; practices team workspace is optimized for agile development practices.&amp;#160; The workspace features writeable walls, configurable workspace, speaker phones, projectors, focus rooms, and a customer room.&amp;#160;&amp;#160; The walkthrough is extensive.&amp;#160; It's basically more than 40 pictures.&amp;#160; Enjoy!&amp;#160; &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9340263" 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/Agile/default.aspx">Agile</category></item><item><title>Agile Architecture Method Pocket Guide</title><link>http://blogs.msdn.com/jmeier/archive/2008/11/24/agile-architecture-method-pocket-guide.aspx</link><pubDate>Tue, 25 Nov 2008 02:54:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9139620</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9139620.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9139620</wfw:commentRss><description>&lt;div class="noprint" style="float: right; margin: 0px"&gt;&lt;img title="Agile Architecture Method Pocket Guide" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="199" alt="Agile Architecture Method Pocket Guide" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AgileArchitectureMethodPocketGuide_DF93/Agile%20Architecture%20Method%20Pocket%20Guide_thumb.png" width="154" border="0" /&gt; &lt;/div&gt; We posted our &lt;a href="http://www.guidanceshare.com/wiki/Agile_Architecture_Method_Explained" target="_blank"&gt;Agile Architecture Method Pocket Guide&lt;/a&gt; to our &lt;a href="http://www.codeplex.com/AppArch" target="_blank"&gt;Application Architecture Guidance KB&lt;/a&gt;.&amp;#160; This is in response to customers who expressed interest in more modular guides as a supplement to our &lt;a href="http://www.codeplex.com/AppArchGuide" target="_blank"&gt;Application Architecture Guide 2.0&lt;/a&gt;.   &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Chapters At a Glance&lt;/strong&gt;     &lt;br /&gt;Here&amp;#8217;s the chapters at a glance: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ch 01 - Agile Architecture Method &lt;/li&gt;    &lt;li&gt;Ch 02 - Step 1 - Identify Objectives &lt;/li&gt;    &lt;li&gt;Ch 03 - Step 2 - Identify Key Scenarios &lt;/li&gt;    &lt;li&gt;Ch 04 - Step 3 - Application Overview &lt;/li&gt;    &lt;li&gt;Ch 05 - Step 4 - Key Hot Spots &lt;/li&gt;    &lt;li&gt;Ch 06 - Step 5 - Candidate Solutions &lt;/li&gt;    &lt;li&gt;Ch 07 - Reviewing Your Architecture &lt;/li&gt;    &lt;li&gt;Ch 08 - Communicating Your Architecture &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Agile_Architecture_Method_Explained" target="_blank"&gt;Download the Agile Architecture Method Pocket Guide&lt;/a&gt;. &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/2008/11/24/web-application-architecture-pocket-guide.aspx" target="_blank"&gt;Web Application Architecture Pocket Guide&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/11/24/mobile-application-architecture-pocket-guide.aspx"&gt;Mobile Application Architecture Pocket Guide&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/11/24/ria-architecture-pocket-guide.aspx"&gt;RIA Architecture Pocket Guide&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/11/24/rich-client-application-architecture-pocket-guide.aspx"&gt;Rich Client Application Architecture Pocket Guide&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/11/24/service-architecture-pocket-guide.aspx"&gt;Service Architecture Pocket Guide&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/11/24/application-architecture-diagrams-added-to-codeplex.aspx"&gt;Application Architecture Visios Now Available&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9139620" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Guidance+Engineering/default.aspx">Guidance Engineering</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx">Agile</category></item><item><title>Agile Architecture Method</title><link>http://blogs.msdn.com/jmeier/archive/2008/11/06/agile-architecture-method.aspx</link><pubDate>Thu, 06 Nov 2008 07:31:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9046773</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9046773.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9046773</wfw:commentRss><description>&lt;div class="noprint" style="float: right; margin: 0px"&gt;&lt;img title="AgileArchitecture" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="350" alt="AgileArchitecture" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AgileArchitectureMethod_1207E/AgileArchitecture_thumb.jpg" width="230" border="0" /&gt; &lt;/div&gt;  &lt;p&gt;I presented our new patterns &amp;amp; practices Agile Architecture Method for the first time at the patterns &amp;amp; practices Summit.&amp;#160;&amp;#160; Our Agile Architecture Method is an iterative and incremental approach for designing architectures.&amp;#160; &lt;/p&gt;  &lt;p&gt;To summarize, it&amp;#8217;s a technique that:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Scopes and focuses your architecture exercise. &lt;/li&gt;    &lt;li&gt;Uses scenarios to drive the design and evaluate potential solutions. &lt;/li&gt;    &lt;li&gt;Helps you think through your choice of application type, deployment, architectural style and technologies. &lt;/li&gt;    &lt;li&gt;Helps you quickly iterate through potential solutions. &lt;/li&gt;    &lt;li&gt;Helps you map potential patterns. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I&amp;#8217;ve summarized the approach below, and we&amp;#8217;ve posted a step-step how to on CodePlex:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=How%20To%20-%20Design%20Using%20Agile%20Architecture&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To Design Using Agile Architecture&lt;/a&gt;&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Input&lt;/strong&gt;     &lt;br /&gt;Here&amp;#8217;s the key input into the process:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Use cases and usage scenarios &lt;/li&gt;    &lt;li&gt;Functional requirements &lt;/li&gt;    &lt;li&gt;Non-functional requirements (quality attributes such as performance, security, and reliability) &lt;/li&gt;    &lt;li&gt;Technological requirements &lt;/li&gt;    &lt;li&gt;Target deployment environment &lt;/li&gt;    &lt;li&gt;Constraints &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Output      &lt;br /&gt;&lt;/strong&gt;Here&amp;#8217;s the key output of the process:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Architecturally significant use cases &lt;/li&gt;    &lt;li&gt;Architecture hot spots &lt;/li&gt;    &lt;li&gt;Candidate architectures &lt;/li&gt;    &lt;li&gt;Architectural spikes &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Summary of Steps&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Step 1. Identify Architecture Objectives. &lt;/li&gt;    &lt;li&gt;Step 2. Identify Key Scenarios. &lt;/li&gt;    &lt;li&gt;Step 3. Create an Application Overview. &lt;/li&gt;    &lt;li&gt;Step 4. Analyze Key Hot Spots. &lt;/li&gt;    &lt;li&gt;Step 5. Create Candidate Solutions. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Step 1. Identify Architecture Objectives&lt;/strong&gt;     &lt;br /&gt;This is a scoping exercise.&amp;#160; The purpose of this step is to figure out how much time and energy to spend on subsequent steps as well as guide your overall effort.&amp;#160;&amp;#160; You should know what you want in terms of outcomes.&amp;#160; Here&amp;#8217;s an example of potential goals: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Build a prototype &lt;/li&gt;    &lt;li&gt;Identify key technical risks &lt;/li&gt;    &lt;li&gt;Test potential paths &lt;/li&gt;    &lt;li&gt;Share models and understanding &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Step 2. Identify Key Scenarios&lt;/strong&gt;     &lt;br /&gt;Identify relevant scenarios to focus your design on what matters most, and to evaluate your candidate solutions.&amp;#160;&amp;#160;&amp;#160; In this case, you want to identify architecturally significant use cases.&amp;#160; Architecturally significant use cases are those that meet the following criteria: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;They are important for the success and acceptance of the deployed application. &lt;/li&gt;    &lt;li&gt;They exercise enough of the design to be useful in evaluating the architecture. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;You can draw key scenarios from your user stories, business stories and system stories. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 3. Create an Application Overview&lt;/strong&gt;     &lt;br /&gt;Create an application overview.&amp;#160; The application overview serves to make your architecture more real, connecting it to real-world constraints and decisions.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AgileArchitectureMethod_1207E/WhiteboardingYourDesign_2.gif"&gt;&lt;img title="WhiteboardingYourDesign" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="251" alt="WhiteboardingYourDesign" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AgileArchitectureMethod_1207E/WhiteboardingYourDesign_thumb.gif" width="450" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;An application overview consists of the following steps: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Determine your application type. First, determine what type of application you are building. Is it a mobile application, a rich client, a rich internet application, a service, a Web application, or some combination? &lt;/li&gt;    &lt;li&gt;Understand your deployment constraints. Next, understand your targeted deployment environment and determine what impact this will have on your architecture. &lt;/li&gt;    &lt;li&gt;Identify important architectural styles. Determine which architectural styles you will be using in your design. Will you build a service oriented architecture, client/server, layered, a message bus, or some combination? &lt;/li&gt;    &lt;li&gt;Determine relevant technologies. Finally, identify the relevant technology choices based on your application type, architectural styles and deployment constraints. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A good test of an application overview is whether you can whiteboard it. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 4. Analyze Key Hot Spots&lt;/strong&gt;     &lt;br /&gt;Identify key hotspots based on quality attributes and the architecture frame. These are the areas where mistakes are most often made when designing an application. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Quality Attributes Frame&lt;/strong&gt;     &lt;br /&gt;Understand the quality attributes that are important for your application and scenarios. For instance, most applications need to address security and performance and will be traded against usability, flexibility and other attributes that may be more or less important to you depending on your scenarios and requirements.&amp;#160; You can use the following frame to identify key quality attributes to consider:     &lt;br /&gt;&lt;/p&gt;  &lt;table border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th&gt;Category&lt;/th&gt;        &lt;th&gt;Considerations&lt;/th&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Availability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to design for failover support &lt;/li&gt;          &lt;li&gt;How to design a redundant site &lt;/li&gt;          &lt;li&gt;How to plan for backup and recovery How to design for runtime upgrades &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Conceptual Integrity&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to isolate from external dependencies &lt;/li&gt;          &lt;li&gt;How to create a migration path from legacy technologies &lt;/li&gt;          &lt;li&gt;How evolve the system without breaking clients &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Flexibility&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to handle dynamic business rules How to handle dynamic UI &lt;/li&gt;          &lt;li&gt;How to handle changes in data and logic processing &lt;/li&gt;          &lt;li&gt;How to handle changes in business requirements &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Interoperability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to allow applications to interoperate while still evolving separately &lt;/li&gt;          &lt;li&gt;How to isolate systems through the use of service interfaces &lt;/li&gt;          &lt;li&gt;How to isolate systems through the use of mapping layers &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Maintainability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to reduce dependencies between layers and components &lt;/li&gt;          &lt;li&gt;How to implement a pluggable architecture &lt;/li&gt;          &lt;li&gt;How to choose an appropriate communication model &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Manageability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to understand the key types of failure &lt;/li&gt;          &lt;li&gt;How to monitor system operation and health &lt;/li&gt;          &lt;li&gt;How to modify system behavior based on load &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Performance&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to determine a caching strategy &lt;/li&gt;          &lt;li&gt;How to design high performance communication between layers &lt;/li&gt;          &lt;li&gt;How to design high performance data access &lt;/li&gt;          &lt;li&gt;How to manage resources effectively &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Reliability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to handle unreliable external systems &lt;/li&gt;          &lt;li&gt;How to audit requests and jobs &lt;/li&gt;          &lt;li&gt;How to redirect load &lt;/li&gt;          &lt;li&gt;How to handle failed communication &lt;/li&gt;          &lt;li&gt;How to handle failed transactions &lt;/li&gt;          &lt;li&gt;How to handle exceptions &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Reusability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to reduce duplication between components and layers &lt;/li&gt;          &lt;li&gt;How to share functionality across systems &lt;/li&gt;          &lt;li&gt;How to share functionality across components and layers &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Scalability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to design layers and tiers for scalability &lt;/li&gt;          &lt;li&gt;How to scale-up or scale-out &lt;/li&gt;          &lt;li&gt;How to handle spikes in traffic and load &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Security&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to address authentication and authorization. &lt;/li&gt;          &lt;li&gt;How to protect against malicious input. &lt;/li&gt;          &lt;li&gt;How to protect sensitive data &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Supportability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to design auditing and logging &lt;/li&gt;          &lt;li&gt;How to design usable error messages &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Testability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to design for testability &lt;/li&gt;          &lt;li&gt;How to design unit tests &lt;/li&gt;          &lt;li&gt;How to design for UI automation &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Usability&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to design for user empowerment &lt;/li&gt;          &lt;li&gt;How to improve responsiveness &lt;/li&gt;          &lt;li&gt;How to avoid common user experience pitfalls &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;Architecture Frame&lt;/strong&gt;     &lt;br /&gt;The architecture frame represents cross cutting concerns that will impact your design across layers and tiers. These are also the areas in which high impact design mistakes are most often made. Use the architecture frame to identify hot spots in your design that require additional attention to get right.&amp;#160; You can use the following architecture frame to identify cross cutting concerns in your design:     &lt;br /&gt;&lt;/p&gt;  &lt;table border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th&gt;Category&lt;/th&gt;        &lt;th&gt;Considerations&lt;/th&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Authentication and Authorization&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to choose an authentication strategy. &lt;/li&gt;          &lt;li&gt;How to choose an authorization strategy. &lt;/li&gt;          &lt;li&gt;How to flow identity across layers and tiers. &lt;/li&gt;          &lt;li&gt;How to store user identities when not using Active Directory. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Caching and State&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to choose an appropriate caching technology. &lt;/li&gt;          &lt;li&gt;How to determine what data to cache. &lt;/li&gt;          &lt;li&gt;How to determine where to cache the data. &lt;/li&gt;          &lt;li&gt;How to determine the expiration policy. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Communication&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to choose appropriate protocols for communication across layers and tiers. &lt;/li&gt;          &lt;li&gt;How to design loose coupling across layers. &lt;/li&gt;          &lt;li&gt;How to perform asynchronous communication. &lt;/li&gt;          &lt;li&gt;How to pass sensitive data. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Composition&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to choose a composition pattern for the user interface (UI). &lt;/li&gt;          &lt;li&gt;How to avoid dependencies between modules in the UI. &lt;/li&gt;          &lt;li&gt;How to handle communication between modules in the UI. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Concurrency and Transactions&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to handle concurrency between threads. &lt;/li&gt;          &lt;li&gt;How to choose between optimistic and pessimistic concurrency. &lt;/li&gt;          &lt;li&gt;How to handle distributed transactions. &lt;/li&gt;          &lt;li&gt;How to handle long running transactions. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Configuration Management&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to determine what information needs to be configurable. &lt;/li&gt;          &lt;li&gt;How to determine where and how to store configuration information. &lt;/li&gt;          &lt;li&gt;How to protect sensitive configuration information. &lt;/li&gt;          &lt;li&gt;How to handle configuration information in a farm/cluster. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Coupling and Cohesion&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to choose an appropriate layering strategy for separation of concerns. &lt;/li&gt;          &lt;li&gt;How to design highly cohesive components and group them within layers. &lt;/li&gt;          &lt;li&gt;How to determine when loose coupling is appropriate between components within a layer. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Data Access&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to manage database connections. &lt;/li&gt;          &lt;li&gt;How to handle exceptions. &lt;/li&gt;          &lt;li&gt;How to improve performance. &lt;/li&gt;          &lt;li&gt;How to handle binary large objects (blobs). &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Exception Management&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to handle exceptions. &lt;/li&gt;          &lt;li&gt;How to log exceptions. &lt;/li&gt;          &lt;li&gt;How to provide notification when required. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Logging and Instrumentation&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to determine which information to log. &lt;/li&gt;          &lt;li&gt;How to make the logging configurable. &lt;/li&gt;          &lt;li&gt;How to determine what level of instrumentation is required. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;User Experience&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to improve task efficiency and effectiveness. &lt;/li&gt;          &lt;li&gt;How to improve responsiveness. &lt;/li&gt;          &lt;li&gt;How to improve user empowerment. &lt;/li&gt;          &lt;li&gt;How to improve look and feel. &amp;lt;/&amp;gt; &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Validation&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to determine where and how to perform validation. &lt;/li&gt;          &lt;li&gt;How to validate for length, range, format, and type. &lt;/li&gt;          &lt;li&gt;How to constrain and reject input. &lt;/li&gt;          &lt;li&gt;How to sanitize output. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;em&gt;Workflow&lt;/em&gt;&lt;/td&gt;        &lt;td&gt;         &lt;li&gt;How to choose the appropriate workflow technology. &lt;/li&gt;          &lt;li&gt;How to handle concurrency issues within a workflow. &lt;/li&gt;          &lt;li&gt;How to handle task failure within a workflow. &lt;/li&gt;          &lt;li&gt;How to orchestrate processes within a workflow. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;Step 5. Create Candidate Solutions&lt;/strong&gt;     &lt;br /&gt;Create a candidate architecture and along with architectural spikes and evaluate it against your key scenarios, hot spots, and deployment constraints.&amp;#160; The outcomes of this step are: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Baseline / Candidate Architectures &lt;/li&gt;    &lt;li&gt;Architectural Spikes &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Iterative and Incremental Design&lt;/strong&gt;     &lt;br /&gt;You can iteratively flesh out your architecture as you work through your design and discover more details that impact your architecture.&amp;#160; You don&amp;#8217;t have to design your architecture in a single iteration. Do not get lost in the details; focus on the big steps and build a framework on which you can base your architecture and design.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My Related Posts&lt;/strong&gt;&lt;/p&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/10/27/new-release-patterns-practices-app-arch-guide-2-0-beta-1.aspx"&gt;New Release: patterns &amp;amp; practices App Arch Guide 2.0 Beta 1&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/02/patterns-practices-app-arch-guide-2-0-project.aspx"&gt;patterns &amp;amp; practices App Arch Guide 2.0 Project&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/26/app-arch-guide-2-0-overview-slides.aspx"&gt;App Arch Guide 2.0 Overview Slides&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/24/abstract-for-application-architecture-guide-2-0.aspx"&gt;Abstract for Application Architecture Guide 2.0&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/03/app-arch-meta-frame.aspx"&gt;App Arch Meta-Frame&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/18/app-types.aspx"&gt;App Types&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/22/architecture-frame.aspx"&gt;Architecture Frame&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/11/guidelines-are-live.aspx"&gt;App Arch Guidelines&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/07/layers-and-components.aspx"&gt;Layers and Components&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/17/key-software-trends.aspx"&gt;Key Software Trends&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/10/09/cheat-sheet-patterns-practices-catalog-at-a-glance-posted-to-codeplex.aspx"&gt;Cheat Sheet: patterns &amp;amp; practices Catalog at a Glance Posted to CodePlex&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/10/21/cheat-sheet-patterns-practices-pattern-catalog-posted-to-codeplex.aspx"&gt;Cheat Sheet: patterns &amp;amp; practices Pattern Catalog Posted to CodePlex&lt;/a&gt;     &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/li&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9046773" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Process/default.aspx">Process</category></item><item><title>New Release: Distributed Agile Development at Microsoft patterns &amp; practices</title><link>http://blogs.msdn.com/jmeier/archive/2008/10/30/new-release-distributed-agile-development-at-microsoft-patterns-practices.aspx</link><pubDate>Thu, 30 Oct 2008 23:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9025227</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9025227.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9025227</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://download.microsoft.com/download/4/4/a/44a2cebd-63fb-4379-898d-9cf24822c6cc/distributed_agile_development_at_microsoft_patterns_and_practices.pdf" target="_blank" rel="nofollow"&gt;Distributed Agile Development at Microsoft patterns &amp;amp; practices&lt;/a&gt; (PDF) is now available.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Abstract      &lt;br /&gt;&lt;/strong&gt;Distributed development is a fact of life for many teams. Unfortunately most agile methodologies or approaches assume that the team is located in a single team room. Until recently there has been little guidance about how to apply these approaches with a geographically dispersed team.&amp;#160;&amp;#160; Microsoft&amp;#8217;s patterns &amp;amp; practices group has been following an agile, distributed development approach for the past five years. During this time teams within the group have experimented extensively with different approaches to best address the challenges of distributed agile development. This paper outlines the challenges faced by geographically distributed agile teams and details some proven practices to address these issues and build successful distributed teams. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Contents at a Glance&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Introduction &lt;/li&gt;    &lt;li&gt;Why Colocate? &lt;/li&gt;    &lt;li&gt;The Reality of Distributed Teams &lt;/li&gt;    &lt;li&gt;Distributed Teams at patterns &amp;amp; practices &lt;/li&gt;    &lt;li&gt;Challenges &lt;/li&gt;    &lt;li&gt;Proven Practices &lt;/li&gt;    &lt;li&gt;Focus on Communication &lt;/li&gt;    &lt;li&gt;Plan to Travel &lt;/li&gt;    &lt;li&gt;Team Distribution &lt;/li&gt;    &lt;li&gt;Focus on Coaching the Team &lt;/li&gt;    &lt;li&gt;Distribution of Work &lt;/li&gt;    &lt;li&gt;Build the Team Over Time &lt;/li&gt;    &lt;li&gt;Provide the Right Tools &lt;/li&gt;    &lt;li&gt;Conclusions &lt;/li&gt;    &lt;li&gt;Acknowledgements &lt;/li&gt;    &lt;li&gt;About the Author &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Key Links&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/4/4/a/44a2cebd-63fb-4379-898d-9cf24822c6cc/distributed_agile_development_at_microsoft_patterns_and_practices.pdf" target="_blank" rel="nofollow"&gt;Distributed Agile Development at Microsoft patterns &amp;amp; practices&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9025227" 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/Agile/default.aspx">Agile</category></item><item><title>Software Methodologies at a Glance</title><link>http://blogs.msdn.com/jmeier/archive/2008/08/18/software-methodologies-at-a-glance.aspx</link><pubDate>Mon, 18 Aug 2008 09:14:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8875954</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8875954.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8875954</wfw:commentRss><description>&lt;p&gt;I like to draw from a variety of sources for software engineering principles, patterns, and practices.&amp;#160; To be able to do this, I usually need to create information models that let me quickly scan bodies of knowledge.&amp;#160; Once I can frame out a space, it's a lot easier to drill into areas looking for gold.&amp;#160; I can also step back and see across approaches and this helps me see underlying principles or key distinctions between approaches.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;XP, MSF Agile, RUP, and Microsoft Solution Framework      &lt;br /&gt;&lt;/strong&gt;To compare process methodologies, here are some skeletal information models I've used:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/08/18/extreme-programming-xp-at-a-glance/" target="_blank"&gt;Extreme Programming (XP) at a Glance&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/08/18/msf-agile-at-a-glance/" target="_blank"&gt;MSF Agile at a Glance&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/08/18/rational-unified-process-rup-at-a-glance/" target="_blank"&gt;Rational Unified Process (RUP) at a Glance&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/08/18/microsoft-solution-framework-msf-at-a-glance/" target="_blank"&gt;Microsoft Solution Framework (MSF) at a Glance&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;While the frames aren't entirely consistent, I can still quickly scan the methodologies and get a good sense of what the key ideas, activities, artifacts, and practices are.&lt;/p&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/2007/07/01/msf-agile-frame-workstreams-and-key-activities.aspx"&gt;MSF Agile Frame (Workstreams and Activities)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8875954" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Process/default.aspx">Process</category></item><item><title>Agile Guidance</title><link>http://blogs.msdn.com/jmeier/archive/2008/07/22/agile-guidance.aspx</link><pubDate>Tue, 22 Jul 2008 19:58:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8764421</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8764421.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8764421</wfw:commentRss><description>&lt;p&gt;When I ramp new folks on the team, I find it helpful to whiteboard how I build prescriptive guidance.&amp;#160; Here's a rough picture of the process:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AgileGuidance_8C20/AgileGuidanceEngineering2_2.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="194" alt="AgileGuidanceEngineering2" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AgileGuidance_8C20/AgileGuidanceEngineering2_thumb.gif" width="486" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Examples     &lt;br /&gt;&lt;/strong&gt;I've used the same process for &lt;a href="http://msdn.microsoft.com/en-us/library/bb924375.aspx" target="_blank"&gt;Performance Testing Guidance&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb668991.aspx" target="_blank"&gt;Team Development with Visual Studio Team Foundation Server&lt;/a&gt;, and &lt;a href="http://www.msn.com/WCFSecurity" target="_blank"&gt;WCF Security&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here's a brief explanation of what happens along the way:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Design     &lt;br /&gt;&lt;/strong&gt;The dominant focus here is identifying candidate problems, candidate solutions, and figuring out key risks, as well as testing paths to explore.&amp;#160; The best outcome is a set of scenarios we can execute against.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Research&lt;/strong&gt; - finding the right people, the right problems, and the right solutions. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Prototypes&lt;/strong&gt; - experiment and test areas of high risk to prove the path.&amp;#160; This can include innovating on how we build prescriptive guidance.&amp;#160; We also use these to test with customers and get feedback on the approach. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Question Lists&lt;/strong&gt; - building organized lists of one-liner user questions. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Task Lists&lt;/strong&gt; - building organized lists of one-liner user tasks. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Scenario Frames&lt;/strong&gt; - organizing scenarios into meaningful buckets.&amp;#160; See &lt;a href="http://blogs.msdn.com/jmeier/pages/scenario-frame-example.aspx"&gt;Scenario Frame Example&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Information Models&lt;/strong&gt; - framing out the problem space and creating useful ways to organize, share, and act on the information.&amp;#160; See &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/06/04/web-services-security-frame.aspx"&gt;Web Services Security Frame&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Guidance Types&lt;/strong&gt;&amp;#160; - testing which guidance types to use (how tos, checklists, guidelines, patterns, ... etc.)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Execution&lt;/strong&gt;    &lt;br /&gt;The dominant focus here is product results.&amp;#160; It's scenario-driven.&amp;#160; Each week we pick scenarios to execute against.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Development&lt;/strong&gt; - building prescriptive guidance, including coding, testing, and writing. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Backlog&lt;/strong&gt; - our backlog is a prioritized set of scenarios and guidance modules. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Iterations&lt;/strong&gt; - picking sets of scenarios to focus development on and test against. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Refactoring&lt;/strong&gt; - tuning and pruning the guidance to improve effectiveness.&amp;#160; This includes breaking the content up and rewriting it.&amp;#160; For example, a common refactoring is factoring reference information from action.&amp;#160; We try to keep reference information in our Explained modules and action information in our How Tos. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Testing&lt;/strong&gt; -&amp;#160; step through the guidance against the scenario.&amp;#160; The first pass is about making sure it works.&amp;#160; It should be executable by a human.&amp;#160; Next, it's about reducing friction and making sure the guidance really hits the what, why and how.&amp;#160; We test the guidance against objectives and scenarios with acceptance criteria so we know when we're done. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Problem Repros&lt;/strong&gt; - creating step by step examples that reproduce a given problem. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Solution Repros&lt;/strong&gt; - creating step by step examples that reproduce a given solution.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Release&lt;/strong&gt;    &lt;br /&gt;We produce a Knowledge Base (KB) of guidance modules and a guide.&amp;#160; The guidance modules are modular and can be reused.&amp;#160;&amp;#160; The guide includes chapters in addition to the guidance modules.&amp;#160; Here's examples from our WCF Security Guide:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity" target="_blank"&gt;KB Example (WCF Security KB)&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurityGuide" target="_blank"&gt;Guide Example (WCF Security Guide)&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Agile Publishing     &lt;br /&gt;&lt;/strong&gt;We release our guidance modules along the way to test reactions, get feedback and reshape the approach as needed.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;CodePlex&lt;/strong&gt; - we publish our guidance modules to CodePlex so we can share early versions of the guidance and get customer feedback, as well as to test the structure of the guidance, and experiment with user experience. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Guidance Explorer&lt;/strong&gt; - we publish guidance modules to &lt;a href="http://www.codeplex.com/GuidanceExplorer" target="_blank"&gt;Guidance Explorer&lt;/a&gt; so users can do their own guidance mash ups and build their own personalized guides.&amp;#160; Our field also uses this to build customized sets of guidance for customers.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Stable Reference     &lt;br /&gt;&lt;/strong&gt;Once we've tested and vetted the guidance and have made it through a few rounds of customer feedback, we push the guidance to MSDN.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;MSDN&lt;/strong&gt; - this is the trusted site that users expect to see our prescriptive guidance in final form. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Visual Studio/ Visual Studio Team System&lt;/strong&gt; - once we're a part of the MSDN distribution, we can automatically take advantage of the VS/VSTS documentation integration.&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/2007/12/24/building-books-in-patterns-amp-practices.aspx"&gt;Building Books in patterns &amp;amp; practices&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2006/11/21/test-driven-guidance.aspx"&gt;Test-Driven Guidance&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8764421" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Guidance+Engineering/default.aspx">Guidance Engineering</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx">Agile</category></item><item><title>MSF Agile Frame (Workstreams and Key Activities)</title><link>http://blogs.msdn.com/jmeier/archive/2007/07/01/msf-agile-frame-workstreams-and-key-activities.aspx</link><pubDate>Sun, 01 Jul 2007 02:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3632341</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/3632341.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=3632341</wfw:commentRss><description>&lt;p&gt;When I review an approach, I find it helpful to distill it to a simple frame so I can get a bird's-eye view.&amp;#160; For MSF Agile, I found the most useful frame to be the workstreams and key activities.&amp;#160; According to MSF, workstreams are simply groups of activities that flow logically together and are usually associated with a particular role.&amp;#160; I couldn't find this view in MSF Agile, so I created one:&lt;/p&gt;  &lt;table class=""&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;thead&gt;     &lt;tr&gt;       &lt;th class=""&gt;Workstream &lt;/th&gt;        &lt;th class=""&gt;Role &lt;/th&gt;        &lt;th class=""&gt;Key Activities &lt;/th&gt;     &lt;/tr&gt;   &lt;/thead&gt;&lt;/tr&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Capture Project Vision&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Business Analyst &lt;/td&gt;        &lt;td class=""&gt;Write Vision Statement; Define Personas; Refine Personas &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Create a Quality of Service Requirement&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Business Analyst &lt;/td&gt;        &lt;td class=""&gt;Brainstorm quality of Service Requirements; Develop Lifestyle Snapshot; Prioritize Quality of Service Requirements List; Write Quality of Service Requirements; Identify Security Objectives &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Create a Scenario&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Business Analyst &lt;/td&gt;        &lt;td class=""&gt;Brainstorm Scenarios; Develop Lifestyle Snapshot; Prioritize Scenario List; Write Scenario Description; Storyboard a Scenario &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Guide Project&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Project Manager &lt;/td&gt;        &lt;td class=""&gt;Review Objectives; Assess Progress; Evaluate Test Metric Thresholds; Triage Bugs; Identify Risk &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Plan an Iteration&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Project Manager &lt;/td&gt;        &lt;td class=""&gt;Determine Iteration Length; Estimate Scenario; Estimate Quality of Service Requirements; Schedule Scenario; Schedule Quality of Service Requirement; Schedule bug Fixing Allotment; Divide Scenarios into Tasks; Divide Quality of Service Requirements into Tasks &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Guide Iteration&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Project Manager &lt;/td&gt;        &lt;td class=""&gt;Monitor Iteration; Mitigate a Risk; Conduct Retrospectives &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Create a Solution Architecture&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Architect &lt;/td&gt;        &lt;td class=""&gt;Partition the System; Determine Interfaces; Develop Threat Model; Develop Performance Model; Create Architectural Prototype; Create Infrastructure Architecture &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Build a Product&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Developer &lt;/td&gt;        &lt;td class=""&gt;Start a Build; Verify a Build; Fix a Build; Accept Build &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Fix a Bug&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Developer &lt;/td&gt;        &lt;td class=""&gt;Reproduce the Bug; Locate the Cause of a Bug; Reassign a Bug; Decide on a Bug Fix Strategy; Code the Fix for a Bug; Create or Update a Unit Test; Perform a Unit Test; Refactor Code; Review Code &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Implement a Development Task&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Developer &lt;/td&gt;        &lt;td class=""&gt;Cost a Development Task; Create or Update a Unit Test; Write Code for a Development Task; Perform Code Analysis; Perform a Unit Test; Refactor Code; Review Code; Integrate Code Changes &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Close a Bug&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Tester &lt;/td&gt;        &lt;td class=""&gt;Verify a Fix; Close the Bug &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Test a Quality of Service Requirement&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Tester &lt;/td&gt;        &lt;td class=""&gt;Define Test Approach; Write Performance Tests; Write Security Tests; Write Stress Tests; Write Load Tests; Select and Run a Test Case; Open a Bug; Conduct Exploratory Testing &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Test a Scenario&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Tester &lt;/td&gt;        &lt;td class=""&gt;Define Test Approach; Write Validation Tests; Select and Run a Test Case; Open a Bug; Conduct Exploratory Testing &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class=""&gt;&lt;em&gt;Release a Product&lt;/em&gt; &lt;/td&gt;        &lt;td class=""&gt;Release Manager &lt;/td&gt;        &lt;td class=""&gt;Execute a Release Plan; Validate a Release; Create Release Notes; Deploy the Product &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p mce_keep="true"&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3632341" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Process/default.aspx">Process</category></item><item><title>MSF Agile Persona Template</title><link>http://blogs.msdn.com/jmeier/archive/2007/02/04/msf-agile-persona-template.aspx</link><pubDate>Mon, 05 Feb 2007 01:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1600082</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/1600082.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=1600082</wfw:commentRss><description>&lt;p&gt;I was looking for examples of persona templates, and I came across &lt;a class="" href="http://agile.csc.ncsu.edu/SEMaterials/Personas.pdf" mce_href="http://agile.csc.ncsu.edu/SEMaterials/Personas.pdf"&gt;Personas: Moving Beyond Role-Based Requirements Engineering&lt;/a&gt; by &lt;a class="" href="http://blogs.msdn.com/randymiller/" mce_href="http://blogs.msdn.com/randymiller/"&gt;Randy Miller&lt;/a&gt; and Laurie Williams.&amp;#160; I found it to be insightful and practical.&amp;#160; I also like the fact they included a snapshot of a persona template example from MSF Agile ...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MSF Agile Persona Template&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt; - Enter a respectful, fictitious name for the persona. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Status and Trust Level&lt;/strong&gt; - Favored or disfavored and level of credentials. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Role&lt;/strong&gt; - Place the user group in which the persona belongs. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Demographics&lt;/strong&gt; - Age and personal details optional Goals, motives and concerns. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Knowledge, skills and abilities&lt;/strong&gt; - Group real but generalized information about the capabilities of the persona. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Goals, motives, and concerns&lt;/strong&gt; - Describe the real needs of the users in the user group represented by the persona. If multiple groupings exist, write a persona for each grouping. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Usage Patterns&lt;/strong&gt; - Write the frequency and usage patterns of the system by the persona. Develop a detailed understanding of what functions would be most used. Look for any challenges that the system must help the persona overcome. Note the learning and interaction style if the system is new. Does the persona explore the system to find new functionality or need guidance? Keep this area brief but accurate.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1600082" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Process/default.aspx">Process</category></item></channel></rss>