The way CPM schedules were calculated in the 1970s and 80s (prior to the availability of low-cost PC scheduling tools) used a simplification designed to minimise error and speed up a tedious task. Whilst some of us are old enough to have used this ‘manual’ technique on real schedules, everyone in the modern world recognises Day # 1 = Wednesday 1^{st} October and a 3 day duration activity will work on Wednesday, Thursday and Friday to finish on the 3^{rd} October and the fact 1 + 3 = 4 is simply an anomaly in the way integers and ‘elapsed time’ interact that has to be dealt with inside the computers computations to produce accurate date based bar charts and tabulations.

Unfortunately there has been a rash of postings on linked-in over the last week totally confusing everyone with their nonsense about CPM calculations. This blog is designed to correct the message!

To overcome the problem of a 3 day activity starting on the 1^{st} October finishing on the 3^{rd} October, but staring on day 1 and adding a duration of 3 gives you 1 + 3 = 4, the simplified manual calculations assumed the starting point was ‘day Zero’ 0 + 3 = 3!

However, the old manual calculations starting from day Zero have never been correct – the start day number for every activity in a schedule is always the day before it actually starts. The end dates (day numbers / dates) are correct and the advantage of this option is it only requires one simple calculation per task for both the forward and back passes and the Free Float calculations are a simple subtraction.

EF = ES + Duration

LS = LF – Duration …. Easy!!

This simplistic methodology was absolutely essential for manually calculating large PDM schedules. The ‘normal’ scheduling practice through to the mid 1980s when affordable PCs arrived – very few companies could afford the expense of mainframe scheduling tools and those that did wanted to make sure the data was correct before the computer run.

The accurate calculation used in all scheduling software, recognises that a 3 day activity starts at the beginning of day 1 and works on days 1, 2 and 3 to finish at the end of day 3 and its successor (assuming a FS0 link) starts at the beginning of day 4. Unfortunately these ‘real’ calculations require much more complex calculations[1].

ES = 1, EF = (1 + 3) – 1 to get to the end of day 3.

The Zero duration link requires (EF 3 + 0) + 1 = the next activity ES is the start of day 4.

This approach more than doubles the amount of calculation effort and increases the opportunity for error and of course affects Free Float calculations as well.

Fortunately computer software is not prone to making calculation errors and runs these more complex sums 100% accurately to calculate the date activities start and end accurately when transposed onto a calendar. For more on the actual calculations see: http://www.mosaicprojects.com.au/PDF/Schedule_Calculations.pdf

Given no one has used manual calculations to determine a major schedule in the last 20 years (at least) the old simplistic manual approach is redundant and should be consigned to my area of interest, the history of project scheduling (see: http://www.mosaicprojects.com.au/PM-History.html).

[1] For a more complete discussion see the excellent paper by Ron Winters written in 2003 and entitled ‘How to Befuddle a College Professor’, which can be found at: http://www.ronwinterconsulting.com/Befuddle.pdf

Thanks, Pat, but there is another way to look at it. I have written a number of CPM programs, and the recent ones have all treated the dates as instants in time rather than days. So, to get the early finish from the early start of a 3-day task one would add 1440 minutes (assuming an 8-hour day). One does this considering only working time in the relevant calendar — a complication you cannot avoid in any case, assuming there are weekends and holidays.

If you work 8 to 5 with an hour for lunch, a task starting at 8 am on Monday finishes at 5 pm on Wednesday. A successor task conceptually starts at that same instant, 5 pm on Wednesday, but because of the calendar this is effectively the same as 8 am on Thursday. If it has a duration of one day, you add 480 minutes (again using the calendar) and get a finish of 5 pm on Thursday.

This also facilitates support for durations which are not multiples of days, and for multiple calendars. For example, if the successor task in the above example took 8 hours but was on a 24/7 calendar it would end at 1 am on Thursday.

Hi Tony,

Whilst agreeing with your comments, and I know your software you developed worked; the fundamental problem still remains even with small time units. A 2 minute activity starting at ‘minute 1’ of a day actually works during minutes 1 and 2, with the next micro-task ready to start at the beginning of minute 3. But 1 + 2 = 3. This is the example used on pages 5 and 6 of: http://www.mosaicprojects.com.au/PDF/Schedule_Calculations.pdf.

Which raises a more fundamental question about how real are numbers…… see: http://www.mosaicprojects.com.au/Mag_Articles/P008_Are_Numbers_Real.pdf.

Its worth noting, I only updated my training materials about 10 years ago to overcome confusion in the minds of people used to seeing correct dates calculated by computer.

As we all did calculating manually, the task intended to start on the 1st October was scheduled to start on the 0th October and every other task was given a start date 1 day (or time unit) before it was planned to start so the finish dates were correct.

This was an easy but ‘wrong’ process to teach, but is no longer relevant in the age of low cost scheduling software that started in the mid 1980s. Certainly both the PMP and PMI-SP exams expect an understanding of the more complex ‘correct’ calculations.

For more on PMI-SP see http://www.mosaicprojects.com.au/Training-Planning.html

The point is that nobody talks about “minute one of the day.” We talk about “midnight” or “8 am” etc. 8 am is _not_ a period of time ending at 8.01; it is an _instant_ in time. When I add 2 minutes to 8.00 I get 8.02, not 8.03.

The confusion arises because days are not instants of time. There is a difference between the start of a day and the end of that same day. There is no start or end to the time 08:00.

The confusion is linguistic. Of course, you can talk about “minute 1” and so on if you want, but that is merely replicating the confusion by mimicking the language we use for days. I think some old software actually does this, so a 1 day task starting at 0800 finishes at 1659. But why create difficulties when none exist?