You are on page 1of 19

A Tool for Managing Projects: An Analytic Parameterization of the S-Curve

Denis F. Cio, Ph.D.


Project Management Program, The George Washington University Monroe Hall 302, 2115 G Street NW, Washington, DC 20052 Denis.Cio@gwu.edu 202-994-9533 Fax 202-994-2736

In press, 31 August 2004.

Preprint submitted to Elsevier Science

31 August 2004

A Tool for Managing Projects: An Analytic Parameterization of the S-Curve

Abstract The solution to a dierential equation used frequently in ecology is found to reproduce the well-known S-curve seen in various aspects of project management. The solution is modied in a minor way to t project management boundary conditions. An excellent t of this theoretical curve to two samples of project cost data shows the utility of the formula. Numerical approximations valid under typical project conditions are utilized to produce an analytic expression that can easily generate classic project management evolution curves under a variety of conditions. The curves are normalized to two basic parameters: the total of the relevant quantity (e.g., project costs) and the duration of the project. The user can choose the steepness of the climb and the point in time at which half the total has been accumulated. Key words: Managing Projects, Progress, Cost, Cash Flow Management, S-curve, Earned Value

Introduction: Population Growth in Nature and Cost Growth in Projects

When displayed as a function of time, accumulated eorts or costs of a project usually take a form described as the S-Curve. The guide to the Project Management Body of Knowledge (the PMBOK R ) denes the term only by its appearance: Graphic display of cumulative costs, labor hours, percentage of work, or other quantities, plotted against time. The name derives from the S-like shape of curve (atter at the beginning and end, steeper in the middle) . . . [1] One earlier work in the project management literature showed how to construct a curve numerically by building it from a normal distribution and forcing it through the xed point of ve percent progress at ten percent of project duration.[2] The curve was used to monitor progress in a series of related Argentine projects. By comparison, the more exible form presented here should have uses in dierent contexts and in dierent types of projects. The rst question that comes to mind would be to discover whether project S-curves have common characteristics within a single specic, narrow industry (e.g., construction of houses) or type of industry (construction as a whole), but dier as the type of industry changes (to information systems, say). The existence of known common characteristics would greatly facilitate future industry-specic simulation and planning. As an example within a single project, an S-curve of planned cash ow may assist risk analysis of project nances by showing altered spending rates needed to achieve completion by dierent dates. Actual progress measured against the planned S-curve can also inuence scheduling adjustments. Also, project resources, both human and material, show similar evolution, and the curve can be applied to these data, too. Finally, earned value calculations, where dierent S-curves are used to represent actual costs, planned spending, and the budgeted cost of work performed, hold particular potential (see, for example, [3]). With this new formalism, producing curves to illustrate dierent possibilities for discussion becomes a simple algebraic exercise, which should encourage practitioners to take this perspective of projects more frequently. In what follows, I will rst use the exact solution to the dierential equation that generates an S-curve in population studies to t project management data. Then, approximations to the exact solution produce an expression that can be used more easily, and this approximate solution meets project management needs. Most important, with this approximation the progression of the total cost of any project can be characterized by two numbers: the slope 3

of the rise in the S-curve and the time at which half the total funds have been spent. Eager readers may bypass the details of the equations generation by proceeding immediately to the answer, Equation 7.

An Equation for Project Management S-Curves

2500

2000 Cost (Dollars) Per Day

1500

1000

500

50

100 Time (Days)

150

200

Fig. 1. The data points show the daily costs, in dollars, for a 207 calendar-day project. Many days (e.g., weekends) have zero cost. The solid curve is the (arithmetically calculated) derivative of the exact solution shown in Figure 2, and so its units are also dollars per day.

Before proceeding with the mathematics, let us ask why an S-shaped curve arises, whether in nature or in project costs. The common characteristics of all systems that demonstrate this behavior include slow growth followed by rapid growth, which in turn is followed by slow growth again to an asymptotic maximum hence an S-shaped curve. Note that the Gompertz curve, which is used in mortality calculations [4], does not show the initial slow growth [5], 4

