Blame view

site/jpgraph/docs/chunkhtml/ch35.html 19 KB
d72ac078   Guillaume   Ajout graphe V1.1
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>