{"id":91751,"date":"2015-08-24T07:00:00","date_gmt":"2015-08-24T21:00:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/oldnewthing\/20150824-00\/?p=91751\/"},"modified":"2019-03-13T12:18:47","modified_gmt":"2019-03-13T19:18:47","slug":"20150824-00","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20150824-00\/?p=91751","title":{"rendered":"Insightful graph: The ship date predictor"},"content":{"rendered":"<p>The best graphs are the ones that require no explanation. You are just told what the <i>x<\/i>&#8211; and <i>y<\/i>-axes represent, and the answer just jumps out at you. <!--more--><\/p>\n<p>One of the greatest graphs I&#8217;ve seen at Microsoft is this one that a colleague of mine put together as Windows&nbsp;95 was nearing completion. He took each email message from management that changed the Windows&nbsp;95 RTM date (also known as the ship date) and plotted it on a chart. The <i>x<\/i>-axis is the date the statement was made and the <i>y<\/i>-axis is number of days remaining in the project, according to the email. The dotted line is a linear least-squares fit, and the green star is the actual ship date (<!-- backref: Hazy memories of the Windows 95 ship party -->July&nbsp;14, 1995<\/a>). <\/p>\n<div STYLE=\"width: 350pt;height: 240px;text-align: right;line-height: 24px\">\n<div STYLE=\"width: 30px;height: 24px\">600&nbsp;<\/div>\n<div STYLE=\"width: 30px;height: 24px\">500&nbsp;<\/div>\n<div STYLE=\"width: 30px;height: 24px\">400&nbsp;<\/div>\n<div STYLE=\"width: 30px;height: 24px\">300&nbsp;<\/div>\n<div STYLE=\"width: 30px;height: 24px\">200&nbsp;<\/div>\n<div STYLE=\"width: 30px;height: 24px\">100&nbsp;<\/div>\n<div STYLE=\"width: 30px;height: 24px\">0&nbsp;<\/div>\n<div STYLE=\"height: 156px;width: 1px;border-left: solid 1px black\">&nbsp;<\/div>\n<div STYLE=\"width: 350px;border-top: solid 1px black;height: 1px\">&nbsp;<\/div>\n<div STYLE=\"width: 350px;border-top: solid 1px black;height: 1px\">&nbsp;<\/div>\n<div STYLE=\"width: 350px;border-top: solid 1px black;height: 1px\">&nbsp;<\/div>\n<div STYLE=\"width: 350px;border-top: solid 1px black;height: 1px\">&nbsp;<\/div>\n<div STYLE=\"width: 350px;border-top: solid 1px black;height: 1px\">&nbsp;<\/div>\n<div STYLE=\"width: 350px;border-top: solid 1px black;height: 1px\">&nbsp;<\/div>\n<div STYLE=\"width: 350px;border-top: solid 1px black;height: 1px\">&nbsp;<\/div>\n<div STYLE=\"font-size: 1px\">\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<div STYLE=\"width: 1px;height: 1px;background-color: black\"><\/div>\n<\/p><\/div>\n<div STYLE=\"text-align: center;color: #800\">\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px\">&#x25B2;<\/div>\n<div STYLE=\"width: 24px;height;24px;color: green\">&#x2605;<\/div>\n<\/p><\/div>\n<div STYLE=\"text-align: center\">\n<div STYLE=\"width: 48px;height;24px\">Apr<\/p>\n<p>1992<\/p><\/div>\n<div STYLE=\"width: 48px;height;24px\">Jul<\/div>\n<div STYLE=\"width: 48px;height;24px\">Oct<\/div>\n<div STYLE=\"width: 48px;height;24px\">Jan 1993<\/div>\n<div STYLE=\"width: 48px;height;24px\">Apr<\/div>\n<div STYLE=\"width: 48px;height;24px\">Jul<\/div>\n<div STYLE=\"width: 48px;height;24px\">Oct<\/div>\n<div STYLE=\"width: 48px;height;24px\">Jan 1994<\/div>\n<div STYLE=\"width: 48px;height;24px\">Apr<\/div>\n<div STYLE=\"width: 48px;height;24px\">Jul<\/div>\n<div STYLE=\"width: 48px;height;24px\">Oct<\/div>\n<div STYLE=\"width: 48px;height;24px\">Jan 1995<\/div>\n<div STYLE=\"width: 48px;height;24px\">Apr<\/div>\n<div STYLE=\"width: 48px;height;24px\">Jul<\/div>\n<div STYLE=\"width: 48px;height;24px\">Oct<\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>What&#8217;s so amazing about this chart is that the linear approximation predicts the actual ship date with very high accuracy. The slope of the line is 0.43%, which means that if you took the predicted &#8220;days remaining before we ship&#8221; and multiplied it by around 2.3, you&#8217;d be pretty close to the actual ship date. <\/p>\n<p>In other words, management fairly consistently underestimated the number of days until RTM by a factor of 2.3. (Another way of looking at it is that the development team consistently underreported the number of days to completion to management by a factor of 2.3.) <\/p>\n<p><b>Bonus amusement<\/b> <\/p>\n<p>Here is a pull quote from each of the announcements, lightly edited. <\/p>\n<table CELLPADDING=\"3\" BORDER=\"1\" STYLE=\"border: solid 1px black;border-collapse: collapse\">\n<tr>\n<th>Date<\/th>\n<th>Revised RTM<\/th>\n<th>Remark<\/th>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">February 1992<\/td>\n<td VALIGN=\"baseline\">June 1993<\/td>\n<td VALIGN=\"baseline\">&#8220;Ready to RTM 6\/93.         Otherwise, I&#8217;ll be applying for a job at McDonalds.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">April 1992<\/td>\n<td VALIGN=\"baseline\">September 1993<\/td>\n<td VALIGN=\"baseline\">&#8220;This is a critical release.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">July 1992<\/td>\n<td VALIGN=\"baseline\">March 1994<\/td>\n<td VALIGN=\"baseline\">&#8220;The feature set will NOT be expanded to fill the         new schedule.&#8221;         <\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">September 1992<\/td>\n<td VALIGN=\"baseline\">December 1993<\/td>\n<td VALIGN=\"baseline\">&#8220;This product must RTM by the end of         1993. If we miss this window of opportunity, then the value         of this product goes way down.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">January 1993<\/td>\n<td VALIGN=\"baseline\">March 1994<\/td>\n<td VALIGN=\"baseline\">        &#8220;I recently learned that Team&nbsp;X was planning around a         Q4 94 ship date!&#8221; (Team&nbsp;X provided code to Windows&nbsp;95.)<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">March 1993<\/td>\n<td VALIGN=\"baseline\">April 1994<\/td>\n<td VALIGN=\"baseline\">&#8220;We need to formulate plans which get us there.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">August 1993<\/td>\n<td VALIGN=\"baseline\">May 1994<\/td>\n<td VALIGN=\"baseline\">&#8220;It&#8217;s really important for the company that we make this date.         This must be our last slip.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">December 1993<\/td>\n<td VALIGN=\"baseline\">August 1994<\/td>\n<td VALIGN=\"baseline\">&#8220;This is about as late as we can go         without incurring big financial problems for the company.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">February 1994<\/td>\n<td VALIGN=\"baseline\">September 1994<\/td>\n<td VALIGN=\"baseline\">        &#8220;What determines the ship date is         the team&#8217;s commitment to a ship date.         We must make our RTM date.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">May 1994<\/td>\n<td VALIGN=\"baseline\">November 1994<\/td>\n<td VALIGN=\"baseline\">&#8220;Software and hardware vendors are counting on us.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">August 1994<\/td>\n<td VALIGN=\"baseline\">February 1995<\/td>\n<td VALIGN=\"baseline\">&#8220;Completing this milestone by the end of the year         is absolutely critical to the product gaining quick success.&#8221;<\/td>\n<\/tr>\n<tr>\n<td VALIGN=\"baseline\">December 1994<\/td>\n<td VALIGN=\"baseline\">May 1995<\/td>\n<td VALIGN=\"baseline\">        &#8220;People all over are planning their business on when we release.         We must make our current date.&#8221;<\/td>\n<\/tr>\n<\/table>\n<p>Today marks the 20th anniversary of the public release of Windows&nbsp;95. Just one more year, and you&#8217;ll be old enough to buy a drink!&sup1; <\/p>\n<p><b>Bonus reading<\/b>: <a HREF=\"https:\/\/gartenberg.wordpress.com\/2009\/02\/17\/start-me-up-again\/\">Start Me Up (again)<\/a>: Brad Chase (who ran the worldwide launch of Windows 95) tells the story of how <i>Start Me Up<\/i> became the anthem for Windows 95, and addresses <a HREF=\"http:\/\/win95anniversary.com\/\">the legend that that it cost $14 million<\/a> to license the song. (Spoiler: <a HREF=\"http:\/\/www.networkworld.com\/article\/2220097\/data-center\/what-microsoft-paid-the-stones-to-help-launch-windows-95.html\"><span STYLE=\"background-color: white;color: white\">It was more like $3 million<\/span><\/a>.) <\/p>\n<p><b>Bonus chatter<\/b>: <a HREF=\"http:\/\/www.geekwire.com\/2015\/party-like-its-1995-microsoft-vets-to-host-epic-party-to-celebrate-20-year-anniversary-of-windows-95\/\">The ticket price for the Windows 95 team reunion party is $47.50<\/a>. This seems like an odd number, but it makes more sense when you buy two tickets (one for you, and one for your partner). <\/p>\n<p>&sup1; In the United States, the age at which it is legal to purchase alcohol is 21. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Factor of two (and a little).<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[103],"class_list":["post-91751","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-non-computer"],"acf":[],"blog_post_summary":"<p>Factor of two (and a little).<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/91751","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=91751"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/91751\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=91751"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=91751"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=91751"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}