<?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>Richard Parker's blog</title><link>http://blogs.msdn.com/b/msrich/</link><description>I work in Premier Support for Developers, helping others to remove barriers to successful development on the Microsoft platform.</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Managing Risk on Windows Azure</title><link>http://blogs.msdn.com/b/msrich/archive/2012/12/13/managing-risk-on-windows-azure.aspx</link><pubDate>Thu, 13 Dec 2012 14:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10377195</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10377195</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2012/12/13/managing-risk-on-windows-azure.aspx#comments</comments><description>&lt;p&gt;The Windows Azure cloud platform is a solid, highly available and scalable environment, but like any system (on-premises, or in the cloud) there are risks which threaten the desired operation of your application.&lt;/p&gt;
&lt;p&gt;With Windows Azure comes the opportunity to vastly lower your infrastructure costs, fluidly manage your system architecture and switch on and pay for extra capacity only when you need it. A successful implementation of your application on Windows Azure will present your developers with a scalable set of fault-tolerant globally distributed services that will enhance productivity, increase reliability and empower your business to react quicker and more cheaply to changing needs than ever before.&lt;/p&gt;
&lt;p&gt;Over the past 18 months in my role at Microsoft, I&amp;rsquo;ve met countless customers who are considering, or in the process of, a move to Windows Azure, but in 99% of cases, most folks feel that they can just take their existing software and put it in the cloud: and, you can. In many cases, there&amp;rsquo;s nothing stopping you doing that. Unfortunately, though, there are a few myths I have to dispel for you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="line-height: 12px;"&gt;&lt;strong&gt;Myth #1: The cloud is invincible.&lt;/strong&gt; &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Myth #2: I just write the code &amp;ndash; it&amp;rsquo;s then fire, and forget.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Myth #3: Any decent cloud platform worth its weight will deal with failure for me.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&amp;rsquo;ll explore why these are myths later in the article, but for now, I&amp;rsquo;d like you to ask yourself why it is you are moving (or have moved) to Windows Azure: was it the cost savings? Many people start their move to Azure based on a conversation focused on cost. In my personal experience, eight in every ten customers who move to Windows Azure and make only the minimum required code changes to have it operate in Azure (where changes are needed) are missing a trick, and within six to twelve months, engage in additional development work to take advantage of other services on offer. I think of it as somewhat like buying an expensive sports car, and only ever using the first two gears and driving at 30 MPH. And who does that?&lt;/p&gt;
&lt;p&gt;To sweeten the deal, I&amp;rsquo;m going to share my number one tip with you for getting the most out of your venture to the Windows Azure platform. In fact, it&amp;rsquo;s such a golden tip, that it doesn&amp;rsquo;t matter&amp;nbsp;&lt;em&gt;where&lt;/em&gt; you use it, it &lt;em&gt;will yield value.&lt;/em&gt; Cloud or on-premise, Windows Azure or elsewhere. Embed it within your development practices and watch your team build the most reliable software you&amp;rsquo;ve ever seen.&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Myth #1: The cloud is invincible.&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Allow me to present the notion that the most robust systems are those that are hardened against risk, in much the same way sensitive equipment is often shielded from harmful interference. It may be that your application &amp;ndash; under normal operating conditions &amp;ndash; will never suffer from&amp;nbsp;interference&amp;nbsp; or data corruption. After all, you employ smart developers and pair program.&lt;/p&gt;
&lt;p&gt;But what happens when a hard drive fails? Or a network call to a remote database fails?&lt;/p&gt;
&lt;p&gt;We tend to think of these things as &amp;lsquo;exceptions&amp;rsquo;; most of the error conditions we will refer to in this article will surface as an &lt;em&gt;exception&lt;/em&gt; in your code. But on Windows Azure, as in any other cloud platform, you have to keep in mind that the economies of scale come in to effect: your code and your database sit on top of a few drives across hundreds of thousands. Networks are (securely) shared with others, and it is impossible to guarantee that every electron that travels across the wire will arrive in sequence or even at all.&lt;/p&gt;
&lt;h2&gt;Myth #2: I just write the code. It&amp;rsquo;s fire and forget.&lt;/h2&gt;
&lt;p&gt;It helps to think of Windows Azure as a collection of discrete services (building blocks) that cooperate to provide, at the base level, high scale, high performance and highly-available geo-redundant network connectivity: virtual machines and persistent storage in various forms glued together with an extremely efficient, intelligent and almost invincible routing layer that abstracts developers away from the complexities of all of this, and exposes everything through a set of familiar, managed APIs.&lt;/p&gt;
&lt;p&gt;As developers, when we target Windows Azure, we&amp;rsquo;re targeting a rich set of capabilities that were probably not part of your application&amp;rsquo;s original design specifications. Triple-redundant and geo-redundant storage, anyone? An elastic load-balancer? While it&amp;rsquo;s true the many of the more basic building blocks of Windows Azure (including storage and the load balancing, even the virtual machine capabilities) are available to you, often without any requirement to modify your application, it is useful to understand that there is a rich ecosystem of additional services which you can and &lt;em&gt;should&lt;/em&gt; leverage not only to offer enhanced functionality within your application, but also to help the cloud platform keep your app running: to toughen it against risk.&lt;/p&gt;
&lt;h2&gt;Myth #3: Any decent cloud platform worth its weight will deal with failure for me.&lt;/h2&gt;
&lt;p&gt;It is incredibly rewarding, professionally and personally, to watch an application you designed support it&amp;rsquo;s users successfully and do it&amp;rsquo;s job right every day, for years. Let me just say that I think it can be even more rewarding (not just professionally or personally, but to your business stakeholders) to watch it do that&amp;nbsp;&lt;em&gt;no matter what&lt;/em&gt;&amp;nbsp;is happening on the underlying platform. Imagine a platform on which your application can often mask many would-be catastrophic failures to an on-premise datacenter completely from your end-users, by intelligently deploying pre-programmed mitigations to forecast risks. Wouldn&amp;rsquo;t it be great if you had a guide to help you figure out what those are?&lt;/p&gt;
&lt;p&gt;Azure mitigates many of the base-level risks for us (a disk failure, a virtual machine failure, switch hardware failure etc), essentially for free, just by adopting Windows Azure. But there are other things we need to think about, too. For example, many of our risks will be mitigated within the boundaries of a single datacenter. But what if it were to suffer a catastrophic failure? An Act of God? Or what if we simply wanted to bypass it because routing connectivity to it was slow?&lt;/p&gt;
&lt;p&gt;These are things the cloud platform should&amp;nbsp;&lt;em&gt;not provide&amp;nbsp;&lt;/em&gt;for us unless we tell it&amp;nbsp;&lt;em&gt;how&lt;/em&gt;. Each mitigation will have some kind of implication, whether it is financial or in terms of the functionality you are able to provide during the failure condition. Yet, many customers I have worked with have a somewhat romantic notion that &amp;ldquo;the cloud should just do it all for me!&amp;rdquo;&lt;/p&gt;
&lt;h2&gt;It&amp;rsquo;s all about risk.&lt;/h2&gt;
&lt;p&gt;In my experience in working with all of these customers, what these questions boil down to fundamentally is a conversation about&amp;nbsp;&lt;em&gt;risk&lt;/em&gt;. Specifically, understanding what those are, which are mitigated for you, and which you have to think about and deal with yourself. Once we think in these terms, that we as developers have to share this responsibility in order to cash-in on the &amp;lsquo;promise&amp;rsquo; of an invincible cloud platform, that&amp;rsquo;s when the platform magic actually happens.&lt;/p&gt;
&lt;p&gt;So, here&amp;rsquo;s the first golden tip for you:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="color: #ff9900;"&gt;Hardware fails. Networks fail. Memory fails. Your code needs to be hardened against as many of these risks as possible, and you need a mitigation strategy for all of them. Windows Azure will make it very easy for you to detect and prevent many of these risks (even the &amp;lsquo;catastrophic&amp;rsquo; ones) from bringing your business to it&amp;rsquo;s knees.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff9900;"&gt;&lt;span style="color: #000000;"&gt;So,&lt;/span&gt;&amp;nbsp;&lt;strong&gt;design for failure&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Identifying the risks and understanding &amp;amp; categorising the effects&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Risk is the potential that a chosen action or activity (including the choice of inaction) will lead to a loss (an undesirable outcome). The notion implies that a choice having an influence on the outcome exists (or existed). Potential losses themselves may also be called risks&amp;rdquo;.1&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This definition hints at the necessity to both understand that there is the potential for risk in any situation and that the outcome of any given situation may be influenced (otherwise, it is a&amp;nbsp;&lt;em&gt;certainty&lt;/em&gt;) in some way so as to be able to lessen or prevent the effect from being&amp;nbsp;noticeable&amp;nbsp; In this section, we will identify what the risks are and, what the effect of each risk manifesting itself is.&lt;/p&gt;
&lt;p&gt;Integral to your deployment on Windows Azure should be an understanding of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What the risks are;&lt;/li&gt;
&lt;li&gt;What steps can be taken to mitigate the effect of the risk surfacing;&lt;/li&gt;
&lt;li&gt;What category the effect falls within.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, when you buy a car, you know that there is a risk that it might get damaged, either by you (racing around again!), or by another road user. Assuming you&amp;rsquo;re a law abiding citizen, you&amp;rsquo;ll buy insurance to mitigate against the risk of damage to your car, or somebody else&amp;rsquo;s. But within your policy document will be a list of expectations around what happens when your car is damaged: you&amp;rsquo;ll be told how long your car will be unavailable, whether you&amp;rsquo;ll have the use of a rental car, etc.&lt;/p&gt;
&lt;p&gt;It is the same for deployments on Windows Azure, except this time we&amp;rsquo;re not talking about the effects to your car,&amp;nbsp;rather the effect to your&amp;nbsp;&lt;em&gt;business&lt;/em&gt;&amp;nbsp;caused by risk actually becoming a reality (or, &amp;lsquo;surfacing&amp;rsquo;).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve often found that the effects of the risk (the effect the risk has on your app once it has manifested) can generally be categorised according to the following scale (in order of descending severity):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catastrophic&lt;/strong&gt;: there is nothing that can be done to mitigate the effect to normal operation;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fault&lt;/strong&gt;: with careful planning and development work, a suitable mitigation can be automatically implemented to prevent the effect from surfacing;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoidable&lt;/strong&gt;: the effect can be avoided with a trivial amount of effort.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In this discussion, I&amp;rsquo;m assuming that the primary risk we&amp;rsquo;re attempting to mitigate&amp;nbsp;is&amp;nbsp;downtime caused by loss of connectivity to the data centre.&amp;nbsp;In my example deployment, we&amp;rsquo;re talking about a simple web application with two web roles, two worker roles and a&amp;nbsp;dependency&amp;nbsp;on a database on SQL Azure. If we dig further, our full risk register may look similar to the following:&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="3" align="center"&gt;&lt;caption&gt;&amp;nbsp;&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Manifestation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Effect Severity&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instance taken offline for patching/maintenance, where only one instance of that role is deployed&lt;/td&gt;
&lt;td&gt;Your app goes offline.&lt;/td&gt;
&lt;td&gt;Catastrophic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instance taken offline for patching/maintenance, where two or more instances of the role&amp;nbsp;are deployed&lt;/td&gt;
&lt;td&gt;Potential for increased load on remaining instances; but otherwise no disruption to service.&lt;/td&gt;
&lt;td&gt;Avoidable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instance (in a multi-instance deployment)&amp;nbsp;goes offline due to failure of the instance itself&lt;/td&gt;
&lt;td&gt;As above.&lt;/td&gt;
&lt;td&gt;Avoidable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connectivity failure to a dependant resource in the data centre&lt;/td&gt;
&lt;td&gt;The resource is unavailable for the duration of the disruption to connectivity.&lt;/td&gt;
&lt;td&gt;Fault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure of the dependent resource&lt;/td&gt;
&lt;td&gt;Potential of data loss. The resource is unavailable until it is recovered either manually or automatically.&lt;/td&gt;
&lt;td&gt;Fault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total loss of inbound and/or outbound connectivity to the data centre&lt;/td&gt;
&lt;td&gt;Your app goes offline.&lt;/td&gt;
&lt;td&gt;Catastrophic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catastrophic loss of the data centre&lt;/td&gt;
&lt;td&gt;Your app goes offline.&lt;/td&gt;
&lt;td&gt;Catastrophic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Only once both your technical team and your business leaders are aware of the risks, their manifested effect and what can technically be achieved to mitigate them, can a discussion about the extent to which you wish to implement these measures take place. Try and avoid the tendency of shooting for 100% availability across 100% of your dependant resources and remember that often, different parts of an app can tolerate different failures differently! Understand that risks also have a field of impact, too. For example, a catastrophic data centre failure would affect the whole of your app, whereas the failure of a database would impact only those sections which require connectivity to it.&lt;/p&gt;
&lt;p&gt;Crucial to this discussion is having an open and honest discussion with the business, and with your customers, about what level of risk is acceptable to them. This will determine how much effort goes into your risk avoidance strategy. You need to understand what level of risk is&amp;nbsp;&lt;em&gt;acceptable&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;On Windows Azure, one significant advantage is that the cost of maintaining a highly available, highly scalable solution that is both maintained and secure is generally orders of magnitude cheaper than the equivalent private, on-premise set up. The last thing you&amp;rsquo;d want to do is erode that saving by planning and deploying avoidance techniques that are completely over the top: so be&amp;nbsp;&lt;em&gt;reasonable&lt;/em&gt;&amp;nbsp;with your understanding of acceptable risk.&lt;/p&gt;
&lt;p&gt;This exercise may seem academic and fairly obvious but it is often overlooked for that reason. Without it, though, it is difficult to fully appreciate what steps are necessary, and to inform your UX designers properly about the types of scenarios that could naturally occur that you may well need to surface in your app to let your users know.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ve covered risk, now let&amp;rsquo;s turn our attention to what we need to do should the worst happen: a risk has manifested and the effect has begun.&lt;/p&gt;
&lt;h3&gt;Recovery&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s a common misconception that disaster recovery and risk mitigation are the same things.&lt;/p&gt;
&lt;p&gt;&amp;lsquo;Disaster recovery&amp;rsquo; refers to the things you do (either automatically or as part of a manual activity) that restore you to your normal scenario;&amp;nbsp;for example,&amp;nbsp;something exceptional occurred and you have suffered a catastrophic event and need to get back to &amp;lsquo;business as usual&amp;rsquo;&amp;nbsp;as fast as possible, while minimising loss. Risk mitigation, on the other hand, is about the things you can do&amp;nbsp;&lt;em&gt;before&lt;/em&gt;&amp;nbsp;a condition occurs that triggers your failure scenario.&lt;/p&gt;
&lt;p&gt;So that you can do this effectively, you need to first understand what risk has&amp;nbsp;surfaced, what your recovery&amp;nbsp;options are for that particular risk, and therefore what your recovery strategy and objectives actually are.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s&amp;nbsp;put this into context:&lt;/p&gt;
&lt;p&gt;Your app went offline due to a failure of a database connection. The effect was that users of your app could no longer&amp;nbsp;publish new content. There are potentially two recovery options available to you here: you could either write&amp;nbsp;new content to a separate store temporarily and automatically update the failed database when&amp;nbsp;it becomes available, or your other recovery option is to simply wait until the&amp;nbsp;failed database is available again.&amp;nbsp;Your strategy for recovery from this particular risk is therefore&amp;nbsp;directly dependent on what your business expects you to be able to achieve in this&amp;nbsp;scenario.&lt;/p&gt;
&lt;h2&gt;Putting it all together&amp;hellip;&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve introduced the notion that risks are no less likely to occur on the Windows Azure platform than on-premise, and we know that Azure is capable of recovering from most of these risks without any input from you. What we&amp;rsquo;re trying to look at here is what steps you can take as developers to stop any non-catastrophic effects from impacting your app, causing a &amp;lsquo;failure scenario&amp;rsquo;. If you embrace the concept of expecting failure, it becomes quite easy to see what you must do in order to maintain normal operation during a failure situation. In general, remember you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use alternative persistent storage should a database become unavailable, and re-synch when available;&lt;/li&gt;
&lt;li&gt;Continue retrying a failed connection until it succeeds or &amp;lsquo;defer failure&amp;rsquo; until after a certain number of retries;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When designing for high availability, it is a good idea to keep these questions in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Prevention&lt;/strong&gt;: what can you do to stop the risks you&amp;rsquo;ve anticipated from occurring?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detection&lt;/strong&gt;: how will you detect that your app is no longer in it&amp;rsquo;s &amp;lsquo;normal state&amp;rsquo;?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recovery&lt;/strong&gt;: what can your app do to either temporarily mask the failure condition and maintain the appearance that everything is OK, or what steps must take place to get things back to normal operation?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do not rely on the availability guarantee: it isn&amp;rsquo;t enough (a 100% up-time guarantee wouldn&amp;rsquo;t be, either) and remember, availability is only one part of the equation. If we go back to the car insurance metaphor, you don&amp;rsquo;t just buy car insurance to mitigate against the risk of injury or damage to yourself or to others: you also drive safely and obey traffic rules. So it&amp;rsquo;s actually more about adopting a philosophy and taking a series of actions that is important.&lt;/p&gt;
&lt;p&gt;In summary, Windows Azure is and will remain a highly available, stable and reliable cloud platform and it will continue to be enhanced and improved over time. As developers though, we have to appreciate that failures of course can, and do, occur. Every object is subject to entropy, and hard disks, network cables and switches are no exception. Understanding that there are parts of the availability equation that you can &amp;ndash; and should &amp;ndash; take responsibility for is essential to a healthy cloud deployment and arguably, even if your app is deployed on-premise, you might want to consider adopting &amp;lsquo;cloud risk principles&amp;rsquo;, too!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My point ultimately is that risk isn&amp;rsquo;t a problem: not knowing what they are, what the cloud platform is responsible for mitigating, and how you can efficiently deploy platform services to assist you is.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span style="color: #003366;"&gt;Microsoft&amp;rsquo;s Premier Support for Developers team is able to provide your developers with specific, technical and process guidance to help you mitigate risks to your business as you move to Windows Azure and&amp;nbsp;short cut&amp;nbsp;your time-to-market.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10377195" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Risk/">Risk</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Azure/">Azure</category></item><item><title>Remote Debugging a Windows 8 RT app on Surface with BT Infinity &amp; HomeHub 3.0</title><link>http://blogs.msdn.com/b/msrich/archive/2012/12/08/remote-debugging-a-windows-8-rt-app-on-surface-with-bt-infinity-amp-homehub-3-0.aspx</link><pubDate>Sat, 08 Dec 2012 21:36:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10375846</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10375846</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2012/12/08/remote-debugging-a-windows-8-rt-app-on-surface-with-bt-infinity-amp-homehub-3-0.aspx#comments</comments><description>I ran across an interesting problem today, and I thought I&amp;#8217;d blog about it as it may save you some time if you encounter a similar issue in the future. Scenario: you&amp;#8217;ve deployed Visual Studio 2012 Update 1 Remote Debugging Tools to your Surface...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2012/12/08/remote-debugging-a-windows-8-rt-app-on-surface-with-bt-infinity-amp-homehub-3-0.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10375846" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Software+Development/">Software Development</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Surface/">Surface</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/ARM/">ARM</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Windows+8/">Windows 8</category></item><item><title>Quantifying and Avoiding Risk on the Windows Azure platform</title><link>http://blogs.msdn.com/b/msrich/archive/2012/03/31/quantifying-and-avoiding-risk-on-the-windows-azure-platform.aspx</link><pubDate>Sat, 31 Mar 2012 22:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281690</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281690</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2012/03/31/quantifying-and-avoiding-risk-on-the-windows-azure-platform.aspx#comments</comments><description>&lt;p&gt;&lt;span style="font-size: small;"&gt;The Windows Azure platform is a solid, highly available, highly scalable environment - but, like any system (on premise or in the cloud) there are risks which could threaten the desired operation of your app (what I refer to herein as the 'normal scenario'). In this article, I discuss&amp;nbsp;the idea that&amp;nbsp;failures can be categorised according to severity and that many effects associated with these failures are avoidable, various failure scenarios you might need to deal with (on any cloud platform - but specifically, Windows Azure), understanding and defining risk,&amp;nbsp;and why it is important that you design for these failures and tolerate&amp;nbsp;them in your cloud solutions.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;First though, allow me to highlight&amp;nbsp;my reasons for writing this article:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Developers tend to polarise when it comes to cloud services: you either love them, or you hate them (admittedly, there are also plenty on the fence). Of the advocates, many feel that the cloud is invincible and resistant to all failures, effectively being permanently available save for an Act of God. The reality is that the cloud, like any system, is subject to failure. But while a failure in many on-premise data centers is a fundamental event, in the cloud (and certainly on the Windows Azure platform) failure isn't such a big deal: in fact it's expected and anticipated; and you should be pleased about that (and I'll show you why);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;In my experience, many developers tend to focus on mitigating the &lt;em&gt;risk&lt;/em&gt; of downtime caused by failure by adding more servers and some load balancing: they've actually not deal with the failure scenario at all;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;I have observed a general trend for developers to metaphorically 'give up' when a condition is encountered that they would not normally expect, for example - when a remote database server is unavailable, an exception is thrown.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The idea behind this article is the thought that actually, failure is generally OK: what we try to avoid is the manifestation of individual risks becoming a problem. Risk avoidance is absolutely essential to cloud development and, to borrow an old phrase, sometimes you have to 'roll with the punches'. Accept that your cloud application might fail at some point and in some way and that it's your job to&amp;nbsp;complement the 99.95% availability guarantee by having strategies to help&amp;nbsp;you quantify and mitigate the risks beyond the up-time guarantee.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Building highly available, highly scalable applications in the cloud requires us to embrace this principle: to understand that&amp;nbsp;we will encounter failures and that many of them can often be transparently handled until normal operation is restored.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Finally, before we continue I want to make an observation:&lt;/span&gt;&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-size: small;"&gt;When you deploy to Windows Azure, you are asked to choose which data center you want to deploy to. Note here, that this is &lt;em&gt;singular&lt;/em&gt;: you are selecting &lt;em&gt;one&lt;/em&gt; data center. Thus, although the liklihood of a data center failing is very slim, you in theory do have a single point of failure. You can absolutely mitigate against this risk (see the foot of this article if you require pointers on how to mitigate risk above the data center level). However, in this article I am setting a cap at mitigating risk up to the point of failure of a single data centre: we are accepting the risk of a data centre failure is minimal and that is enough for us here. I appreciate that for others though, this is not possible and multiple failover options are required. This scenario is possible on Windows Azure and I point out where to start with this in the footer, and may in a later article cover how to do this in depth.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Let us first begin with a quick discussion about failure; what it means in this context and how it applies to you on Windows Azure:&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Stuff goes wrong: accept it!&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The basic principle of failure states that at some point:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;the hardware your code runs on will fail (disk, RAM and power failures are all relatively common over the 2-3 year lifetime of a server that is running 24 hours per day, 365 days per year);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;a remote service your app is dependant upon may not be available;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;There is just no such thing as a mechanical item that isn't subject to failure.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;In this article I am excluding from the scope any errors and/or risks caused by poorly written application code.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Let's get started with the excercise of defining what the risks are to your deployment on the Windows Azure platform.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;span style="font-size: small;"&gt;Identifying&amp;nbsp;the risks and understanding &amp;amp; categorising the effects&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;&lt;span style="font-size: small;"&gt;"Risk is the potential that a chosen action or activity (including the choice of inaction) will lead to a loss (an undesirable outcome). The notion implies that a choice having an influence on the outcome exists (or existed). Potential losses themselves may also be called risks".&lt;span style="color: #888888; font-size: xx-small;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;This definition hints at the necessity to both understand that there is the potential for risk in any situation and that the outcome of any given situation may be influenced (otherwise, it is a &lt;em&gt;certainty&lt;/em&gt;) in some way so as to be able to lessen or prevent the effect from being noticable. In this section, we will identify what the risks are and, what the effect of each risk manifesting itself is.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Integral to your deployment on Windows Azure should be an understanding of:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;What the risks are;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;What steps can be taken to mitigate the effect of the risk surfacing;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;What category the effect falls within.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;For example, when you buy a car, you know that there is a risk that it might get damaged, either by you (racing around again!), or by another road user. Assuming you're a law abiding citizen, you'll buy insurance to mitigate against the risk of damage to your car, or somebody else's. But within your policy document will be a list of expectations around what happens when your car is damaged: you'll be told how long your car will be unavailable, whether you'll have the use of a rental car, etc.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;It is the same for deployments on Windows Azure, except this time we're not talking about the effects to your car,&amp;nbsp;rather the effect to your &lt;em&gt;business&lt;/em&gt; caused by risk actually becoming a reality (or, 'surfacing').&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;I've often found that the effects of the risk (the effect the risk has on your app once it has manifested) can generally be categorised according to the following scale (in order of descending severity):&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Catastrophic&lt;/strong&gt;: there is nothing that can be done to mitigate the effect to normal operation;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Fault&lt;/strong&gt;: with careful planning and development work, a suitable mitigation can be automatically implemented to prevent the effect from surfacing;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Avoidable&lt;/strong&gt;: the effect can be avoided with a trivial amount of effort.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;In this discussion, I'm assuming that the primary risk we're attempting to mitigate&amp;nbsp;is&amp;nbsp;downtime caused by loss of connectivity to the data centre.&amp;nbsp;In my example deployment, we're talking about a simple web application with two web roles, two worker roles and a dependancy on a database on SQL Azure. If we dig further, our full risk register may look similar to the following:&lt;/span&gt;&lt;/p&gt;
&lt;table style="width: 100%; vertical-alignment: top;" border="1" cellspacing="0" cellpadding="3" align="center"&gt;&lt;caption&gt;&lt;/caption&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Risk&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Manifestation&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Effect Severity&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Instance taken offline for patching/maintenance, where only one instance of that role is deployed&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Your app goes offline.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Catastrophic&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Instance taken offline for patching/maintenance, where two or more instances of the role&amp;nbsp;are deployed&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Potential for increased load on remaining instances; but otherwise no disruption to service.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Avoidable&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Instance (in a multi-instnace deployment)&amp;nbsp;goes offline due to failure of the instance itself&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;As above.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Avoidable&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Connectivity failure to a dependant resource in the data centre&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;The resource is unavailable for the duration of the disruption to connectivity.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Fault&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Failure of the dependent resource&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Potential of data loss. The resource is unavailable until it is recovered either manually or automatically.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Fault&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Total loss of inbound and/or outbound connectivity to the data centre&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Your app goes offline.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Catastrophic&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Catastrophic loss of the data centre&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Your app goes offline.&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style="font-size: small;"&gt;Catastrophic&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Only once both your technical team and your business leaders are aware of the risks, their manifested effect and what can technically be achieved to mitigate them, can a discussion about the extent to which you wish to implement these measures take place. Try and avoid the tendency of shooting for 100% availability across 100% of your dependant resources and remember that often, different parts of an app can tolerate different failures differently! Understand that risks also have a field of impact, too. For example, a catastrophic data centre failure would affect the whole of your app, whereas the failure of a database would impact only those sections which require connectivity to it.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Crucial to this discussion is having an open and honest discussion with the business, and with your customers, about what level of risk is acceptable to them. This will determine how much effort goes into your risk avoidance strategy. You need to understand what level of risk is &lt;em&gt;acceptable&lt;/em&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;On Windows Azure, one significant advantage is that the cost of maintaining a highly available, highly scalable solution that is both maintained and secure is generally orders of magnitude cheaper than the equivalent private, on-premise set up. The last thing you'd want to do is erode that saving by planning and deploying avoidance techniques that are completely over the top: so be &lt;em&gt;reasonable&lt;/em&gt; with your understanding of acceptable risk.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;This exercise may seem academic and fairly obvious but it is often overlooked for that reason. Without it, though, it is difficult to fully appreciate what steps are necessary, and to inform your UX designers properly about the types of scenarios that could naturally occur that you may well need to surface in your app to let your users know.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;We've covered risk, now let's turn our attention to what we need to do should the worst happen: a risk has manifested and the effect has begun.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Recovery&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;It's a common misconception that disaster recovery and risk mitigation are the same things. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;'Disaster recovery' refers to the things you do (either automatically or as part of a manual activity) that restore you to your normal scenario;&amp;nbsp;for example,&amp;nbsp;something exceptional occurred and you have suffered a catastrophic event and need to get back to 'business as usual'&amp;nbsp;as fast as possible, while minimising loss. Risk mitigation, on the other hand, is about the things you can do &lt;em&gt;before&lt;/em&gt; a condition occurs that triggers your failure scenario.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;So that you can do this effectively, you need to first understand what risk has&amp;nbsp;surfaced, what your recovery&amp;nbsp;options are for that particular risk, and therefore what your recovery strategy and objectives actually are.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Let's&amp;nbsp;put this into context:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Your app went offline due to a failure of a database connection. The effect was that users of your app could no longer&amp;nbsp;publish new content. There are potentially two recovery options available to you here: you could either write&amp;nbsp;new content to a separate store temporarily and automatically update the failed database when&amp;nbsp;it becomes available, or your other recovery option is to simply wait until the&amp;nbsp;failed database is available again.&amp;nbsp;Your strategy for recovery from this particular risk is therefore&amp;nbsp;directly dependent on what your business expects you to be able to achieve in this&amp;nbsp;scenario.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Putting it altogether&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;We've introduced the notion that risks are no less likely to occur on the Windows Azure platform than on-premise, and we know that Azure is capable of recovering from most of these risks without any input from you. What we're trying to look at here is what steps you can take as developers to stop any non-catastrophic effects from impacting your app, causing a 'failure scenario'. If you embrace the concept of expecting failure, it becomes quite easy to see what you must do in order to maintain normal operation during a failure situation. In general, remember you can:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Use alternative persistent storage should a database become unavailable, and re-synch when available;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;Continue retrying a failed connection until it succeeds or 'defer failure' until after a certain number of retries;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;When designing for high availability, it is a good idea to keep these questions in mind:&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Prevention&lt;/strong&gt;: what can you do to stop the risks you've anticipated from occurring?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Detection&lt;/strong&gt;: how will you detect that your app is no longer in it's 'normal state'?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Recovery&lt;/strong&gt;: what can your app do to either temporarily mask the failure condition and maintain the appearance that everything is OK, or what steps must take place to get things back to normal operation?&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Do not rely on the availability guarantee: it isn't enough (a 100% up-time guarantee wouldn't be, either) and remember, availability is only one part of the equation. If we go back to the car insurance metaphor, you don't just buy car insurance to mitigate against the risk of injury or damage to yourself or to others: you also drive safely and obey traffic rules. So it's actually more about adopting a philosophy and taking a series of actions that is important.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;In summary, Windows Azure is and will remain a highly available, stable and reliable cloud platform and it will continue to be enhanced and improved over time. As developers though, we have to appreciate that failures of course can, and do, occur. Every object is subject to entropy, and hard disks, network cables and switches are no exception. Understanding that there are parts of the availability equation that you can - and should - take responsibility for is essential to a healthy cloud deployment and arguably, even if your app is deployed on-premise, you might want to consider adopting 'cloud risk principles', too!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;My point ultimately is that risk isn't a problem: not understanding the effects of the risks and how your app can restore normal operation with minimal loss and minimal effort is a problem.&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Need higher availability?&lt;/h3&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Deployments on Windows Azure are typically within a single data centre, and in my experience few developers realise that by simply using &lt;a href="http://msdn.microsoft.com/en-us/gg197529"&gt;Windows Azure Traffic Manager CTP&lt;/a&gt;, you can deploy your application multiple data centers globally, and fail over to your back up data centers within a predetermined period.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;I'd just like to finish by saying that I expect this to be the first of a group of related articles and I welcome and encourage all feedback. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small; background-color: #ffff99;"&gt;If you, or your team, need some help getting started with designing and developing resilient applications on the Windows Azure platform, then please get in touch and we'd be happy to assist.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: xx-small;"&gt;REFERENCES:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: xx-small;"&gt;1 Risk (&lt;a href="http://en.wikipedia.org/wiki/Risk"&gt;Wikipedia&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281690" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Windows+Azure+Platform/">Windows Azure Platform</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Risk/">Risk</category></item><item><title>Brand vs. Identity: who are we?</title><link>http://blogs.msdn.com/b/msrich/archive/2012/01/04/brand-vs-identity-who-are-we.aspx</link><pubDate>Wed, 04 Jan 2012 16:47:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281666</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281666</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2012/01/04/brand-vs-identity-who-are-we.aspx#comments</comments><description>I did something apparently controversial today. I sent a mail out to our team asking if I could spend some time with each of them over the next month to learn how they sell our service to our customers; how they describe it to others and how they evangelise...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2012/01/04/brand-vs-identity-who-are-we.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281666" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Business/">Business</category></item><item><title>Unattended installation of SQL Server 2008 R2 Express on an Azure role</title><link>http://blogs.msdn.com/b/msrich/archive/2012/01/02/unattended-installation-of-sql-server-2008-r2-express-on-an-azure-role.aspx</link><pubDate>Mon, 02 Jan 2012 22:19:41 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281667</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281667</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2012/01/02/unattended-installation-of-sql-server-2008-r2-express-on-an-azure-role.aspx#comments</comments><description>In certain circumstances, you might find yourself with a need to install SQL Server Express on one of your Windows Azure worker roles. Exercise caution here though folks: this is not a supported design pattern (remember, a restart of your role instance...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2012/01/02/unattended-installation-of-sql-server-2008-r2-express-on-an-azure-role.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281667" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/SQL+Server+2008/">SQL Server 2008</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Windows+Azure+Platform/">Windows Azure Platform</category></item><item><title>2011 in review</title><link>http://blogs.msdn.com/b/msrich/archive/2012/01/01/2011-in-review.aspx</link><pubDate>Sun, 01 Jan 2012 11:49:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281668</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281668</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2012/01/01/2011-in-review.aspx#comments</comments><description>The WordPress.com stats helper monkeys prepared a 2011 annual report for this blog. I didn&amp;#8217;t quite get around to blogging as much as I&amp;#8217;d have liked during 2011, but 2012 is a new year and I&amp;#8217;ll have a lot more things to blog about, including...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2012/01/01/2011-in-review.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281668" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/report/">report</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Uncategorized/">Uncategorized</category></item><item><title>On Start</title><link>http://blogs.msdn.com/b/msrich/archive/2011/09/06/on-start.aspx</link><pubDate>Tue, 06 Sep 2011 07:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10206618</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10206618</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2011/09/06/on-start.aspx#comments</comments><description>&lt;p&gt;I'm six weeks into my new job here at Microsoft.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Right now, I'm sitting on the 07.53 train from Waterloo to &lt;span&gt;Andover&lt;/span&gt; on my way to shadow one of my colleagues as he briefs one of our customers on claims-based authentication. Yesterday, I was welcoming a new customer (my first customer!)&amp;nbsp; to their engagement, discussing a peculiar web performance issue with their multi-million pound &lt;span&gt;eCommerce&lt;/span&gt; site. And tomorrow, I'll be back in our headquarters where we're discussing Team Foundation Server, Application &lt;span&gt;Lifecycle&lt;/span&gt; Management and 'best practices' for software development with another colleague's customer.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;As part of the Microsoft Premier Division, our (relatively) small team of 20+ Application Development Managers are tasked solely with ensuring our customers are 100% 'very satisfied'. We operate a service known as 'Premier Support for Developers' and, as another colleague has noted (and a &lt;/span&gt;&lt;a href="http://weblogs.asp.net/scottgu/"&gt;senior exec&lt;/a&gt;), is often touted as one of the 'best jobs in Microsoft'. I'm beginning to understand why.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Premier Support for Developers (or "&lt;span&gt;PfSD&lt;/span&gt;") is a Microsoft consulting offering that goes a little further than your traditional consultancy engagement. First and foremost, it's a long-term relationship. We're looking to get to know your business; what's important to you and what's not, your pains and pressures, your aspirations and goals. We aim to become a trusted advisor within your company - practically part of your team. We can act as an interface between your company and its interests, and Microsoft. But crucially, becoming your advocate to make sure your voice is heard. We're tasked with removing any and all barriers that stand between your development team making the most of their development experience on the Microsoft platform.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This all means that no two days are the same because everyone's needs are different.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Joining this team of experts has been - and will continue to be - a very humbling experience. Across the team, we cover a broad range of Microsoft platforms and technologies. Most everyone has experience off the Microsoft stack, too, and brings an impressive array of 'soft skills' not commonly associated with 'developers'. No one team member has all the skills to support all of our customers, so we work together; each of us delivering experience to our customers in the subject areas we know best.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I say humbling, because everyone has been so incredibly supportive. We actively seek out &lt;span&gt;eachother&lt;/span&gt;'s strengths and where there are weaknesses, we share knowledge, educate each other, even challenge each other to pick up the skills we need.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;So as I sit here on the train, heading out to a new customer in a new place, I'm thinking of the team I've only recently joined, and the fantastic company I am now part of and my mind is filled with possibilities.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;To quote &lt;span&gt;Ballmer&lt;/span&gt;, "I love this company!".&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10206618" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/ramblings/">ramblings</category></item><item><title>DDD Southwest 3 – Review of my presentation</title><link>http://blogs.msdn.com/b/msrich/archive/2011/07/14/ddd-southwest-3-review-of-my-presentation.aspx</link><pubDate>Thu, 14 Jul 2011 21:00:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281669</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281669</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2011/07/14/ddd-southwest-3-review-of-my-presentation.aspx#comments</comments><description>Way back on 11th June 2011, I was lucky enough to be invited to present my session &amp;#8211; &amp;#8220;Getting Started in .NET&amp;#8221; &amp;#8211; at the DDD Southwest 3 conference. I remember thinking, &amp;#8220;gosh, I&amp;#8217;d really love to speak at one of these...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2011/07/14/ddd-southwest-3-review-of-my-presentation.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281669" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/DDD/">DDD</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Community+Events/">Community Events</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Software+Development/">Software Development</category></item><item><title>Five for 5: Five cool things you can do with the HTML 5 video element</title><link>http://blogs.msdn.com/b/msrich/archive/2011/07/12/five-for-5-five-cool-things-you-can-do-with-the-html-5-video-element.aspx</link><pubDate>Tue, 12 Jul 2011 17:45:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281670</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281670</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2011/07/12/five-for-5-five-cool-things-you-can-do-with-the-html-5-video-element.aspx#comments</comments><description>The ability to embed video directly into an HTML5 page is pretty awesome. As a first class citizen in the HTML5 enabled browser, video is no longer an &amp;#8216;outsider&amp;#8217; and so you can actually do some relatively cool things without any particular...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2011/07/12/five-for-5-five-cool-things-you-can-do-with-the-html-5-video-element.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281670" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/video/">video</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/HTML5/">HTML5</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Web+Development/">Web Development</category></item><item><title>My Home Tech: Summer 2011 Roundup</title><link>http://blogs.msdn.com/b/msrich/archive/2011/07/05/my-home-tech-summer-2011-roundup.aspx</link><pubDate>Tue, 05 Jul 2011 18:30:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281671</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281671</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2011/07/05/my-home-tech-summer-2011-roundup.aspx#comments</comments><description>A long, long time ago, in a blog post far, far away, I documented some of my home tech in a piece that described how it all connected together. The article actually focused on my home network equipment, but I figured it would be useful to document the...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2011/07/05/my-home-tech-summer-2011-roundup.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281671" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/connectivity/">connectivity</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Show+and+Tell/">Show and Tell</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/home+network/">home network</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/lan/">lan</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Technology/">Technology</category></item><item><title>TokenMail is now available on Nuget!</title><link>http://blogs.msdn.com/b/msrich/archive/2011/06/29/tokenmail-is-now-available-on-nuget.aspx</link><pubDate>Wed, 29 Jun 2011 22:45:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281672</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281672</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2011/06/29/tokenmail-is-now-available-on-nuget.aspx#comments</comments><description>Back in January this year, I wrote a neat little utility library for sending template emails. Tonight, it caught the attention of fellow developer Benjamin Howarth, famous for (among other things) his Umbraco mastery. After a quick discussion, Ben decided...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2011/06/29/tokenmail-is-now-available-on-nuget.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281672" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/TokenMail/">TokenMail</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Nuget/">Nuget</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Projects/">Projects</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Open+Source/">Open Source</category></item><item><title>Samsung Navibot SR8855 First Look</title><link>http://blogs.msdn.com/b/msrich/archive/2011/06/26/samsung-navibot-sr8855-first-look.aspx</link><pubDate>Sun, 26 Jun 2011 10:41:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281673</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281673</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2011/06/26/samsung-navibot-sr8855-first-look.aspx#comments</comments><description>Yesterday, after spending a few hours researching, I made a little bit of an impulse decision and purchased a Samsung Navibot SR855 (a robotic vacuum cleaner). I figured that since I don&amp;#8217;t like hoovering (and neither does my girlfriend), this could...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2011/06/26/samsung-navibot-sr8855-first-look.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281673" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Technology/">Technology</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Samsung+Navibot/">Samsung Navibot</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Product+Reviews/">Product Reviews</category></item><item><title>UAV Flight Training, Round 1</title><link>http://blogs.msdn.com/b/msrich/archive/2011/04/27/uav-flight-training-round-1.aspx</link><pubDate>Wed, 27 Apr 2011 16:30:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281674</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281674</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2011/04/27/uav-flight-training-round-1.aspx#comments</comments><description>A few months ago, I mentioned that my friend and I were going to start building a UAV. It&amp;#8217;s taken us a little while, but I&amp;#8217;m pleased to report that over the previous bank holiday weekend we were able to take it out for our first test flight...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2011/04/27/uav-flight-training-round-1.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281674" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Projects/">Projects</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/multiplex+easystar/">multiplex easystar</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/UAV/">UAV</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/r_2F00_c/">r/c</category></item><item><title>Screencast: “To the cloud!” (In 90 seconds, or less)</title><link>http://blogs.msdn.com/b/msrich/archive/2011/03/29/screencast-to-the-cloud-in-90-seconds-or-less.aspx</link><pubDate>Tue, 29 Mar 2011 16:30:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10281675</guid><dc:creator>Richard S Parker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/msrich/rsscomments.aspx?WeblogPostID=10281675</wfw:commentRss><comments>http://blogs.msdn.com/b/msrich/archive/2011/03/29/screencast-to-the-cloud-in-90-seconds-or-less.aspx#comments</comments><description>I&amp;#8217;ve spoken with a lot of developers recently who haven&amp;#8217;t yet adopted the Windows Azure platform, often because they think the process is difficult, time-consuming or requires some kind of advanced ninja training to get up and running. This...(&lt;a href="http://blogs.msdn.com/b/msrich/archive/2011/03/29/screencast-to-the-cloud-in-90-seconds-or-less.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10281675" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Windows+Azure+Platform/">Windows Azure Platform</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Software+Development/">Software Development</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/Windows+Azure/">Windows Azure</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/tutorial/">tutorial</category><category domain="http://blogs.msdn.com/b/msrich/archive/tags/screencast/">screencast</category></item></channel></rss>