178 lines
19 KiB
HTML
178 lines
19 KiB
HTML
<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>
|