ch35.html
19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<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>