<?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>Brian Harry's blog</title><link>http://blogs.msdn.com/b/bharry/</link><description>Everything you want to know about Visual Studio ALM and Farming</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>New Windows Dev Center release</title><link>http://blogs.msdn.com/b/bharry/archive/2013/05/16/new-windows-dev-center-release.aspx</link><pubDate>Thu, 16 May 2013 14:51:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10419311</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10419311</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/05/16/new-windows-dev-center-release.aspx#comments</comments><description>&lt;p&gt;Yesterday we launched a new &lt;a href="http://msdn.microsoft.com/windows/"&gt;Windows Dev Center&lt;/a&gt;.&amp;#160; You might ask “Why are you telling us about that, Brian?”&amp;#160; Well, the answer is that my team is responsible for MSDN and much of the infrastructure behind it.&amp;#160; We partner very closely with the Windows team team produce an awesome Windows Dev Center.&amp;#160; Yesterday was the culmination of months of work to really overhaul the dev center and make it serve our customers even better.&lt;/p&gt;  &lt;p&gt;Here’s a list of some of the key improvements in the dev center…&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Navigation aligned with the development lifecycle&lt;/li&gt;    &lt;li&gt;Updates to key landing pages, with more visual appeal and interactivity&lt;/li&gt;    &lt;li&gt;A “Design” section for Windows Store apps that is more comprehensive, easy to use, and discoverable&lt;/li&gt;    &lt;li&gt;A new “Market” section for Windows Store apps that includes tips for marketing apps, evaluating telemetry data, and passing app certification.&lt;/li&gt;    &lt;li&gt;New cross-site navigation&lt;/li&gt;    &lt;li&gt;An experience that matches the personality of Windows and is aligned with Windows online&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-52-metablogapi/0407.clip_5F00_image001_5F00_74CB1777.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-52-metablogapi/2577.clip_5F00_image001_5F00_thumb_5F00_452CF8EB.jpg" width="804" height="477" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Check it out…&lt;/p&gt;  &lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10419311" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/Visual+Studio/">Visual Studio</category><category domain="http://blogs.msdn.com/b/bharry/archive/tags/announcement/">announcement</category></item><item><title>Team Foundation Service Update – May 13</title><link>http://blogs.msdn.com/b/bharry/archive/2013/05/14/team-foundation-service-update-may-13.aspx</link><pubDate>Tue, 14 May 2013 15:01:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10418503</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10418503</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/05/14/team-foundation-service-update-may-13.aspx#comments</comments><description>&lt;p&gt;Yesterday, we deployed an update to Team Foundation Service.&amp;#160; You can read the &lt;a href="http://tfs.visualstudio.com/en-us/home/news/2013/may-13/"&gt;release notes&lt;/a&gt; to see the improvements.&amp;#160; The improvements aren’t major but there’s a few nice things – Some updates to UI styling with a greater use of color, some navigation improvements that include the ability to see the task board for all sprints (rather than just the current), and support for multiple Git repos per Team Project.&lt;/p&gt;  &lt;p&gt;Less prominent, but we’ve also made a bunch of changes to our authentication code.&amp;#160; We’re working to better support people who use multiple Microsoft Accounts (Live IDs) and working towards ultimately supporting Active Directory Federation and O365 accounts.&amp;#160; I’ve seen some hiccups today with people logging in – I expect they will be cleared up quickly.&lt;/p&gt;  &lt;p&gt;This sprint’s deployment was delayed a week as we hit a number of issues in pre-production testing that had to be ironed out.&amp;#160; Next sprint should resume on the normal schedule.&lt;/p&gt;  &lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10418503" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/TFS/">TFS</category></item><item><title>Some thoughts on a comment about VS 2012.3</title><link>http://blogs.msdn.com/b/bharry/archive/2013/05/08/some-thoughts-on-a-comment-about-vs-2012-3.aspx</link><pubDate>Wed, 08 May 2013 13:04:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10416999</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>42</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10416999</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/05/08/some-thoughts-on-a-comment-about-vs-2012-3.aspx#comments</comments><description>&lt;p&gt;Yesterday, I got a thoughtful comment from Dean on my post about Update 3.&amp;#160; I sat down to write a response this morning and it turned into a but of a novel (in fact, the blog says it’s too long to post as a comment &lt;img class="wlEmoticon wlEmoticon-smile" style="style" alt="Smile" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-52-metablogapi/7506.wlEmoticon_2D00_smile_5F00_60045823.png" /&gt;).&amp;#160; So I’ve turned it into a post.&amp;#160; Here was Dean’s comment:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Brian,&lt;/p&gt;    &lt;p&gt;I looked at the list of fixes, you weren't kidding when you said small.&amp;#160; Are those just the major ones (crashing)?&amp;#160; There are a whole lot of things logged on Connect that when added together really stifle productivity (many involving the editor with intellisense, syntax highlighting, etc.).&amp;#160; I get nervous at this point in a VS life-cycle because I fear that the bugs I care most about will once again get worked on for the next major version.&amp;#160; We spend money on the product and the window of time for things getting fixed is unbelievably tiny...before MS turns off the lights/closes shop until the next version.&amp;#160; The new update cycle is great, I just hope it is not merely SP1 in chunks...I hope you still give updates to the product all along the way up until the next version.&lt;/p&gt;    &lt;p&gt;-Dean&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And my reply…&lt;/p&gt;  &lt;p&gt;@Dean, I try not to kid :)&amp;#160; I'm not going to swear that's every single bug fix. Plus there will be a few more fixed between now and the final release - for instance, I just heard that we are fixing a few important Blend issues and those fixes didn't make the RC.&amp;#160; It's not an incredibly small list - I count 59 bug fixes.&amp;#160; I'm not sure whether to feel proud or ashamed that 34 of them are in my team :)&amp;#160; I think the answer is proud, though I suspect this is an eye of the beholder issue.&amp;#160; A story...&lt;/p&gt;  &lt;p&gt;I was speaking last week with one of our test managers and he said to me...&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;People in shiproom don't know what to make of us.&amp;#160; We bring so many more bugs to be fixed than any other team in VS that they just look at us sideways.&amp;#160; But, my feeling is that if a customer reports a bug, we should just fix it.&amp;#160; We're doing the update anyway and there's no point making the customer wait.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Aside - shiproom is a process we have of sharing the changes that each team is making as we get close to the end of any release that allows for peer review and feedback.&amp;#160; The purpose is to help slow down the churn, reduce the risk of regression and warn other teams of any changes that might impact them.&lt;/p&gt;  &lt;p&gt;It was a proud moment for me.&amp;#160; I've spent the better part of 12 years arguing for a different way of thinking about this kind of thing.&amp;#160; I grew up in startups where virtually every customer felt like the difference between going out of business or not.&amp;#160; I spent 30% of my time on tech support and generally gave same day (or at most a couple of days) turn around on bug fixes if a customer had an issue.&amp;#160; I've always believed that trying (look, I understand that you'll never fully succeed) to make each and every customer happy is important.&amp;#160; And the connection between developers and the problems customers face is an important feedback loop that forces learning over time.&lt;/p&gt;  &lt;p&gt;I don't want anyone to think this is a simple &amp;quot;motherhood and apple pie&amp;quot; vs ignorance issue.&amp;#160; There's a legitimate debate to be had.&amp;#160; First, every time we fix an issue we have a non-zero probability of introducing a regression that our testing misses.&amp;#160; Customers tend to be super unhappy if they get a fix for one problem only to find a new problem they didn't have before.&amp;#160; Further, we all know interruptions are bad - they sap productivity.&amp;#160; Having to stop what you are doing and investigate a customer reported issue (which often turns out to be a configuration problem), produce a fix, test it and deliver it can really reduce the overall volume of value delivered.&amp;#160; Further, fixing every issue any customer reports can cause you to spend an inordinate amount of time fixing issues that affect relatively few people while the bulk of your customers wait for value.&amp;#160; It's not a simple trade-off and neither extreme is the right answer.&amp;#160; It's a balance and it all comes down to the values to apply to weigh that balance.&lt;/p&gt;  &lt;p&gt;As for the instability introduced by regressions, I argue that some regression rate is acceptable as long as your time to repair is sufficiently short.&amp;#160; While a customer will be frustrated by getting a new bug along with their fix to the last, as long as it doesn't happen too often and you fix the new bug quickly, the net result of fixing people's issues more responsively is a win.&amp;#160; Reasonable minds can disagree on what rate is considered acceptable.&amp;#160; The lower you want to drive the rate though, the less churn you can tolerate and the less frequently you can release.&amp;#160; Generally your tolerance also varies by the kind of component you are working on, the ease of deploying updates, and many other factors.&lt;/p&gt;  &lt;p&gt;Now, again, before someone jumps to calling me a hypocrite, let's talk about Team Project Rename.&amp;#160; There's an &amp;quot;issue&amp;quot; that has existed for a long time and we've done nothing about it (right Allen?).&amp;#160; Could we?&amp;#160; Of course, it's just software - anything can be done.&amp;#160; So that must mean we have decided not to despite it being one of the top customer generated requests.&amp;#160; Brian, you're a hypocrite.&amp;#160; I like to think I'm not but you can judge that for yourself.&amp;#160; As I said, it's a balance.&amp;#160; This is probably one of the things I hang my head in shame about.&amp;#160; We made some decisions many many years ago that, in retrospect, I would do differently.&amp;#160; The ramification of those decisions are that Team Project rename is hard - it shouldn't be, but it is.&amp;#160; We've costed it a couple of different times over the past several years and it always comes back as months and months of work with high regression probabilities.&amp;#160; That doesn't mean we're ignoring it.&amp;#160; I still very much want to do it but we're taking a longer road to get there.&amp;#160; For a while we just decided to &amp;quot;live&amp;quot; with the problem.&amp;#160; Now we have a plan but it calls for making changes to &amp;quot;undo&amp;quot; some of those decisions we made many years ago that makes it hard.&amp;#160; Once we get that work done, we can do rename.&amp;#160; All I can do is apologize for how long it is taking.&lt;/p&gt;  &lt;p&gt;Back more to your point Dean.&amp;#160; Yes, Update 3 is likely the last of the updates to the VS 2012 line.&amp;#160; Of course, we'll still continue to fix any critical issues people find but we are winding it down and focusing on VS V.Next.&amp;#160; I'd like to think many of the issues you refer to will get addressed there and, if not, I hope we'll get to them in the V.Next update train.&amp;#160; Referring to the above - Update 3 is the update where we slow down the churn, address remaining high impact customer issues and any regressions introduced in Update 2.&lt;/p&gt;  &lt;p&gt;When you say the window is &amp;quot;unbelievably tiny&amp;quot;, I don't think I agree.&amp;#160; Of course we tried to get as much customer value and feedback incorporated into 2012 RTM as we could and then followed with 3 updates over a period of 9-10 months in which we delivered, in the aggregate, a tremendous amount of stuff - much of which was directly driven by customer feedback (e.g. Desktop Express SKU, C++ XP targeting, Kanban support, Blue theme, and dozens of more significant improvements - and, hundreds of bug fixes).&amp;#160; While I can understand it's frustrating that we didn't get everything - or even all the most popular ones, we did make a lot of progress - and we'll keep making progress in the context of V.Next.&lt;/p&gt;  &lt;p&gt;I also don’t think it’s “SP1 in chunks”.&amp;#160; The kinds of changes we’ve put into the updates go FAR beyond what we would have historically included in a Service Pack.&amp;#160; Service Packs had an “aura” that they only contain bug fixes and while that was never strictly true – any time someone proposed a Service Pack change that didn’t smell like a bug fix, there was a lot of justification that had to be done.&amp;#160; One of the fundamental mindset changes with the move from “Service Packs” to “Updates” has been that the primary value of Updates is new value – and sure we’ll fix a lot of bugs too, but that’s not the focus.&amp;#160; Read my posts on the updates and you’ll that generally the bug fixes are a footnote.&amp;#160; They are all about the cool new capabilities we are enabling.&lt;/p&gt;  &lt;p&gt;I've exposed a lot of flank here - so I suspect it may generate a lively conversation.&amp;#160; But, hopefully it sheds a little light on how I think about it (of course, only one person in a large company - so don't construe this as any kind of official policy).&amp;#160; As always, I'm happy to engage in healthy debate and learn from customers and from mistakes.&lt;/p&gt;  &lt;p&gt;Thanks as always for listening,&lt;/p&gt;  &lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10416999" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/Visual+Studio/">Visual Studio</category><category domain="http://blogs.msdn.com/b/bharry/archive/tags/TFS/">TFS</category></item><item><title>TFS 2012.2 Power Tools update available</title><link>http://blogs.msdn.com/b/bharry/archive/2013/05/08/tfs-2012-2-power-tools-update-available.aspx</link><pubDate>Wed, 08 May 2013 11:47:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10416968</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10416968</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/05/08/tfs-2012-2-power-tools-update-available.aspx#comments</comments><description>&lt;p&gt;Yesterday we released our update to the TFS 2012 Power Tools to work with VS/TFS 2012.2 (Update 2).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/b1ef7eb2-e084-4cb8-9bc7-06c3bad9148f"&gt;TFS 2012 Power Tools&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/45b4e378-5b81-4186-9b7f-21cc5c2f743d"&gt;TFS 2012 Build extensions&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/b5b5053e-af34-4fa3-9098-aaa3f3f007cd"&gt;MSSCCI provider (32 bit)&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/3c7b6813-2617-4d5f-9a1d-5ad980cab5d2"&gt;MSSCCI provider (64 bit)&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Yes, I see the irony in announcing this the day after announcing the first “go-live” Update 3 CTP &lt;img class="wlEmoticon wlEmoticon-smile" style="style" alt="Smile" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-52-metablogapi/4174.wlEmoticon_2D00_smile_5F00_33F44C79.png" /&gt;&amp;#160; It took us longer than we had hoped to get the Power Tools ready.&amp;#160; However, we’ve made a key change to mitigate this issue in the future.&lt;/p&gt;  &lt;p&gt;Our Power Tools setup has traditionally had a block to prevent it from working with the next version of VS (which is why the Power Tools from Update 1 wouldn’t work with Update 2).&amp;#160; This is a bit of a hold-over from before we started doing the regular update cadence.&amp;#160; At that time, it was pretty likely that we’d change something in the 2 years between updates that would break the Power Tools and we’d work hard to have new releases of Power Tools ready before the final release of VS/TFS.&lt;/p&gt;  &lt;p&gt;In the new world of frequent updates, it’s much less likely that we break something and trying to synchronize the 2 releases is much harder.&amp;#160; So, we’ve removed the block and we fully expect that these Power Tools will continue to work fine with Update 3.&amp;#160; I’ve just finished installing it on my VS 2012.3 RC and everything looks to be working well.&lt;/p&gt;  &lt;p&gt;There really aren’t significant changes in the Power Tools release.&amp;#160; Aside from removing the block, we fixed a hand full of bugs and removed the back/restore Power Tool – because the feature was moved into the “official product” in Update 2.&amp;#160; So, the main reason to install this release is just to get it to work with VS 2012.2.&lt;/p&gt;  &lt;p&gt;I apologize for the delay and the inconvenience it caused.&amp;#160; I talked to a number of customers who decided to uninstall Update 2 rather than give up their Power Tools.&amp;#160; We’re glad to hear that the Power Tools are valued so much, but at the same time, we’re sorry for forcing you to make a choice.&amp;#160; You shouldn’t have to any more.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10416968" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/TFS/">TFS</category></item><item><title>Visual Studio 2012.3 (Update 3) “go-live” CTP is now available</title><link>http://blogs.msdn.com/b/bharry/archive/2013/05/07/visual-studio-2012-3-update-3-go-live-ctp-is-now-available.aspx</link><pubDate>Wed, 08 May 2013 00:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10416836</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10416836</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/05/07/visual-studio-2012-3-update-3-go-live-ctp-is-now-available.aspx#comments</comments><description>&lt;p&gt;I know it seems like 2012.2 just released (at least it does to me) but we&amp;rsquo;re already well into our schedule for 2012.3.&amp;nbsp; Today, we released the &lt;a href="http://go.microsoft.com/fwlink/?LinkId=290979"&gt;updates&lt;/a&gt; for both Visual Studio and Team Foundation Server.&amp;nbsp; This is the first &amp;ldquo;go-live&amp;rdquo; release in the 2012.3 line of CTPs &amp;ndash; this means that we&amp;rsquo;ve tested it to the point that we think you can install it in your production environment (we have in ours) and get help with any significant issues you encounter.&amp;nbsp; Our go-live process found 8 or 10 TFS bugs for Update 2.&amp;nbsp; We were able to fix those for the final build and ensure everyone had a better experience.&amp;nbsp; We really appreciate your help finding the last few issues.&lt;/p&gt;
&lt;p&gt;As I mentioned in my &lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/04/04/vs-tfs-2012-2-update-2-released-today.aspx"&gt;Update 2 availability post&lt;/a&gt; &amp;ndash; Update 3 is going to be very small compared to Updates 1 and 2.&amp;nbsp; For the most part it just contains bug fixes that have either been reported by customers or found in our own testing.&amp;nbsp; You can read the &lt;a href="http://support.microsoft.com/kb/2835600"&gt;KB article&lt;/a&gt; to find a full list of fixes.&lt;/p&gt;
&lt;p&gt;Installing it should be relatively straight forward &amp;ndash; for both VS and TFS, just run the installer.&amp;nbsp; There should be no compatibility breaks so you need not upgrade all of your components at once, though, over time, you should plan to get them all updated.&lt;/p&gt;
&lt;p&gt;You can ask any questions on the &lt;a href="http://social.msdn.microsoft.com/forums/en-us/category/visualstudio,vslanguages,vstfs,netdevelopment,vsarch"&gt;Visual Studio Forums&lt;/a&gt; and log bugs on &lt;a href="http://connect.microsoft.com/visualstudio"&gt;Connect&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks and let us know what you think,&lt;/p&gt;
&lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10416836" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/Visual+Studio/">Visual Studio</category><category domain="http://blogs.msdn.com/b/bharry/archive/tags/TFS/">TFS</category></item><item><title>Visual Studio 2012 Update 2 (VS 2012.2) ISOs available</title><link>http://blogs.msdn.com/b/bharry/archive/2013/05/06/visual-studio-2012-update-2-vs-2012-2-isos-available.aspx</link><pubDate>Mon, 06 May 2013 11:30:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10416300</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10416300</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/05/06/visual-studio-2012-update-2-vs-2012-2-isos-available.aspx#comments</comments><description>&lt;p&gt;I’ve had a healthy discussion with some of you on this &lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/04/04/vs-tfs-2012-2-update-2-released-today.aspx"&gt;post&lt;/a&gt; and we’ve received quite a lot of feedback on Soma’s blog and other places.&amp;#160; Based on this feedback we’ve produced &lt;a href="http://go.microsoft.com/fwlink/?LinkID=298533"&gt;ISOs&lt;/a&gt; for Visual Studio Update 2 and decided that for these &amp;quot;”larger” updates, we’ll continue to do so in the future.&lt;/p&gt;  &lt;p&gt;You can read more about it on the Visual Studio blog here: &lt;a title="http://blogs.msdn.com/b/visualstudio/archive/2013/05/03/announcing-availability-of-isos-for-visual-studio-updates.aspx" href="http://blogs.msdn.com/b/visualstudio/archive/2013/05/03/announcing-availability-of-isos-for-visual-studio-updates.aspx"&gt;http://blogs.msdn.com/b/visualstudio/archive/2013/05/03/announcing-availability-of-isos-for-visual-studio-updates.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10416300" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/Visual+Studio/">Visual Studio</category></item><item><title>Team Explorer Everywhere 2012 Update 2</title><link>http://blogs.msdn.com/b/bharry/archive/2013/04/29/team-explorer-everywhere-2012-update-2.aspx</link><pubDate>Mon, 29 Apr 2013 13:52:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10414763</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10414763</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/04/29/team-explorer-everywhere-2012-update-2.aspx#comments</comments><description>&lt;p&gt;I missed announcing the availability of Team Explorer Everywhere Update 2.&amp;#160; We released the update the first week of April.&amp;#160; You can get it either by:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Downloading it from our &lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=30661"&gt;download page&lt;/a&gt; or&lt;/li&gt;    &lt;li&gt;If you use our Eclipse Update site (&lt;a href="http://dl.microsoft.com/eclipse/tfs"&gt;http://dl.microsoft.com/eclipse/tfs&lt;/a&gt;), using Help –&amp;gt; Check for Updates in Eclipse&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Mostly our Update 2 for Team Explorer Everywhere contains bug fixes and small feature improvements.&amp;#160; Here’s a list of the improvements you will find…&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Add delete options to builds and retention policy&lt;/li&gt;    &lt;li&gt;Allow import of Java and Ant as Zip files into Version Control&lt;/li&gt;    &lt;li&gt;Fix checkout for edit being disabled for items with merge,branch pending change&lt;/li&gt;    &lt;li&gt;Remove deleted builds from the build definitions filter in builds page&lt;/li&gt;    &lt;li&gt;Add error when attempting to delete a build that is marked as retain indefinitely&lt;/li&gt;    &lt;li&gt;Update progress indicator during unshelve of large changes&lt;/li&gt;    &lt;li&gt;Improve the way that tooltips are displayed on Ubuntu OOB color theme&lt;/li&gt;    &lt;li&gt;Allow periods in WIT display names&lt;/li&gt;    &lt;li&gt;Fix issue with setting execute bit on get when talking to Update 1 or Update 2 TFS 2012 server&lt;/li&gt;    &lt;li&gt;Fix issue blocking some label, shelve and workspace operations when there are two users with the same display name on TFS2012&lt;/li&gt;    &lt;li&gt;Fix issue canonicalizing local paths when setting working folder to a symlinked path&lt;/li&gt;    &lt;li&gt;Give proper error message when check-ins rejected by an ISubscriber plug-in on the server&lt;/li&gt;    &lt;li&gt;Language pack updates (fixes for French, German, Japanize and Brazilian Portuguese)&lt;/li&gt;    &lt;li&gt;Hide the workspace selection page during connection, make it less prominent during share and import.&lt;/li&gt;    &lt;li&gt;Allow use of alternative credentials when embedded browser is unavailable to Eclipse&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Let us know if you have any feedback.&lt;/p&gt;  &lt;p&gt;Thanks&lt;/p&gt;  &lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10414763" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/TFS/">TFS</category></item><item><title>Updated TFS 2010 MSSCCI Provider</title><link>http://blogs.msdn.com/b/bharry/archive/2013/04/29/updated-tfs-2010-msscci-provider.aspx</link><pubDate>Mon, 29 Apr 2013 13:19:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10414750</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10414750</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/04/29/updated-tfs-2010-msscci-provider.aspx#comments</comments><description>&lt;p&gt;Last week we released an &lt;a href="http://visualstudiogallery.msdn.microsoft.com/bce06506-be38-47a1-9f29-d3937d3d88d6"&gt;update to the TFS 2010 MSSCCI provider&lt;/a&gt;.&amp;#160; The primary motivator for this release was to enable it to work with VS 2005.&amp;#160; This now enables you to connect to TFS 2012 using VS 2005, particularly from Windows XP.&amp;#160; The support for VS 2005 was the only enhancement to this update of the 2010 MSSCCI provider.&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10414750" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/Visual+Studio/">Visual Studio</category><category domain="http://blogs.msdn.com/b/bharry/archive/tags/TFS/">TFS</category></item><item><title>Visual Studio Tools for Git Update available</title><link>http://blogs.msdn.com/b/bharry/archive/2013/04/26/visual-studio-tools-for-git-update-available.aspx</link><pubDate>Fri, 26 Apr 2013 12:18:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10414221</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10414221</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/04/26/visual-studio-tools-for-git-update-available.aspx#comments</comments><description>&lt;p&gt;Yesterday, we released a major update to our Visual Studio Tools for Git.&amp;#160; While still nowhere near done, we feel like we’ve crossed a significant threshold of completeness and usability.&amp;#160; If you’re already using them or have tried them and didn’t feel they were ready, I encourage you to give this update a go.&lt;/p&gt;  &lt;p&gt;You can install the latest drop here: &lt;a href="http://aka.ms/git4vs"&gt;http://aka.ms/git4vs&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It will require that you have Visual Studio 2012 Update 2.&lt;/p&gt;  &lt;p&gt;The most compelling improvements include:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Push is dramatically faster&lt;/li&gt;    &lt;li&gt;Larger repos now work a lot better&lt;/li&gt;    &lt;li&gt;Merge and pull now allow you to have non-conflicting changes in your working copy &lt;/li&gt;    &lt;ul&gt;&lt;!--EndFragment--&gt;&lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;Additional improvements are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Added support for integrated Windows authentication when receiving a 407 Proxy Authentication Required &lt;/li&gt;    &lt;li&gt;Added support for pushing to Git servers which do not support Transfer-Encoding: Chunked &lt;/li&gt;    &lt;li&gt;Added support for pushing to certain Git servers which require side-band-64k in order to report push status &lt;/li&gt;    &lt;li&gt;The sync branch button on the Commits page is now functional. It does a fetch, merge, and push, in sequence &lt;/li&gt;    &lt;li&gt;Merge and pull now properly prompt the user to save their work before starting &lt;/li&gt;    &lt;li&gt;Merge now properly auto-reloads non-dirty solution items which changed in the working copy &lt;/li&gt;    &lt;li&gt;The push command now sends fewer objects to the server, which is a substantial performance improvement &lt;/li&gt;    &lt;li&gt;Merge and pull now use checkout instead of reset for fast-forward merges, which is a performance improvement &lt;/li&gt;    &lt;li&gt;Fixed CRLF issue that was causing checkout to fail due to conflicts in certain scenarios &lt;/li&gt;    &lt;li&gt;Improved performance of working directory status computation (much less hashing of workdir contents) &lt;/li&gt;    &lt;li&gt;Fixed an issue where CRCRLF line endings would end up in the working copy in certain scenarios &lt;/li&gt;    &lt;li&gt;The Add, Delete, and Ignore actions in the Untracked Items section of the Changes page are now working &lt;/li&gt;    &lt;li&gt;Improved Solution Explorer glyph behavior with JavaScript and other CPS (Common Project System) projects &lt;/li&gt;    &lt;li&gt;Undo merge option added to the Resolve Conflicts page &lt;/li&gt;    &lt;li&gt;Fixed a bug where the user was not prompted for fresh credentials when stored credentials failed to authenticate &lt;/li&gt;    &lt;li&gt;Submodule support from the libgit2 project has arrived in this release, but we haven't yet finished all the work in our VS plug-in to make them work smoothly. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As I never like talking about performance improvements without giving some numbers… Here’s a report that I got about a week ago.&amp;#160; Not sure these are the final numbers but you can see the degree of improvement.&amp;#160; These are differences between the Git client tooling between Sprint 44 (the previous public release) and Sprint 46 (this release), using the TFS Git Server.&amp;#160; The numbers are in seconds.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-52-metablogapi/8105.image_5F00_02832A73.png"&gt;&lt;img style="display: inline; background-image: none;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-36-52-metablogapi/2620.image_5F00_thumb_5F00_612384D6.png" width="484" height="371" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;We have also made some improvements to our Git server perf but these are just client improvements.&amp;#160; Of course, we haven’t released an on-prem Git server yet so the only place you can see the server improvements is on &lt;a href="http://tfs.visualstudio.com"&gt;http://tfs.visualstudio.com&lt;/a&gt;.&amp;#160; The Git server perf improvements were deployed with our Sprint 46 service update yesterday.&lt;/p&gt;  &lt;p&gt;Check it out and let us know what you think!&lt;/p&gt;  &lt;p&gt;Thanks,&lt;/p&gt;  &lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10414221" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/Visual+Studio/">Visual Studio</category><category domain="http://blogs.msdn.com/b/bharry/archive/tags/TFS/">TFS</category></item><item><title>Sprint 45 service issues</title><link>http://blogs.msdn.com/b/bharry/archive/2013/04/23/sprint-45-service-issues.aspx</link><pubDate>Tue, 23 Apr 2013 19:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10413450</guid><dc:creator>Brian Harry MS</dc:creator><slash:comments>13</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/bharry/rsscomments.aspx?WeblogPostID=10413450</wfw:commentRss><comments>http://blogs.msdn.com/b/bharry/archive/2013/04/23/sprint-45-service-issues.aspx#comments</comments><description>&lt;p&gt;If you are a regular user of our Team Foundation Service - particularly during peak times, you've probably noticed that it hasn't been running as seamlessly as usual.&amp;nbsp; Our recent issues started with our sprint 45 deployment that I wrote about &lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/03/22/team-foundation-service-update-mar-22.aspx"&gt;here&lt;/a&gt; and foreshadowed &lt;a href="http://blogs.msdn.com/b/bharry/archive/2013/03/04/team-foundation-service-update-mar-4.aspx"&gt;here&lt;/a&gt;.&amp;nbsp; In this post I want to give you some insights to what happened and what we've done about it.&amp;nbsp; The team has been working long and hard since the deployment and I really appreciate the dedication and tenacity.&lt;/p&gt;
&lt;p&gt;As our service has evolved, we've begun to expand the breadth of the services we are trying to offer.&amp;nbsp; We are also working towards having support in data centers around the world so you can choose where your data is hosted.&amp;nbsp; As part of this drive we've been gradually working to "decouple" components of Team Foundation Service to enable more independent evolotion and deployment.&amp;nbsp; Sprint 45 was the culmination of one of the biggest peices of work we've done to date in that effort.&amp;nbsp; Though you can't really see the effect (ok, other than some of the bugs we introduced), we refactored the core Team Foundation Service into two services - what we call SPS or Shared Platform Services and Team Foundation Service (the functionality you know and love).&lt;/p&gt;
&lt;p&gt;SPS contains many things but the simplest way to think about it is the data that is outside a given tenant account - Subscriptions, location, configuration, identity, profile, etc.&amp;nbsp; After many sprints of work, we finally deployed the new SPS service at the end of sprint 45 - in fact on March 22nd and 23rd.&amp;nbsp; It involved a pretty massive data refactoring and the first upgrade with planned downtime in a long time (and I believe the last in a long time).&lt;/p&gt;
&lt;p&gt;When you think about the change technologically, the biggest difference was that, for the first time, we introduced a service to service split with fairly heavy traffic.&amp;nbsp; Before this, all of the calls between the "logical" services were either between DLLs in the same app domain or to the database.&amp;nbsp; This split caused those calls to become service to service REST calls, crossing not only processes but even machines in the data center.&lt;/p&gt;
&lt;p&gt;We did a ton of testing ahead of this deployment, however, it's clear we didn't catch everything we should have and the result has been a lower quality of service than we (and you) expect.&amp;nbsp; The issues have mostly manifested themselves as slowdowns during peak hours (though in the first couple of days it was a little worse than that).&amp;nbsp; The build service has been the most (and longest) affected service - mostly because it's very intensive: it does a full sync of all of your source to build it and that can put a lot of load on the system when lots of people are running builds at the same time.&lt;/p&gt;
&lt;p&gt;I'm going to walk through a list of the issues that we hit.&amp;nbsp; I'm going to try to group them a bit make it easier to digest.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; text-decoration: underline;"&gt;REST stack&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;After we went live and started to see production load, we saw a great deal of time spent in our REST stack.&amp;nbsp; I still don't fully understand why we didn't catch these issues in our pre-production load testing and the team is doing deep retrospectives over the next couple of weeks and this will be one of the key questions to answer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ClientCertificationOption.Automatic&lt;/strong&gt; - We have an object model for talking to TFS.&amp;nbsp; With the new service to service architecture, we are now using portions of that object model on the service.&amp;nbsp; A couple of years ago, we added multi-factor auth to our object model to support scenarios where stronger authentication is required.&amp;nbsp; We discovered that this option was still turned on in our server context - where it was not needed and the result was scanning of the certificate store on every service to service request.&amp;nbsp; We disabled the certificate lookup in this scenario and improved performance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thread pool threads&lt;/strong&gt; - The new service to service architecture introduced a lot more outgoing web calls.&amp;nbsp; The way the web stack works, under the covers, all of these calls are async and use the thread pool.&amp;nbsp; We found that we were often running out of threadpool threads and waiting for the CLR to inject more into the pool.&amp;nbsp; By default the CLR starts with 1 thread per core and then uses a "hill climbing" algorithm to adjust threads as needed.&amp;nbsp; This algorithm tries to dampen changes in the threadpool size so it is not thrashing.&amp;nbsp; However, we found that it could not handle our rapidly changing demands well.&amp;nbsp; The result was long pauses of up to 20 seconds while requests queued up waiting for the thread pool to resize.&amp;nbsp; Working with the CLR team, we decided to increase the minimum number of thread pool threads to 6 per core using (ThreadPool.SetMinThreads).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wasteful CPU use&lt;/strong&gt; - Many years ago, someone wrote some code to scan every request/response data stream for invalid characters.&amp;nbsp; This was consuming a fair amount of CPU (I forget how much but more than 10%).&amp;nbsp; No one, including the dev who did it, could remember why this code was put in there or think of any reason it was needed.&amp;nbsp; We removed it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Extra thread switching&lt;/strong&gt; - We had a coding mistake that caused extra thread switches on every REST call.&amp;nbsp; This is best explained in code.&amp;nbsp; At the beginning of every REST call there's some lazy initialization logic:&lt;/p&gt;
&lt;pre class="scroll"&gt;&lt;code class="cplusplus"&gt;if (a == null) &lt;br /&gt;{ &lt;br /&gt; lock (sync) &lt;br /&gt; { &lt;br /&gt; if (a == null) &lt;br /&gt; { &lt;br /&gt; a = fetch some data; &lt;br /&gt; } &lt;br /&gt; } &lt;br /&gt;} &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The issue is that "fetch some data" was a cross service call and the developer wanted to make it async.&amp;nbsp; So they tried making the method async and doing and await fetch some data and discovered that you can't do an await from within a lock.&amp;nbsp; Let's forget that this would completely have broken the synchronization.&amp;nbsp; So they decided to do a Task.Run on the whole block of code.&amp;nbsp; The problem is that a == null only the first time the code path is used, after which a is cached.&amp;nbsp; The end result is that we did a thread switch just to run an if statement everytime there was a service to service call.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Too many cross service calls&lt;/strong&gt; - As we started to investigate the cause of the slowdown, we quickly realized that we had way more "chattiness" between the services than we realized.&amp;nbsp; This chattiness was exacerbated by the various performance issues above.&amp;nbsp; Before the split most of these interactions were direct in-proc calls or database calls that were much lighter weight than the cross service calls.&amp;nbsp; We were able to rework the code to reduce the number of calls across service boundaries substantially.&lt;/p&gt;
&lt;p&gt;We fixed all of these REST stack&amp;nbsp;problems&amp;nbsp;within the first few days and it really helped restore the service&amp;nbsp;nearly constant poor performance to intermittant&amp;nbsp;poor performance and build service issues.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-size: medium;"&gt;Other misc bugs&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In addition to the set of bugs/issues we had with the transition to separate service, we had another set of bugs that were uncovered/exaggerated as part of the transition.&amp;nbsp; Among them were:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Work item tracking identity sync&lt;/strong&gt; - We have a process by which we sync identities from the identity system (now in the SPS service) into work item tracking (in the TFS service) for the purposes of enabling work item tracking rule enforcement based on groups and identities.&amp;nbsp; This change uncovered/exacerbated two identity syncing bugs.&amp;nbsp; One caused older accounts (the first 40K accounts) to start doing full identity syncs (consuming significant resources) frequently.&amp;nbsp; The other was some thrashing in the identity service causing lots of activity but no progress in syncing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stored procedure optimization&lt;/strong&gt; - We also found a few stored procedures with some significant query plan problems.&lt;/p&gt;
&lt;p&gt;That pretty much summarizes our "bugs".&amp;nbsp; There were clearly too many and they were too significant.&amp;nbsp; I don't ever expect to get to the point where we can deploy a major change and not miss any bugs but it's clear to me we can do better.&amp;nbsp; However, if it were just this, the overall impact would not have lasted nearly as long as it has.&amp;nbsp; In addition to our own mistakes we got hit by a number of environment/operational issues.&amp;nbsp; The cloud environment (Azure) that we operate in is constantly changing.&amp;nbsp; Almost every day something, somewhere is being updated and we rely on enough of it that we can get wagged by many things.&amp;nbsp; Here are some of the environmental things...&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium; text-decoration: underline;"&gt;CLR/.NET&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GC/Pinning&lt;/strong&gt; - As I mentioned above in the section on Thread pool threads, we introduced a bunch more async patterns in our service with this change than we had ever had before.&amp;nbsp; In fact, we now have about 10 async calls per second from each application tier machine.&amp;nbsp; Async calls, in the CLR, ultimately involve some amount of "pinning" GC memory so that the OS can transfer data into buffers asynchronously without blocking the GC.&amp;nbsp; The problem we have is that at that rate there's almost always an outstanding async call, and therefore pinned buffers.&amp;nbsp; The CLR has some designs to help reduce the impact of this but we found they weren't working sufficiently well for us.&amp;nbsp; We were using Large Azure roles (7GB of RAM) and finding that due to pinning effects on the GC, we were seing high CPU load from the GC and memory exhaustion that would ultimately result in machine recycling - causing intermittent availability.&amp;nbsp; In the process of investigating this, we also uncovered the issue described below under "Windows Azure".&amp;nbsp; We engaged the CLR team quickly and started investigating.&amp;nbsp; They said they had seen this issue before in some high scale services but no service was able to work with them long enough to isolate and fix it&amp;nbsp;- basically as soon as they found a mitigation their interest in it was over.&amp;nbsp; I view part of our role as driving feedback and requirements into our platform to improve the overall quality.&amp;nbsp; As such we're continuing to work with the CLR on this.&amp;nbsp; We're expecting a longer term improvement from them but, in the shorter term, we've found that we could increased to an XL role (14GB) and that mitigated the pinning effects, eliminating the critical issues.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-size: medium;"&gt;SQL Azure&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Config DB provisioning&lt;/strong&gt; - Each of our services have a single database that we call Config DB.&amp;nbsp; It's the core database that the service needs to run.&amp;nbsp; It's got critical configuration information like connection strings, manages cross app tier notifications, etc.&amp;nbsp; Before now, we only had 1 Config DB for the entire service.&amp;nbsp; That database was on a XL reserved SQL Azure instance to make sure we had a committed level of capacity behind this critical database.&amp;nbsp; With the rollout of our new service and a second Config DB along with a new "accounts" DB, we needed to readjust how our config DBs were deployed so that we didn't have to pay for&amp;nbsp;3 XL reservations but were able, instead, to share the reserved resources between our Config DBs.&amp;nbsp; In this process, there were manual operational procedures which caused all three database primaries to get landed on the same physical machine.&amp;nbsp; The load balancer realized this was a bad idea and began trying to move two of the primaries onto another of our reserved machines.&amp;nbsp; However, we hit a bug in the load balancer where it had difficulty balancing the resource consumption of the foreground work with the background database movement.&amp;nbsp; The result was that it kept trying to move the databases, getting part way through and then giving up.&amp;nbsp; This caused a lot of load on our SQL Azure databases that, coupled with our issues in the first section, compounded our performance problem.&amp;nbsp; Ultimately this was addressed by explicit operational intervention to place the databases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SQL Azure storm&lt;/strong&gt; - As it turns out, that first week, SQL Azure (on the cluster we use), had a bit of a storm with some misbehaving tenants using an undo share of the resources and causing the performance of our databases to suffer.&amp;nbsp; These storms happen from time to time in SQL Azure and they are working through throtting and quota mechanisms to contain them.&amp;nbsp; They were MUCH worse a year or so ago - the SQL team has made a lot of progress but the problem is not yet completely gone.&lt;/p&gt;
&lt;p&gt;So far, most of what I've talked about has been, at least, tangentially related to the "big" change we were actually rolling out.&amp;nbsp; As it so happens we also got hit by some stuff that had absolutely nothing to do with the big changes we were rolling out.&amp;nbsp; Over the first couple of weeks we had worked through all of the issues we could find with our change and the service was generally running reasonably well - with the exception of the build service.&amp;nbsp; The build service was running poorly - during peak times builds were slow and frequently timing out/failing.&amp;nbsp; Once we had ruled out everything that had anything to do with our changes we discovered some other things going on.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-size: medium;"&gt;Windows Azure&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Slow disk I/O&lt;/strong&gt; - The slow and failed builds were continuing to plague us.&amp;nbsp; Once we had stopped looking for causes related to the changes we had made, it became clear pretty quickly that the root problem had to do with the amount of time it was taking to download source out of version control.&amp;nbsp; After much investigation we concluded it had something to do with changes in Windows Azure.&amp;nbsp; We were seeing incredibly slow disk I/O on the local disk of our web role.&amp;nbsp; We contacted the Azure team and learned they had just rolled out (just about the same day we rolled out our changes), a change to both host and guest VMs that changed the way write through caching works.&amp;nbsp; We were seeing, under load, individual I/Os taking as much at 2 seconds - 2 orders of magnitude longer than it should.&amp;nbsp; The source code we manage is in Azure blob store.&amp;nbsp; However, to optimize delivery, we store a cache of source code on the application tier that we can use the OS TransmitFile API on.&amp;nbsp; It is a VERY optimized API for transmitting files over the network that has very low overhead because it avoids copying buffers in and out of user mode, etc.&amp;nbsp; The disk I/O slow down was causing this cache to behave very badly - causing build to take for ever, downloads to fail, builds to be aborted, etc.&amp;nbsp; Further, it significantly exacerbated our issues with the GC because we'd see page fault in GC collection taking a second or more.&amp;nbsp; It was a mess.&amp;nbsp; To mitigate it, we have turned off our AT cache and are instead fetching source directly from Azure blob store.&amp;nbsp; This is causing our file downloads to take about 1.6 times longer than it used to but it's still way better than where we were.&amp;nbsp; We're continuing to work with the Azure team on a more permanent fix to restore the local disk performance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Network failures&lt;/strong&gt; - Unfortunately, with the slow disk I/O problem mitigate, we're still seeing an increased level of build failures.&amp;nbsp;&amp;nbsp;Upon further investigation, we've discovered that we're seeing a much higher level of network error in Azure than we are used to.&amp;nbsp; At this time, I still don't know the cause of that - we believe it's related to the last Azure fabric rollout but we don't have a clear root cause yet.&amp;nbsp; We are seeing hundreds of builds a day failing due to network failures starting about April 12th.&amp;nbsp; Along the way of investigating many of these issues, we discovered that our build service didn't have appropriate retry logic to handle failed downloads.&amp;nbsp; It's really not been an issue for the past year but all of the issues we've had in the last month has uncovered this hole.&amp;nbsp; We'll soon be rolling out an update that will do retries (which quite honestly should be there in the first place because all cross service cloud calls should handle intermittent failures well) and it should significantly improve the build success rate.&amp;nbsp; We'll still see some performance issues from the last two issues but at least builds should stop failing.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-size: medium;"&gt;Debugging issues&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memory dump problems&amp;nbsp;&lt;/strong&gt;- To add insult to injury, our ability to debug the service has been seriously compromised.&amp;nbsp; I haven't actually looked deeply at this one myself so my description may be a little sketchy.&amp;nbsp; Debugging some of these problems are greatly facilitated taking memory dumps from production that we can diagnose off line.&amp;nbsp; Historically, we have used a feature called Reflective dumps using procdump /r.&amp;nbsp; This method reflects the memory state into a parallel process and then dumps from the parallel process so that there is almost no interruption of the production service.&amp;nbsp; However, apparently, for a couple of years the Windows OS reflective dump mechanism has had a bug that caused it to miss fragments of the process memory.&amp;nbsp; Apparently we've seen this in the form of "bad" memory dumps but it was infrequent enough that people just wrote it off to gremlins.&amp;nbsp; Some change in .NET 4.5 (which we rolled out on the service a few months ago), has caused this reflective dump to fail every time - so we can't use reflective dumps any longer.&amp;nbsp; Now we have to take a straight process dump in production and, unfortunately, this takes a minute or two, literally.&amp;nbsp; This long of a pause causes cascades of timeouts and results in a significant service interruption.&amp;nbsp; So every time we needed to take a dump to look at thread state, GC issues, or the myriad of other issues here, we had to basically reboot one of the app tiers, causing significant service interruptions, failed builds, etc.&amp;nbsp; We're working with the Windows team on getting them to produce a hotfix that we can use and the rest of the world can use to reliably get .NET 4.5 reflected memory dumps.&lt;/p&gt;
&lt;p&gt;As you can see there were quite a lot of issues that conspired to make it a bad month for us.&amp;nbsp; We've been working incredibly hard and the service has gotten better day by day.&amp;nbsp; We've also been working closely with the platform teams to ensure there are durable solutions to the problems we've hit there that work not just for us, but for everyone.&lt;/p&gt;
&lt;p&gt;This is a long post and if you've read this far, I'm impressed.&amp;nbsp; We're very sorry for the problems that we've caused.&amp;nbsp; At this point we feel like we've worked through enough of our issues that we can get back on our regular deployment schedule.&amp;nbsp; As such, we are deploying the delayed Sprint 46 build today and will deploy the Sprint 47 build a week from Monday.&amp;nbsp; We'll keep working hard until everything is completely back to normal and if you see anything that looks squirelly, please let us know.&lt;/p&gt;
&lt;p&gt;Thank you,&lt;/p&gt;
&lt;p&gt;Brian&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10413450" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/bharry/archive/tags/TFService/">TFService</category></item></channel></rss>