<?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 : Frames</title><link>http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx</link><description>Tags: Frames</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Arch Frame Posted to CodePlex</title><link>http://blogs.msdn.com/jmeier/archive/2008/09/24/arch-frame-posted-to-codeplex.aspx</link><pubDate>Thu, 25 Sep 2008 00:59:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8964126</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8964126.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8964126</wfw:commentRss><description>&lt;p&gt;Today we posted our Arch Frame to CodePlex.&amp;#160; Wednesdays are ship days (I don't ship on Fridays.)&amp;#160; The App Arch Frame is a collection of hot spots you hit when building line of business (LOB) applications.&amp;#160; The key to the buckets is that they organize actionable principles, patterns, and practices.&amp;#160; They also help us overlay patterns &amp;amp; practices solution assets.&amp;#160; You give feedback either in the comments here, or on the CodePlex page: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Cheat%20Sheet:%20Architecture%20Frame&amp;amp;referringTitle=Cheat%20Sheets" target="_blank"&gt;Application Architecture Frame&lt;/a&gt; (CodePlex) &lt;/li&gt; &lt;/ul&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/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/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/06/layers-and-tiers.aspx"&gt;Layers and Tiers&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/07/services-layer.aspx"&gt;Services Layer&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/04/scenario-frames-for-presentation-business-data-and-services.aspx"&gt;Scenario Frames for Presentation, Business, Data and Services&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/09/patterns-practices-security-engineering.aspx"&gt;patterns &amp;amp; practices Security Engineering&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/16/patterns-practices-performance-engineering.aspx"&gt;patterns &amp;amp; practices Performance Engineering&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;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8964126" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/AppArch/default.aspx">AppArch</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</category></item><item><title>Architecture Frame</title><link>http://blogs.msdn.com/jmeier/archive/2008/09/22/architecture-frame.aspx</link><pubDate>Mon, 22 Sep 2008 22:21:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8961499</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8961499.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8961499</wfw:commentRss><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;As part of our &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;, we've put together an arch frame.&amp;#160; The arch frame is simply a collection of hot spots.&amp;#160; These aren't just any hot spot though.&amp;#160; These hot spots represent key engineering decisions, anti-patterns, and opportunities for improved designs for more effective technical architectures.&amp;#160; This Arch Frame is part of the larger &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;.&amp;#160; Think of it as an important branch off the main tree.&amp;#160; It serves as a lens to cut through a lot of information to get to the most meaningful and actionable guidance.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Categories&lt;/strong&gt;     &lt;br /&gt;The following categories are the &amp;quot;hot spots&amp;quot; in the architecture frame:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;Authentication and Authorization &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Caching and State &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Communication &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Composition &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Concurrency and Transactions &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Configuration Management &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Coupling and Cohesion &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Data Access &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Exception Management &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Logging and Instrumentation &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;User Experience &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Validation &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;Workflow&lt;/em&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;What you might notice about the hot spots is that they map to common cross-cutting concerns when building applications.&amp;#160; You also might notice that the hot spots map to various patterns &amp;amp; practices solution assets.&amp;#160; For example, Enterprise Library includes blocks for caching, data access, exception management, logging, validation ... etc.&amp;#160; The categories also map to very actionable decisions where you there's relevant principles, patterns, and practices.&amp;#160; These buckets also contain many anti-patterns.&amp;#160; The worst anti-patterns are the &amp;quot;do overs.&amp;quot;&amp;#160; Nobody wants a &amp;quot;do over&amp;quot; architecture.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Key Engineering Decisions      &lt;br /&gt;&lt;/strong&gt;This table summarizes the key engineering decisions within each hot spot:&lt;/p&gt;  &lt;table border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th&gt;Category&lt;/th&gt;        &lt;th&gt;Key Engineering Decisions&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 store user identities. &lt;/li&gt;          &lt;li&gt;How to authenticate callers. &lt;/li&gt;          &lt;li&gt;How to authorize callers. &lt;/li&gt;          &lt;li&gt;How to flow identity across layers and tiers. &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 effective caching strategies. &lt;/li&gt;          &lt;li&gt;How to improve performance with caching. &lt;/li&gt;          &lt;li&gt;How to improve security with caching. &lt;/li&gt;          &lt;li&gt;How to improve availability with caching. &lt;/li&gt;          &lt;li&gt;How to keep the cached data up to date. &lt;/li&gt;          &lt;li&gt;How to determine when and why to use a custom cache. &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 and scavenging mechanism. &lt;/li&gt;          &lt;li&gt;How to load the cache data. &lt;/li&gt;          &lt;li&gt;How to monitor a cache. &lt;/li&gt;          &lt;li&gt;How to synchronize caches across a farm. &lt;/li&gt;          &lt;li&gt;How to determine which caching technique provides the best performance and scalability for a specific scenario and configuration. &lt;/li&gt;          &lt;li&gt;How to determine which caching technology complies with the application's requirements for security, monitoring, and management. &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 communicate between layers / tiers. &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 do design for composition. &lt;/li&gt;          &lt;li&gt;How to design loose coupling between modules. &lt;/li&gt;          &lt;li&gt;How to handle dependencies in a loosely coupled way. &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;li&gt;How to determine appropriate transaction isolation levels. &lt;/li&gt;          &lt;li&gt;How to determine when compensating transactions are required. &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 which 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 handle sensitive 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 separate concerns &lt;/li&gt;          &lt;li&gt;How to structure the application. &lt;/li&gt;          &lt;li&gt;How to choose an appropriate layering strategy. &lt;/li&gt;          &lt;li&gt;How to establish boundaries. &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 improve manageability. &lt;/li&gt;          &lt;li&gt;How to handle blobs. &lt;/li&gt;          &lt;li&gt;How to page records. &lt;/li&gt;          &lt;li&gt;How to perform transactions. &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;/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;/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. &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 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;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Key Issues&lt;/strong&gt;     &lt;br /&gt;This table summarizes the key issues within each hot spot:&lt;/p&gt;  &lt;table border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th&gt;Category&lt;/th&gt;        &lt;th&gt;Key Issues&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;Clear text credentials in configuration files &lt;/li&gt;          &lt;li&gt;Passing clear text credentials over the network &lt;/li&gt;          &lt;li&gt;Over-privileged accounts &lt;/li&gt;          &lt;li&gt;Long sessions &lt;/li&gt;          &lt;li&gt;Mixing personalization with authentication &lt;/li&gt;          &lt;li&gt;Reliance on a single gatekeeper &lt;/li&gt;          &lt;li&gt;Failing to lock down system resources against application identities &lt;/li&gt;          &lt;li&gt;Failing to limit database access to specified stored procedures &lt;/li&gt;          &lt;li&gt;Inadequate separation of privileges &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;Cache misses. &lt;/li&gt;          &lt;li&gt;Failure to expire items &lt;/li&gt;          &lt;li&gt;Poor cache design &lt;/li&gt;          &lt;li&gt;Lack of a cache synchronization mechanism for scaling out. &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;Increased network traffic and latency due to chatty calls between layers. &lt;/li&gt;          &lt;li&gt;Inappropriate transport protocols and wire formats. &lt;/li&gt;          &lt;li&gt;Large data volumes over limited bandwidth networks. &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;Tightly coupled modules Duplication of code &lt;/td&gt;     &lt;/tr&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;Blocking calls &lt;/li&gt;          &lt;li&gt;Nongranular locks &lt;/li&gt;          &lt;li&gt;Misuing threads &lt;/li&gt;          &lt;li&gt;Holding onto locks longer than necessary &lt;/li&gt;          &lt;li&gt;Inappropriate isolation levels &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;Insecure administration interfaces &lt;/li&gt;          &lt;li&gt;Insecure configuration stores &lt;/li&gt;          &lt;li&gt;Clear text configuration data &lt;/li&gt;          &lt;li&gt;Too many administrators &lt;/li&gt;          &lt;li&gt;Over-privileged process accounts and service accounts &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;Limited scalability due to server and resource affinity. &lt;/li&gt;          &lt;li&gt;Mixed presentation and business logic, which limits your options for scaling out your application. &lt;/li&gt;          &lt;li&gt;Lifetime issues due to tight coupling. &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;Per user authentication and authorization when not required. &lt;/li&gt;          &lt;li&gt;Chatty calls to database &lt;/li&gt;          &lt;li&gt;Intersperse of business logic &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;Leaving system / application in unstable state &lt;/li&gt;          &lt;li&gt;Revealing sensitive information to end users. &lt;/li&gt;          &lt;li&gt;Using exceptions for logic &lt;/li&gt;          &lt;li&gt;Not logging enough details about the exception. &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;Lack of logging and instrumentation &lt;/li&gt;          &lt;li&gt;Too fine grained logging and instrumentation &lt;/li&gt;          &lt;li&gt;Not making logging and instrumentation configurable option at runtime &lt;/li&gt;          &lt;li&gt;Failure to log business critical functionality. &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;Inefficient or ineffective task support. &lt;/li&gt;          &lt;li&gt;Poor responsiveness. &lt;/li&gt;          &lt;li&gt;Disempowered users. &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;Application-only filters for malicious input &lt;/li&gt;          &lt;li&gt;Non-validated input in the Hypertext Markup Language (HTML) output stream &lt;/li&gt;          &lt;li&gt;Non-validated input used to generate SQL queries &lt;/li&gt;          &lt;li&gt;Reliance on client-side validation &lt;/li&gt;          &lt;li&gt;Use of input file names, URLs, or user names for security decisions &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;Tight coupling &lt;/li&gt;          &lt;li&gt;Inflexible processes &lt;/li&gt;          &lt;li&gt;Race and deadlock issues &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Key Guidelines      &lt;br /&gt;&lt;/strong&gt;This table summarizes the key guidelines within each hot spot:&lt;/p&gt;  &lt;table border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;th&gt;Category&lt;/th&gt;        &lt;th&gt;Key Guidelines&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;Consider single-sign on requirements. &lt;/li&gt;          &lt;li&gt;Separate public and restricted areas. &lt;/li&gt;          &lt;li&gt;Use account lockout policies for end-user accounts. &lt;/li&gt;          &lt;li&gt;Support password expiration periods. &lt;/li&gt;          &lt;li&gt;Be able to disable accounts. &lt;/li&gt;          &lt;li&gt;Do not store passwords in user stores. &lt;/li&gt;          &lt;li&gt;Require strong passwords. &lt;/li&gt;          &lt;li&gt;Do not send passwords over the wire in plaintext. &lt;/li&gt;          &lt;li&gt;Protect authentication cookies. &lt;/li&gt;          &lt;li&gt;Use multiple gatekeepers. &lt;/li&gt;          &lt;li&gt;Restrict user access to system-level resources. &lt;/li&gt;          &lt;li&gt;Consider authorization granularity. &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;Avoid caching per-user data. &lt;/li&gt;          &lt;li&gt;Avoid caching volatile data which is required by the user to be accurate and updated in real time. &lt;/li&gt;          &lt;li&gt;Cache data that does not change very frequently or is completely static. &lt;/li&gt;          &lt;li&gt;Do not cache shared expensive resources. &lt;/li&gt;          &lt;li&gt;Cache transformed data, keeping in mind the data use. &lt;/li&gt;          &lt;li&gt;Evaluate stateful versus stateless design. &lt;/li&gt;          &lt;li&gt;Consider your state store options. &lt;/li&gt;          &lt;li&gt;Minimize session data. &lt;/li&gt;          &lt;li&gt;Free session resources as soon as possible. &lt;/li&gt;          &lt;li&gt;Avoid accessing session variables from business logic. &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;Choose the appropriate remote communication mechanism. &lt;/li&gt;          &lt;li&gt;Design chunky interfaces. &lt;/li&gt;          &lt;li&gt;Consider how to pass data between layers. &lt;/li&gt;          &lt;li&gt;Minimize the amount of data sent across the wire. &lt;/li&gt;          &lt;li&gt;Batch work to reduce calls over the network. &lt;/li&gt;          &lt;li&gt;Reduce transitions across boundaries. &lt;/li&gt;          &lt;li&gt;Consider asynchronous communication. &lt;/li&gt;          &lt;li&gt;Consider message queuing. &lt;/li&gt;          &lt;li&gt;Consider a &amp;quot;fire and forget&amp;quot; invocation model. &lt;/li&gt;          &lt;li&gt;Cut call chains with queues and caches as much as possible. Doing so will enhance the scalability and availability of the overall solution. &lt;/li&gt;          &lt;li&gt;Push out asynchronous boundaries close to the user, service interfaces, and service agents, to isolate your service from external dependencies. &lt;/li&gt;          &lt;li&gt;If you need to expose functionality as a synchronous operation, evaluate whether you can wrap an internally asynchronous operation as described in the following discussion &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;Avoid using dynamic layouts that are difficult to load and maintain. &lt;/li&gt;          &lt;li&gt;Be careful with dependencies between components. Use abstraction patterns when possible to avoid issues with maintainability. &lt;/li&gt;          &lt;li&gt;Consider creating templates with placeholders. For example use the Template View pattern to compose dynamic web pages to ensure reuse and consistency. &lt;/li&gt;          &lt;li&gt;Consider composing views from reusable modular parts. For example use the Composite View pattern to build a view from modular, atomic component parts. &lt;/li&gt;          &lt;li&gt;Use well-known design patterns to implement a composite interface containing separate modules or user controls where appropriate. &lt;/li&gt;          &lt;li&gt;Modules should not directly reference one another or the application that loaded them. &lt;/li&gt;          &lt;li&gt;Modules should use services to communicate with the application or with other modules. &lt;/li&gt;          &lt;li&gt;Modules should not be responsible for managing their dependencies. &lt;/li&gt;          &lt;li&gt;Modules should support being added and removed from the system in a pluggable fashion. &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;Treat threads as a shared resource. &lt;/li&gt;          &lt;li&gt;Pool shared or scarce resources. &lt;/li&gt;          &lt;li&gt;Acquire late, release early. &lt;/li&gt;          &lt;li&gt;Consider efficient object creation and destruction. &lt;/li&gt;          &lt;li&gt;Consider resource throttling. &lt;/li&gt;          &lt;li&gt;Reduce contention by minimizing lock times. &lt;/li&gt;          &lt;li&gt;Balance between coarse- and fine-grained locks. &lt;/li&gt;          &lt;li&gt;Choose an appropriate transaction isolation level. &lt;/li&gt;          &lt;li&gt;Avoid long-running atomic 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;Protect your administration interfaces. &lt;/li&gt;          &lt;li&gt;Protect your configuration store. &lt;/li&gt;          &lt;li&gt;Maintain separate administration privileges. &lt;/li&gt;          &lt;li&gt;Use least privileged process and service accounts. &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;Partition application functionality into logical layers. &lt;/li&gt;          &lt;li&gt;Choose the proper locality for your objects based on your reliability, performance, and scalability needs. &lt;/li&gt;          &lt;li&gt;Design for loose coupling. &lt;/li&gt;          &lt;li&gt;Design for high cohesion. &lt;/li&gt;          &lt;li&gt;Use early binding where possible. &lt;/li&gt;          &lt;li&gt;Evaluate resource affinity. &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;If your application uses a single database, use the database-specific data provider. &lt;/li&gt;          &lt;li&gt;If you need to support multiple databases, you generally need to have an abstraction layer, which helps you transparently connect to the currently configured store. &lt;/li&gt;          &lt;li&gt;Consider resource throttling. &lt;/li&gt;          &lt;li&gt;Consider the identities you flow to the database. &lt;/li&gt;          &lt;li&gt;Separate read-only and transactional requests. &lt;/li&gt;          &lt;li&gt;Avoid unnecessary data returns. &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;Avoid revealing sensitive data to users. &lt;/li&gt;          &lt;li&gt;Do not use exceptions to control application flow. &lt;/li&gt;          &lt;li&gt;Use validation code to avoid unnecessary exceptions. &lt;/li&gt;          &lt;li&gt;Do not catch exceptions that you cannot handle. &lt;/li&gt;          &lt;li&gt;Be aware that rethrowing is expensive. &lt;/li&gt;          &lt;li&gt;Preserve as much diagnostic information as possible in your exception handlers. &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;Instrument your code up front. &lt;/li&gt;          &lt;li&gt;Make your logging configurable. &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;Measure effectiveness against scenarios. &lt;/li&gt;          &lt;li&gt;Improve user responsiveness where possible. &lt;/li&gt;          &lt;li&gt;Model from effective user design. &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;Validate for length, range, format, and type. &lt;/li&gt;          &lt;li&gt;Constrain and reject input. &lt;/li&gt;          &lt;li&gt;Sanitize output. &lt;/li&gt;          &lt;li&gt;Don&amp;#8217;t rely on client-side validation. &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;Determine management requirements. If a business user needs to manage the workflow, you&amp;#8217;ll need a solution that provides an interface that the business user can understand. &lt;/li&gt;          &lt;li&gt;Determine how exceptions will be handled. &lt;/li&gt;          &lt;li&gt;With human workflow, you need to consider the un-deterministic nature of humans. In other words, you can&amp;#8217;t determine when a task will be completed, or if it will be completed correctly. &lt;/li&gt;          &lt;li&gt;Use service interfaces to interact with external workflow providers. &lt;/li&gt;          &lt;li&gt;If supported, use designers and metadata to define the workflow instead of code to define the workflow. &lt;/li&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;How To Provide Feedback&lt;/strong&gt;     &lt;br /&gt;We're still banging through the frame.&amp;#160; There's some rough spots.&amp;#160; We want to make sure we can map problems, principles, patterns, assets, and technologies to the right hot spots.&amp;#160; We want a prioritized list over a laundry list so we're still deciding what's in and what's out.&amp;#160; We'll add it to CodePlex shortly.&amp;#160; You can either comment here on my blog or wait until the frame is on CodePlex, and then provide comments in the Wiki.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Additional Resources&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/AppArch" target="_blank"&gt;patterns &amp;amp; practices App Arch Guide 2.0 Project&lt;/a&gt; (CodePlex) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.guidanceshare.com" target="_blank"&gt;Guidance Share Wiki&lt;/a&gt; (GuidanceShare.com) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://shapingsoftware.com/" target="_blank"&gt;ShapingSoftware Blog&lt;/a&gt; (ShapingSoftware.com) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;   &lt;br /&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/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/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/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/06/layers-and-tiers.aspx"&gt;Layers and Tiers&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/07/services-layer.aspx"&gt;Services Layer&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/04/scenario-frames-for-presentation-business-data-and-services.aspx"&gt;Scenario Frames for Presentation, Business, Data and Services&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/09/patterns-practices-security-engineering.aspx"&gt;patterns &amp;amp; practices Security Engineering&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/16/patterns-practices-performance-engineering.aspx"&gt;patterns &amp;amp; practices Performance Engineering&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;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8961499" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/AppArch/default.aspx">AppArch</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</category></item><item><title>The Story of the Engineering Practices Frame</title><link>http://blogs.msdn.com/jmeier/archive/2008/09/16/the-story-of-the-engineering-practices-frame.aspx</link><pubDate>Tue, 16 Sep 2008 23:59:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8954389</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8954389.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8954389</wfw:commentRss><description>&lt;p&gt;I shared the story of our &lt;a href="http://shapingsoftware.com/2008/09/16/engineering-practices-frame/" target="_blank"&gt;patterns &amp;amp; practices Engineering Practices Frame&lt;/a&gt; on &lt;a href="http://shapingsoftware.com/" target="_blank"&gt;Shaping Software&lt;/a&gt;.&amp;#160; In a nutshell, the Engineering Practices Frame is a set of categories to organize software development knowledge.&amp;#160; The idea behind the frame is to help collect and share principles, patterns, and practices for life cycle activities and artifacts.&amp;#160; It's meant to play well with SWEBOK, various Microsoft efforts around life cycle practices, and our customers and field in the trenches.&amp;#160; The Engineering Practices Frame is also the foundation for our ALM Frame.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8954389" 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/Frames/default.aspx">Frames</category></item><item><title>Scenario Frames for Presentation, Business, Data, and Services</title><link>http://blogs.msdn.com/jmeier/archive/2008/09/04/scenario-frames-for-presentation-business-data-and-services.aspx</link><pubDate>Thu, 04 Sep 2008 21:20:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8924904</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8924904.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8924904</wfw:commentRss><description>&lt;p&gt;As part of our &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/02/patterns-practices-app-arch-guide-2-0-project.aspx"&gt;App Arch Guide 2.0 project&lt;/a&gt;, we're creating &lt;a href="http://blogs.msdn.com/jmeier/archive/2007/02/22/scenario-frames-for-guidance.aspx"&gt;scenario frames&lt;/a&gt; to organize customer problems into meaningful lists.&amp;nbsp;&amp;nbsp; These particular frames are an elaboration of our &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/03/app-arch-meta-frame.aspx" target="_blank"&gt;App Arch Meta Model&lt;/a&gt;.&amp;nbsp; This helps scope our guidance.&amp;nbsp;&amp;nbsp; We also use them to test effectiveness.&amp;nbsp; The value of the guidance is the value of the problems solved. &lt;p&gt;&lt;strong&gt;Scenario Frames on CodePlex&lt;/strong&gt;&lt;br&gt;You can review and contribute to our scenario frames on CodePlex: &lt;ul&gt; &lt;li&gt;&lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Scenario%20Frames&amp;amp;referringTitle=Home" target="_blank"&gt;Scenario Frames Index&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Presentation Layer Scenarios Frame&lt;/strong&gt; &lt;br&gt;Heres' the key hot spots for our &lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Presentation%20Layer%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames" target="_blank"&gt;presentation layer frame&lt;/a&gt;: &lt;ul&gt; &lt;li&gt;&lt;em&gt;Caching&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Composition&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Exception Management&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Input&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Layout&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Navigation&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Presentation Entities&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;UI Components&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;UI Process Components&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Validation&lt;/em&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Business Layer Scenarios Frame&lt;/strong&gt; &lt;br&gt;Here's the key hot spots for our &lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Business%20Layer%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames" target="_blank"&gt;business layer frame&lt;/a&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;Authentication&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Authorization&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Business Components&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Business Entities&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Caching&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Concurrency and Transactions&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Data Access&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Exception Management&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Logging&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Service Interface&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Validation&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Workflow&lt;/em&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Data Access Layer Scenarios Frame&lt;/strong&gt; &lt;br&gt;Here's the key hot spots for our &lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Data%20Access%20Layer%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames" target="_blank"&gt;data access layer frame&lt;/a&gt;: &lt;ul&gt; &lt;li&gt;&lt;em&gt;General&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;BLOB &lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Batching &lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Connections &lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Data Format&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Exception Management &lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Security Considerations &lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Stored Procedures &lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;SQL Commands&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Validation &lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;XML&lt;/em&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Services Layer&lt;/strong&gt;&lt;br&gt;Heres's the key hot spots for our &lt;a href="http://www.codeplex.com/AppArch/Wiki/View.aspx?title=Services%20Layer%20Scenarios%20Frame&amp;amp;referringTitle=Scenario%20Frames" target="_blank"&gt;services layer frame&lt;/a&gt;: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;General&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Authentication&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Authorization&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Communication&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Exception Management&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Messaging Channels&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Message Construction&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Message Endpoint&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Message Protection&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Message Routing&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Message Transformation&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Message Exchange Patterns&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;REST&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;SOAP&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Validation&lt;/em&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/09/02/patterns-practices-app-arch-guide-2-0-project.aspx" target="_blank"&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/03/app-arch-meta-frame.aspx" target="_blank"&gt;App Arch Meta Frame&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8924904" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/AppArch/default.aspx">AppArch</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</category></item><item><title>App Arch Meta-Frame</title><link>http://blogs.msdn.com/jmeier/archive/2008/09/03/app-arch-meta-frame.aspx</link><pubDate>Wed, 03 Sep 2008 23:55:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8922765</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>20</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8922765.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8922765</wfw:commentRss><description>&lt;p&gt;As part of the &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/09/02/patterns-practices-app-arch-guide-2-0-project.aspx"&gt;App Arch Guidance project&lt;/a&gt;, we've created an organizing frame to help think about application architecture:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AppArchMetaFrame_C304/AppArchMetaFrame_2.gif"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="230" alt="AppArchMetaFrame" src="http://blogs.msdn.com/blogfiles/jmeier/WindowsLiveWriter/AppArchMetaFrame_C304/AppArchMetaFrame_thumb.gif" width="400" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Anatomy of the App Arch Meta Frame&lt;/strong&gt;&lt;br&gt;You can see from the figure, we have a few parts that work together:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Scenarios&lt;/strong&gt; - You can't evaluate an architecture in a vacuum.&amp;nbsp; Scenarios are the backdrop and the context.&amp;nbsp; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Quality Attributes / Qualities&lt;/strong&gt; - This is your classic set of reliability, security, performance, flexibility, maintainability ... etc.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Requirements / Constraints&lt;/strong&gt; - These are the user, business, and technical rules that shape your architecture.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;App Types&lt;/strong&gt; - This is your overall shape.&amp;nbsp; This includes Web app, Rich Client, Mobile, ... etc.&amp;nbsp; While the line may blur, there's important distinctions among application types.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Architecture Styles&lt;/strong&gt; - This includes architectural patterns such as N-tier, client-server, SOA, ... etc.&amp;nbsp; You can see shifts in styles over the years such as from object-orientation to message-orientation.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Architecture Frame&lt;/strong&gt; - These are the architectural "hot spots."&amp;nbsp; This is where your key engineering decisions happen.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;How We Use the Frame&lt;/strong&gt;&lt;br&gt;We use the frame to explore and gain insight into different aspects of application architecture.&amp;nbsp; App arch is a big space.&amp;nbsp; We'll be using the frame to catalog and organize our various principles, patterns, practices, and assets.&lt;/p&gt; &lt;p&gt;Keep in mind that this is a meta-frame (so it's a frame of frames.)&amp;nbsp; We'll have a collection of frames that shine the spotlight on more focused areas.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Feedback&lt;/strong&gt;&lt;br&gt;What do you think? ...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Additional Resources&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/06/01/requirements-types/" target="_blank"&gt;Requirements Types&lt;/a&gt; (ShapingSoftware.com)&lt;/li&gt; &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/06/01/quality-attributes-frame/" target="_blank"&gt;Quality Attributes Frame&lt;/a&gt; (ShapingSoftware.com)&lt;/li&gt; &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/08/10/architectural-styles-patterns-and-metaphors/" target="_blank"&gt;Architectural Styles, Patterns, and Metaphors&lt;/a&gt; (ShapingSoftware.com)&lt;/li&gt; &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/08/10/architectural-patterns-vs-system-metaphors/" target="_blank"&gt;Architectural Patterns vs. System Metaphors&lt;/a&gt; (ShapingSoftware.com)&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8922765" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/AppArch/default.aspx">AppArch</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</category></item><item><title>Web Services Security Frame</title><link>http://blogs.msdn.com/jmeier/archive/2008/06/04/web-services-security-frame.aspx</link><pubDate>Wed, 04 Jun 2008 21:27:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8573758</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8573758.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8573758</wfw:commentRss><description>&lt;P&gt;The key to making principles, patterns, and practices more effective is to have an organizing frame.&amp;nbsp; While working on our &lt;A href="http://www.codeplex.com/WCFSecurity" target=_blank mce_href="http://www.codeplex.com/WCFSecurity"&gt;patterns &amp;amp; practices WCF Security Guidance Project&lt;/A&gt;, we created the Web Services Security Frame for just such a purpose.&amp;nbsp; We use the frame throughout the guidance to organize threats, attacks, vulnerabilities and countermeasures, as well as to organize principles, patterns, and practices.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Web Services Security Frame&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Here's a snapshot of the frame (the power of the frame is that it's a durable, evolvable backdrop -- in other words, you can shape it to your own purposes.)&amp;nbsp; You'll see this frame used throughout our upcoming guide.&lt;STRONG&gt;&amp;nbsp; &lt;/STRONG&gt;Notice that the categories serve as a pivot that we can hang other viewpoints (threats/attacks, vulnerabilities, countermeasures.)&lt;/P&gt;
&lt;TABLE class="" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class=""&gt;Category&lt;/TH&gt;
&lt;TH class=""&gt;Description&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Auditing and Logging&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Auditing and logging refers to how security-related events are recorded, monitored, and audited.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Authentication&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Authentication is the process where an entity proves the identity of another entity, typically through credentials, such as a user name and password.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Authorization&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Authorization is how your service provides access controls for resources and operations.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Configuration Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Configuration management refers to how your service handles database connections, administration and other configuration settings.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Exception Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Exception management refers to how you handle exceptions within your application, including fault contracts.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Impersonation/Delegation&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Impersonation and delegation refers to how your service impersonates users and passes identity information downstream for authorization purposes.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Encryption&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Message encryption refers to protecting a message by converting the contents to cipher-text using cryptographic methods.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Replay Detection&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Message replay detection refers to identifying and rejecting messages that are re-submitted.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Signing&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Message signing refers to signing a message with a digital signature using cryptographic methods, to confirm the source of the message and detect if the contents have been tampered with (i.e. authentication and integrity of the message.)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Validation&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Message validation refers to how you verify the message payload against schema, as well as message size, content and character sets. This includes how your service filters, scrubs and rejects input and output before additional processing. Input and output includes input from clients consuming the service as well as file-system input, as well as input from network resources, such as databases. Output typically includes the return values from your service or disk / database writes among others.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Sensitive Data&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;Sensitive data includes data integrity and confidentiality of your user and application data that you need to protect. This includes how you protect sensitive data from being stolen from memory, from configuration files or when transmitted over the network.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Session Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;A session refers to a series of related interactions between a client and your service.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Threats / Attacks Organized By the Web Services Security Frame&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE class="" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class=""&gt;Category&lt;/TH&gt;
&lt;TH class=""&gt;Threats / Attacks&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Auditing and Logging&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Repudiation 
&lt;LI&gt;Denial of services 
&lt;LI&gt;Disclosure of confidential information &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Authentication&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Network eavesdropping 
&lt;LI&gt;Brute force attacks 
&lt;LI&gt;Dictionary attacks 
&lt;LI&gt;Cookie replay attack 
&lt;LI&gt;Credential theft &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Authorization&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Elevation of privilege 
&lt;LI&gt;Disclosure of confidential data 
&lt;LI&gt;Data tampering 
&lt;LI&gt;Luring attacks 
&lt;LI&gt;Token stealing &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Configuration Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Unauthorized access to configuration stores 
&lt;LI&gt;Retrieval of clear text configuration secrets &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Exception Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Information disclosure 
&lt;LI&gt;Denial of service 
&lt;LI&gt;Elevation of privilege &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Impersonation/Delegation&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Elevation of privilege 
&lt;LI&gt;Disclosure of confidential information &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Encryption&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Stealing sensitive data. 
&lt;LI&gt;Theft of encryption keys. 
&lt;LI&gt;Man in the middle attack. &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Replay Detection&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Session replay &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Singing&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Data tampering. &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Validation&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;XPath injection 
&lt;LI&gt;XML Bombs 
&lt;LI&gt;Canonicalization issues 
&lt;LI&gt;Cross-site scripting 
&lt;LI&gt;SQL injection &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Sensitive Data&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Memory dumping 
&lt;LI&gt;Network eavesdropping 
&lt;LI&gt;Configuration file sniffing &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Session Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Session hijacking 
&lt;LI&gt;Session replay 
&lt;LI&gt;Man in the middle attack 
&lt;LI&gt;Inability to logout successfully 
&lt;LI&gt;Cross-site request forgery 
&lt;LI&gt;Session fixation 
&lt;LI&gt;Load balancing and session affinity &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Vulnerabilities Organized by the Web Services Security Frame&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE class="" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class=""&gt;Category&lt;/TH&gt;
&lt;TH class=""&gt;Vulnerabilities&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Auditing and Logging&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Failing to audit failed logons 
&lt;LI&gt;Failing to secure log files 
&lt;LI&gt;Storing sensitive information in log files Failing to audit across application tiers Failure to throttle log files &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Authentication&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Using weak passwords 
&lt;LI&gt;Storing clear text credentials in configuration files 
&lt;LI&gt;Passing clear text credentials over the network 
&lt;LI&gt;Permitting prolonged session lifetime 
&lt;LI&gt;Mixing personalization with authentication 
&lt;LI&gt;Using weak authentication mechanisms (For example, using basic authentication over an untrusted network.) &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Authorization&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Relying on a single gatekeeper (e.g. relying on client-side validation only) 
&lt;LI&gt;Failing to lock down system resources against application identities 
&lt;LI&gt;Failing to limit database access to specified stored procedures 
&lt;LI&gt;Using inadequate separation of privileges 
&lt;LI&gt;Permitting over-privileged accounts &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Configuration Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Using insecure custom administration interfaces 
&lt;LI&gt;Failing to secure configuration files on the server 
&lt;LI&gt;Storing sensitive information in the clear text 
&lt;LI&gt;Having too many administrators Using over-privileged process accounts and service accounts &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Exception Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Failing to use structured exception handling (try/catch) 
&lt;LI&gt;Revealing too much information to the client 
&lt;LI&gt;Failure to specify fault contracts with the client 
&lt;LI&gt;Failure to use a global exception handler &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Impersonation / Delegation&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Failure to revert to a lower privilege after using impersonation 
&lt;LI&gt;Improper use of global impersonation across the entire service &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Encryption&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Failure to encrypt messages 
&lt;LI&gt;Using custom cryptography 
&lt;LI&gt;Distributing keys insecurely Managing or storing keys insecurely &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Replay Detection&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Failure to implement message replay detection feature &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Signing&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Unsigned messages that don't confirm the source 
&lt;LI&gt;Unsigned messages that don't detect tampering &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Validation&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Using non-validated input used to generate SQL queries 
&lt;LI&gt;Relying only on client-side validation Using input file names, URLs, or user names for security decisions 
&lt;LI&gt;Using application-only filters for malicious input Looking for known bad patterns of input 
&lt;LI&gt;Trusting data read from databases, file shares, and other network resources 
&lt;LI&gt;Failing to validate input from all sources including cookies, SOAP headers, SOAP parameters, databases, and network resources &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Session Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Passing session identifiers over unencrypted channels 
&lt;LI&gt;Permitting prolonged session lifetime Having insecure session state stores 
&lt;LI&gt;Placing session identifiers in query strings &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Countermeasures Organized by the Web Services Security Frame&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE class="" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class=""&gt;Category&lt;/TH&gt;
&lt;TH class=""&gt;Countermeasures&lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Auditing and Logging&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Identify malicious behavior. 
&lt;LI&gt;Know your baseline (know what good traffic looks like) 
&lt;LI&gt;Use application instrumentation to expose behavior that can be monitored 
&lt;LI&gt;Throttle logging 
&lt;LI&gt;Strip sensitive data before logging &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Authentication&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Use strong password policies 
&lt;LI&gt;Do not store credentials in an insecure manner 
&lt;LI&gt;Use authentication mechanisms that do not require clear text credentials to be passed over the network 
&lt;LI&gt;Encrypt communication channels to secure authentication tokens 
&lt;LI&gt;Use HTTPS only with forms authentication cookies 
&lt;LI&gt;Separate anonymous from authenticated pages 
&lt;LI&gt;Using cryptographic random number generators to generate session IDs &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Authorization&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Use least privilege accounts. 
&lt;LI&gt;Authentication tied to authorization on the same tier 
&lt;LI&gt;Consider granularity of access 
&lt;LI&gt;Enforce separation of privileges 
&lt;LI&gt;Use multiple gatekeepers 
&lt;LI&gt;Secure system resources against system identities &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Configuration Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Use ACLs. 
&lt;LI&gt;Encrypt sensitive sections of configuration files 
&lt;LI&gt;Use secure settings for various operations of web services using configuration files &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Exception Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Use structured exception handling (by using try/catch blocks) 
&lt;LI&gt;Catch and wrap exceptions only if the operation adds value/information 
&lt;LI&gt;Do not reveal sensitive system or application information 
&lt;LI&gt;Implement a global exception handler 
&lt;LI&gt;Do not log private data such as passwords &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Impersonation / Delegation&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Use Using statement to automatically revert impersonation 
&lt;LI&gt;Granularly impersonate only those operations that need it &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Encryption&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Use message security or transport security to encrypt your messages 
&lt;LI&gt;Use platform-provided cryptography 
&lt;LI&gt;Use platform features for key management 
&lt;LI&gt;Periodically change your keys &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Replay Detection&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Cache an identifier for incoming messages, and use message replay detection to identify and reject messages that match an entry in the replay detection cache &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Signing&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;verify messages have not been tampered with in transit (data integrity) 
&lt;LI&gt;verify messages originate from the expected sender (authenticity) &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Message Validation&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;verify the message payload against schema 
&lt;LI&gt;verify the message message size, content and character sets 
&lt;LI&gt;filter, scrub and reject input and output before additional processing &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Sensitive Data&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Do not store secrets in software 
&lt;LI&gt;Encrypt sensitive data over the network 
&lt;LI&gt;Secure the channel 
&lt;LI&gt;Encrypt sensitive data in configuration files &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;EM&gt;Session Management&lt;/EM&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;Partition site by anonymous, identified, and authenticated users 
&lt;LI&gt;Reduce session timeouts 
&lt;LI&gt;Avoid storing sensitive data in session stores 
&lt;LI&gt;Secure the channel to the session store 
&lt;LI&gt;Authenticate and authorize access to the session store &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;STRONG&gt;Thanks&lt;BR&gt;&lt;/STRONG&gt;Special thanks to Rudy Araujo and &lt;A href="http://blogs.msdn.com/ace_team/" target=_blank mce_href="http://blogs.msdn.com/ace_team/"&gt;ACE Team&lt;/A&gt; members, Richard Lewis and John Steer for their contribution toward helping shape a better frame.&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/2008/03/27/patterns-and-practices-wcf-security-guidance-now-available.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2008/03/27/patterns-and-practices-wcf-security-guidance-now-available.aspx"&gt;patterns &amp;amp; practices WCF Security Guidance Now Available&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/jmeier/archive/2008/05/23/wcf-security-resources.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2008/05/23/wcf-security-resources.aspx"&gt;WCF Security Resources&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8573758" 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/Frames/default.aspx">Frames</category></item><item><title>Life Frame</title><link>http://blogs.msdn.com/jmeier/archive/2008/03/20/life-frame.aspx</link><pubDate>Thu, 20 Mar 2008 19:53:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8327541</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/8327541.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=8327541</wfw:commentRss><description>&lt;P&gt;What is your life frame?&amp;nbsp; What are the key buckets in your life that you need to balance across?&amp;nbsp; If you have a frame, you can balance your life through thick and through thin.&amp;nbsp; If you have a life frame, you can more thoughtfully allocate your time and energy for maximum results.&amp;nbsp; More importantly, when things aren't going well, you have a tool to help you spot where you are not investing enough. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Life Frame&lt;/STRONG&gt; &lt;BR&gt;This is a baseline of your personal portfolio of your most important assets: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Mind&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Body&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Emotions&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Career&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Financial&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Relationships&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adventure&lt;/STRONG&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Note - if those buckets don't work for you, change them.&amp;nbsp; It's a starter set.&lt;/P&gt;
&lt;P&gt;I've been sharing this life frame with those I coach, and some colleagues and they've found it helpful, so now I'm sharing it more broadly.&amp;nbsp; It's a great starting point when you're not getting what you want out of life.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Spread Your Energy and Time Across Your Buckets&lt;/STRONG&gt; &lt;BR&gt;Spread your energy and time across them.&amp;nbsp; If your current investment's not working, turn up the dial on some.&amp;nbsp; If your stuck in one area, then try turning up another.&amp;nbsp; For example, if you're not getting the results you want at work, then crank up your relationships dial.&amp;nbsp; Remember that with this portfolio, the sum is more than the parts.&amp;nbsp;&amp;nbsp; It's the net effect.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;What Can Happen When You Don't Use the Frame &lt;BR&gt;&lt;/STRONG&gt;When I first got to Microsoft years ago, I didn't have this frame.&amp;nbsp; Sure I knew about these areas of my life, but I didn't have the mental model of a portfolio.&amp;nbsp; Instead, all I knew was that I would throw all my energy and hours at my career bucket.&amp;nbsp; To put that in perspective, 80, 90, 100+ hours a week.&amp;nbsp; The problem is I consistently got rated highly and produced results.&amp;nbsp; But at what cost?&amp;nbsp; Well, if you spend 100+ hours in one bucket, guess how much energy you're spending in others?&amp;nbsp;&amp;nbsp; Granted some buckets overlap, but I'm talking about when you really shine the spotlight on them.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Improve Your Approach Over Spend More Time&lt;/STRONG&gt; &lt;BR&gt;Time is a limited resources.&amp;nbsp; So is your energy.&amp;nbsp; Interestingly, while working on &lt;A href="http://msdn2.microsoft.com/en-us/library/ms998537.aspx" target=_blank mce_href="http://msdn2.microsoft.com/en-us/library/ms998537.aspx"&gt;performance modeling&lt;/A&gt;, the light bulb went off.&amp;nbsp; If I carve out a minimum for some buckets and a maximum for others, it would be a forcing function.&amp;nbsp; What's the maximum I would throw at my career bucket?&amp;nbsp; 60? 50? 40?&amp;nbsp;&amp;nbsp; &lt;A href="http://blogs.msdn.com/jmeier/archive/2007/10/21/how-to-use-time-boxing-for-getting-results.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2007/10/21/how-to-use-time-boxing-for-getting-results.aspx"&gt;Timeboxing&lt;/A&gt; my career bucket forced me to identify the real value of all my work and to heavily prioritize.&amp;nbsp; It also forced me to find the most effective principles, patterns and practices for project management, personal productivity, running high-performance teams, ... etc.&amp;nbsp;&amp;nbsp; Which is better ... more time at the problem? ... or better techniques, more value, and a sustainable pace?&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Set Boundaries (Minimums and Maximums)&lt;/STRONG&gt; &lt;BR&gt;The real lesson is that if you don't first set your boundaries, then you never really have a way to prioritize.&amp;nbsp; For example, if you allocate fifty hours to your career bucket weekly, now you know how much to bite off at a time.&amp;nbsp; Otherwise, you'll just work until everything's done, but there's always something more to do.&amp;nbsp; Priorities, focus, and value are your friends.&lt;/P&gt;
&lt;P&gt;As another example, I now continuously invest in my relationships bucket.&amp;nbsp; For example, each week I have lunch with an old friend, and lunch with someone new.&amp;nbsp; At Microsoft, and in life, it's what you know and who you know. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;How To Use This&lt;/STRONG&gt; &lt;BR&gt;To get started, just put these categories on your whiteboard or a pad of paper.&amp;nbsp; Take a look across your portfolio and figure out your current investments in time and energy.&amp;nbsp; Look at your results.&amp;nbsp; How well are you balancing?&amp;nbsp; If you're on track, great.&amp;nbsp; If not, try increasing your investment is some areas and lowering another.&amp;nbsp;&amp;nbsp; The goal is to improve the quality of your life.&amp;nbsp; If you want to really put some focus in an area, try a &lt;A href="http://blogs.msdn.com/jmeier/archive/2007/03/09/30-day-improvement-sprints.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2007/03/09/30-day-improvement-sprints.aspx"&gt;30 Day Improvement Sprint&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 href="http://blogs.msdn.com/jmeier/archive/2008/02/04/the-change-frame.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2008/02/04/the-change-frame.aspx"&gt;Change Frame&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/jmeier/archive/2007/08/05/improvement-frame.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2007/08/05/improvement-frame.aspx"&gt;Improvement Frame&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8327541" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Effectiveness/default.aspx">Effectiveness</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Productivity/default.aspx">Productivity</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Work+Tips/default.aspx">Work Tips</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</category></item><item><title>The Change Frame</title><link>http://blogs.msdn.com/jmeier/archive/2008/02/04/the-change-frame.aspx</link><pubDate>Mon, 04 Feb 2008 19:00:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7440211</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/7440211.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=7440211</wfw:commentRss><description>&lt;p&gt;How do you improve your results?&amp;#160; How do you consistently increase your success?&amp;#160; Have you ever wondered why somebody's *advice* was useless for you at the time?&amp;#160; Maybe, they were giving you ideas to change your thinking when what you really needed was better techniques.&amp;#160; Have you ever spun your wheels and churned all your energy, only to realize later that you needed to think differently about the problem and change your approach?&amp;#160; The first thing to figure out is where you need to change. Here's a simple frame I've been using to help colleagues understand where to change, so they play their best game. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Change Frame&lt;/strong&gt;    &lt;br /&gt;You&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Thinking&lt;/strong&gt; - do you need to change your strategies, thinking, or thought patterns?&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Feeling&lt;/strong&gt; - do you need to change how you feel?&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Doing&lt;/strong&gt; - do you need more effective techniques or take more action? &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Situation&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Adapt&lt;/strong&gt; - do you need to change yourself for the situation?&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Adjust&lt;/strong&gt; - do you need to change or tailor the situation to set yourself up for success?&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Avoid&lt;/strong&gt; - do you need to avoid the situation (if it's not right for you)? &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;How To Use the Frame     &lt;br /&gt;&lt;/strong&gt;As simple as this frame looks, it's very powerful.&amp;#160; If somebody gives you advice and you feel a tug in your gut that it's not helpful, there's a good chance that it's not the advice itself, but it's at the wrong level.&amp;#160; Telling you how to think about a problem won't help when you really need a technique and action for the problem.&amp;#160; You can use this frame as a vantage point and to analyze your approach to be more effective. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Changing You     &lt;br /&gt;&lt;/strong&gt;The fastest and most effective thing you can change is yourself.&amp;#160; You should also know that changing your thinking, changes your feelings, changes your actions.&amp;#160; If you know this, it's a powerful concept.&amp;#160; If you don't have the energy you need to get results, then you might have to start with changing how you're thinking about it.&amp;#160; If you're stuck in analysis paralysis, then you might just need to start taking action and tuning your results. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Changing the Situation      &lt;br /&gt;&lt;/strong&gt;Some people spend too much time trying to change for the situation that's not right for them.&amp;#160; They ultimately change, but at the expense of their strengths or passion.&amp;#160; Another approach is to get better at figuring out up front where you can play to your strengths.&amp;#160; &lt;/p&gt;  &lt;p&gt;While you want to be flexible and adaptable, you also need to be self-aware.&amp;#160; If you know your strengths and weaknesses, you can either avoid situations where you won't be successful or you can set situations up for your success.&amp;#160; If you know your strengths and weaknesses, you can also be more deliberate about how you change for the situation and whether you are giving up your strengths.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Adapting, Adjusting or Avoiding&lt;/strong&gt;    &lt;br /&gt;For example, if you are used to position authority for getting results, then you'll want to either find those situations where it works or you'll want to avoid them.&amp;#160; If you want to be more effective across a wider range of projects, situations and roles, then you'll want to learn how to influence without authority.&amp;#160; The key to remember is that it's not a question of can you change for the situation -- of course you can.&amp;#160; It's really a question of should you, or is there a way to set the situation up for your success, or is another situation a better fit for you.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7440211" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Effectiveness/default.aspx">Effectiveness</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</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>Improvement Frame</title><link>http://blogs.msdn.com/jmeier/archive/2007/08/05/improvement-frame.aspx</link><pubDate>Mon, 06 Aug 2007 01:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4245488</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/4245488.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=4245488</wfw:commentRss><description>&lt;P&gt;As a mentor at work, I like to checkpoint results.&amp;nbsp; While I can do area-specific coaching, I tend to take a more holistic approach.&amp;nbsp; For me, it's more rewarding to find ways to unleash somebody's full potential and improve their overall effectiveness at Microsoft.&amp;nbsp; Aside from checking against specific goals, I use the following frame to gauge progress.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Improvement Frame&lt;/STRONG&gt;&lt;/P&gt;
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TH class=""&gt;Area &lt;/TH&gt;
&lt;TH class=""&gt;Prompts &lt;/TH&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;STRONG&gt;Thinking / Feeling&lt;/STRONG&gt; &lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;&lt;EM&gt;Do you find your work rewarding?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you passionate about what you do?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you spending more time feeling good?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;What thoughts dominate your mind now?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Is your general outlook more positive or negative?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Do you have more energy or less in general?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you still worried about the same things?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you excited about anything?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Have you changed your self-talk from inner-critic to coach?&lt;/EM&gt; &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;STRONG&gt;Situation&lt;/STRONG&gt; &lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;&lt;EM&gt;Are you spending more time working on what you enjoy?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;What would you rather be spending more time doing?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Do you have the manager you want?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Do you have the job you want?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you moving toward or away from your career goals?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;If your situation was never going to change, what one skill would you need to make the most of it?&lt;/EM&gt; &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;STRONG&gt;Time / Task Management&lt;/STRONG&gt; &lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;&lt;EM&gt;Are you driving your day or being driven?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you spending less time on administration?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you getting your "MUSTs" done?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you dropping the ball on anything important?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Do you have a task management system you trust?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are you avoiding using your head as a collection point?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you avoiding biting off more than you can chew?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you delivering incremental value?&lt;/EM&gt; &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;STRONG&gt;Domain Knowledge&lt;/STRONG&gt; &lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;&lt;EM&gt;Have you learned new skills?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Have you sharpened your key strengths?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Have you reduced your key liabilities?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;What are you the go-to person for?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;What could you learn that would make your more valuable to your team?&lt;/EM&gt; &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;STRONG&gt;Strategies / Approaches&lt;/STRONG&gt; &lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;&lt;EM&gt;What&amp;nbsp;are you approaching&amp;nbsp;differently than the past?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you more resourceful?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you finding lessons in everything you do?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you learning from everybody that you can?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you improving your effectiveness?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you modeling the success of others?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you tailoring advice to make it work for you?&lt;/EM&gt; &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;STRONG&gt;Relationships&lt;/STRONG&gt; &lt;/TD&gt;
&lt;TD class=""&gt;
&lt;LI&gt;&lt;EM&gt;Are you managing up effectively?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Are your priorities in sync with your manager's?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;Has your support network grown or shrunk?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you participating in new circles of influence?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you spending more time with people that catalyze you?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you working more effectively with people that drain you?&lt;/EM&gt; 
&lt;LI&gt;&lt;EM&gt;How are you leveraging more mentors and area specific coaches?&lt;/EM&gt; &lt;/LI&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;I've found this frame very effective for quickly finding areas that need work or to find sticking points.&amp;nbsp; It's also very revealing in terms of how much dramatic change there can be.&amp;nbsp; While situations or circumstances&amp;nbsp;may not change much, I find that changes in strategies and approaches can have a profound impact.&amp;nbsp; My take on this is that while you can't always control what's on your plate, you can control how you eat it.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4245488" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jmeier/archive/tags/Effectiveness/default.aspx">Effectiveness</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</category></item><item><title>Perspectives Frame</title><link>http://blogs.msdn.com/jmeier/archive/2007/03/18/perspectives-frame.aspx</link><pubDate>Sun, 18 Mar 2007 07:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1904094</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/1904094.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=1904094</wfw:commentRss><description>&lt;P&gt;Building software involves a lot of communication.&amp;nbsp; Behind this communication, lies perspectives.&amp;nbsp; These perspectives often get lost somewhere between initial goals and final product, which can lead to failed software.&amp;nbsp; I found that by using a simple Perspectives Frame, I improve my chances for success.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Perspectives Frame&lt;/STRONG&gt; &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Industry Perspective&lt;/STRONG&gt; - industry constraints and standards&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Business Perspective&lt;/STRONG&gt; - business goals and constraints&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Technical Perspective&lt;/STRONG&gt; - technological requirements, technical standards and practices&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;User Perspective&lt;/STRONG&gt; - User experiences and goals&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;In&amp;nbsp;Practice&lt;/STRONG&gt;&lt;BR&gt;I could easily over-engineer it, but in meetings and hallways, this quick, memorable frame of four categories helps.&amp;nbsp; OK, so it looks simple enough, but how do I use it? Here's how I use it in practice:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Understanding goals&lt;/STRONG&gt; - First things first, I want to know goals and drivers from the different perspectives.&amp;nbsp; Knowing which bucket they fall in, helps more than a random collection of requirements.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Understanding priorities&lt;/STRONG&gt; - Which perspectives take precedence?&amp;nbsp; For example, corporate line of business applications tend to optimize around industry and business at the expense of the user experience, since users don't have much choice.&amp;nbsp; On the other hand, an emerging breed of social software applications, puts the user front and center.&amp;nbsp; In another case, e-commerce applications have to get the user experience right, since users do have choices.&amp;nbsp;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Checkpointing representation&lt;/STRONG&gt; - Is my customer representing the user, business, technical or industry perspective?&amp;nbsp;&amp;nbsp; Do I have the different perspectives represented?&amp;nbsp;&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Rationalizing decisions&lt;/STRONG&gt; - If I know that for a scenario, user experience take precedence, I can make more effective decisions, moving towards the goal. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Rationalizing feedback&lt;/STRONG&gt; - If I know which perspective feedback is coming from, I can have a more meaningful prioritization discussion. If the team knows that for this case, the success of the user experience is key to the business success, that's a different story than if we&amp;nbsp; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Choosing the right techniques and tools&lt;/STRONG&gt; - Some techniques tend to be optimized for a particular perspective.&amp;nbsp; That's a good thing.&amp;nbsp; The trick is to know that and explicitly decide if it's the right tool.&amp;nbsp; For example, performing &lt;A class="" href="http://blogs.msdn.com/noahc/archive/2006/10/20/removing-dissatisfies-kano-analysis-a-decision-making-tool.aspx" target=_blank mce_href="http://blogs.msdn.com/noahc/archive/2006/10/20/removing-dissatisfies-kano-analysis-a-decision-making-tool.aspx"&gt;Kano Analysis&lt;/A&gt; can help you identify user satisfiers and dissatisfiers.&amp;nbsp; On the other hand &lt;A class="" href="http://en.wikipedia.org/wiki/Taguchi_methods" target=_blank mce_href="http://en.wikipedia.org/wiki/Taguchi_methods"&gt;Taguchi methods&lt;/A&gt; will optimize around technical perspectives.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This perspectives frame becomes even more powerful when you combine it with &lt;A class="" href="http://blogs.msdn.com/jmeier/archive/2007/03/18/must-vs-should-vs-could.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2007/03/18/must-vs-should-vs-could.aspx"&gt;MUST vs. SHOULD vs. COULD&lt;/A&gt; and &lt;A class="" href="http://blogs.msdn.com/jmeier/archive/2007/02/02/what-are-you-optimizing.aspx" mce_href="http://blogs.msdn.com/jmeier/archive/2007/02/02/what-are-you-optimizing.aspx"&gt;What Are You Optimizing&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1904094" 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/Frames/default.aspx">Frames</category></item><item><title>Scenario Frames for Guidance</title><link>http://blogs.msdn.com/jmeier/archive/2007/02/22/scenario-frames-for-guidance.aspx</link><pubDate>Thu, 22 Feb 2007 10:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1740123</guid><dc:creator>J.D. Meier</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/jmeier/comments/1740123.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jmeier/commentrss.aspx?PostID=1740123</wfw:commentRss><description>&lt;P&gt;When I tackle a problem domain, I first frame out the space.&amp;nbsp; To do this, I list out scenarios and sub-scenarios.&amp;nbsp; I group the scenarios under categories.&amp;nbsp; Sometimes categories come first, sometimes scenarios do.&amp;nbsp; I call the result, a Scenario Frame.&lt;/P&gt;
&lt;P&gt;I use Scenario Frames to evaluate platform, tools, and guidance.&amp;nbsp;&amp;nbsp; I also use them for product design, innovation, competitive assessments, subject matter expert reviews, arch and design reviews, and as a way to build shared understanding of a problem space.&lt;/P&gt;
&lt;P&gt;Here's&amp;nbsp;a&amp;nbsp;&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;&amp;nbsp;my team is creating to enumerate and evaluate Source Control scenarios in VSTS 2005:&lt;/P&gt;
&lt;P&gt;What's your favorite tool for framing out problem spaces?&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1740123" 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/Design/default.aspx">Design</category><category domain="http://blogs.msdn.com/jmeier/archive/tags/Frames/default.aspx">Frames</category></item></channel></rss>