{"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":"2026-08-26T10:48:14","modified_gmt":"2026-08-26T17:48:14","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\u00a095 was nearing completion. He took each email message from management that changed the Windows\u00a095 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 (<a title=\"Hazy memories of the Windows 95 ship party\" href=\"https:\/\/devblogs.microsoft.com\/oldnewthing\/20150714-00\/?p=45151\">July\u00a014, 1995<\/a>).<\/p>\n<div style=\"position: relative; width: 350pt; height: 240px; text-align: right; line-height: 24px;\">\n<div style=\"position: absolute; left: 0px; top: 12px; width: 30px; height: 24px;\">600\u00a0<\/div>\n<div style=\"position: absolute; left: 0px; top: 36px; width: 30px; height: 24px;\">500\u00a0<\/div>\n<div style=\"position: absolute; left: 0px; top: 60px; width: 30px; height: 24px;\">400\u00a0<\/div>\n<div style=\"position: absolute; left: 0px; top: 84px; width: 30px; height: 24px;\">300\u00a0<\/div>\n<div style=\"position: absolute; left: 0px; top: 108px; width: 30px; height: 24px;\">200\u00a0<\/div>\n<div style=\"position: absolute; left: 0px; top: 132px; width: 30px; height: 24px;\">100\u00a0<\/div>\n<div style=\"position: absolute; left: 0px; top: 156px; width: 30px; height: 24px;\">0\u00a0<\/div>\n<div style=\"position: absolute; left: 30px; top: 12px; height: 156px; width: 1px; border-left: solid 1px black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 30px; top: 24px; width: 350px; border-top: solid 1px black; height: 1px;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 30px; top: 48px; width: 350px; border-top: solid 1px black; height: 1px;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 30px; top: 72px; width: 350px; border-top: solid 1px black; height: 1px;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 30px; top: 96px; width: 350px; border-top: solid 1px black; height: 1px;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 30px; top: 120px; width: 350px; border-top: solid 1px black; height: 1px;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 30px; top: 144px; width: 350px; border-top: solid 1px black; height: 1px;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 30px; top: 168px; width: 350px; border-top: solid 1px black; height: 1px;\">\u00a0<\/div>\n<div style=\"font-size: 1px;\">\n<div style=\"position: absolute; left: 40px; top: 32px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 45px; top: 34px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 50px; top: 36px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 55px; top: 38px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 60px; top: 41px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 65px; top: 43px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 70px; top: 45px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 75px; top: 47px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 80px; top: 49px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 85px; top: 51px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 90px; top: 54px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 95px; top: 56px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 100px; top: 58px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 105px; top: 60px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 110px; top: 62px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 115px; top: 64px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 120px; top: 67px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 125px; top: 69px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 130px; top: 71px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 135px; top: 73px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 140px; top: 75px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 145px; top: 77px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 150px; top: 79px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 155px; top: 82px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 160px; top: 84px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 165px; top: 86px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 170px; top: 88px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 175px; top: 90px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 180px; top: 92px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 185px; top: 95px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 190px; top: 97px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 195px; top: 99px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 200px; top: 101px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 205px; top: 103px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 210px; top: 105px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 215px; top: 108px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 220px; top: 110px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 225px; top: 112px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 230px; top: 114px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 235px; top: 116px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 240px; top: 118px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 245px; top: 121px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 250px; top: 123px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 255px; top: 125px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 260px; top: 127px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 265px; top: 129px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 270px; top: 131px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 275px; top: 134px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 280px; top: 136px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 285px; top: 138px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 290px; top: 140px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 295px; top: 142px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 300px; top: 144px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 305px; top: 147px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 310px; top: 149px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 315px; top: 151px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 320px; top: 153px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 325px; top: 155px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 330px; top: 157px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 335px; top: 160px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 340px; top: 162px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 345px; top: 164px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<div style=\"position: absolute; left: 350px; top: 166px; width: 1px; height: 1px; background-color: black;\">\u00a0<\/div>\n<\/div>\n<div style=\"text-align: center; color: #800;\">\n<div style=\"position: absolute; left: 28px; top: 34px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 42px; top: 26px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 69px; top: 10px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 82px; top: 45px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 108px; top: 49px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 123px; top: 58px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 161px; top: 89px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 187px; top: 97px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 202px; top: 99px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 228px; top: 115px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 246px; top: 109px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 275px; top: 115px; width: 24px;\">\u25b2<\/div>\n<div style=\"position: absolute; left: 330px; top: 156px; width: 24px; height; 24px; color: green;\">\u2605<\/div>\n<\/div>\n<div style=\"text-align: center;\">\n<div style=\"position: absolute; left: 28px; top: 168px; width: 48px;\">Apr<\/p>\n<p>1992<\/p><\/div>\n<div style=\"position: absolute; left: 50px; top: 192px; width: 48px;\">Jul<\/div>\n<div style=\"position: absolute; left: 72px; top: 168px; width: 48px;\">Oct<\/div>\n<div style=\"position: absolute; left: 94px; top: 192px; width: 48px;\">Jan 1993<\/div>\n<div style=\"position: absolute; left: 116px; top: 168px; width: 48px;\">Apr<\/div>\n<div style=\"position: absolute; left: 138px; top: 192px; width: 48px;\">Jul<\/div>\n<div style=\"position: absolute; left: 160px; top: 168px; width: 48px;\">Oct<\/div>\n<div style=\"position: absolute; left: 182px; top: 192px; width: 48px;\">Jan 1994<\/div>\n<div style=\"position: absolute; left: 204px; top: 168px; width: 48px;\">Apr<\/div>\n<div style=\"position: absolute; left: 226px; top: 192px; width: 48px;\">Jul<\/div>\n<div style=\"position: absolute; left: 248px; top: 168px; width: 48px;\">Oct<\/div>\n<div style=\"position: absolute; left: 270px; top: 192px; width: 48px;\">Jan 1995<\/div>\n<div style=\"position: absolute; left: 291px; top: 168px; width: 48px;\">Apr<\/div>\n<div style=\"position: absolute; left: 313px; top: 192px; width: 48px;\">Jul<\/div>\n<div style=\"position: absolute; left: 335px; top: 168px; width: 48px;\">Oct<\/div>\n<\/div>\n<\/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 style=\"border: solid 1px black; border-collapse: collapse;\" border=\"1\" cellpadding=\"3\">\n<tbody>\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\u00a0X was planning around a Q4 94 ship date!&#8221; (Team\u00a0X provided code to Windows\u00a095.)<\/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<\/tbody>\n<\/table>\n<p>Today marks the 20th anniversary of the public release of Windows\u00a095. Just one more year, and you&#8217;ll be old enough to buy a drink!\u00b9<\/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\"> It was more like $3 million<\/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>\u00b9 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":2,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/91751\/revisions"}],"predecessor-version":[{"id":112648,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/91751\/revisions\/112648"}],"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}]}}