and so it would not be useful for modeling this eect. In natural settings S-curves arise in closed systems where the growth of a relatively small population is initially unlimited. At rst the population increases slowly because the growth rate depends on the number of its individual elements. As that number increases, the rate increases and the population grows more swiftly. At some point, however, limits are imposed, e.g., the food or energy supply is nite, or in the case of an epidemic, the number of potential new victims declines (essentially everyone has already been infected). The population then reaches a maximum. Even the largest projects start with an initially small number of tasks, but projects soon begin to tackle multiple activities simultaneously. These parallel, often interconnected activities a key characteristic of projects that mandates project management increase the spending greatly compared to the work at the beginning, which by comparison is usually more limited and narrowly focused (e.g., planning). But in almost all projects (with the exception of some defense work!), a cap on the total cost limits the budget and forces this large spending rate to decline. Because the tasks depend on each other, most often in a start-nish mode, they cannot all end simultaneously. Activities dwindle to a small number again as deliverables are completed, and eventually the entire project ends, with no further funds being allocated. Thus, in projects the S-curve is driven by the multiple interconnected activities that occur in the middle of a projects life. Appendix A sketches the derivation of the logistics dierential equation (Equation A.1) in its common ecological context. There three quantities determine the exact progress of the solution (Equation A.3) that models a populations growth in a given system: the birth rate, the death rate, and the so-called carrying capacity of the environment. Whether or not useful management analogs of these quantities exist (and they may), the initial boundary condition of the ecology equation (below) does not further the cause of well-planned projects, and its solution should be modied. The growth of a living population, Y , from a low-lying initial state begins with some pre-existing, ground-state population, so at time zero (t = 0) the initial boundary condition of the ecology equation requires a non-zero quantity, Y = Yo . But in project management, the quantity Y represents cost or eort (task duration multiplied by resource intensity, e.g., [6]). A comprehensive plan allows a well-managed projects costs to accrue only after the project begins, and thus subtracting Yo from the ecological solution changes the initial condition to a more appropriate one: Y = 0 at t = 0. One can write the new solution in terms of the same parameters found in the ecological solution: the constants and Yo , and the maximum cost of the 5

1 10

8 10

Summed Costs (Dollars)

6 10

4 10

2 10

50

100

150

200

Temporal Units (Days)

Fig. 2. The exact solution, Y (Equation 1, dashed line), t to the sample data of Figure 1 (jagged solid line). The four t parameters here are: Y = 89, 437; = 0.03392; = 16.88; and R2 = 0.99638.

project, Y (to which the solution asymptotes at innite time). But the ratio of Y to Yo , which is generally much greater than one, turns out to be a useful parameter. Thus, we divide Y by Yo and instead of using Yo explicitly, dene a constant Y /Yo ; one can then write a generic solution for the project management S-curve as Y = Y 1 exp (t) . 1 + exp (t) (1)

At early times, i.e., at t 0, the growth is linear, Y Yo t. At late times, as t gets very large, Y Y , as desired. However, this equation will be more useful for planning if the summed costs equal the total project cost at the end of the project (t = t1), and not just at innite time. The proper normalization in the solution that follows (Equation 7) will ensure this equality, but for now we need not worry about it; in most cases it will be approximately correct as 6

written (of order 10%, which will be shown later, in Table 2). These behaviors at the temporal extremes of the curve replicate the verbal PMBOK R description noted previously, but does the equation truly work with project data? That is, does the equation t well the accumulated cost data of a project? Without overestimating the value of a least-squares t to summed numbers, we should rst ask if the standard (Pearsons) coecient of determination, R2 , approaches one. For this test, instead of using actual project data, which are often proprietary and dicult to understand or duplicate, I took a set of numbers from an example used in Version 8 of Scitors Project Scheduler software, PS8.[7] Figure 1 shows daily cost data taken directly from the intranet example in PS8. PS8 calculates the total cost of each day for every day of the week; sometimes the days cost is zero (e.g., weekends). Table 1 gives some statistics of the raw data (i.e., not the accumulated costs).

Statistics of Sample Data Number of Points Minimum Maximum Sum Mean Standard Deviation 207 0 $ 2,456 $ 92,464 $ 447 $ 590

Table 1 This table shows the statistics of the sample data set taken from PS8.

This example was chosen initially because of its availability, but the wide dispersion of the data and the roughness of the resultant curve of the accumulated costs make the test particularly appealing. The jagged curve in Figure 2 shows the accumulated cost data as a function of time (in the unit days, which is irrelevant to this discussion). The smooth, dashed curve is a least-squares t 1 of the project management S-curve equation, Equation (1). An eyeball view of the graph alone gives a powerful impression about the accuracy of the t. The value of the coecient of determination, R2 = 0.996, conrms this impression (a low number would cause concern). In this one example, then, Equation 1 represents well the S-curve seen frequently when managing projects.

