<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Tag schedules</title>
    <link>http://blog.objectmentor.com/articles/tag/schedules</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Bugs Kill Productivity and Schedule Accuracy</title>
      <description>&lt;p&gt;The title may seem obvious. Here is some hard data.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://sdtimes.com"&gt;SD Times&lt;/a&gt; recently &lt;a href="http://www.sdtimes.com/article/latestnews-20071101-04.html"&gt;reported&lt;/a&gt; on a survey done by Forrester Research on the pernicious effects of bugs on development productivity. The developers and managers surveyed said they take an average of six days to resolve issues and they spend an average 3 out of every 10 hours working on various stages of troubleshooting, including initial investigation, documenting their findings, and resolving the problems.&lt;/p&gt;


	&lt;p&gt;The survey puts some data behind an intuitive sense (of gloom&amp;#8230;) that many teams have about the problem.&lt;/p&gt;


	&lt;p&gt;For me, this is further evidence of why the practices of Extreme Programming (XP), especially Test-Driven Development (TDD), are so important. To a high degree, &lt;span class="caps"&gt;TDD&lt;/span&gt; ensures that the software is really working and that regressions are caught and fixed quickly. &lt;span class="caps"&gt;TDD&lt;/span&gt; also provides an unambiguous definition of &amp;#8220;done&amp;#8221;; do the automated tests pass? The feedback on which stories are really done tells the team its true velocity and hence how many story points will be finished by a given target date.  Also, you spend far less unplanned and unpredictable time debugging problems.&lt;/p&gt;


	&lt;p&gt;Hence, productivity and schedule accuracy tend to be much better for XP teams. Over time, as the software grows in size and complexity, the automated test suite  will keep delivering &amp;#8220;dividends&amp;#8221;, by continuing to catch regressions and by empowering the team to do the aggressive refactorings that are necessary to keep the software evolving to meet new requirements.&lt;/p&gt;


	&lt;p&gt;The SD Times article goes on to say that&lt;/p&gt;


	&lt;p&gt;&lt;cite&gt;... two-thirds of the responding managers indicated that a solution that reduced the time spent on resolving application problems would be of interest if it created significant efficiencies and improved quality.
&lt;/cite&gt;&lt;/p&gt;


	&lt;p&gt;The article concludes with a quote that automated testing is one solution. I agree. Just make sure it is the XP kind of automated testing.&lt;/p&gt;</description>
      <pubDate>Sun, 25 Nov 2007 11:29:07 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:179931e3-c8b3-48cc-9dff-b94fb7d6ba91</guid>
      <author>Dean Wampler</author>
      <link>http://blog.objectmentor.com/articles/2007/11/25/bugs-kill-productivity-and-schedule-accuracy</link>
      <category>bugs</category>
      <category>XP</category>
      <category>predictability</category>
      <category>schedules</category>
      <category>Productivity</category>
    </item>
    <item>
      <title>Why you have time for TDD (but may not know it yet...)</title>
      <description>&lt;p&gt;&lt;b&gt;Note:&lt;/b&gt; Updated 9/30/2007 to improve the graphs and to clarify the content.&lt;/p&gt;


	&lt;p&gt;A common objection to &lt;span class="caps"&gt;TDD&lt;/span&gt; is this; &amp;#8220;We don&amp;#8217;t have time to write so many tests. We don&amp;#8217;t even have enough time to write features!&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Here&amp;#8217;s why people who say this probably already have enough time in the (real) schedule, they just don&amp;#8217;t know it yet.&lt;/p&gt;


	&lt;p&gt;Let&amp;#8217;s start with an idealized &lt;a href="http://www.controlchaos.com/about/burndown.php"&gt;Scrum-style &amp;#8220;burn-down chart&amp;#8221;&lt;/a&gt; for a fictional project run in a &amp;#8220;traditional&amp;#8221; way (even though traditional projects don&amp;#8217;t use burn-down charts&amp;#8230;).&lt;/p&gt;


&lt;p&gt;
&lt;img src="http://blog.objectmentor.com/files/ideal_timeline2.png" border="0" height="352" width="575" alt="ideal_timeline2.png" align="center" /&gt;
&lt;/p&gt;

	&lt;p&gt;We have time increasing on the x axis and the number of &amp;#8220;features&amp;#8221; &lt;em&gt;remaining to implement&lt;/em&gt; on the y axis (it could also be hours or &amp;#8220;story points&amp;#8221; remaining). During a project, a nice feature of burn-down charts is that you can extend the line to see where it intersects the x axis, which is a rough indicator of when you&amp;#8217;ll actually finish.&lt;/p&gt;


	&lt;p&gt;The optimistic planners for our fictional project plan to give the software to QA near the end of the project. They expect QA to find nothing serious, so the release will occur soon thereafter on date &lt;strong&gt;T0&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;Of course, it never works out that way:&lt;/p&gt;


&lt;p&gt;
&lt;img src="http://blog.objectmentor.com/files/actual_timeline2.png" border="0" height="352" width="575" alt="actual_timeline2.png" align="center" /&gt;
&lt;/p&gt;

	&lt;p&gt;The red line is the actual effort for our fictional project. It&amp;#8217;s quite natural for the planned list of features to change as the team reacts to market changes, &lt;em&gt;etc.&lt;/em&gt;. This is why the line goes up sometimes (in &amp;#8220;good&amp;#8221; projects, too!). Since this is a &amp;#8220;traditional&amp;#8221; project, I&amp;#8217;m assuming that there are no automated tests that actually &lt;em&gt;prove&lt;/em&gt; that a given feature is really done. We&amp;#8217;re effectively running &amp;#8220;open loop&amp;#8221;, without the feedback of tests.&lt;/p&gt;


	&lt;p&gt;Inevitably, the project goes over budget and th planned QA drop comes late. Then things get ugly. Without our automated &lt;strong&gt;unit&lt;/strong&gt; tests, there are lots of little bugs in the code. Without our automated &lt;strong&gt;integration&lt;/strong&gt; tests, there are problems when the subsystems are run together. Without our &lt;strong&gt;acceptance&lt;/strong&gt; tests, the implemented features don&amp;#8217;t quite match the actual requirements for them.&lt;/p&gt;


	&lt;p&gt;Hence, a chaotic, end-of-project &amp;#8220;birthing&amp;#8221; period ensues, where QA reports a list of big and small problems, followed by a frantic effort (usually involving weekends&amp;#8230;) by the developers to address the problems, followed by another QA drop, followed by&amp;#8230;, and so forth.&lt;/p&gt;


	&lt;p&gt;Finally, out of exhaustion and because everyone else is angry at the painful schedule slip, the team declares &amp;#8220;victory&amp;#8221; and ships it, at time &lt;strong&gt;T1&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;We&amp;#8217;ve all lived through projects like this one.&lt;/p&gt;


	&lt;p&gt;Now, if you remember your calculus classes (sorry to bring up painful memories), you will recall that the area under the curve is the total quantity of whatever the curve represents. So, the actual &lt;em&gt;total&lt;/em&gt; feature work required for our project corresponds to the area under the red line, while the planned work corresponds to the area under the black line. So, we really &lt;em&gt;did&lt;/em&gt; have more time than we originally thought.&lt;/p&gt;


	&lt;p&gt;Now consider a Test-Driven Development (TDD) project &lt;a href="#note1"&gt;[1]&lt;/a&gt;:&lt;/p&gt;


&lt;p&gt;
&lt;img src="http://blog.objectmentor.com/files/tdd_timeline2.png" border="0" height="348" width="564" alt="tdd_timeline2.png" align="center" /&gt;
&lt;/p&gt;

	&lt;p&gt;Here, the blue line is similar to the red line, at least early in the project. Now we have frequent &amp;#8220;milestones&amp;#8221; where we &lt;em&gt;verify the state&lt;/em&gt; of the project with the three kinds of automated tests mentioned above. Each milestone is the end of an iteration (usually 1-4 weeks apart). Not shown are the 5-minute &lt;span class="caps"&gt;TDD&lt;/span&gt; cycles and the feedback from the &lt;a href="http://martinfowler.com/articles/continuousIntegration.html"&gt;continuous integration&lt;/a&gt; process that does our builds and runs all our tests after every block of commits to version control (many times a day).&lt;/p&gt;


	&lt;p&gt;The graph suggests that the total amount of effort will be higher than the &lt;em&gt;expected&lt;/em&gt; effort without tests, which may be true &lt;a href="#note2"&gt;[2]&lt;/a&gt;. However, because of the constant feedback during the whole life of the project, we &lt;em&gt;really&lt;/em&gt; know where we actually are at any time. By measuring our progress in this way, we will know early whether or not we can meet the target date with the planned feature set. With early warnings, we can adjust accordingly, either dropping features or moving the target date, with relatively little pain. Whereas, without this feedback, we really don&amp;#8217;t &lt;em&gt;know&lt;/em&gt; what&amp;#8217;s done until something, &lt;em&gt;e.g.,&lt;/em&gt; the QA process, gives us that feedback. Hence, at time &lt;strong&gt;T0&lt;/strong&gt;, just before the big QA drop, the traditional project has little certainty about what features are really completed.&lt;/p&gt;


	&lt;p&gt;So, we&amp;#8217;ll experience less of the traditional end-of-project chaos, because there will be fewer surprises. Without the feedback from automated tests, QA is find lots of problems, causing the chaotic and painful end-of-project experience. Finding and trying to fix major problems late in the game can even kill a project.&lt;/p&gt;


	&lt;p&gt;So, &lt;span class="caps"&gt;TDD&lt;/span&gt; converts that unknown schedule time at the end into known time early in the project. You really &lt;strong&gt;do&lt;/strong&gt; have time for automated tests and your tests will make your projects more predictable and less painful at the end.&lt;/p&gt;


	&lt;p&gt;Note: I appreciate the early comments and questions that helped me clarify this post.&lt;/p&gt;


	&lt;p&gt;&lt;a name="note1"&gt;&lt;/a&gt;
[1] As one commenter remarked, this post doesn&amp;#8217;t actually make the case for &lt;span class="caps"&gt;TDD&lt;/span&gt; itself &lt;em&gt;vs.&lt;/em&gt; alternative &amp;#8220;test-heavy&amp;#8221; strategies, but I think it&amp;#8217;s pretty clear that &lt;span class="caps"&gt;TDD&lt;/span&gt; is the best of the known test-heavy strategies, as argued elsewhere.&lt;/p&gt;


	&lt;p&gt;&lt;a name="note2"&gt;&lt;/a&gt;
[2] There is some evidence that &lt;span class="caps"&gt;TDD&lt;/span&gt; and pair programming lead to &lt;em&gt;smaller&lt;/em&gt; applications, because they help avoid unnecessary features. Also, they provide constant feedback to the team, including the stake holders, on what the feature set should really be and which features are most important to complete first.&lt;/p&gt;</description>
      <pubDate>Sun, 30 Sep 2007 20:01:02 +0000</pubDate>
      <guid isPermaLink="false">urn:uuid:98c607d8-ce1b-4e35-aabd-8717de80bde6</guid>
      <author>Dean Wampler</author>
      <link>http://blog.objectmentor.com/articles/2007/09/30/why-you-have-time-for-tdd-but-may-not-know-it-yet</link>
      <category>Dean's Deprecations</category>
      <category>Agile Methods</category>
      <category>projects</category>
      <category>schedules</category>
      <category>TDD</category>
    </item>
  </channel>
</rss>
