<?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>Eric Lee - A Humble Blog : Visual Studio Team System</title><link>http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx</link><description>Tags: Visual Studio Team System</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Apologies, forgot to include a file in my Hemi distribution</title><link>http://blogs.msdn.com/ericlee/archive/2006/11/20/apologies-forgot-to-include-a-file-in-my-hemi-distribution.aspx</link><pubDate>Mon, 20 Nov 2006 22:56:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1110591</guid><dc:creator>ericlee</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/1110591.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=1110591</wfw:commentRss><description>&lt;p&gt;Hey guys,&lt;/p&gt;
&lt;p&gt;Sorry, in my Hemi tool, I&amp;rsquo;m using a 3rd party control from Component One.&amp;nbsp; I have a license for their tools and they allow redistribution.&amp;nbsp; The file you need is located here: &lt;a href="http://www.counterpunchsoftware.com/downloads/C1.Win.C1FlexGrid.2.zip"&gt;C1.Win.C1FlexGrid.2.zip&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks to Grant for spotting this so quickly.&lt;/p&gt;
&lt;p&gt;Eric.&lt;br /&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1110591" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>Work Item Moving Tool is back!</title><link>http://blogs.msdn.com/ericlee/archive/2006/11/20/work-item-moving-tool-is-back.aspx</link><pubDate>Mon, 20 Nov 2006 12:35:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1107861</guid><dc:creator>ericlee</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/1107861.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=1107861</wfw:commentRss><description>&lt;p&gt;Hey guys, I've finally had a chance to update my work item moving tool to work with the RTM release of Team Foundation Server. Along the way, I made some modifications and changes that I've wanted to do for a while. I haven't thought of a better name than 'work item mover' so for now I've code-named it if you will 'Hemi'. &lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve posted the tool to:&amp;nbsp;&lt;a href="http://www.counterpunchsoftware.com/downloads/hemi.release.zip"&gt;http://www.counterpunchsoftware.com/downloads/hemi.release.zip&lt;/a&gt;.&amp;nbsp; You&amp;rsquo;ll also need: &lt;a href="http://www.counterpunchsoftware.com/downloads/C1.Win.C1FlexGrid.2.zip"&gt;C1.Win.C1FlexGrid.2.zip&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;I included the Team Foundation Server binaries that it depends on, but the best way to run the tool is just to run Hemi.exe from the Visual Studio Tools Command Prompt.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi" src="http://www.london54.com/blog_images/hemi.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Hemi starts up and looks as follows:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.london54.com/blog_images/hemi1.png"&gt;&lt;img alt="Hemi1" src="http://www.london54.com/blog_images/hemi1_thumb.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m thinking about using a MDI type of interface in the future; that would enable you to save and re-run moves that you might do on a regular basis.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;To start moving work items, the first thing to do is use the File menu&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi2" src="http://www.london54.com/blog_images/hemi2.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;This starts the various stages involved in moving work items from one team project to another.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.london54.com/blog_images/hemi3.png"&gt;&lt;img alt="Hemi3" src="http://www.london54.com/blog_images/hemi3_thumb.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The first thing to do is pick the Team Foundation Server that you want to access.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi3a" src="http://www.london54.com/blog_images/hemi3a.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Depending on the authentication that you are using, you may get prompted for credentials.&amp;nbsp; Once you&amp;rsquo;ve chosen a Team Foundation Server, the next step is to select the work items that you want to move.&amp;nbsp; This is done by selecting a Team Foundation Server Query.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi5" src="http://www.london54.com/blog_images/hemi5.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Pressing this button will bring up the same work item query control that is used in the Excel integration.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi6" src="http://www.london54.com/blog_images/hemi6.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Once you select a query, press the Find button on this dialog to bring up the actual work items.&amp;nbsp; Press OK and you&amp;rsquo;ve established the work items that you are going to move.&amp;nbsp; Now select the Team Project to move these work items to.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi7" src="http://www.london54.com/blog_images/hemi7.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve done that, press Next to move on to the next stage.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi8" src="http://www.london54.com/blog_images/hemi8.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Any query that you might use might encompass a few different work item types, so in this stage, you&amp;rsquo;ll decide how to map those work item types to the Team Project you are moving the work items to.&amp;nbsp; In most cases, you&amp;rsquo;ll probably move the work items to the same type in the other Team Project.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi9" src="http://www.london54.com/blog_images/hemi9.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;But, sometimes work item types are defined differently.&amp;nbsp; For example, in a CMMI project, a bug is defined with two required fields &amp;ndash; Symptoms and Steps to Reproduce.&amp;nbsp; These fields aren&amp;rsquo;t required in an Agile project.&amp;nbsp; So, this stage also gives you the chance to fill these missing values in.&amp;nbsp; Press the Check for Missing Values to see what these missing values are.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi10" src="http://www.london54.com/blog_images/hemi10.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;If there are any, enter values into the table.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi12" src="http://www.london54.com/blog_images/hemi12.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Press Next to move on to the next stage and actually move your work items.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.london54.com/blog_images/hemi13.png"&gt;&lt;img alt="Hemi13" src="http://www.london54.com/blog_images/hemi13_thumb.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This stage shows you what work items will be moved, as well give you a couple of options for your original work items.&amp;nbsp; Team Foundation Server doesn&amp;rsquo;t support deleting work items, so your original work items will still exist.&amp;nbsp; By default, Hemi will create a Moved state for these work items and assign them to that state.&amp;nbsp; Also, it will create links between the original work items and their new copies, and vice versa.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.london54.com/blog_images/hemi15.png"&gt;&lt;img alt="Hemi15" src="http://www.london54.com/blog_images/hemi15_thumb.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once you move to the next stage, your move will be committed!&amp;nbsp; &lt;/p&gt;
&lt;p&gt;If you look at your original work items, what you should see is that it is in a Moved state:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi16" src="http://www.london54.com/blog_images/hemi16.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;And also, your original work item will be linked to the new one, and vice versa.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Hemi17" src="http://www.london54.com/blog_images/hemi17.png" border="0" /&gt;&lt;/p&gt;
&lt;p&gt;Anyways, I hope you find Hemi useful &amp;ndash; if you run into any bugs or have suggestions, please let me know.&amp;nbsp; Either through this blog or email me at &lt;a href="mailto:eric@counterpunchsoftware.com"&gt;eric@counterpunchsoftware.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
&lt;p&gt;Eric.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1107861" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>'Wall Time' as a way of determining correctness</title><link>http://blogs.msdn.com/ericlee/archive/2006/09/28/wall-time-as-a-way-of-determining-correctness.aspx</link><pubDate>Fri, 29 Sep 2006 01:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:776189</guid><dc:creator>ericlee</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/776189.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=776189</wfw:commentRss><description>&lt;P&gt;Quite a few years back, I joined the Windows Server 2003 team as a developer.&amp;nbsp; Windows Server 2003 is a massive organization – I was part of the UDDI team which resided under Directory Services.&lt;/P&gt;
&lt;P&gt;Our QA team had a suite of about 300 automated tests.&amp;nbsp; The collected the ‘wall time’ of a test run – so literally how many minutes/seconds it took for each test to run.&amp;nbsp; The ‘wall time’ amounts were aggregated into a test suite run time.&lt;/P&gt;
&lt;P&gt;When I first joined, that suite of tests was taking about 2 hours to complete.&amp;nbsp; That was a concern because the test suite used to only take about 20 minutes.&amp;nbsp; We used a homegrown solution to store our test data and this was 2002, so there was no SQL Server 2005 Business Intelligience to take advantage of &lt;IMG src="http://www.london54.com/blog_images/smile1.gif" mce_src="http://www.london54.com/blog_images/smile1.gif"&gt;&lt;/P&gt;
&lt;P&gt;My first task when I joined was to determine if there was a performance problem – the number of tests in the suite had increased, and so had our functionality – and if there was one, to fix it.&amp;nbsp; I spent a long while in our profiling tools (crude compared to what we have today) and tracked the problem down to a Thread.Sleep() that someone had accidently put in the code.&lt;/P&gt;
&lt;P&gt;What was ironic was that we had several unit tests that targetted that particular piece of code.&amp;nbsp; Looking back, at the test results for those unit tests, I could see that the ‘wall time’ for those tests had almost tripled.&amp;nbsp; On their own, these slower unit tests only added a little bit of time to the test run.&amp;nbsp; But when the Thread.Sleep() code those unit tests were targetting werer hit by our load/scalability tests, the slowdown because expontential. &lt;/P&gt;
&lt;P&gt;What we didn’t have then was a way to express how long a test was supposed to take.&amp;nbsp; We checked for return values, the presence of exceptions, etc, but we couldn’t say that&amp;nbsp;a test would fail if it took longer than some amount of time. &lt;/P&gt;
&lt;P&gt;This ‘timeout’ is something that is built into Visual Studio Team System.&amp;nbsp; If you look at the properties of a test, you’ll see a timeout property. &lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image8 src="http://www.london54.com/blog_images/image8.png" border=0 mce_src="http://www.london54.com/blog_images/image8.png"&gt;&lt;/P&gt;
&lt;P&gt;The value of this property is a handy way to define the performance characteristics of a given test.&amp;nbsp; Run times will of course differ based on hardware, but this property is a good sanity test.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Thanks,&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=776189" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>Building development scorecards</title><link>http://blogs.msdn.com/ericlee/archive/2006/09/27/building-development-scorecards.aspx</link><pubDate>Thu, 28 Sep 2006 01:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:774494</guid><dc:creator>ericlee</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/774494.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=774494</wfw:commentRss><description>&lt;P&gt;Hey guys,&lt;/P&gt;
&lt;P&gt;Earlier this year, I did some blog posts about how to create key performance indicators (KPIs) based on the software development data that Team Foundation Server collects.&lt;/P&gt;
&lt;P&gt;There are numerous clients for those KPIs, but the one that is probably the most dedicated KPI client from Microsoft is &lt;A href="http://office.microsoft.com/en-us/FX012225041033.aspx" mce_href="http://office.microsoft.com/en-us/FX012225041033.aspx"&gt;Business Scorecard Manager (BSM)&lt;/A&gt;; with the upcoming Office 2007 release, this product will become a part of Microsoft Office PerformancePoint Server 2007.&amp;nbsp; The BSM team &lt;A href="http://blogs.msdn.com/bsm/default.aspx" mce_href="http://blogs.msdn.com/bsm/default.aspx"&gt;blog&lt;/A&gt;&amp;nbsp;has lots of great information about their product.&lt;/P&gt;
&lt;P&gt;Scorecards in general are interesting.&amp;nbsp; In just about any business, there are dozens, if not hundreds of data points to collect when trying to build an overall (or sub-overall &lt;IMG src="http://www.london54.com/blog_images/smile1.gif" mce_src="http://www.london54.com/blog_images/smile1.gif"&gt;) view of the business so somebody can make a decision.&amp;nbsp; One of my first projects when I joined Microsoft was to build a status collection and display web application for our QA team.&amp;nbsp; Team members would update the status of their test runs, and every week the managers would look at the overall status and decide on strategy.&amp;nbsp; That simple web site was in essence a score card.&amp;nbsp; Maintaining it was a pain, because different teams had different data formats and different preferences for updating their data.&amp;nbsp; Some didn’t want to use a web site, some did, etc.&lt;/P&gt;
&lt;P&gt;Gathering and displaying data from across many different teams and normalizing data formats is what Business Scorecard Manager does a really nice job of.&amp;nbsp; BSM takes KPI’s from various sources, including itself, and visualizes them in a consistent manner.&lt;/P&gt;
&lt;P&gt;Usually, BSM is shown in the context of business functions like sales and finance, but there is no reason not to use it for software development data as well.&lt;/P&gt;
&lt;P&gt;Let’s use the KPI’s from my earlier posts as an example.&amp;nbsp; Below is a screen shot of what one of them looks like inside the SQL Server 2005 KPI browser view.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image12 src="http://www.london54.com/blog_images/image12.png" border=0 mce_src="http://www.london54.com/blog_images/image12.png"&gt;&lt;/P&gt;
&lt;P&gt;The first step is to import our SQL Server 2005 KPIs’ into a format that BSM understands.&amp;nbsp; The &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=556e01a4-49a2-4a61-bec5-0260b42dcf1b&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=556e01a4-49a2-4a61-bec5-0260b42dcf1b&amp;amp;DisplayLang=en"&gt;KPIUtil&lt;/A&gt;&amp;nbsp;from Microsoft Downloads does exactly this.&amp;nbsp; The instructions for the tool are excellent; basically you install the sample indicators and run the tool to import your KPIs from SQL Server 2005.&amp;nbsp; The first step is necessary to bring in the indicators that SQL Server KPIs have access to.&lt;/P&gt;
&lt;P&gt;After running KPIUtil, we will have access to our &lt;STRONG&gt;LeadTime&lt;/STRONG&gt; KPI inside of Business Scorecard Manager.&amp;nbsp; I just used one of the example workspaces (SalesSummary) from Business Scorecard Manager to augment.&amp;nbsp; In a real project, you would probably want to create your own workspace from scratch.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image19 src="http://www.london54.com/blog_images/image19.png" border=0 mce_src="http://www.london54.com/blog_images/image19.png"&gt;&lt;/P&gt;
&lt;P&gt;A BSM scorecard can be published into many different forms.&amp;nbsp; One way is to publish the scorecard into Windows Sharepoint Services – BSM will automatically create, format and populate a WSS page for you.&amp;nbsp; Once published, this page will stay in sync with any changes that you might make to your scorecard.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Before adding our LeadTime KPI, the WSS page generated by the example Sales Summary score card looks like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image17 src="http://www.london54.com/blog_images/image17.png" border=0 mce_src="http://www.london54.com/blog_images/image17.png"&gt;&lt;/P&gt;
&lt;P&gt;Inserting a new KPI into the scorecard is pretty straightforward.&amp;nbsp; Objectives are used to organize data in your scorecard, so you might create an objective for tracking various KPIs for your software development.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image20 src="http://www.london54.com/blog_images/image20.png" border=1 mce_src="http://www.london54.com/blog_images/image20.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image21 src="http://www.london54.com/blog_images/image21.png" border=1 mce_src="http://www.london54.com/blog_images/image21.png"&gt;&lt;/P&gt;
&lt;P&gt;There are various aspects of an objective that I can’t do justice to, so I’ll just add the LeadTime KPI to the objective we just created.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image23 src="http://www.london54.com/blog_images/image23.png" border=1 mce_src="http://www.london54.com/blog_images/image23.png"&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image26 src="http://www.london54.com/blog_images/image26.png" border=1 mce_src="http://www.london54.com/blog_images/image26.png"&gt;&lt;/P&gt;
&lt;P&gt;Once we re-publish this scorecard, our WSS page is updated as well, and we see our new KPI, displayed pretty much the same way as we saw in the SQL Server 2005 browser view:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Image28 src="http://www.london54.com/blog_images/image28.png" border=0 mce_src="http://www.london54.com/blog_images/image28.png"&gt;&lt;/P&gt;
&lt;P&gt;I’m not sure that scorecarding is for everyone, but I think it might be more applicable than people think.&amp;nbsp; Whenever I walk through the hallways of our development team, or many others at Microsoft, I see monitors on the walls that show various charts and graphs tracking project progress.&amp;nbsp; Most of these systems are hand created and maintained.&amp;nbsp; I wonder if Business Scorecard Manager would be&amp;nbsp;a more efficient solution?&lt;/P&gt;
&lt;P&gt;In any case, I’m always on the look out for a technology that might make software development a little bit easier.&amp;nbsp; There is a lot of capabilities in the upcoming release of Office 2007, so I’m looking forward to doing more posts about that.&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=774494" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>Building a Virtual Kanban System with Team Foundation Server - Part 1</title><link>http://blogs.msdn.com/ericlee/archive/2006/09/11/building-a-virtual-kanban-system-with-team-foundation-server-part-1.aspx</link><pubDate>Mon, 11 Sep 2006 23:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:749867</guid><dc:creator>ericlee</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/749867.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=749867</wfw:commentRss><description>&lt;P&gt;Hey guys,&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.agilemanagement.net/" mce_href="http://www.agilemanagement.net/"&gt;David Anderson&lt;/A&gt; is someone that I’ve had the privilege of working with for the past couple of years.&amp;nbsp; One of the things that I’ve&amp;nbsp;found really interesting about his work is that he often takes practices from other industries and applies them to managing software development.&lt;/P&gt;
&lt;P&gt;One example of his is the idea of a &lt;A href="http://en.wikipedia.org/wiki/Kanban" mce_href="http://en.wikipedia.org/wiki/Kanban"&gt;Kanban System&lt;/A&gt;.&amp;nbsp; Many Japanese manufacturing companies have used this process with great success.&amp;nbsp; The basic idea is to control the amount of raw material in play.&amp;nbsp; Wikipedia has a great explanation of the system in general.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;“The Kanban system might be visualised as a "Three bin system" - one bin on the factory floor, one bin in the factory store and one bin at the Suppliers' store. The bins usually have a removeable card that contains the product details and other relevant information - the Kanban card. When the bin on the shop floor is empty, the Kanban card is removed and given to the store. The store then replaces the bin on the factory floor with a full bin which also contains a removeable Kanban card. The store then contacts the Supplier and indicates the need to replenish the Kanban card. The product also containing a Kanban card is delivered into the factory store completing the final step to the system. So it will never run out of product, providing of course, the cards are reliably collected from empty containers”&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;David Anderson has had a lot of success applying&amp;nbsp;the principles of a Kanban System to software development.&amp;nbsp; It remarkable how effective a relatively lightweight process like a Kanban System can be; his &lt;A href="http://www.agilemanagement.net/Articles/Papers/AndersonDumitriuTOCICO2005_Final_NoAnim.pdf" mce_href="http://www.agilemanagement.net/Articles/Papers/AndersonDumitriuTOCICO2005_Final_NoAnim.pdf"&gt;paper&lt;/A&gt;&amp;nbsp;describes&amp;nbsp;in detail the success of a Microsoft IT team.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I won’t do justice to the work so I’ll leave it to you to read the paper; what I wanted to explore was how one might implement a Kanban System with Team Foundation Server.&lt;/P&gt;
&lt;P&gt;As I mentioned in one of my earlier posts, I think there might be some really interesting integration between BizTalk Server and Team Foundation Server.&amp;nbsp; BizTalk becomes really useful when you have to make a bunch of things and people interact in a reasonable and consistent way; otherwise referred to as orchestration &lt;IMG src="http://www.london54.com/blog_images/smile1.gif" mce_src="http://www.london54.com/blog_images/smile1.gif"&gt;&lt;/P&gt;
&lt;P&gt;I’m new to BizTalk Server so I wanted to experiment with how it can be used in conjunction with Team Foundation Server.&amp;nbsp; I’m just scratching the surface of BizTalk so be warned, there might be easier/better ways to do things.&amp;nbsp; The full solution can be downloaded &lt;A href="http://www.london54.com/blog_images/kanban.zip" mce_href="http://www.london54.com/blog_images/kanban.zip"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;The Orchestration Designer integrates into Visual Studio 2005 and is a key part of BizTalk Server.&amp;nbsp; First, I’ll show you the orchestration as a whole; then we’ll dive down into the details.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Bts1 src="http://www.london54.com/blog_images/bts1_small4.jpg" border=0 mce_src="http://www.london54.com/blog_images/bts1_small4.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Let’s go through each step so we get a basic idea of what the orchestration looks like.&amp;nbsp; The number items below match the numbers in the diagram above.&amp;nbsp; &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The orchestration is activated when we get a message indicating that a work item is changed&lt;/LI&gt;
&lt;LI&gt;From a Kanban perspective, we only care about a work item that has changed if it is just been created, made active or closed.&amp;nbsp; We don’t care about any intermediate changes.&amp;nbsp; If this change matches that criteria, we are going to query Team Foundation Server to determine the number of active work items.&lt;/LI&gt;
&lt;LI&gt;If a new work item has been created, and our Kanban is full – i.e. there are more than a certain number of active work items – then we will have to put this work item in our back log.&lt;/LI&gt;
&lt;LI&gt;If a work item is being closed, and our Kanban has at least one open card – i.e. there are less than a certain number of active work items - then we will notify the customer that a free card is available.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;That’s all there is to our Kanban System example.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;But, you’ll notice that I left out a bunch of details – things like how do we determine the number of active work items, notify the customer, etc.&amp;nbsp; One advantage of using BizTalk Server is that there is a separate between logical and physical ports.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;A port in BizTalk Server is something you receive data from and/or send data to.&amp;nbsp; The data being sent or received is in the form of XML.&amp;nbsp; You have to define the structure of the XML immediately, but you can decide what the physical ports are later.&amp;nbsp; You change them as well.&amp;nbsp; So for now, we don’t have to worry about how we’ll get information about the number of work items in Team Foundation Server or how we notify our customer.&amp;nbsp; We know we have to do it,&amp;nbsp;we’ll figure out exactly how to do it later on.&lt;/P&gt;
&lt;P&gt;Now let’s look into the details of the orchestration.&amp;nbsp; First, let’s look at how the orchestration is activated.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Bts2 src="http://www.london54.com/blog_images/bts2_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/bts2_small.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1 – Port_WorkItemChanged Port&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We haven’t done it yet, but we will register for WorkItemChanged events with Team Foundation Server.&amp;nbsp; These event notifications will come into this port.&lt;/P&gt;
&lt;P&gt;The designer unfortunately does not allow you to change the width of things, so the name of this port is somewhat obscured.&amp;nbsp; The message we are waiting for is defined by an XML schema that we create.&amp;nbsp; Actually, strictly speaking, we can create the schema from scratch or reference an existing one defined in XSD, as a .NET or as a web service.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The structure of the message we are waiting for is very simpe and looks like:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Bts3 src="http://www.london54.com/blog_images/bts3_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/bts3_small.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Ideally, I would have liked to use the WorkItemChangedEvent that is delivered directly from Team Foundation Server’s event notification system.&amp;nbsp; But, the structure of that message makes it somewhat difficult to extract the information that I need from it.&amp;nbsp; For now, I took the easy way out and defined my own message structure that I’ll hyrdate.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2 – Receiving the message&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This is just a standard BizTalk Server thing – this receive is what activates our orchestration.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3 – Deciding if we are interested in this event&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We’re not interested every time a work item changes; the Expression shape in BizTalk Server allows us to define an expression to find only the ones we’re interested.&amp;nbsp; The expression behind this shape looks like:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Bts4 src="http://www.london54.com/blog_images/bts4_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/bts4_small.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The only changes we’re only interested in are the newly created work items, the ones that get closed, and the ones that are reactivated.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;When we have a work item in any of those states, we’ll treat them differently based on the number of active work items that we have.&amp;nbsp; The section of our orchestration below is what we use to count up our active work items.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Bts5 src="http://www.london54.com/blog_images/bts5_small1.jpg" border=0 mce_src="http://www.london54.com/blog_images/bts5_small1.jpg"&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1 – Counting Work Items &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We have a web service that queries Team Foundation Server and returns the number of Work Items in the active state.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2 – Web Service Port&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;BizTalk Server setups up a request/response port for you automatically when you use a port from a web reference.&lt;/P&gt;
&lt;P&gt;Once we have the number of active work items, we will combine that information along with the state of the work item.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;IMG alt=Bts7 src="http://www.london54.com/blog_images/bts7_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/bts7_small.jpg"&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If the work item is active (either because it is newly created, or because it’s state was set that way), and our Kanban is full, we will ‘punt’ the work item.&amp;nbsp; A Kanban is full when there are no open slots or cards to represent the work.&amp;nbsp; This enables us to control the amount of work the development team has to worry about.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Bts8 src="http://www.london54.com/blog_images/bts8_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/bts8_small.jpg"&gt;&lt;/P&gt;
&lt;P&gt;We ‘punt’ a work item by calling another method on our web service port.&amp;nbsp; What that web service does is change the state of our Work Item to ‘BackLog’.&amp;nbsp; This is the end of the orchestration for this branch.&lt;/P&gt;
&lt;P&gt;If the work item is closed and our Kanban has an empty slot, then we will notify our team of a free Kanban card.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Bts9 src="http://www.london54.com/blog_images/bts9_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/bts9_small.jpg"&gt;&lt;/P&gt;
&lt;P&gt;This is the end of the orchestration for this branch as well.&lt;/P&gt;
&lt;P&gt;So, what we have in our orchestration as a whole is&amp;nbsp;the basic implementation of a Kanban system.&amp;nbsp; To summarize, when a work item is created or re-activated, we check to see if we have any open kanban cards.&amp;nbsp; If we do, that’s fine we don’t need to do anything.&amp;nbsp; But if we don’t, then we will assign that work item to the backlog.&amp;nbsp; Every time a work item is closed, we check to see if we have any open kanban cards.&amp;nbsp; If we do, then we send a notification to our team to let them know that a card is open.&lt;/P&gt;
&lt;P&gt;Those are the basics of the system – I’ll do a follow up post that delves into some of the details about how the ports are bound and show some examples of the orchestration actually executing.&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=749867" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>Quick post - 2 really cool features about Work Items</title><link>http://blogs.msdn.com/ericlee/archive/2006/09/05/quick-post-2-really-cool-features-about-work-items.aspx</link><pubDate>Wed, 06 Sep 2006 06:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:742175</guid><dc:creator>ericlee</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/742175.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=742175</wfw:commentRss><description>&lt;P&gt;I’ve just returned from Tech Ed Australia and New Zealand and I’ve got lots to blog about that. &lt;/P&gt;
&lt;P&gt;But before I do that, 2 features about Work Items caught my eye tonight that I really wanted to share.&lt;/P&gt;
&lt;P&gt;First, you can copy a single work item to another Team Project by simply right-clicking on it.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=CreateCopy src="http://www.london54.com/blog_images/CreateCopy.png" border=0 mce_src="http://www.london54.com/blog_images/CreateCopy.png"&gt;&lt;/P&gt;
&lt;P&gt;When you choose &lt;STRONG&gt;Create Copy of Work Item…&lt;/STRONG&gt;&amp;nbsp;you get a choice of what Team Project and Work Item Type you like to make the copy to.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Copy src="http://www.london54.com/blog_images/Copy.png" border=0 mce_src="http://www.london54.com/blog_images/Copy.png"&gt;&lt;/P&gt;
&lt;P&gt;Neat stuff!&amp;nbsp; I am perpetually working on my tool for copying work items en mass, and in all honesty I had overlooked this feature before.&amp;nbsp; Now I wonder if this is exposed in the API somewhere &lt;IMG src="http://www.london54.com/blog_images/smile1.gif" mce_src="http://www.london54.com/blog_images/smile1.gif"&gt;&amp;nbsp; I don’t think it is, but maybe it is something we can do in the future.&lt;/P&gt;
&lt;P&gt;Another neat feature is the way process guidance is integrated – let’s say that you’re wondering what the lifecycle of a given work item type is.&amp;nbsp; For example, do bugs go from active to resolved to closed; or active to approved to resolved to close?&amp;nbsp; If you’re ever wondering, just right-click on the work item and view the process template.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Guidance src="http://www.london54.com/blog_images/Guidance.png" border=0 mce_src="http://www.london54.com/blog_images/Guidance.png"&gt;&lt;/P&gt;
&lt;P&gt;This will bring up the process template at exactly the place that is pertinent at the moment.&amp;nbsp; One can easily view every related to this work item type in the guidance.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=MSF src="http://www.london54.com/blog_images/MSF.png" border=0 mce_src="http://www.london54.com/blog_images/MSF.png"&gt;&lt;/P&gt;
&lt;P&gt;If you customize your process guidance, then you can be taken to information that pertinent to your organization as well.&lt;/P&gt;
&lt;P&gt;Lately I’ve been trying to drill into the depths of work item tracking and these 2 tips caught my eye so I wanted to share.&amp;nbsp; It never ceases to amaze me how dense of a product VSTS 1.0 is.&lt;/P&gt;
&lt;P&gt;Anyways, hope you’re doing well, look for a Tech Ed wrap up post from me soon.&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=742175" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>You meet the nicest people on a Honda...</title><link>http://blogs.msdn.com/ericlee/archive/2006/08/13/you-meet-the-nicest-people-on-a-honda.aspx</link><pubDate>Mon, 14 Aug 2006 05:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:698969</guid><dc:creator>ericlee</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/698969.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=698969</wfw:commentRss><description>&lt;P align=left&gt;When I moved to Seattle, one of the most enjoyable things I learned how to do was ride a motorcycle.&amp;nbsp; I really enjoyed the open air, speed and thrill of riding.&lt;/P&gt;
&lt;P align=left&gt;Both of the bikes that I’ve owned – a Kawasaki Ninja 500 and a Ducati Monster 750 – were very reliable and never caused me any problems; a good thing, since I don’t&amp;nbsp;have any mechanical skills to speak of.&lt;/P&gt;
&lt;P align=left&gt;The only thing I had to worry about was learning how to ride.&amp;nbsp; And even that wasn’t very hard – in Washington State, there is a Motorcycle Safety Foundation class that is jointly sponsored by the state and several of the major motorcycle manufacturers – Honda, Kawasaki, Suzuki, etc.&amp;nbsp; The class was just $50 and included 1/2 day of classes and 2 full days of riding.&amp;nbsp; &lt;/P&gt;
&lt;P align=left&gt;Just about everything was provided for us.&amp;nbsp;&amp;nbsp;A few weeks before the class, everyone that was registered for the class received vouchers in the mail entitling us to 20% off helmets and gloves at most of the local motorcycle dealerships.&amp;nbsp; &lt;/P&gt;
&lt;P align=left&gt;For those who didn’t buy their own gear, there was a reasonable selection of helmets and gloves to use onsite.&amp;nbsp; We had brand-new, friendly, 250cc motorcycles to learn on as well.&amp;nbsp; These bikes were provided by the&amp;nbsp;various manufacturers that sponsor the course.&amp;nbsp; Generally speaking, we had our choice of bikes that represented the major&amp;nbsp;categories of motorcycles – cruisers, standards and dirt-bikes.&lt;/P&gt;
&lt;P align=left&gt;The last-half of the course was our endorsement test.&amp;nbsp; Our instructors became our evaluators&amp;nbsp;and one-by-one we did the test.&amp;nbsp; My class had 30 or so people and everyone passed.&amp;nbsp; Many, like myself, had had never ridden any motorized 2–wheelers in their lives before.&lt;/P&gt;
&lt;P align=left&gt;After 3 days, the market for motorcycles in Washington State grew by 30 &lt;IMG src="http://www.london54.com/blog_images/smile1.gif" mce_src="http://www.london54.com/blog_images/smile1.gif"&gt;&lt;/P&gt;
&lt;P align=left&gt;At the time, I took the class a bit for granted.&amp;nbsp; However, had I wanted to learn how to ride a motorcycle in the 1950’s or early 1960’s, things would have been very different.&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG alt=Honda src="http://www.london54.com/blog_images/honda.jpg" border=0 mce_src="http://www.london54.com/blog_images/honda.jpg"&gt;&lt;/P&gt;
&lt;P align=left&gt;‘You meet the nicest people in a Honda’ is a popular ad that Honda ran in the 1960’s to promote their new motorcycle, the ‘Super Cub’.&amp;nbsp; This ad campaign and the motorcycle represented an important turning point in the motorcycle industry in the United States.&lt;/P&gt;
&lt;P align=left&gt;At the time, the perception around motorcycles in the United States wasn’t very positive.&amp;nbsp; Generally speaking, motorcycle-ists were considered rebels, outlaws and members on the fringe of society.&amp;nbsp; Also, maybe more importantly, the motorcycles at the time were not very attractive for the mainstream.&amp;nbsp; Motorcycles of that era were heavy, difficult to ride and unreliable.&amp;nbsp; You had to have a good understanding of the workings of a motorcycle to perform the near constant maintenance that the bikes of that day required.&lt;/P&gt;
&lt;P align=left&gt;Honda’s ‘Super Cub’ changed all of this.&amp;nbsp; It was small, friendly-looking and easy to ride.&amp;nbsp; And it’s engine was nearly maintenance free.&amp;nbsp; The ad campaign that introduced this motorcycle focused on parents, young couples and professionals riding the ‘Super Cub’.&amp;nbsp; &lt;/P&gt;
&lt;P align=left&gt;What Honda did was pretty impressive.&amp;nbsp; They identified an appealing thing that a small, niche segment of the market was doing, and, more importantly, they identified what was keeping this niche thing from being popular in the mainstream United States.&amp;nbsp; To name a few examples, motorcycles in the United States at the time:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV align=left&gt;suffered from a negative image&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV align=left&gt;required its customers to have indepth mechnical knowledge&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV align=left&gt;was thought to have little practical value&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P align=left&gt;To mitigate these issues, Honda did 2 things.&amp;nbsp; First, they built a great product - a fun, easy to ride, bullet-proof motorcycle that could accomodate 2 people easily; this helped increase the broad appeal of the motorcycle.&amp;nbsp; Second,&amp;nbsp;Honda built a friendly ad-campaign to start changing the negative perception of motorcycling in general.&amp;nbsp;&lt;/P&gt;
&lt;P align=left&gt;The rest is history, the ‘Super Cub’ sold 200K units in its first year, more than all the other motorcycle manufacturers combined that year and went on to sell 50M units in its lifetime.&amp;nbsp;&amp;nbsp;The ‘Super Cub’&amp;nbsp;is largely remembered as being the motorcycle that brought motorcyling into the mainstream US market.&lt;/P&gt;
&lt;P align=left&gt;So what does this have to do with software? Or Application Lifecycle Management?&amp;nbsp; Well, my hypothesis is that there is an opportunity to bring what customers who are very, very&amp;nbsp;early adopters have been doing into the mainstream.&lt;/P&gt;
&lt;P align=left&gt;When we launched Visual Studio 2005 last year, we started talking about something called the Application Platform, which was the combination of BizTalk Server (BTS), Visual Studio and SQL Server.&lt;/P&gt;
&lt;P align=left&gt;My hypothesis is that the Application Platform represents what a few of our very early adopter customers have been doing for&amp;nbsp;quite some time.&amp;nbsp; &lt;/P&gt;
&lt;P align=left&gt;For example, BTS can do many things, but one of the things it does very well is provide a way to implement complex workflows and flow of data.&amp;nbsp; &lt;/P&gt;
&lt;P align=left&gt;From a software &lt;STRONG&gt;development &lt;/STRONG&gt;standpoint, BTS is pretty useful.&amp;nbsp; There are lots and lots of complex human workflows that take place in software development – code reviews, buddy builds, check-in approvals are just a few examples.&amp;nbsp; Why not take advantage of a graphical designer to literally orchstrate these instead of relying on word of mouth or documentation?&amp;nbsp; SQL Server is pretty useful as well – I’ve gotten a lot of interest around building Key Performance Indicators from software development data as well as applying data mining to it.&amp;nbsp; Whether you are doing either or both, the great thing about having a data warehouse for your software development is that you can use it in so many other places.&amp;nbsp; Project Server, Business Scorecard Manager and Excel are all clients that can make very sophisticated use of a data warehouse.&lt;/P&gt;
&lt;P align=left&gt;If your organization happens to be using BTS and SQL Server for more traditional scenarios, you all of a sudden have a single place for to implement all of your processes – either business-related or software development-related, and you have a common format, a data warehouse, to represent all of your data – either business-related or software development-related.&lt;/P&gt;
&lt;P align=left&gt;My hunch is that &lt;EM&gt;some &lt;/EM&gt;customers have been able to do this with BTS 2004, VS 2003 and SQL Server 2000 products, but it hasn’t been easy.&amp;nbsp; There certainly are a lot of hurdles that prevent this type of solution from being accepted by the mainstream.&lt;/P&gt;
&lt;P align=left&gt;With the Application Platform bringing together SQL Server 2005, BTS 2006 and VS 2005, I think we are taking&amp;nbsp;a step towards making a solution like this attractive for the mainstream. &lt;/P&gt;
&lt;P align=left&gt;For example, BTS 2006 has a bunch of new adapters, but 2 that are really interesting for software development are the email and sharepoint adapters.&amp;nbsp; A BTS adapter allows BTS to accept messages from whatever is being ‘adapted’.&amp;nbsp;&amp;nbsp;With these 2 new adapters, BTS can&amp;nbsp;treat email and sharepoint (SPS and WSS)&amp;nbsp;documents as though they&amp;nbsp;were XML documents and use them in&amp;nbsp;BTS orchestrations.&amp;nbsp; SOAP is another BTS adapter.&lt;/P&gt;
&lt;P align=left&gt;Since&amp;nbsp;Team&amp;nbsp;Foundation Server uses email or SOAP for its notifications and automatically creates a WSS sharepoint site for your projects, there is a natural way to integrate with BTS.&amp;nbsp; Team Foundation Server doesn’t have a great workflow story right now, but BTS is all about complex workflows and orchestrations.&amp;nbsp; It’s not hard to imagine&amp;nbsp;a TFS event notification that activates a BTS orchestration which runs its course and reports its results by creating a new document on a Team Project’s portal.&amp;nbsp; I’m sure there are tons and tons of other possiblities.&lt;/P&gt;
&lt;P align=left&gt;Another example in terms of making this solution more mainstream is the integration with the Visual Studio client – now without ever leaving the friendly confines of the Visual Studio shell, you can:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;write C++ code&lt;/LI&gt;
&lt;LI&gt;design a class in C#&lt;/LI&gt;
&lt;LI&gt;design a multi-tier SOA application&lt;/LI&gt;
&lt;LI&gt;kick off a load test&lt;/LI&gt;
&lt;LI&gt;create a KPI to report your results&lt;/LI&gt;
&lt;LI&gt;data mine to find interesting associations&lt;/LI&gt;
&lt;LI&gt;design your business process&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;If you know the previous generation tools, then this integration maybe isn’t as important.&amp;nbsp; But if you’re new to an Application Platform-style solution, then centering everything around the familiar – Visual Studio – can really ease the learning curve.&lt;/P&gt;
&lt;P&gt;Anyways, just some thoughts on a Sunday evening.&amp;nbsp; The more I dig into SQL Server 2005 and BizTalk Server 2006, the more excited I become about how to apply those technologies to software development.&amp;nbsp; I don’t think we have a ‘Super Cub’ yet, but it’s getting there.&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;
&lt;P align=left mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=698969" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>When to use Team Projects</title><link>http://blogs.msdn.com/ericlee/archive/2006/08/09/when-to-use-team-projects.aspx</link><pubDate>Thu, 10 Aug 2006 03:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:693849</guid><dc:creator>ericlee</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/693849.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=693849</wfw:commentRss><description>&lt;P&gt;Team Projects have turned out to a more confusing feature than was intended in Visual Studio Team System.&amp;nbsp; We are in the process of building some guidance for when to create them, but in the meantime, I thought I would shed some light on how we use them internally at Microsoft.&lt;/P&gt;
&lt;P&gt;Team Projects were intended to represent the largest unit of work possible in your organization.&amp;nbsp; For us at Microsoft, that means a product or prodct line.&amp;nbsp;&amp;nbsp;‘Visual Studio&amp;nbsp;2005’&amp;nbsp;for example, is a product line that we represent with a single Team Project.&lt;/P&gt;
&lt;P&gt;Visual Studio 2005 is made up of a number of products, features and technologies.&amp;nbsp; For example, ASP.NET, Team System and the Common Language Runtime are all part of the Visual Studio 2005 product line.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;To keep things organized, we use ‘Areas’ extensively in our single Team Project.&amp;nbsp; Permissions can be set on areas to restrict access to various parts of a given Team Project; I’ll do a video on this shortly.&lt;/P&gt;
&lt;P&gt;Here is how are ‘Areas’ are laid out:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.london54.com/blog_images/dogfood_areas.png" mce_href="http://www.london54.com/blog_images/dogfood_areas.png"&gt;&lt;IMG alt=Dogfood_areas src="http://www.london54.com/blog_images/dogfood_areas.png" border=0 mce_src="http://www.london54.com/blog_images/dogfood_areas.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;‘Areas’ are used all the way down to the feature level; for example, the Team Foundation Server Version Control team uses an Area to define each SCM command:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Dogfood_areas2 src="http://www.london54.com/blog_images/dogfood_areas2.png" border=0 mce_src="http://www.london54.com/blog_images/dogfood_areas2.png"&gt;&lt;/P&gt;
&lt;P&gt;‘Areas’ are something we’ll be talking a lot more about in upcoming presentations and documentation.&amp;nbsp; They are a really useful way of categorizing within a Team Project.&amp;nbsp; Hopefully showing you how we categorize things within our teams helps a bit.&amp;nbsp; More detailed guidance is on its way.&lt;/P&gt;
&lt;P&gt;Thanks,&lt;/P&gt;
&lt;P&gt;Eric.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=693849" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>What does a Team Foundation Server CAL look like?</title><link>http://blogs.msdn.com/ericlee/archive/2006/08/09/what-does-a-team-foundation-server-cal-look-like.aspx</link><pubDate>Thu, 10 Aug 2006 01:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:693772</guid><dc:creator>ericlee</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/693772.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=693772</wfw:commentRss><description>&lt;P&gt;Much has been made about when and where you need a Team Foundation Server CAL; but until now, I don’t think anyone has talked about what one looks like.&lt;/P&gt;
&lt;P&gt;In my 8 or so years at Microsoft, I’ve never actually seen a CAL of any kind.&amp;nbsp; So, a few weeks ago, I decided to order a Team Foundation Server CAL for myself.&lt;/P&gt;
&lt;P&gt;Today, a card board box arrived in my office and it was filled with Team Foundation Server CALs and the mystery was solved &lt;IMG src="http://www.london54.com/blog_images/smile1.gif" mce_src="http://www.london54.com/blog_images/smile1.gif"&gt;&lt;/P&gt;
&lt;P&gt;Here is what&amp;nbsp;a Team Foundation Server CAL looks like (incidentally, here is what I look like as well):&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=IMG_2519 src="http://www.london54.com/blog_images/IMG_2519_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/IMG_2519_small.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The actual CAL, ‘certificate’ if you will is quite detailed – there are lots of holographic images, etching and shiny metal-looking material on it.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=IMG_2521 src="http://www.london54.com/blog_images/IMG_2521_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/IMG_2521_small.jpg"&gt;&lt;/P&gt;
&lt;P&gt;As it turns out, a Team Foundation Server CAL is much thinner than I am.&amp;nbsp; I’m in the process of losing some weight, so stay tuned, I’ll be sevlte like our CAL in no time.&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=IMG_2520 src="http://www.london54.com/blog_images/IMG_2520_small.jpg" border=0 mce_src="http://www.london54.com/blog_images/IMG_2520_small.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Anyways, just wanted to share, take care!&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=693772" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Me/default.aspx">Me</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>Sharing files in Team Foundation Server</title><link>http://blogs.msdn.com/ericlee/archive/2006/07/20/sharing-files-in-team-foundation-server.aspx</link><pubDate>Fri, 21 Jul 2006 03:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:673322</guid><dc:creator>ericlee</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/673322.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=673322</wfw:commentRss><description>&lt;P&gt;Hey guys,&lt;/P&gt;
&lt;P&gt;As you probably know, sharing is not a feature that is supported by Team Foundation Server.&amp;nbsp; &lt;A href="http://blogs.msdn.com/buckh/" mce_href="http://blogs.msdn.com/buckh/"&gt;Buck Hodges’&lt;/A&gt; and &lt;A href="http://blogs.msdn.com/bharry/" mce_href="http://blogs.msdn.com/bharry/"&gt;Brian Harry&lt;/A&gt; have both made some excellent &lt;A href="http://blogs.msdn.com/buckh/archive/2004/06/14/155403.aspx" mce_href="http://blogs.msdn.com/buckh/archive/2004/06/14/155403.aspx"&gt;posts&lt;/A&gt; about this.&lt;/P&gt;
&lt;P&gt;Sharing files has some advantages and disadvantages.&amp;nbsp; It is nice to be able to have&amp;nbsp;a common file that is referenced throughout your code base.&amp;nbsp; That shared file might contain a version number, or some useful constants.&amp;nbsp; Sharing is pretty common in web development scenarios I believe as well.&lt;/P&gt;
&lt;P&gt;The tricky thing about sharing a single file across multiple projects is that by default Visual Studio will make copies of any existing files that you try to add to your project.&amp;nbsp; That’s good for isolating yourself&amp;nbsp;from breaking changes, but not so good if you’re trying to share a single copy of a file.&lt;/P&gt;
&lt;P&gt;I stumbled across a feature in Visual Studio last night that makes this type of sharing pretty easy to do.&amp;nbsp; When you have a project open in Visual Studio and you want to add an existing file, you can use the &lt;STRONG&gt;Add Existing Item &lt;/STRONG&gt;context menu option.&amp;nbsp; In the resulting dialog you can navigate to a file and add it to your project.&amp;nbsp; Visual Studio, by default, will create a copy of that file and put it in your project folder.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;However, there is an additional option to add just a reference to that file as illustrated below:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Addaslink src="http://www.london54.com/blog_images/addaslink.png" border=0 mce_src="http://www.london54.com/blog_images/addaslink.png"&gt;&lt;/P&gt;
&lt;P&gt;This &lt;STRONG&gt;Add As Link&lt;/STRONG&gt; option enables you to setup single-file sharing with Team Foundation Server.&amp;nbsp; If you add links to a shared file from several different projects, each of&amp;nbsp;those projects will see any change you make to that shared file immediately.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Again, this type of sharing is not always the right thing to do, but it is an option.&amp;nbsp; I recorded a short video that illlustrates how to combine this feature with Team Foundation Server to enable sharing.&lt;/P&gt;
&lt;P&gt;&lt;EMBED src=http://www.youtube.com/v/7JUaIkcP0Mg width=425 height=350 type=application/x-shockwave-flash&gt;&lt;/EMBED&gt;&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=673322" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>Thoughts on David Lempher's brainstorm about Impact Analysis</title><link>http://blogs.msdn.com/ericlee/archive/2006/07/19/thoughts-on-david-lempher-s-brainstorm-about-impact-analysis.aspx</link><pubDate>Wed, 19 Jul 2006 21:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:671673</guid><dc:creator>ericlee</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/671673.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=671673</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/robcaron" mce_href="http://blogs.msdn.com/robcaron"&gt;Rob Caron&lt;/A&gt;&amp;nbsp;pointed me to &lt;A href="http://blogs.msdn.com/davidlem/" mce_href="http://blogs.msdn.com/davidlem/"&gt;David Lempher’s&lt;/A&gt;&amp;nbsp;recent blog post about possibly doing impact analysis with Team Foundation Server.&amp;nbsp; It’s a funny coincidence, because &lt;A href="http://www.bogdancrivat.net/" mce_href="http://www.bogdancrivat.net/"&gt;Bogdan Crivat&lt;/A&gt; and I were brainstorming about how we can take better advantage of the &lt;A href="http://www.sqlserverdatamining.com/DMCommunity/" mce_href="http://www.sqlserverdatamining.com/DMCommunity/"&gt;data mining&lt;/A&gt; in SQL Server 2005.&lt;/P&gt;
&lt;P&gt;Data mining with SQL Server 2005 involves applying one of several algorithms to your data to pull out information that one cannot deduce from casual observation.&amp;nbsp; There are several algorithms that I think would lend themselves to software development.&lt;/P&gt;
&lt;P&gt;SQL Server 2005 provides the following algorithms that you can use for data mining:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Microsoft Clustering&lt;/LI&gt;
&lt;LI&gt;Microsoft Association Rules&lt;/LI&gt;
&lt;LI&gt;Microsoft Decision Trees&lt;/LI&gt;
&lt;LI&gt;Microsoft Linear Regression&lt;/LI&gt;
&lt;LI&gt;Microsoft Logistic Regression&lt;/LI&gt;
&lt;LI&gt;Microsoft Naive Bayes&lt;/LI&gt;
&lt;LI&gt;Microsoft Neural Network&lt;/LI&gt;
&lt;LI&gt;Microsoft Sequence Clustering&lt;/LI&gt;
&lt;LI&gt;Microsoft Time Series&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The Microsoft Assocation Rules algorithm is used for doing what is known as market basket analysis.&amp;nbsp; The canonical example of market basket analysis is a grocery shopping cart – market basket analysis provides insight into questions like: ‘when people buy diapers, what else are they buying?’.&amp;nbsp; One answer to that question surprisingly is beer; I guess dads must get sent out a lot to buy diapers so they pick up a little treat for themselves &lt;IMG src="http://www.london54.com/blog_images/smile1.gif" mce_src="http://www.london54.com/blog_images/smile1.gif"&gt;&amp;nbsp; Grocery stores use this information to coordinate their promotions – when diapers go on sale, don’t put beer on sale as well, since it is likely to get bought anyway.&lt;/P&gt;
&lt;P&gt;So how does this relate to software development?&amp;nbsp; Generally speaking, the Microsoft Association Rules builds rules that can be used to predict the presence of an item based on other items in a transaction.&amp;nbsp; A transaction in this case could be the check-in that fixes a bug.&amp;nbsp; What files are being included?&amp;nbsp; If file foo.cs is being fixed as part of a bug, are there other files that are likely to be included?&amp;nbsp; This could help with impact analysis.&amp;nbsp; Imagine a check-in policy that looks at the files in your change set and tries to predict what else might be there, or should be there.&amp;nbsp; That could help you answer questions about ‘what else get affected if I touch this file?’&lt;/P&gt;
&lt;P&gt;Another interesting algorithm to apply is the Microsoft Clustering algorithm.&amp;nbsp; This algorithm creates clusters of artifacts that share similar characteristics.&amp;nbsp; The canonical example of this algorithm in use is in the retail industry.&amp;nbsp; The question to answer might be, ‘in my population of customers, who is buying bicycles?’&amp;nbsp; Applying a clustering algorithm to this data might show that customers who buy bicycles tend to live in the northwest, are male and between the ages of 25–30; this is just an example of course.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Applied to software development, clustering might be used to pull out source files that happen to share similar characteristics.&amp;nbsp; Maybe it is because they are the ones always being fixed?&amp;nbsp; One could implement impact analysis by looking at whether a file that is about to be changed is part of one of these clusters.&lt;/P&gt;
&lt;P&gt;Data mining is also commonly used to produce &lt;A href="http://msdn2.microsoft.com/en-us/library/ms175428.aspx#BKMK_Profit_Chart" mce_href="http://msdn2.microsoft.com/en-us/library/ms175428.aspx#BKMK_Profit_Chart"&gt;Profit Charts&lt;/A&gt;&amp;nbsp;to help direct-marketers.&amp;nbsp; The canonical scenario is a direct mail campaign.&amp;nbsp; It costs something to send a mailer out to a customer, so businesses want to set a limit on how many they send to reduce their cost.&amp;nbsp; On the other hand, the more mailers they send, the more customers they contact, and the more profit they stand to make.&lt;/P&gt;
&lt;P&gt;The crux of the problem is how to find a happy balance.&amp;nbsp; Data mining helps by creating profit charts.&amp;nbsp; Profit charts work hand in hand with &lt;A href="http://profit%20charts%20work%20hand%20in%20hand%20with%20lift%20charts/" mce_href="http://profit%20charts%20work%20hand%20in%20hand%20with%20lift%20charts/"&gt;lift charts&lt;/A&gt;.&amp;nbsp; Lift charts&amp;nbsp;are used to illustrate the accuracy of a prediction.&amp;nbsp; A prediction in a direct mail campaign might be whether the customer responds or not.&amp;nbsp; The value of the prediction will be ‘yes they will respond’, or ‘no they will not respond’.&lt;/P&gt;
&lt;P&gt;The accuracy of the prediction depends on the attributes of the customers in the population.&amp;nbsp; Maybe there are some customers who have attributes that strongly favor a prediction, one way or another.&amp;nbsp; Maybe there are other customers who have attributes that make an accurate prediction very hard to come by.&lt;/P&gt;
&lt;P&gt;Quoting from the MSDN &lt;A href="http://msdn2.microsoft.com/en-us/library/ms175428.aspx#BKMK_Lift_Chart" mce_href="http://msdn2.microsoft.com/en-us/library/ms175428.aspx#BKMK_Lift_Chart"&gt;help&lt;/A&gt;, the input into a profit chart is:&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Population&lt;/B&gt; &lt;/P&gt;
&lt;DL&gt;
&lt;DD&gt;
&lt;P&gt;The number of cases in the dataset that is being used to create the lift chart. For example, the number of potential customers.&lt;/P&gt;&lt;/DD&gt;&lt;/DL&gt;
&lt;DL&gt;
&lt;DT&gt;&lt;B&gt;Fixed Cost&lt;/B&gt; 
&lt;DD&gt;
&lt;P&gt;The fixed cost that is associated with the business problem. If this were for a targeted mailing solution, the cost would not depend on variables such as the number of telephone calls made or the number of promotional mailings sent.&lt;/P&gt;&lt;/DD&gt;&lt;/DL&gt;
&lt;DL&gt;
&lt;DT&gt;&lt;B&gt;Individual Cost&lt;/B&gt; 
&lt;DD&gt;
&lt;P&gt;Costs that are in addition to the fixed cost, that can be associated with each customer contact. For example, promotional mailings or telephone calls.&lt;/P&gt;&lt;/DD&gt;&lt;/DL&gt;
&lt;DL&gt;
&lt;DT&gt;&lt;B&gt;Revenue Per Individual&lt;/B&gt; 
&lt;DD&gt;
&lt;P&gt;The amount of revenue that is associated with each successful sale.”&lt;/P&gt;&lt;/DD&gt;&lt;/DL&gt;
&lt;P&gt;A typical profit chart shows an increase in profits up to a point, after which profits decrease as more of the population is contacted.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;For example, if the peak of the profit curve is at 55&amp;nbsp;percent of the population and the associated predict probability is 20&amp;nbsp;percent, this indicates that to achieve maximum profits you should only contact those customers whose response is predicted with a 20&amp;nbsp;percent or greater chance.&lt;/P&gt;
&lt;P&gt;There may be an application for profit charts in software development.&amp;nbsp; Bogdan and his team have done some experiments on predicting the outcome of a bug.&amp;nbsp; For example, will the outcome be actionable (i.e. fixed) or will it be non-actionable (i.e. duplicate, not-repro).&amp;nbsp; When a schedule gets tight, maybe it makes sense to use a profit chart to only work on bugs whose outcome can be predicted with a 20% or greater accuracy?&lt;/P&gt;
&lt;P&gt;Anyways, just some thoughts on data mining and Team Foundation Server.&amp;nbsp; I think we are just touching the surface on what can be done here.&amp;nbsp; I would suggest poking around on the &lt;A href="http://www.sqlserverdatamining.com/" mce_href="http://www.sqlserverdatamining.com/"&gt;SQL Server Data Mining&lt;/A&gt; community site to learn more.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Over the next few weeks, I’ll be doing a few more posts on data mining and Team Foundation Server.&amp;nbsp; Exploring ways of doing impact analysis might be a great question to start with.&lt;/P&gt;
&lt;P&gt;David, in case you’re reading, I’ll see you in Australia in a few weeks, looking forward to it!&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=671673" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>More on the Trend Calculation</title><link>http://blogs.msdn.com/ericlee/archive/2006/07/19/more-on-the-trend-calculation.aspx</link><pubDate>Wed, 19 Jul 2006 18:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:671497</guid><dc:creator>ericlee</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/671497.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=671497</wfw:commentRss><description>&lt;P&gt;One of the most useful aspects of the KPI is the ability to report a trend – that is, the value of a KPI compared to its value in the past.&amp;nbsp; This is a really useful way to determine whether you are making progress or not.&lt;/P&gt;
&lt;P&gt;I had a chance to meet with Bogdan Crivat – a friend of mine from when we worked together on Visual C++ – and a couple of his colleagues on the SQL Server Analysis Team.&amp;nbsp; They really helped me understand a little bit more about how time dimensions worked.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Below is a video that touches on how time dimensions are applied to our Code Coverage KPI.&amp;nbsp; &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.youtube.com/watch?v=mU-QhBsDOCU" mce_href="http://www.youtube.com/watch?v=mU-QhBsDOCU"&gt;Reporting the Trend&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The MDX query and results from the video are shown below:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Codecoverage_kpi_trend1 src="http://www.london54.com/blog_images/codecoverage_kpi_trend1.png" border=0 mce_src="http://www.london54.com/blog_images/codecoverage_kpi_trend1.png"&gt;&lt;/P&gt;
&lt;P&gt;MDX results:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt=Codecoverage_kpi_trend2 src="http://www.london54.com/blog_images/codecoverage_kpi_trend2.png" border=0 mce_src="http://www.london54.com/blog_images/codecoverage_kpi_trend2.png"&gt;&lt;/P&gt;
&lt;P&gt;Since we don’t have any previous weeks of data for our code coverage, our KPI reports an upwards trend even with a measly 1.36% of code coverage.&amp;nbsp; As our project matures and more code coverage data is published from our tests, this trend will become more meaningful.&lt;/P&gt;
&lt;P&gt;Another thing that came out of my conversation with Bogdan is some more insight into how to data mine VSTS data.&amp;nbsp; Look for another post on this shortly.&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;Eric.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=671497" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item><item><title>Just a quick post about being more specific about what data you collect ...</title><link>http://blogs.msdn.com/ericlee/archive/2004/07/02/just-a-quick-post-about-being-more-specific-about-what-data-you-collect.aspx</link><pubDate>Fri, 02 Jul 2004 22:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:172042</guid><dc:creator>ericlee</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/ericlee/comments/172042.aspx</comments><wfw:commentRss>http://blogs.msdn.com/ericlee/commentrss.aspx?PostID=172042</wfw:commentRss><description>&lt;P&gt;The Performance Tools are an integrated part of Visual Studio Team System, but they are also exposed as command line tools.&lt;/P&gt;
&lt;P&gt;One of these tools - vsinstr.exe is used to insert timing probes into your binary.&amp;nbsp; These probes report information to us that we use to gather performance-related data about your functions.&lt;/P&gt;
&lt;P&gt;By default, vsinstr.exe will instrument all of the methods in all of the classes for a given assembly. This may not always be what you want to do.&lt;/P&gt;
&lt;P&gt;vinstr.exe has a /include flag that allows you to specify only the functions that you want to include in your data collection. &lt;/P&gt;
&lt;P&gt;/include can be specified any number of times and uses a syntax of:&lt;/P&gt;&lt;PRE&gt;        /include:[namespace].&amp;lt;class name&amp;gt;::&amp;lt;method name&amp;gt;
&lt;/PRE&gt;
&lt;P&gt;You can of course specify nested namespaces - we currently have a bug where we don't handle nested classes correctly.&lt;/P&gt;
&lt;P&gt;Once you have instrumented your binary with /include, you can collect data by launching your Performance Session using VS or manually executing your application.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=172042" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/ericlee/archive/tags/Visual+Studio+Team+System/default.aspx">Visual Studio Team System</category></item></channel></rss>