Via the general curve-t function of Kaleidagraph software, Version 3.52.

A Form More Useful for Project Management

The above form works well with project data, and one can determine numerically the three parameters necessary for a good t (, Y , and ). However, what if the detailed planning that makes a t possible has not yet occurred? How can we take advantage of this solution to create a rst guess of what the spending prole might look like? Again three quantities will parameterize the solution, but using the equation in the absence of detailed data suggests a slightly dierent set of constants. First one uses the nal cost of the project, now written explicitly as Y1 . The other two parameters are the total duration of the project, t1, and the time at which the project has used half its total funds, t 1 . With estimates of these 2 three numbers, at the start of any project a manager can write an S-curve equation that can indicate how labor or funds might be specied throughout the project. First we calculate this new time, t 1 . Letting Y = 0.5 Y1 yields
2

t1 =
2

1 Y Y ln ( + 2 ) ln (2 1) Y1 Y1 1 ln ( + 2).

(2)

In the second line of the above equation, we take advantage of the near equality that occurs in many cases, Y1 Y . Retaining the distinction here between Y1 and Y would not justify the resulting algebraic complexity, and the dierence introduced can be corrected easily with a simple numerical solution that converges quickly (see Appendix B). We want to express this time in terms of the total duration of the project, t1, and so now dene as the ratio t . t1

