ch35.html 19 KB
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Chapter 35. Creating Critical chain buffer penetration charts</title><link rel="stylesheet" type="text/css" href="manual.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.0"><link rel="home" href="index.html" title="JpGraph Manual"><link rel="up" href="pt08.html" title="Part VIII. Case studies"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 35. Creating Critical chain buffer penetration charts</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center">Part VIII. Case studies</th><td width="20%" align="right"> </td></tr></table><hr></div><div class="chapter" title="Chapter 35. Creating Critical chain buffer penetration charts"><div class="titlepage"><div><div><h2 class="title"><a name="id2620843"></a>Chapter 35. Creating Critical chain buffer penetration charts</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="ch35.html#id2620855">35.1. Introduction and purpose</a></span></dt><dt><span class="sect1"><a href="ch35s02.html">35.2. Creating a utility class to construct CC BP charts</a></span></dt><dt><span class="sect1"><a href="ch35s03.html">35.3. The Init() method</a></span></dt><dt><span class="sect1"><a href="ch35s04.html">35.4. Suggested improvements</a></span></dt><dt><span class="sect1"><a href="ch35s05.html">35.5. The implementation of <code class="code">class CCBPGraph</code></a></span></dt><dt><span class="sect1"><a href="ch35s06.html">35.6. References</a></span></dt></dl></div>
        
        <div class="sect1" title="Introduction and purpose"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2620855"></a>Introduction and purpose</h2></div></div></div>
            
            <p>Critical chain is one (of many) suggested principles for project management that
                actually makes some sense in the meaning that it tries to take into account both the
                human aspect of making time estimates (it is difficult) as well as the different
                constraints put upon (for example) a SW project. Such constraints are typically that
                there are only two persons with the knowledge to do task X or that task Y has never
                been done before and therefore is almost impossible to estimate correctly.</p>
            <p>Since this manual has no intention to serve as an introduction to full critical
                chain project management (CCPM) we will not dwell on the finer details instead we
                will take out one particular part, or rather a tool, that is one of the fundamental
                ways of keeping track of a projects using CCPM. The buffer penetration chart. </p>
            <p>Even though CCPM in general might not be of interest to the reader the particular
                graph we will create is s good way to show how to think "out-of-the-box" in creating
                some graphs with the this library. So it is fully possible to read this case without
                understanding the underlying methodology.</p>
            <p>The graph we will create makes use of ( among other things)</p>
            <p>
                </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
                        <p>Filled area graphs combined with scatter plots</p>
                    </li><li class="listitem">
                        <p>Showing how to modify the default fill behavior (from the
                            x-axis)</p>
                    </li><li class="listitem">
                        <p>Showing how to disable the 0-labels</p>
                    </li><li class="listitem">
                        <p>Adjusting the display depth for grid lines (and changing the styler of
                            grid lines)</p>
                    </li><li class="listitem">
                        <p>Using different colors on individual scale labels</p>
                    </li><li class="listitem">
                        <p>How to create a custom graph class that can be reused</p>
                    </li></ul></div><p>
            </p>
            <p><a class="xref" href="ch35.html#fig.ccpm-intro" title="Figure 35.1. Critical chain buffer penetration. Each white scatter dot represents the state of one task.">Figure 35.1. Critical chain buffer penetration. Each white scatter dot represents the
                    state of one task.</a> shows a typical example of what we will
                accomplish by the end of this case study</p>
            <div class="figure"><a name="fig.ccpm-intro"></a><p class="title"><b>Figure 35.1. Critical chain buffer penetration. Each white scatter dot represents the
                    state of one task.</b></p><div class="figure-contents">
                
                <div class="mediaobject"><img src="images/ccpm_principle.png" alt="Critical chain buffer penetration. Each white scatter dot represents the state of one task."></div>
            </div></div><br class="figure-break">
            <div class="section" title="The principle behind buffer penetration charts"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="id2620974"></a>The principle behind buffer penetration charts</h2></div></div></div>
                
                <p>While not strictly necessary in order to create the graph the following crash
                    course on buffer penetration might help see the usefulness of these types of
                    charts in large projects.</p>
                <p>
                    </p><div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3>
                        <p>Those wanting to know more about Critical Chain planning are referred
                            to the book and online references at the end of this chapter, see <a class="xref" href="ch35s06.html#bibref.uc.ccpm">[1] Critical chain Project Management, 2ed, Lawrence P. Leach</a> and <a class="xref" href="ch35s06.html#bibref.uc.toc">[2] A Guide to Implementing the Theory of Constraints, K. J. Youngman, </a>.</p>
                    </div><p>
                </p>
                <p>To understand the principles of this graph we need to shortly discuss how task
                    (time) estimation is done using the CC methodology. Time estimation for a task
                    is divided in two parts; 1) the optimum time and 2) the contingency buffer.
                    Together they will make up the allocated time for a task. On average each task
                    is expected to make use of some of the contingency buffer (typically as much as
                    50-75%). </p>
                <p>This might seem very strange for people with experience with other
                    methodologies where use of contingency time is an indication of some kind of
                    failure. However, that is not the case in CCPM. The usage of (some) of the
                    allocated buffers are expected. This comes from the way the buffer and the
                    "optimum" time are estimated. The optimum time is a 50% estimate, meaning that
                    the task is only expected to be able to go that fast in 50% of all the times the
                    task is performed. Hence a very optimistic estimate. With the contingency buffer
                    added the estimate should correspond to a 90% estimate, i.e. in 90% of the times
                    the task is performed it will finish within this time.</p>
                <p>The graph in <a class="xref" href="ch35.html#fig.ccpm-intro" title="Figure 35.1. Critical chain buffer penetration. Each white scatter dot represents the state of one task.">Figure 35.1. Critical chain buffer penetration. Each white scatter dot represents the
                    state of one task.</a> is a way to visualise the
                    status of an entire project in terms of buffer penetration. The x-axis shows how
                    much of a particular task is completed and the y-axis shows how much buffer up
                    to now have been used. Another way of viewing this is to show how far off the
                    optimum 50% time estimate for the task we are in practice.</p>
                <p>The different colored background is a "health" monitor for the tasks. As long
                    as a task is in the green area that task is not in the focus for corrective
                    actions. However as the task moves from green through yellow and into the red
                    this is a signal that immediate actions are needed to secure the end delivery
                    time. If a task has gone into the dark red (or brown) area this is an indication
                    that corrective actions are probably not going to help and a re-planning of the
                    task (and potentially the project is needed). Hence we do not want any tasks in
                    the brown area!</p>
                <p>The exact limits for what is considered "green", "yellow" and "red" varies
                    depending on the context and to some degree the flexibility and size of the team
                    but the default values shown above represents a fairly average limits that have
                    been shown to be useful indicators across several industries.</p>
                <p>The final key to why this works fairly well in practice is that each team
                    member only have to report one figure in order to track the progress he or she
                    is making and that is how much time more he or she will need to complete the
                    task. Since we now at what day the team member made the estimate we have all the
                    information we need in order to update the plans to see how well we are tracking
                    the original plan.</p>
                <p>With the CC methodology we do not bother looking in the mirror and asking the
                    team member to estimate how much of the task he or she has done because that is
                    really irrelevant. The only key figure we need to complete the project on time
                    is to how much more effort/time is needed from the team member. How much of the
                    task has been completed can easily be calculated by knowing how much time is
                    left and compare that with the original estimate. For example, if the original
                    estimate was12 days and the team member at a particular day estimates that
                    he/she has 10 days left we can say that we have completed (12-10)/12 ~ 17% of
                    the task. </p>
                <p>This also explains how it can come that we could get negative completion. This
                    is just an indication that the original estimate was too low. For example if the
                    task was originally estimated to 12 days and at a particular day the team member
                    estimates that he/she will need at least 16 more days to complete the task the
                    completion % would be (12-16)/12 ~ -33%</p>
                <p>An example will illustrate how this works. </p>
                <p>
                    </p><div class="example"><a name="id2621096"></a><p class="title"><b>Example 35.1. Buffer penetration example</b></p><div class="example-contents">
                        
                        <p>Assume we have one task that has a 50% estimate of 6 days and a buffer
                            of 5 days (indicating the volatility in the 50% estimate). The following
                            table shows how much time left the team member estimates he has at the
                            end of each working day. This single number allows us to compute (in
                            relation to the original estimate) how much of the task is completed and
                            how much buffer the member has used.</p>
                        <p>
                            </p><div class="informaltable">
                                <table border="1"><colgroup><col width="57.29pt" class="c1"><col width="82.84pt" class="c2"><col width="116.9pt" class="newCol3"><col width="130.06pt" class="c3"><col width="137.81pt" class="c4"></colgroup><thead><tr><th align="center">Day</th><th align="center">
                                                <p>Est. time left</p>
                                                <p>(days)</p>
                                            </th><th align="center">
                                                <p>Completion</p>
                                                <p>%</p>
                                            </th><th align="center">
                                                <p>Buffer penetration</p>
                                                <p>(days)</p>
                                            </th><th align="center">
                                                <p>Buffer penetration</p>
                                                <p>(%)</p>
                                            </th></tr></thead><tbody><tr><td align="center">1</td><td align="center">5</td><td align="center">0</td><td align="center">0</td><td align="center">0</td></tr><tr><td align="center">2</td><td align="center">5</td><td align="center">(6-5)/6 ~ 17%</td><td align="center">1</td><td align="center">1/5 = 20%</td></tr><tr><td align="center">3</td><td align="center">5</td><td align="center">(6-5)/6 ~17%</td><td align="center">2</td><td align="center">2/5 = 40%</td></tr><tr><td align="center">4</td><td align="center">5</td><td align="center">(6-5)/6 ~ 17%</td><td align="center">3</td><td align="center">3/5 = 60%</td></tr><tr><td align="center">5</td><td align="center">4</td><td align="center">(6-4)/6 ~ 33%</td><td align="center">3</td><td align="center">3/5 = 60%</td></tr><tr><td align="center">6</td><td align="center">3</td><td align="center">(6-3)/6 ~ 50%</td><td align="center">3</td><td align="center">3/5 = 60%</td></tr><tr><td align="center">7</td><td align="center">2</td><td align="center">(6-2)/6 ~ 67%</td><td align="center">3</td><td align="center">3/5 = 60%</td></tr><tr><td align="center">8</td><td align="center">1</td><td align="center">(6-1)/6 ~ 83 %</td><td align="center">3</td><td align="center">3/5 = 60%</td></tr><tr><td align="center">9</td><td align="center">0</td><td align="center">(6-0)/6 = 100%</td><td align="center">3</td><td align="center">3/5 = 60%</td></tr></tbody></table>
                            </div><p>
                        </p>
                        <p>The following three (small) buffer penetration diagram shows how the
                            task at end of days 2,5 and 8</p>
                        <div class="figure"><a name="fig.cc-penetration-charts"></a><p class="title"><b>Figure 35.2. Buffer penetration chart for example</b></p><div class="figure-contents">
                            
                            <div class="mediaobject"><img src="images/ccbp_example_charts.png" alt="Buffer penetration chart for example"></div>
                        </div></div><br class="figure-break">
                        <p><a class="xref" href="ch35.html#fig.cc-penetration-charts" title="Figure 35.2. Buffer penetration chart for example">Figure 35.2. Buffer penetration chart for example</a> hows a fairly typical
                            (albeit not ideal) progress for a task. It gets a rocky start, has some
                            problems halfway through and then manages to recover towards the end of
                            the execution.</p>
                        <p>A common extension to the graph above is to also add a "historic" tail
                            to the scatter point to show how it historically has moved. Adding a
                            historic "tail" at day 8 would give the following penetration
                            chart</p>
                        <div class="figure"><a name="fig.ccbp-historic-chart"></a><p class="title"><b>Figure 35.3. Buffer penetration chart with "historic" tail</b></p><div class="figure-contents">
                            
                            <div class="mediaobject"><img src="images/ccbp_hist_example.png" alt='Buffer penetration chart with "historic" tail'></div>
                        </div></div><br class="figure-break">
                    </div></div><p><br class="example-break">
                </p>
                <p>For an entire project these kind of "falling star" traces can be quite
                    effective ways to see how tasks are progressing. We end this chapter with a
                    final complete example (which uses the code we will develop in the following
                    sections) to create a buffer chart for two tasks.</p>
                <p>
                    </p><div class="figure"><a name="fig.ccbp_ex1"></a><p class="title"><b>Figure 35.4. Complete buffer penetration example with history trace <code class="uri"><a class="uri" href="example_src/ccbp_ex1.html" target="_top">(<code class="filename">ccbp_ex1.php</code>)</a></code> </b></p><div class="figure-contents">  <span class="inlinemediaobject"><img src="images/ccbp_ex1.png" alt="Complete buffer penetration example with history trace (ccbp_ex1.php)"></span> </div></div><p><br class="figure-break">
                </p>
                <p>We can also use the alternative color map for this and get the result shown in
                        <a class="xref" href="ch35.html#fig.ccbp_ex2" title="Figure 35.5. Using the alternative color map (ccbp_ex2.php)">Figure 35.5. Using the alternative color map <code class="uri"><a class="uri" href="example_src/ccbp_ex2.html" target="_top">(<code class="filename">ccbp_ex2.php</code>)</a></code> </a></p>
                <p>
                    </p><div class="figure"><a name="fig.ccbp_ex2"></a><p class="title"><b>Figure 35.5. Using the alternative color map <code class="uri"><a class="uri" href="example_src/ccbp_ex2.html" target="_top">(<code class="filename">ccbp_ex2.php</code>)</a></code> </b></p><div class="figure-contents">  <span class="inlinemediaobject"><img src="images/ccbp_ex2.png" alt="Using the alternative color map (ccbp_ex2.php)"></span> </div></div><p><br class="figure-break">
                </p>
                <p>The next section will explain in some details how to create a class that can
                    mae these types of charts with an easy to use interface.</p>
            </div>
        </div>
        
        
        
        
        
    </div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"><a accesskey="u" href="pt08.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>