{"id":3401,"date":"2012-04-11T07:19:42","date_gmt":"2012-04-11T07:19:42","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/bharry\/2012\/04\/11\/preemptive-analytics-in-visual-studio-and-tfs-11\/"},"modified":"2024-05-13T12:49:12","modified_gmt":"2024-05-13T19:49:12","slug":"preemptive-analytics-in-visual-studio-and-tfs-11","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/bharry\/preemptive-analytics-in-visual-studio-and-tfs-11\/","title":{"rendered":"Preemptive Analytics in Visual Studio and TFS 11"},"content":{"rendered":"<p>Over the past couple of years there\u2019s been a growing connection between development and operations.\u00a0 The \u201cold\u201d world where development teams throw applications over the wall at ops is disappearing the same way the world where developers threw applications over the wall at test did.\u00a0 Whether you\u2019re talking about continuous deployment, DevOps or \u201cBuild, Measure, Learn\u201d, these are all catchy phrases that are various aspects of getting the development team connected more closely with the customer and with the application in production.<\/p>\n<p>I\u2019ve had the privilege of living this life for the past couple of years as we\u2019ve been bringing the Team Foundation Service to life.\u00a0 It\u2019s really challenged me to think about the world in a different way.\u00a0 Over the next couple of months, I\u2019m going to try to write a series of posts that shares some of the things I\u2019ve been learning along the way.\u00a0 One of those things, though, is that you have to have very good visibility into production.\u00a0 Without it you will have a low quality, expensive, undesirable service.\u00a0 With it you can solve problems before your customers even realize they exist, prioritize work based on what people actually use, test changes to see how it affects user behavior, drive your costs (both hard and soft) to the lowest level possible and much, much more.<\/p>\n<p>In the last year or so, we\u2019ve started to make some significant investments to help with this.\u00a0 The first was the <a href=\"http:\/\/blogs.msdn.com\/b\/bharry\/archive\/2011\/05\/17\/connecting-development-and-operations.aspx\">Team Foundation Server and System Center integration<\/a> we announced about a year ago that enables production tickets to be \u201cescalated\u201d to TFS along with all of the diagnostic information.\u00a0 Another coming in the VS 11 release is <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudioalm\/archive\/2012\/03\/16\/running-intellitrace-on-applications-in-production.aspx\">Intellitrace in production<\/a> that allows you to get detailed diagnostic data from your production environment.\u00a0 We\u2019ve also announced some follow on <a href=\"http:\/\/blogs.msdn.com\/b\/jasonz\/archive\/2012\/03\/27\/visual-studio-ultimate-roadmap.aspx\">improvements coming to Intellitrace in production<\/a> that will be available this fall.<\/p>\n<p>Another area we\u2019ve been working is in production telemetry.\u00a0 We\u2019ve partnered with Preemptive (the makers of Dotfuscator) on a basic telemetry included with Team Foundation Server\/Visual Studio 11 called PreEmptive Analytics for TFS Community Edition.\u00a0 This built in capability allows you to instrument your application and receive reports from your users on any crashes they experience.\u00a0 The reports are analyzed, correlated with other reports and distilled to a set of \u201cproduction incidents\u201d that appear to be the same underlying cause.\u00a0 These show up as work items in your Team Foundation Server database.\u00a0 You can also purchase the Pro edition and get additional capabilities like the ability to analyze what features of your application get the most use, etc.<\/p>\n<p>This kind of telemetry has been an important part of our process in Visual Studio for many years.\u00a0 We view it as a critical part of understanding the experience real customers are having, addressing the issues they are having and measuring our progress.\u00a0 We create a number of reports and set goals for every release.\u00a0 For instance, here\u2019s a list of the top 10 crashing bugs in the VS 11 Beta reported by real user telemetry and the current status of the bug.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\"><b>Bug Info:<\/b><\/td>\n<td valign=\"top\"><b>Watson Info:<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\"><b>Rank<\/b><\/td>\n<td valign=\"top\"><b>TFS ID<\/b><\/td>\n<td valign=\"top\"><b>Resolution<\/b><\/td>\n<td valign=\"top\"><b>PU<\/b><\/td>\n<td valign=\"top\"><b>Hits<\/b><\/td>\n<td valign=\"top\"><b>CABs<\/b><\/td>\n<td valign=\"top\"><b>Details<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#1<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=358582\">358582<\/a><\/u><\/td>\n<td valign=\"top\">Fixed<\/td>\n<td valign=\"top\">VS: Pro<\/td>\n<td valign=\"top\">1010<\/td>\n<td valign=\"top\">6.0%<\/td>\n<td valign=\"top\">45<\/td>\n<td valign=\"top\"><b>MSENV.DLL!== [Crash32_Normal: 0xC0000005]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#2<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=276670\">276670<\/a><\/u><\/td>\n<td valign=\"top\">(Active)<\/td>\n<td valign=\"top\">VS: Ultimate<\/td>\n<td valign=\"top\">454<\/td>\n<td valign=\"top\">2.7%<\/td>\n<td valign=\"top\">9<\/td>\n<td valign=\"top\"><b>VSDEBUG.DLL!CAddressPosition::UpdateMarker [Crash32_Normal: 0xC0000005]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#3<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=378926\">378926<\/a><\/u><\/td>\n<td valign=\"top\">(Active)<\/td>\n<td valign=\"top\">NDP: WPF<\/td>\n<td valign=\"top\">326<\/td>\n<td valign=\"top\">1.9%<\/td>\n<td valign=\"top\">42<\/td>\n<td valign=\"top\"><b>NVD3DUM.DLL!unknown [Crash32_Normal: 0xC0000005]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#4<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=372955\">372955<\/a><\/u><\/td>\n<td valign=\"top\">(Active)<\/td>\n<td valign=\"top\">VS: Pro<\/td>\n<td valign=\"top\">313<\/td>\n<td valign=\"top\">1.9%<\/td>\n<td valign=\"top\">21<\/td>\n<td valign=\"top\"><b>UNKNOWN.DLL!Microsoft.VisualStudio.Editor.Implementation.Find.FindTarget.CalculateWrapping [Clr20r3: system.nullreferenceexception]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#5<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=374532\">374532<\/a><\/u><\/td>\n<td valign=\"top\">Fixed<\/td>\n<td valign=\"top\">VS: Ultimate<\/td>\n<td valign=\"top\">226<\/td>\n<td valign=\"top\">1.3%<\/td>\n<td valign=\"top\">8<\/td>\n<td valign=\"top\"><b>VSDEBUGENG.SCRIPT.DLL!ScriptDM::CProviderEventCallback::AttachToProgramImpl [Crash32_Normal: 0xC0000005]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#6<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=362918\">362918<\/a><\/u><\/td>\n<td valign=\"top\">Fixed\n(excluded)<\/td>\n<td valign=\"top\">VS: Pro<\/td>\n<td valign=\"top\">181<\/td>\n<td valign=\"top\">1.1%<\/td>\n<td valign=\"top\">18<\/td>\n<td valign=\"top\"><b>MSENV.DLL!EnableBrowserSecurityFeatures [Crash32_Normal: 0x\nC0000420]\n[Exclude reason: internal only]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#7<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=373304\">373304<\/a><\/u><\/td>\n<td valign=\"top\">External\n(excluded)<\/td>\n<td valign=\"top\">VS: Ultimate<\/td>\n<td valign=\"top\">161<\/td>\n<td valign=\"top\">1.0%<\/td>\n<td valign=\"top\">9<\/td>\n<td valign=\"top\"><b>MICROSOFT.VISUALSTUDIO.ARCHITECTURETOOLS.PROGRESSIVEREVEALPROV!Microsoft.VisualStudio.ArchitectureTools.ProgressiveReveal.ProgressiveRevealProvider.Finalize [Clr20r3: system.missingfieldexception]\n[Exclude reason: unsupported install]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#8<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=378927\">378927<\/a><\/u><\/td>\n<td valign=\"top\">(Active)<\/td>\n<td valign=\"top\">VS: Pro<\/td>\n<td valign=\"top\">123<\/td>\n<td valign=\"top\">0.7%<\/td>\n<td valign=\"top\">12<\/td>\n<td valign=\"top\"><b>MSENV.DLL!CDelayProjectLoadManager::LoadProject [Crash32_Normal: 0xC0000005]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#9<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=376355\">376355<\/a><\/u><\/td>\n<td valign=\"top\">Fixed<\/td>\n<td valign=\"top\">Expression: VS Integ<\/td>\n<td valign=\"top\">116<\/td>\n<td valign=\"top\">0.7%<\/td>\n<td valign=\"top\">28<\/td>\n<td valign=\"top\"><b>SYSTEM.RUNTIME.REMOTING.NI.DLL!System.Runtime.Remoting.Channels.Ipc.IpcPort.Read [AppHangB1: 0]<\/b><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">#10<\/td>\n<td valign=\"top\"><u><a href=\"http:\/\/vstfdevdiv:8080\/web\/wi.aspx?pcname=DevDiv2&amp;id=354401\">354401<\/a><\/u><\/td>\n<td valign=\"top\">(Active)<\/td>\n<td valign=\"top\">VS: WinC++<\/td>\n<td valign=\"top\">113<\/td>\n<td valign=\"top\">0.7%<\/td>\n<td valign=\"top\">30<\/td>\n<td valign=\"top\"><b>MFC110U.DLL!CView::~CView [Crash32_Normal: 0xC0000374]<\/b><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>We also create visualizations to show how we are doing overall.\u00a0 Here\u2019s a bar chart \u2013 1 bar for each bug, height indicates number of reports and color is current status of the bug.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/2860.clip_image001_thumb_0C032C6B.jpg\"><img decoding=\"async\" class=\"alignnone size-full wp-image-16103\" src=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/2860.clip_image001_thumb_0C032C6B.jpg\" alt=\"Image 2860 clip image001 thumb 0C032C6B\" width=\"804\" height=\"369\" srcset=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/2860.clip_image001_thumb_0C032C6B.jpg 804w, https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/2860.clip_image001_thumb_0C032C6B-300x138.jpg 300w, https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/2860.clip_image001_thumb_0C032C6B-768x352.jpg 768w\" sizes=\"(max-width: 804px) 100vw, 804px\" \/><\/a><\/p>\n<p>So, with VS 11 &amp; TFS 11, you get get the same kinds of telemetry on your applications.\u00a0 Both the server side and client side components for the Community Edition come in the box.\u00a0 The installation for the server side pieces have been integrated to the TFS administration console and the client side pieces are available on the VS tools menu.<\/p>\n<p>In short, you install the server side pieces.\u00a0 Then you instrument your app (including with an url to an exposed server side collector).\u00a0 When customers run your app and experience a crash, it will automatically send data, including things like a stack trace to your server and the aggregation service will file or update bugs on your TFS service.<\/p>\n<p>Once you\u2019ve got it all configured and have an app reporting failures, you\u2019ll start seeing production incidents in TFS that look like this:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/1057.pa4tfs-1-for-brian_thumb_21313213.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-16104\" src=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/1057.pa4tfs-1-for-brian_thumb_21313213.png\" alt=\"Image 1057 pa4tfs 1 for brian thumb 21313213\" width=\"804\" height=\"427\" srcset=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/1057.pa4tfs-1-for-brian_thumb_21313213.png 804w, https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/1057.pa4tfs-1-for-brian_thumb_21313213-300x159.png 300w, https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/1057.pa4tfs-1-for-brian_thumb_21313213-768x408.png 768w\" sizes=\"(max-width: 804px) 100vw, 804px\" \/><\/a><\/p>\n<p>Then you can start looking at the built in reports like these.\u00a0 Here\u2019s an overview of incidents by application, including the status of the incidents.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/7823.pa4tfs-2-for-brian_thumb_598F331E.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-16105\" src=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/7823.pa4tfs-2-for-brian_thumb_598F331E.png\" alt=\"Image 7823 pa4tfs 2 for brian thumb 598F331E\" width=\"804\" height=\"357\" srcset=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/7823.pa4tfs-2-for-brian_thumb_598F331E.png 804w, https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/7823.pa4tfs-2-for-brian_thumb_598F331E-300x133.png 300w, https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/7823.pa4tfs-2-for-brian_thumb_598F331E-768x341.png 768w\" sizes=\"(max-width: 804px) 100vw, 804px\" \/><\/a><\/p>\n<p>Or trends of incidents over time.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/4760.pa4tfs-3-for-brian-2_thumb_7ABF28FA.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-16107\" src=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/4760.pa4tfs-3-for-brian-2_thumb_7ABF28FA.png\" alt=\"Image 4760 pa4tfs 3 for brian 2 thumb 7ABF28FA\" width=\"804\" height=\"554\" srcset=\"https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/4760.pa4tfs-3-for-brian-2_thumb_7ABF28FA.png 804w, https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/4760.pa4tfs-3-for-brian-2_thumb_7ABF28FA-300x207.png 300w, https:\/\/devblogs.microsoft.com\/bharry\/wp-content\/uploads\/sites\/8\/2012\/04\/4760.pa4tfs-3-for-brian-2_thumb_7ABF28FA-768x529.png 768w\" sizes=\"(max-width: 804px) 100vw, 804px\" \/><\/a><\/p>\n<h3>Conclusion<\/h3>\n<p>Telemetry and Analytics are increasingly important aspects of the software development process.\u00a0 They enable you to \u201cclose the loop\u201d and ensure you are delivering a great experience for your customers.\u00a0 They are important regardless of whether you are building a mission critical server or a client running on desktops in your organization or PCs and phones around the world.\u00a0 For the past several years, we\u2019ve been investing in making Visual Studio a great tool for developers to get good insight into application behavior and you can expect a great deal more in the coming years.<\/p>\n<p>Everything you need is in the VS 11 and TFS 11 beta releases we published last month.\u00a0 We\u2019re still working to streamline and improve some of the experiences but I think it\u2019s starting to get to where we want it to be.\u00a0 I encourage you to check it out.<\/p>\n<p>You can visit these sites to learn more:<\/p>\n<ul>\n<li><a title=\"http:\/\/www.preemptive.com\/pa\" href=\"http:\/\/www.preemptive.com\/pa\">http:\/\/www.preemptive.com\/pa<\/a><\/li>\n<li><a title=\"http:\/\/www.microsoft.com\/visualstudio\/11\/en-us\/products\/alm\" href=\"http:\/\/www.microsoft.com\/visualstudio\/11\/en-us\/products\/alm\">http:\/\/www.microsoft.com\/visualstudio\/11\/en-us\/products\/alm<\/a><\/li>\n<\/ul>\n<p>Brian<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over the past couple of years there\u2019s been a growing connection between development and operations.\u00a0 The \u201cold\u201d world where development teams throw applications over the wall at ops is disappearing the same way the world where developers threw applications over the wall at test did.\u00a0 Whether you\u2019re talking about continuous deployment, DevOps or \u201cBuild, Measure, [&hellip;]<\/p>\n","protected":false},"author":244,"featured_media":14617,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[5],"class_list":["post-3401","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-tfs"],"acf":[],"blog_post_summary":"<p>Over the past couple of years there\u2019s been a growing connection between development and operations.\u00a0 The \u201cold\u201d world where development teams throw applications over the wall at ops is disappearing the same way the world where developers threw applications over the wall at test did.\u00a0 Whether you\u2019re talking about continuous deployment, DevOps or \u201cBuild, Measure, [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/posts\/3401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/users\/244"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/comments?post=3401"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/posts\/3401\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/media\/14617"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/media?parent=3401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/categories?post=3401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/bharry\/wp-json\/wp\/v2\/tags?post=3401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}