We term the specic where Y 0.5 Y1 as 1/2, subject to the condition that 0 < 1/2 < 1. If the project manager uses a so-called front-loaded distribution, where the funds are disbursed earlier rather than later, 1/2 will sit closer to the beginning of the project. Other projects will have this time more towards the middle (1/2 0.5) or perhaps nearer the end of the scheduled duration 0.7). An approximation to the slope of the curve at = 1/2 (say, 1/2 will allow us to take full advantage of this new formalism. From the original 8

dierential equation (Equation A.2) and its solution (Equation A.3), where Y = /b, we nd dY dt Y , 4 (3)

1/2

which can only be an approximation because of the changed boundary conditions; the 1/2 on the left-hand side of the equation reminds us that this quantity is calculated at = 1/2. Based on the PMBOKs verbal description of the curve, we will next introduce a numerical approximation to this slope that permits an estimate of . The classic S-curve is described as having three parts: a gentle rise, a steep slope, and a gradual path to the asymptote. To start, we can assume that these three parts occur over equal intervals of time, each occupying t1/3. We can further assume, temporarily, that the steep slope in the center portion comprises two-thirds of the rise from Y = 0 to Y = Y . The remaining onethird of the rise occurs throughout the two gently rising end portions. To give the individual project manager the freedom to choose an approximation to this central slope, we introduce r as the factor that describes the magnitude of the rise in the middle third, and dene r0.67 through r= 2 r0.67. 3 (4)

When r0.67 = 1, two thirds of the rise occurs in the middle interval; r0.67 > 1 steepens the slope. With this denition, we nd an expression for in terms of r and t1 : = 8 r0.67/t1 . Using this form for with the previous equation for t1/2 (Equation 2) yields the following expression for determining the parameter: ln ( + 2) = 8 r0.67 1/2. (5)

These expressions may be inserted back into the original equation (Equation 1) to nd: Y () 1 exp (8 r0.67 ) . = Y 1 + exp (8 r0.67 ) As written, this equation would provide a good t to cumulative cost or effort data under the assumption that Y = Y1 . When planning, however, one does not want to imply that the workers total eort (and hence total project 9

cost) will be expended only after an innite time! We can x this problem by dividing both sides of the equation by Y1 , dened through Y1 Y 1 exp (8 r0.67) , 1 + exp (8 r0.67) (6)

and writing the nal form of the equation in terms of the ratio y = Y/Y1 : y() y 1 exp (8 r0.67 ) , 1 + exp (8 r0.67 ) (7)

where y = Y Y1 > 1. By denition, y = 1 at the end of the project, and y y > 1 beyond that time. At = 1/2, y = y /2. Because this equation forces y to equal 1 at = 1, it has less freedom to t the data, but it still does an excellent job. When the normalized data are t with Equation 7, the R2 value drops insignicantly, from 0.996 to 0.993, and with the exception of the end point (y = 1) the graph is nearly identical to the display of Figure 2 (and so it is not reproduced); = 12.1 and r0.67 = 0.746. To ensure that this one example is not a special case, Appendix C shows the good t to another randomly chosen data set. Finally, how is it all used? For any project, the manager can choose values for 1/2 and r0.67, calculate from Equation 5, nd the normalization factor (y ) from Equation 6, and plot the desired evolution curve with Equation 7. If the manager wants to insist that y = 1/2 at = 1/2, performing the calculation (see Appendix B) will produce a new 1/2 (and a corresponding new ) that will fulll the desired condition. In the t to the PS8 data, for example, 1/2 = 0.435, but y = 1/2 at = = 0.433. The conversion to actual durations and costs (i.e., with dimensions of time and money) comes through the actual Y1 and t1.

Adjusting the Curve by Changing The Rise or the Halfway Point

Textbooks (e.g., [8]) present typical S-curves as symmetric about both the abscissa and the ordinate, that is, symmetric both in time and in cost. But this solution (Equation 7) allows a project manager to change either or both of the two determining parameters, r0.067 and 1/2, either to match the curves that result from the actual scheduling or to inuence schedule planning by playing with alternative cash outows while still in a projects development stage. In this section, we see how the shape of the curve changes as 1/2 moves away from 1/2 and as r0.67 moves away from 1. At r0.67 = 1, the curve produces 10

the strong rise in the middle noted in the derivation of Equation 4. Increases in r0.67 steepen the rise. If a manager wants spending symmetrical in time, 1/2 should be set to about 1/2. When r0.67 = 1, = 54.6, which is reassuringly much greater than 1, and y 1 = 0.018. One front-loads projects by moving 1/2 closer to the beginning of the project. Similarly, a project with most of its spending much later than the midpoint would use a larger 1/2, closer to the end of the project.
r0.67 .5 1 1 1 5.389 5.389 52.60 401.4 1/2 0.500 0.250 0.500 0.750 0.454 0.250 0.496 0.720 y 1 0.119 0.002 0.018 0.135 (1/2) 0.5607 0.2505 0.5045 0.7889

2 2979. 0.500 0.500 0.0003 0.5000 Table 2 This table shows the calculated values of and y 1 for ve combinations of r0.67 and 1/2. Also shown are the values of the corresponding , which are the times at which y = 0.5 exactly, and parenthetically, the 1/2 parameters that one would need to use to obtain the actual halfway points represented by the original numbers used for 1/2.

Table 2 shows the values of the dierent parameters at three choices for the parameters r0.67 and 1/2. Note that when r0.67 is small (0.5) or when 1/2 is large (0.75), the curve does not have time to approach its asymptote suciently quickly, and y 1 is then of order 10 to 15 percent. Figures 3 and 4 show two sets of three curves corresponding to the values in Table 2. The curves behave as expected, giving condence in the approximations. Figure 3 groups curves with constant rise, r0.67 = 1, at three values of 1/2: 1/4, 1/2, and 3/4. The middle one is the familiar textbook curve. The rst and third ones correspond to families of front-loaded and rear-loaded projects. Figure 4 shows three curves at a common 1/2 = 0.5, with the rise r0.67 doubling from 0.5 to 1 to 2. Despite the common 1/2 parameter, the curves do not intersect at y = 0.5 because the actual halfway points (the s) are 0.454, 0.496 and 0.500, respectively. The large rise in the slope for the last one produces a large value of that results in 1/2 . The curve with the lowest rise, r0.67 = 0.5, does not show much of the familiar S-curve shape, but doubling the standard rise produces a curve with little time allowed from minimal spending to full cost. Thus, again we have some condence that a reasonable approximation was used originally, when r0.67 = 11

0.8 1/2 = 0.25 0.6 y 0.50 0.75

0.4

0.2

0.2

0.4

0.6

0.8

Fig. 3. The approximate solution, y = Y /Y (Equation 7), shown at r0.67 = 1 for three values of 1/2.

1, and in the current absence of further examined data, we may expect most real projects to show r0.67 1. The range of the values about unity awaits analysis.

The Derivative of the Accumulated Cost: the Cost Distribution

The derivative of the accumulated cost as a function of time yields the instantaneous cost rate, dY /dt, at any given time, i.e., the spending distribution. (Figure 1 shows this curve for the sample data.) For a symmetric accumulated cost (1/2 = 0.5), the plotted derivative looks similar to a Gaussian (normal) distribution, but it does dier slightly. As one might expect, an asymmetrical spending rate generates an asymmetrical accumulated cost. Many references (e.g., [8]) show a symmetrical accumu12

1 r0.67 = 2 1 0.5

0.8

0.6 y

0.4

0.2

0.2

0.4

0.6

0.8

Fig. 4. The approximate solution, y = Y /Y (Equation 7), shown at 1/2 = 0.5 for three values of r0.67.

lated cost but then one or more asymmetrical spending rates without pointing out that these graph sets are internally inconsistent. The three curves of Figure 5 derive from the curves of Figure 3, where r0.67 is held constant but 1/2 takes three dierent values. Similarly, the three curves of Figure 6 hold 1/2 at 0.5 while taking the three values of r0.67 that generate the curves of Figure 4.

Summary

This paper shows the derivation of a modied logistics equation that project managers can use, in any stage of a project, when working with costs or other limited quantities. When plotted versus time, such quantities typically take a form commonly known in the project management community as the S-curve, 13

2.5

2 1/2= 1.5 dy/d 0.25

0.5

0.5

0.75

0 0 0.2 0.4 0.6 0.8 1

Fig. 5. Derivatives of the three curves shown in Figure 3.

and Equation 7 reproduces that shape. The modications used to produce the equation required only a few minor mathematical assumptions, and their validity is bourne out in the results. With this representation of the curve, a manager has complete exibility to generate any desired smooth prole by selecting the strength of the rise of the curve and the point at which half the total (e.g., of costs) has been expended. Future studies anticipate examining real data to nd the parameters 1/2 and r0.67 and to determine, for example, if they vary in some regular fashion with projects in dierent industries.

14

r0.67 = 2

dy/d

1 2 0.5 1

0 0 0.2 0.4 0.6 0.8 1

Fig. 6. Derivatives of the three curves shown in Figure 4.

The Dierential Equation, via Priogine[9]

In the chapter called Self-Organization, in a section entitled Ecology, Nobel-Prize winner Ilya Prigogine discusses structural stability and writes about a population X in a given medium. Prigogine relates that one often describes the growth of the population through the following dierential equation, dX = bX(N X) dX, dt (A.1)

where b is related to the rate of birth, d is related to mortality, and N is a measure of the milieus capacity to support the population. Prigogine does not provide an analytic solution to the equation, but instead refers the reader to a gure that any project management student or practitioner would recognize immediately as a prototypical S curve. 15

This curve, often known now as the logistics curve, was used, for example, by Hubbert, who made the rst calculations of the nite duration of fossil fuels (e.g., [10,11]). The curve also models the growth rate of a population of interstellar clouds created in galactic simulations [12]. Those simulations determined the cloud birth rate and mortality intrinsically (i.e., the rates were not input), so the variables were redened (and X changed to Y ) to produce a form more appropriate both to the interstellar medium and project management: dY = Y bY 2, dt where in terms of Prigogines original variables, = bN d. The general solution to this equation is Y (t) = b + c et
1

(A.2)

(A.3)

as can be demonstrated by dierentiating it (i.e., Equation A.3). Imposing the boundary conditions appropriate to project management changes its form slightly, to Equation 1, as explained in the main text. The transformation requires subtracting the initial value, Yo , from the general solution and dening Yss = /b = Y + Yo to remove Yss in favor of Y .

Obtaining the Exact Value of the One-Half Point

By denition, the value of at which y 1/2 is 1/2. Let equal the value of such that y = 1/2 exactly. This section explains how to calculate . From the solution represented by Equation 7, we can calculate the slope at 1/2 and join, with only a slight error, 1/2 and on a straight line of that slope. With this approximation, we can nd the desired 1/2 parameter such that y = 1/2 at a chosen , as shown in Table 2. (There the 1/2s corresponding to the chosen s are listed in the column under the parenthetical 1/2.) We nd the new 1/2 through: 1/2 = + 16 (B.1)

where = 1 4 r0.67 y 1 y +1 . +2 (B.2)

As an aside, I note that in deriving the above expression, one sees the consistency with the original slope calculation. The slope used above equals that from Equation 3 multiplied by ( + 2)/( + 1), which approximately equals 1 for any large . Most project managers will probably not be concerned about the small difference , but for those who would like to specify the exact point at which y = 0.5, a quick iteration will generate the 1/2 that corresponds with the desired , as follows. First, set to the desired time. The given r0.67 and an initial guess at 1/2 (one can use the itself) determine the rst . Calculate . Use this with to obtain the rst new 1/2. The new 1/2 yields a new , from which one obtains a new 1/2, and so forth. In usually fewer than ten loops, the equations converge to a xed value of 1/2 that corresponds to the desired . Thus, the 1/2 term is now only a parameter that is near the actual at which y = 1/2.

Fitting the Curve to a Second Data Set

To demonstrate that the example in the main text does not represent any specially chosen case, the approximate solution, Equation 7, was t to an example taken randomly from a textbook [13] (in the book, it is not used to demonstrate an S-curve). The data in Figure C.1 are the early-start-time weekly expenses in the LOGON project, Table 9.5, in Nicholass book. These data vary from the classically shown S-curve in two respects: 1) The three points sitting at about 20 weeks have identical values, and 2) The summed expenses continue to climb at the end of the project. (If most projects showed this type of accumulated cost growth, the phrase S curve might not have arisen.) Nevertheless, the solution ts suciently well. The dierence between the t and the nal data point is only about 6 percent: the curve would serve as a working management model for the projects cost evolution. If we add data points at the same or slightly greater magnitude at the end to atten the curve and produce a more standard prole, the t improves.

