<?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 : Software Engineering</title><link>http://blogs.msdn.com/jmeier/archive/tags/Software+Engineering/default.aspx</link><description>Tags: Software Engineering</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Experience-Driven Development</title><link>http://blogs.msdn.com/jmeier/archive/2009/09/15/experience-driven-development.aspx</link><pubDate>Tue, 15 Sep 2009 08:46:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9895258</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9895258.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9895258</wfw:commentRss><description>&lt;p&gt;Features don’t necessarily aggregate up to “experiences” and I would argue that today’s winning approach is … &lt;/p&gt;  &lt;p&gt;… Experience-Driven Development &lt;/p&gt;  &lt;p&gt;… Where experience means user’s can perform their goals successfully… the software makes them feel good and succeed at their goals.&amp;#160; It’s an integration of scenarios + experiences … and persona-based scenarios with goals. &lt;/p&gt;  &lt;p&gt;This shifts the focus to lighting up experiences over just shipping features or scenarios.&amp;#160; It also means a focus on “&lt;a href="http://blogs.msdn.com/jmeier/archive/2006/12/01/be-the-software.aspx"&gt;Experience Step-Throughs&lt;/a&gt;” to model and prioritize what you ship.&amp;#160; It seems like today’s software success is about shipping the vital few experiences that make an impact.&amp;#160; I know it seems like a subtle shift, but I still come across too many glitches that get in the way of great software … … I think we need “experience-first” … or more “experience-driven.” &lt;/p&gt;  &lt;p&gt;Experiences are the differentiator ... you can have scenario parity or feature parity, yet miss the boat on experience.&amp;#160; It's beyond user stories and scenarios with acceptance tests (though that's a good start.)&amp;#160; It's about measuring efficiency and effectiveness of the user experience. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895258" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Software+Engineering/default.aspx">Software Engineering</category></item><item><title>Lessons in Software from Mike de Libero</title><link>http://blogs.msdn.com/jmeier/archive/2009/07/20/lessons-in-software-from-mike-de-libero.aspx</link><pubDate>Mon, 20 Jul 2009 07:37:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9840823</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9840823.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9840823</wfw:commentRss><description>&lt;p&gt;I have a guest post, &lt;a href="http://shapingsoftware.com/2009/07/20/lessons-in-software-from-mike-de-libero/" target="_blank"&gt;Lesson in Software from Mike de Libero&lt;/a&gt;, on Shaping Software.&amp;#160; Mike was a security tester on the Microsoft Office team and has a variety of experiences under his belt.&amp;#160;&amp;#160; Here is a summary of his lessons:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Lesson 1. All software is flawed.&lt;/li&gt;    &lt;li&gt;Lesson 2. Check-in often.&lt;/li&gt;    &lt;li&gt;Lesson 3. Tests, gotta love them.&lt;/li&gt;    &lt;li&gt;Lesson 4. Refactor, check-in and repeat.&lt;/li&gt;    &lt;li&gt;Lesson 5. Coding is easy, humans are tough.&lt;/li&gt;    &lt;li&gt;Lesson 6. The more eyes on your code the better.&lt;/li&gt;    &lt;li&gt;Lesson 7. Keep learning and improving.&lt;/li&gt;    &lt;li&gt;Lesson 8. Simple is beautiful.&lt;/li&gt;    &lt;li&gt;Lesson 9. Learn software development not coding.&lt;/li&gt;    &lt;li&gt;Lesson 10. Think about your audience.&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/07/20/lessons-in-software-from-mike-de-libero/" target="_blank"&gt;Lesson in Software from Mike de Libero&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9840823" 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/Lessons+Learned/default.aspx">Lessons Learned</category></item><item><title>Lessons in Software from James Waletzky</title><link>http://blogs.msdn.com/jmeier/archive/2009/07/06/lessons-in-software-from-james-waletzky.aspx</link><pubDate>Mon, 06 Jul 2009 09:21:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9818946</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9818946.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9818946</wfw:commentRss><description>&lt;p&gt;I have a guest post, &lt;a href="http://shapingsoftware.com/2009/07/06/lessons-in-software-from-james-waletzky/" target="_blank"&gt;Lessons in Software from James Waletsky&lt;/a&gt;, on &lt;a href="http://shapingsoftware.com/" target="_blank"&gt;Shaping Software&lt;/a&gt;.&amp;#160; James is a Development lead at Microsoft, with several years of coaching teams on Agile practices and software engineering under his belt.&amp;#160; Here is a summary of his lessons: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Lesson 1.&amp;#160;&amp;#160;&amp;#160; Keep it simple.&lt;/li&gt;    &lt;li&gt;Lesson 2.&amp;#160;&amp;#160;&amp;#160; Define &amp;#8216;done&amp;#8217;.&lt;/li&gt;    &lt;li&gt;Lesson 3.&amp;#160;&amp;#160;&amp;#160; Deliver incrementally and iteratively.&lt;/li&gt;    &lt;li&gt;Lesson 4.&amp;#160;&amp;#160;&amp;#160; Split scenarios into vertical slices.&lt;/li&gt;    &lt;li&gt;Lesson 5.&amp;#160;&amp;#160;&amp;#160; Continuously improve.&lt;/li&gt;    &lt;li&gt;Lesson 6.&amp;#160;&amp;#160;&amp;#160; Unit testing is the #1 quality practice.&lt;/li&gt;    &lt;li&gt;Lesson 7.&amp;#160;&amp;#160;&amp;#160; Don&amp;#8217;t waste your time.&lt;/li&gt;    &lt;li&gt;Lesson 8.&amp;#160;&amp;#160;&amp;#160; Features are not the most important thing.&lt;/li&gt;    &lt;li&gt;Lesson 9.&amp;#160;&amp;#160;&amp;#160; Never trust anyone.&lt;/li&gt;    &lt;li&gt;Lesson 10.&amp;#160;&amp;#160;&amp;#160; Reviews without preparation are useless. &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/07/06/lessons-in-software-from-james-waletzky/" target="_blank"&gt;Lessons In Software from James Waletzky&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9818946" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Software+Engineering/default.aspx">Software Engineering</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>Customer Connected Engineering</title><link>http://blogs.msdn.com/jmeier/archive/2009/05/19/customer-connected-engineering.aspx</link><pubDate>Tue, 19 May 2009 20:00:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9628635</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/9628635.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=9628635</wfw:commentRss><description>&lt;p&gt;I posted slides on &lt;a href="http://shapingsoftware.com/2009/05/19/customer-connected-engineering/" target="_blank"&gt;how we do Customer Connected Engineering at patterns &amp;amp; practices&lt;/a&gt; to &lt;a href="http://shapingsoftware.com/" target="_blank"&gt;Shaping Software&lt;/a&gt;.&amp;#160; Customers Connected Engineering (CCE) is how we engage customers throughout our product development. We formally engage customers during the planning, development, and release of our deliverables to help make sure our deliverables are customer-driven.&amp;#160; Customers supply the scenarios, help prioritize, and provide feedback helping reduce the gap between what we build and what customers actually need.&amp;#160; It's effectively a prosumer model where the producer pairs with the consumers to improve the results.&lt;/p&gt;  &lt;p&gt;Find out more about &lt;a href="http://shapingsoftware.com/2009/05/19/customer-connected-engineering/" target="_blank"&gt;Customer Connected Engineering&lt;/a&gt; including key activities and guiding principles.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9628635" 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/Project+Management/default.aspx">Project Management</category><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/Design/default.aspx">Design</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>Project Life Cycles at patterns &amp; practices</title><link>http://blogs.msdn.com/jmeier/archive/2008/08/03/project-life-cycles-at-patterns-practices.aspx</link><pubDate>Sun, 03 Aug 2008 06:21:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8811425</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8811425.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8811425</wfw:commentRss><description>&lt;p&gt;Periodically I like to revisit our project life cycle in patterns &amp;amp; practices. I like to see how it's shape-shifted over the years.&amp;nbsp; (Note - our project life cycle wraps our product cycle)&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;patterns &amp;amp; practices Project Life Cycle Circa 2005&lt;/strong&gt;&lt;br&gt;Here's a snapshot of our patterns &amp;amp; practices project life cycle circa 2005:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/ProjectLifeCyclesatpatternspractices_11E39/PAGProjectLifeCycle_4.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="343" alt="PAGProjectLifeCycle" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/ProjectLifeCyclesatpatternspractices_11E39/PAGProjectLifeCycle_thumb_1.gif" width="454" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I used this as a baseline to reflect against.&amp;nbsp; Here are the phases, stages, and milestones:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Phases&lt;/strong&gt;&lt;br&gt;Projects cycled through the following phases:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Planning&lt;/li&gt; &lt;li&gt;Design&lt;/li&gt; &lt;li&gt;Implementation&lt;/li&gt; &lt;li&gt;Stabilization&lt;/li&gt; &lt;li&gt;Release&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Stages&lt;/strong&gt;&lt;br&gt;Stages included:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Requirements&lt;/li&gt; &lt;li&gt;Specifications&lt;/li&gt; &lt;li&gt;Iteration 1&lt;/li&gt; &lt;li&gt;Iteration N&lt;/li&gt; &lt;li&gt;Final Test and Edit Pass&lt;/li&gt; &lt;li&gt;Production&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Milestones&lt;br&gt;&lt;/strong&gt;The milestones included:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Proposal Approved&lt;/li&gt; &lt;li&gt;Vision Scope Approved&lt;/li&gt; &lt;li&gt;M0 (Milestone Zero) / Specifications Approved&lt;/li&gt; &lt;li&gt;Technical Review and Solution Approved&lt;/li&gt; &lt;li&gt;Test and Edit Complete&lt;/li&gt; &lt;li&gt;Go / No Go&lt;/li&gt; &lt;li&gt;Customer Availability&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Three Things That Worked Well&lt;br&gt;&lt;/strong&gt;Here's three things that worked well with the original project cycle:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;There were clear phases, stages, milestones, and deliverables, along with criteria.&lt;/li&gt; &lt;li&gt;The project cycle was decoupled from the product cycle.&amp;nbsp; This gave management a simple frame for understanding projects.&amp;nbsp; This also gave each project flexibility to choose the most appropriate software development methodology depending on the product.&lt;/li&gt; &lt;li&gt;There was sufficient time between key milestones to provide a frame + air-cover.&amp;nbsp; This helped avoid randomizing engineering and being able to see the forest from the trees.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Additionally, the key milestones such as Vision Scope and MO were something of a ceremony and tended to include the right representation across the p&amp;amp;p team. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Three Things That Needed Improvement&lt;br&gt;&lt;/strong&gt;Here's three things that needed improvement:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;It was a lot of overhead for smaller projects.&amp;nbsp; It worked well for larger programs (collections of projects), but it was tougher for individual projects.&lt;/li&gt; &lt;li&gt;It was tough to bootstrap projects.&amp;nbsp; M0 and Vision/Scope could be especially tough.&amp;nbsp; In retrospect, there were two key issues: 1) asking the right questions at the wrong time (premature) 2) chickens with controlling votes over pigs. (See &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/03/25/turning-chickens-into-pigs.aspx"&gt;Turning Chickens Into Pigs&lt;/a&gt;.)&lt;/li&gt; &lt;li&gt;There was too much agreement up front, with not enough ability to coarse correct in the later stages/phases (needed more agility)&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8811425" 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/Project+Management/default.aspx">Project Management</category><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/Project+Practices/default.aspx">Project Practices</category></item><item><title>Software Guidance Share</title><link>http://blogs.msdn.com/jmeier/archive/2008/07/12/software-guidance-share.aspx</link><pubDate>Sat, 12 Jul 2008 23:19:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8725022</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8725022.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8725022</wfw:commentRss><description>&lt;p&gt;I'm testing another version of the home page on &lt;a href="http://www.GuidanceShare.com" target="_blank"&gt;Software Guidance Share&lt;/a&gt;.&amp;nbsp; Software Guidance Share is a perpetual work in progress.&amp;nbsp; I think of it as my quick-and-dirty guidance KB for developers and solution architects.&amp;nbsp; I continuously &lt;a href="http://nostalgia.wikipedia.org/wiki/Refactoring" target="_blank"&gt;refactor&lt;/a&gt; information into reusable nuggets.&amp;nbsp; I also test ways to browse the guidance and find relationships among the nuggets.  &lt;p&gt;Here's a couple of example scenarios:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Web_Application_Performance_Design_Inspection_Questions" target="_blank"&gt;Perform a Performance Design Inspection&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Web_Application_Security_Design_Inspection_Questions" target="_blank"&gt;Perform a Security Design Inspection&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Performance_Design_Principles" target="_blank"&gt;Browse performance design principles&lt;/a&gt;  &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Security_Design_Principles" target="_blank"&gt;Browse security design principles&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Category:Application_Scenarios" target="_blank"&gt;Browse ASP.NET application scenarios&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I haven't fleshed out some of the areas, but the Wiki gives me a lot of flexibility and it's easy to course-correct.&amp;nbsp; In other words, it's &lt;a href="http://blogs.msdn.com/jmeier/archive/2007/05/13/the-better-adapted-you-are-the-less-adaptable-you-tend-to-be.aspx"&gt;more adaptable than adapted&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8725022" 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/Software+Engineering/default.aspx">Software Engineering</category></item><item><title>Guidance Share Sweep</title><link>http://blogs.msdn.com/jmeier/archive/2008/01/02/guidance-share-sweep.aspx</link><pubDate>Wed, 02 Jan 2008 18:48:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6956141</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/6956141.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=6956141</wfw:commentRss><description>&lt;p&gt;One of the most important things I did while I was on vacation was sweeping &lt;a href="http://www.GuidanceShare.com" target="_blank"&gt;Guidance Share&lt;/a&gt;.&amp;nbsp; Guidance Share is where I consolidate my body of software engineering guidance and test user experiences.&amp;nbsp; I redesigned the home page for simpler browsing and findability.&amp;nbsp; It was more pain than pleasure for me, but if it helps the broader community, that's my payback.  &lt;p&gt;Here's a highlight of Guidance Share:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Browsable nuggets for software performance and security  &lt;li&gt;Durable, evolvable frames for security and performance (think of these as maps)  &lt;li&gt;How Tos, Guidelines, Checklists and more &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Guidance Share gives me a unique vantage point that I haven't been able to get any other way.&amp;nbsp; The act of building it and evolving it helps me make gain new insights.&amp;nbsp; It also forces me to find ways to be extremely efficient.&amp;nbsp; I then try to carry these lessons over to MSDN and to help shape patterns &amp;amp; practices information models.&amp;nbsp; I don't own the MSDN experience, but I can give input.&amp;nbsp; Guidance Share helps me solidify my recommendations with living proof.&amp;nbsp; It's also let's me quickly experiment with new user experiences.  &lt;p&gt;My biggest lesson learned is how difficult it is to integrate information and make it useful, even when you own it.&amp;nbsp; It's one thing to have a snapshot of information that's useful for a given point in time; it's another to create a stable backdrop with a firm foundation that can evolve over time.&amp;nbsp; The key is factoring volatile from stable information, and enabling them to play well together.&lt;/p&gt; &lt;p&gt;Note that Guidance Share is under construction and there are some obviously empty areas, but it's a work in progress.&amp;nbsp; It's a living knowledge base for software engineering that I periodically sweep to share the best that I've learned.&lt;/p&gt; &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6956141" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Performance/default.aspx">Performance</category><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/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/My+Projects/default.aspx">My Projects</category></item><item><title>Predictions for 2008</title><link>http://blogs.msdn.com/jmeier/archive/2008/01/02/predictions-for-2008.aspx</link><pubDate>Wed, 02 Jan 2008 06:40:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6947273</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/6947273.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=6947273</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Here's a quick rundown of my take on key trends. Trends are different from fads since they're longer-lasting and more pervasive. I don't have a crystal ball or a magic 8-ball, but I have 20/20 hindsight with the customers I work with and an eye for patterns. Last year, I saw more virtualization, more agile/scrum adoption, and more distributed collaboration, as well as adoption of more social software practices in the Enterprise.  &lt;p&gt;&lt;strong&gt;Key Trends&lt;/strong&gt; &lt;br&gt;Here's a quick list of trends I'm paying attention to (some more pervasive than others) ... &lt;ul&gt; &lt;li&gt;More information overload. More ways to get lost, more ways to find what you need, more info at your finger-tips.&lt;/li&gt; &lt;li&gt;More focus on authority sites and authorities. Cut your info overload, by looking to people and sites you trust.&lt;/li&gt; &lt;li&gt;More focus on accuracy, relevancy, and timeliness.&amp;nbsp;&amp;nbsp; A must for social software.&lt;/li&gt; &lt;li&gt;More personalization / customization.&amp;nbsp; One idea behind &lt;a href="http://www.codeplex.com/guidanceExplorer"&gt;Guidance Explorer&lt;/a&gt; was to focus on personalization and customization.&lt;/li&gt; &lt;li&gt;More slicing and dicing of information. Tree-views, tag-clouds, Mind Maps, visuals. My tags, your tags, everybody's tags.&amp;nbsp;&lt;/li&gt; &lt;li&gt;More engaging and conversational marketing over interrupt marketing. In-context, relevant, value add, and personal.&lt;/li&gt; &lt;li&gt;More focus on user experience. With too many choices, user experience wins.&amp;nbsp; The apps that make you feel good, make you personally effective and connect with others win.&lt;/li&gt; &lt;li&gt;More globalization of software development. Any time, any place, anywhere, crowd sourcing, outsourcing, virtualization.&lt;/li&gt; &lt;li&gt;More social software in the Enterprise. Wikis, blogs, ...etc. More online consumer experience slides over to the Enterprise.&lt;/li&gt; &lt;li&gt;More Lean, Agile, and Scrum. &lt;/li&gt; &lt;li&gt;More virtualization. Virtual worlds, virtualized workspaces, Virtualized labs, virtualized hosting, virtualized workshops.&lt;/li&gt; &lt;li&gt;More distributed teams and remote collaboration. &lt;/li&gt; &lt;li&gt;More consolidation.&lt;/li&gt; &lt;li&gt;More specialization. When a market saturates, specialization happens. Lots more choices. Specialized devices and apps.&lt;/li&gt; &lt;li&gt;More Visual Studio Team System. This is The year for VSTS. With The &lt;a href="http://blogs.msdn.com/jmeier/archive/2007/12/01/now-on-amazon-team-development-with-visual-studio-team-foundation-server.aspx"&gt;Team Foundation Server Guide&lt;/a&gt; available and a new version of VSTS ... it's the year.&lt;/li&gt; &lt;li&gt;More Agile Security and Performance.&amp;nbsp; I can help here.&amp;nbsp; Most of the customers we worked with had flavors of agile practices, so we designed our techniques to be adaptable.&amp;nbsp; For proven practices for security, see &lt;a href="http://blogs.msdn.com/jmeier/archive/2007/05/01/patterns-practices-security-engineering-explained.aspx"&gt;Security Engineering Explained&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;More focus on personal development.&amp;nbsp;&amp;nbsp; Maybe you get what you focus on, but I see a trend here.&lt;/li&gt; &lt;li&gt;More principles, patterns, and practices.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Key Links for Predictions and Trends for 2008&lt;br&gt;&lt;/strong&gt;Here's a few links I found useful: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/brada/archive/2007/12/31/software-development-predictions-for-2008.aspx" target="_blank"&gt;Software Development Predictions for 2008&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.dailywireless.org/2007/12/31/predictions-for-2008/" target="_blank"&gt;Predictions for 2008 (dailywireless.org)&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://battellemedia.com/archives/004172.php" target="_blank"&gt;Predictions 2008 by John Battelle&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://acrlblog.org/2008/01/01/make-2008-your-year-for-trend-watching/" target="_blank"&gt;Make 2008 Your Year of Trend Watching&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.masternewmedia.org/news/2007/12/31/new_media_predictions_2008_what.htm" target="_blank"&gt;New Media Predictions 2008: What Online Independent Publishers Should Expect From The Future - Part 1&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.masternewmedia.org/news/2008/01/01/new_media_predictions_2008_what.htm" target="_blank"&gt;New Media Predictions 2008: What Online Independent Publishers Should Expect From The Future - Part 2&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.trendwatching.com/briefing/" target="_blank"&gt;8 Important Consumer Trends for 2008&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Quick Tip&lt;/strong&gt;&lt;br&gt;One quick tip for your trend studies -- knowing demographics helps and consumer trends tend to lead other markets so they're a good place to look. It also helps to understand the &lt;a href="http://blogs.msdn.com/jmeier/archive/2007/12/31/four-stages-of-market-maturity.aspx"&gt;Four Stages of Market Maturity&lt;/a&gt; to help rationalize why you see what you see.&amp;nbsp;&amp;nbsp; The real value of trend watching though is anticipating and taking action, even if it just means being prepared versus surprised.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6947273" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Innovation/default.aspx">Innovation</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Software+Engineering/default.aspx">Software Engineering</category></item><item><title>Four Stages of Market Maturity</title><link>http://blogs.msdn.com/jmeier/archive/2007/12/31/four-stages-of-market-maturity.aspx</link><pubDate>Tue, 01 Jan 2008 02:28:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6926183</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/6926183.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=6926183</wfw:commentRss><description>&lt;p&gt;You can tell the maturity of a market by the consumer patterns.&amp;nbsp; If you know the life cycle stages of a market you can better anticipate what level of "needs" your product needs to match to be successful.&amp;nbsp; (I always think of needs in stages like &lt;a href="http://en.wikipedia.org/wiki/Maslow's_hierarchy_of_needs" target="_blank"&gt;Maslow's hierarchy&lt;/a&gt;.)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The Four Stages of Market Maturity&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Stage 1. Survival&lt;/li&gt; &lt;li&gt;Stage 2. Quality&lt;/li&gt; &lt;li&gt;Stage 3. Convenience&lt;/li&gt; &lt;li&gt;Stage 4. Customization.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;From Survival to Customization&lt;br&gt;&lt;/strong&gt;In the Autumn Special Edition of "strategy+business" magazine,&amp;nbsp;&amp;nbsp;Alonso Martinez and Ronald Haddock describe how a country evolves from developing nation to industrialized nation:&lt;/p&gt; &lt;p&gt;&lt;em&gt;"As a country evolves from developing nation to indusrialized nation, the population's basic needs pass through four distinct stages.&amp;nbsp; In developing countries, most of hte population is preocupied with basic survival - obtaining adequate food, shelter, and clothing. (Much of sub-Saharan Africa is in the stage right now.)&amp;nbsp; As a middle class emerges, people seek greater quality in their food, housing, and clothing (This is currently happening, for example, in much of China and India.)&amp;nbsp; Once a transitioning market's population can afford relatively high quality, they begin to seek convenience; they buy time-saving appliances and processed foods, and they may move closer to work.&amp;nbsp; (This stage is emerging today in Eastern Europ and Latin America.)&amp;nbsp; Finally, as the market graduates into the realm of developed nations, the population wants customization; with needs for survival, quality, and convenience now met, people will spend a premium (as many do in North America, Japan, and western Europe) to satisfy individual tastes and desires."&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Key Take Aways&lt;/strong&gt;&lt;br&gt;I think to successfully anticipate global market needs, you need to understand where in the stack, various consumers are.&amp;nbsp;&amp;nbsp; I've noticed a lot more attention&amp;nbsp;on customization, particularly in social software and personal devices.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6926183" 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/Social+Software/default.aspx">Social Software</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Design/default.aspx">Design</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Business/default.aspx">Business</category></item><item><title>Human Shepherds and the Law of Relevancy</title><link>http://blogs.msdn.com/jmeier/archive/2007/11/10/human-shepherds-and-the-law-of-relevancy.aspx</link><pubDate>Sat, 10 Nov 2007 23:14:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6069265</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/6069265.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=6069265</wfw:commentRss><description>&lt;P&gt;Yesterday, &lt;A class="" href="http://blogs.msdn.com/edjez/" target=_blank mce_href="http://blogs.msdn.com/edjez/"&gt;Ed&lt;/A&gt; helped me word a "law" that I use for important decisions and that I see show up quite a bit in a number of places.&amp;nbsp; It's the law of human relevancy.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Law of Relevancy&lt;/STRONG&gt;&lt;BR&gt;No matter how relevant the information is, it's more relevant with the help of the right people.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Human Shepherd&lt;/STRONG&gt;&lt;BR&gt;All this law really means is that no matter how well you organize and display information, at some point, there's a glass ceiling on how much easier you can make it for somebody to find what they need.&amp;nbsp; There's always a place for the human shepherd.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Usage / Examples&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The obvious example is the Web 2.0 movement -- where people are the shepherds of the read/write Web.&amp;nbsp; There's lots of needles in the world wide haystack and I'm glad there's people, voices, blogs there to help.&lt;/LI&gt;
&lt;LI&gt;I like the pattern on the Web where sites have a&amp;nbsp;live chat to use a human to help you match their info to your needs, in real time.&lt;/LI&gt;
&lt;LI&gt;I like how Second Life provides the ability to "invoke a human" over just self-help and forums. (I proposed some models for "human help" in Visual Studio and as a general platform&amp;nbsp;some time back I need to revisit)&lt;/LI&gt;
&lt;LI&gt;There's lots of implications&amp;nbsp;for an Enterprise 2.0 world, but I'll save that for another day.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;A Story&lt;/STRONG&gt;&lt;BR&gt;In an early version of Practices Checker (a tool meant to verify your solutions against &lt;A class="" href="http://msdn2.microsoft.com/en-us/practices/default.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/practices/default.aspx"&gt;patterns &amp;amp; practices&lt;/A&gt; recommendations), we tried to figure out relevant guidance based on the type of project (Web, winForm ...), what technologies (ADO.NET, ASMX ...) you were using, ... etc.&amp;nbsp; We did this automatically and generated what I considered more harm than help (it missed things that were important and created a lot of noise.)&amp;nbsp; I applied the law of relevancy and argued that we'd be better off figuring out how to leverage the user's own relevancy engine and pattern-matching ability over auto-magic guesswork.&amp;nbsp; We then created a tool to help smart people, rather than a "smart" tool that gets in the way.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6069265" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Innovation/default.aspx">Innovation</category><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/Design/default.aspx">Design</category></item><item><title>Scenarios in Practice</title><link>http://blogs.msdn.com/jmeier/archive/2007/10/15/why-scenario-driven-engineering.aspx</link><pubDate>Mon, 15 Oct 2007 05:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5456490</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/5456490.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=5456490</wfw:commentRss><description>&lt;P&gt;&lt;A class="" href="http://blogs.msdn.com/jmeier/archive/2006/12/09/what-s-a-scenario.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2006/12/09/what-s-a-scenario.aspx"&gt;Scenarios&lt;/A&gt; are a practical way to organize and focus your product design, development and release.&amp;nbsp;&amp;nbsp; (We use scenario-driven engineering in patterns &amp;amp; practices)&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Key Benefits&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Business value&lt;/STRONG&gt;.&amp;nbsp; You can&amp;nbsp; use scenarios to evaluate business value.&amp;nbsp;&amp;nbsp; What pain does that scenario address? ...&amp;nbsp;What opportunity does it create? ... etc.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Chunking and prioritizing&lt;/STRONG&gt;.&amp;nbsp; You can use scenarios to chunk up and prioritize your product.&amp;nbsp; You can think of versioning in terms of releasing incremental value&amp;nbsp;or scenarios.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Effective design.&lt;/STRONG&gt;&amp;nbsp; Walking through a set of customers scenarios and "what ifs" will help you figure out your product's most effective design.&amp;nbsp; It's not a silver-bullet, but it does help make requirements more concrete, or at least put them in perspective.&amp;nbsp; It also opens the door to more precise questions about user experience or engineering challenges.. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Focal point for perspectives&lt;/STRONG&gt;.&amp;nbsp; You can use scenarios as a focal point for user experience, business and tech perspectives.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Requirements in context&lt;/STRONG&gt;.&amp;nbsp; You can use scenarios to put requirements in context.&amp;nbsp; A requirement makes a lot more sense when you see it in action.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Architectural trade-offs&lt;/STRONG&gt;.&amp;nbsp; You can use scenarios to evaluate and make architectural trade-offs.&amp;nbsp; You can't evaluate an architecture in a vacuum; you can evaluate against concrete scenarios.&amp;nbsp; There's several flavors of scenario-based evaluations you can leverage.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Customer value&lt;/STRONG&gt;.&amp;nbsp; Your customers can appreciate how well you did (or didn't) address their scenario.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Tests for success&lt;/STRONG&gt;.&amp;nbsp; You can use scenarios as tests for success.&amp;nbsp; By measuring customer effectiveness against specific scenarios, you have a way to focus your improvements.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Chunking Up a Project Using Scenarios&lt;/STRONG&gt;&lt;BR&gt;If you think of your product as helping a user accomplish a goal, it helps cut through the fog. You can think of your product in terms of a list of user goals, business goals and technical goals.&amp;nbsp; What's the minimum set of tasks your user needs to perform with your product?&amp;nbsp; That's your baseline release.&amp;nbsp; What's the incremental value from there?&amp;nbsp; That's how you start to shape your versions and releases.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;User Experience, Business and Technical Perspectives&lt;BR&gt;&lt;/STRONG&gt;Using scenarios is a good forcing function to bring together the user experience, business, and technical perspectives.&amp;nbsp; For the sake of example, let's say your scenario is "User views the product catalog."&amp;nbsp; From the user experience perspective, you're thinking in terms of "show me a relevant list" and "don't make me wait,"&amp;nbsp; From a business perspective, you're thinking in terms of "support a given number of orders per hour" and "lower the total cost of ownership."&amp;nbsp; From a technical standpoint, you're thinking in terms of "requests per second," "minimize resource utilization," ... etc.&amp;nbsp; Well, no wonder getting software right is tough!&amp;nbsp; Luckily, scenarios help you bring together and rationalize the perspectives against a common frame of reference.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Constraints Make More Sense In Context&lt;/STRONG&gt;&lt;BR&gt;Constraints are boundaries to operate within, or what the solution must or must not do.&amp;nbsp; In software,&amp;nbsp;I see a lot of generic constraints passed down as policies.&amp;nbsp; When policy meets scenario, you now have a way to evaluate the effectiveness of that constraint.&amp;nbsp; You can also measure whether that scenario is actually meeting the constraint.&amp;nbsp; You can perform scenario-based testing against a set of scenarios with specific constraints.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Walking the Scenarios&lt;BR&gt;&lt;/STRONG&gt;Have you ever been sold on a great set of features, only to fall flat when you try to actually do something useful?&amp;nbsp; Obviously, that's the extreme case, but it happens to me.&amp;nbsp; It happens less now because whenever I go to buy something, I walk my usage scenarios.&amp;nbsp; Doing a dry run against a scenario is very revealing.&amp;nbsp;&amp;nbsp; This approach works great on the engineering side too.&amp;nbsp; It's one thing to have generic technical requirements for security or performance.&amp;nbsp; It's another to evaluate a scenario and make appropriate and relevant trade-offs from a user, business and technical perspective.&amp;nbsp; Suddenly, generic technical requirements no longer seem as helpful, do they?&amp;nbsp; They still have their place, but when you're engineering your job is to make the right trade-offs.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Scenarios and Solutions&lt;/STRONG&gt;&lt;BR&gt;Given part of my job is to improve customer effectiveness on our platform, I regularly use scenarios as a backdrop for evaluation.&amp;nbsp; As I've gotten more effective, I noticed&amp;nbsp;shifting from&amp;nbsp;features and components to scenarios and solutions is&amp;nbsp;the key.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;More Information&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="" href="http://www.sei.cmu.edu/architecture/scenario_paper/" target=_blank mce_href="http://www.sei.cmu.edu/architecture/scenario_paper/"&gt;SEI - Scenario-Based Analysis of Software Architecture&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.codeplex.com/PerfTesting/Wiki/View.aspx?title=How%20To%3a%20Consolidate%20Various%20Types%20of%20Performance%20Requirements%20and%20Testing%20Objectives&amp;amp;referringTitle=Home" target=_blank mce_href="http://www.codeplex.com/PerfTesting/Wiki/View.aspx?title=How%20To%3a%20Consolidate%20Various%20Types%20of%20Performance%20Requirements%20and%20Testing%20Objectives&amp;amp;referringTitle=Home"&gt;How To: Consolidate Various Types of Performance Acceptance Criteria&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 class="" href="http://blogs.msdn.com/jmeier/archive/2006/12/09/what-s-a-scenario.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2006/12/09/what-s-a-scenario.aspx"&gt;What's a Scenario?&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://blogs.msdn.com/jmeier/pages/scenario-frame-example.aspx" mce_href="http://blogs.msdn.com/jmeier/pages/scenario-frame-example.aspx"&gt;Scenario Frame Example&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5456490" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Innovation/default.aspx">Innovation</category><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/Project+Management/default.aspx">Project Management</category><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/Effectiveness/default.aspx">Effectiveness</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Design/default.aspx">Design</category></item><item><title>Scenario Frames for Team Foundation Server</title><link>http://blogs.msdn.com/jmeier/archive/2007/09/10/scenario-frames-for-team-foundation-server.aspx</link><pubDate>Mon, 10 Sep 2007 21:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4855461</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/4855461.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=4855461</wfw:commentRss><description>&lt;P&gt;Our &lt;A class="" href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Scenario%20Frames&amp;amp;referringTitle=Home" target=_blank mce_href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Scenario%20Frames&amp;amp;referringTitle=Home"&gt;Scenario Frames for Team Foundation Server&lt;/A&gt; are available on CodePlex.&amp;nbsp; We have Scenario Frames for the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="" href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Team%20Build%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames" target=_blank mce_href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Team%20Build%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames"&gt;Build&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Project%20Management%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames" target=_blank mce_href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Project%20Management%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames"&gt;Project Management&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Reporting%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames" target=_blank mce_href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Reporting%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames"&gt;Reporting&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Source%20Control%20Scenario%20Frame&amp;amp;referringTitle=Scenario%20Frames" target=_blank mce_href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Source%20Control%20Scenario%20Frame&amp;amp;referringTitle=Scenario%20Frames"&gt;Source Control&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;We use scenario frames for several things:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Mapping out the problem space&lt;/LI&gt;
&lt;LI&gt;Performing scenario evaluations to evaluate platform, tools, and guidance&lt;/LI&gt;
&lt;LI&gt;Designing products&lt;/LI&gt;
&lt;LI&gt;Scoping work&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The real power of a scenario frame is that's it's a shared frame of reference.&amp;nbsp; Personally, because I've seen so much benefit from scenario frames time and again, I couldn't imagine doing guidance or building a product without using scenario frames.&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 class="" href="http://blogs.msdn.com/jmeier/archive/2007/02/22/scenario-frames-for-guidance.aspx" target=_blank mce_href="http://blogs.msdn.com/jmeier/archive/2007/02/22/scenario-frames-for-guidance.aspx"&gt;Scenario Frames for Guidance&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://blogs.msdn.com/jmeier/pages/scenario-frame-example.aspx" target=_blank mce_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;A class="" href="http://blogs.msdn.com/jmeier/archive/2006/12/09/scenario-and-feature-matrixes.aspx" target=_blank mce_href="http://blogs.msdn.com/jmeier/archive/2006/12/09/scenario-and-feature-matrixes.aspx"&gt;Scenario and Feature Matrixes&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4855461" 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/Software+Engineering/default.aspx">Software Engineering</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</category></item><item><title>Security Inspections</title><link>http://blogs.msdn.com/jmeier/archive/2007/07/16/security-inspections.aspx</link><pubDate>Mon, 16 Jul 2007 09:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3891265</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/3891265.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=3891265</wfw:commentRss><description>&lt;P&gt;Inspections are among my favorite tools for improving security.&amp;nbsp;&amp;nbsp; I like them because they’re so effective and efficient.&amp;nbsp; Here’s why:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;If you know what to look for, you have a better chance of finding it.&amp;nbsp; (The reverse is also true: if you don’t know what you’re looking for, you’re not going to see it)&lt;/LI&gt;
&lt;LI&gt;You can build your inspection criteria from common patterns (Security issues tend to stem from common patterns)&lt;/LI&gt;
&lt;LI&gt;You can share your inspection criteria&lt;/LI&gt;
&lt;LI&gt;You can prioritize your inspection criteria&lt;/LI&gt;
&lt;LI&gt;You can chunk your inspection criteria&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Bottom line -- you can identify, catalog and share security criteria faster than new security issues come along.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Security Frame&lt;BR&gt;&lt;/STRONG&gt;Our &lt;A class="" href="http://blogs.msdn.com/jmeier/pages/security-frame.aspx" mce_href="http://blogs.msdn.com/jmeier/pages/security-frame.aspx"&gt;Security Frame&lt;/A&gt; is simply a set of categories we use to “frame” out, organize, and chunk up security threats, attacks, vulnerabilities and countermeasures, as well as principles, practices and patterns.&amp;nbsp; The categories make it easy to distill and share the information in a repeatable way.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Security Design Inspections&lt;/STRONG&gt;&lt;BR&gt;Performing a Security Design Inspection involves evaluating your application’s architecture and design in relation to its target deployment environment from a security perspective.&amp;nbsp; You can use the Security Frame to help guide your analysis.&amp;nbsp;&amp;nbsp; For example, you can walk the categories (authentication, authorization, … etc.) for the application.&amp;nbsp; You can also use the categories to do a layer-by-layer analysis.&amp;nbsp; Design inspections are a great place to checkpoint your core strategies, as well as identify what sort of end-to-end tests you need to verify your approach.&lt;/P&gt;
&lt;P&gt;Here's the approach in a nutshell:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 1.&amp;nbsp; Evaluate the deployment and infrastructure&lt;/STRONG&gt;. Review the design of your application as it relates to the target deployment environment and the associated security policies. Consider the constraints imposed by the underlying infrastructure-layer security and the operational practices in use. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 2.&amp;nbsp; Evaluate key security design using the Security frame&lt;/STRONG&gt;. Review the security approach that was used for critical areas of your application. An effective way to do this is to focus on the set of categories that have the most impact on security, particularly at an architectural and design level, and where mistakes are most often made. The security frame describes these categories. They include authentication, authorization, input validation, exception management, and other areas. Use the security frame as a road map so that you can perform reviews consistently, and to make sure that you do not miss any important areas during the inspection. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 3.&amp;nbsp; Perform a layer-by-layer analysis&lt;/STRONG&gt;. Review the logical layers of your application, and evaluate your security choices within your presentation, business, and data access logic. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For more information, see our &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms998389.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms998389.aspx"&gt;patterns &amp;amp; practices Security Design Inspection Index&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Security Code Inspections&lt;BR&gt;&lt;/STRONG&gt;This is truly a place where inspections shine.&amp;nbsp; While static analysis will catch a lot of the low hanging fruit, manual inspection will find a lot of the important security issues that are context dependent.&amp;nbsp; Because it’s a manual exercise, it’s important to set objectives, and to prioritize based on what you’re looking for.&amp;nbsp;&amp;nbsp; Whether you do your inspections in pairs or in groups or individually, checklists in the form of criteria or inspection questions are helpful.&lt;/P&gt;
&lt;P&gt;Here's the approach in a nutshell:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 1. Identify security code review objectives&lt;/STRONG&gt;. Establish goals and constraints for the review. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 2. Perform a preliminary scan&lt;/STRONG&gt;. Use static analysis to find an initial set of security issues and improve your understanding of where the security issues are most likely to be discovered through further review. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 3. Review the code for security issues&lt;/STRONG&gt;. Review the code thoroughly with the goal of finding security issues that are common to many applications. You can use the results of step two to focus your analysis. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Step 4. Review for security issues unique to the architecture&lt;/STRONG&gt;. Complete a final analysis looking for security issues that relate to the unique architecture of your application. This step is most important if you have implemented a custom security mechanism or any feature designed specifically to mitigate a known security threat.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For more information on Security Code Inspections, see our &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms998399.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms998399.aspx"&gt;patterns &amp;amp; practices Security Code Inspection Index&lt;/A&gt;.&amp;nbsp; For examples of “Inspection Questions”, see &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms998378.aspx)" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms998378.aspx)"&gt;Security Question List: Managed Code (.NET Framework 2.0)&lt;/A&gt; and &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms998375.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms998375.aspx"&gt;Security Question List: ASP.NET 2.0.” (Security Question List: ASP.NET 2.0)&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Security Deployment Inspections&lt;/STRONG&gt;&lt;BR&gt;Deployment Inspections are particularly effective for security because this is where the rubber meets the road.&amp;nbsp; In a deployment inspection, you walk the various knobs and switches that impact the security profile of your solution.&amp;nbsp; This is where you check things such as accounts, shares, protocols, … etc.&amp;nbsp; &lt;/P&gt;
&lt;P mce_keep="true"&gt;The following server security categories are key when performing a security deployment inspection:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Patches and Updates &lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Accounts Accounts &lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Auditing and Logging&lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Files and Directories&lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Ports&lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Protocols&lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Registry &lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Services&lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;EM&gt;Shares&lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For more information, see our &lt;A class="" href="http://msdn2.microsoft.com/en-us/library/ms998401.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms998401.aspx"&gt;patterns &amp;amp; practices Security Deployment Inspection Index&lt;/A&gt;. &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 class="" href="http://blogs.msdn.com/jmeier/archive/2007/07/08/performance-inspections.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2007/07/08/performance-inspections.aspx"&gt;Performance Inspections&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://blogs.msdn.com/jmeier/archive/2007/07/02/inspections.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2007/07/02/inspections.aspx"&gt;Inspections&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3891265" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Software+Engineering/default.aspx">Software Engineering</category></item></channel></rss>