17

1000

800 Cumulative Expense ($1000)

600

400

200

0 0 10 20 Weeks 30 40 50

Fig. C.1. A second example of data t by the approximate solution, Equation 7; r0.67 = 0.881 and = 22.4.

Acknowledgements

The original solution of the Prigogine dierential equation is courtesy of Dave van Buren. Nabil Bedewi and Homayoun Khamooshi gave helpful comments that improved the paper. Two anonymous referees also provided constructive comments that led to important ne-tuning, and one of them pointed out the epidemic example that is noted.

18

References

[1] Project Management Institute Standards Committee. A Guide to the Project Management Body of Knowledge 2000 edition. (PMBOK). Project Management Institute, Inc., Newtown Square, Pennsylvania, 2000. [2] Gustavo Marcelo Murmis. S Curves for Monitoring Project Progress. Project Management Journal, pages 2935, September 1997. [3] Denis F. Cio. Completing projects according to plans: An earned value improvement index. To be submitted to the Journal of the Operational Research Society, 2004. [4] Eric W. Weisstein. Gompertz curve, from MathWorldA Wolfram Web Resource. http://mathworld.wolfram.com/GompertzCurve.html, accessed 3 June 2004. [5] Paul Bourke. Gompertz function. http://astronomy.swin.edu.au/ pbourke/ analysis/gompertz, accessed 3 June 2004. [6] Denis F. Cio. Managing Project Integration. Management Concepts, Inc., Virginia, 2002. [7] The Sciforma Corporation. Project Scheduler software, PS8. www.sciforma.com/products/ps suite/ps8 overview.htm), 2001. (http://

[8] J. R. Meredith and S. J. Mantel. Project Management: A Managerial Approach. John Wiley and Sons, Inc., New York, 5th edition, 2003. [9] Ilya Prigogine. From Being to Becoming: Time and Complexity in the Physical Sciences. W.H. Freeman and Company, San Francisco, 1980. [10] M. King Hubbert. Energy From Fossil Fuels. Science, 109(2823):103109, February 4 1949. [11] M. King Hubbert. Exponential Growth as a Transient Phenomenon in Human History, 1976. Presented before the World Wildlife Fund, Fourth International Congress, The Fragile Earth: Toward Strategies for Survival, San Francisco, 1976. Copyright 1976 by M. King Hubbert. [12] Denis F. Cio and J. Michael Shull. Simulations of Supernovae-Dominated Interstellar Media in Disk Galaxies. The Astrophysical Journal, 367:96, 1991. [13] John M. Nicholas. Project Management for Business and Technology: Principles and Practice. Prentice Hall, second edition, 2000.

19