What is a CPM template, and what does it actually do?
A critical path method template is a grid where each row is one activity, and the columns do arithmetic instead of storing opinions. You enter a duration and a predecessor list. The template returns the earliest date the work can start, the earliest it can finish, the latest it can start without moving the deadline, and the difference between those numbers.
That difference is the whole point. Most project plans record when people *think* something will happen. A critical path sheet records *how much room* each task has before the deadline moves. Those are different kinds of information, and only the second one supports a decision.
The method itself dates to 1957, when DuPont engineers Morgan Walker and James Kelley built it to schedule chemical plant maintenance and construction. The math has not changed since. What changed is that the arithmetic used to require a mainframe and now fits in eleven spreadsheet columns.
Two definitions keep the rest of this article honest:
- Total float (TF) is how long an activity can slip without delaying the project. TF = LS − ES, or LF − EF.
- Free float (FF) is how long an activity can slip without delaying its *successor*. FF is always less than or equal to TF, and confusing the two is the most common CPM error in practice.
Why does the critical path decide the finish date?
Because dependency chains are additive. If design cannot start until requirements finish, the project cannot finish until the longest chain of those “cannot start until” statements has played out. Shorter parallel chains absorb their own delay and disappear into the slack.
This is why a project with 200 tasks usually has 12 to 20 critical ones. The rest can move. A team that treats all 200 as equally urgent spends its escalation energy on activities that were never going to affect the date.
There is a second consequence that matters more than the first. The critical path is a *moving* target. When a critical activity finishes early, or a parallel chain slips far enough, the path changes. A plan calculated once in January is decorative by March. The template earns its keep only if someone re-runs the pass after each update.
Join Doitify Today
Move projects forward without the chaos: all your tasks, progress, and team reports in one unified workspace. Built for companies, startups, and remote teams — with a quick setup and a free trial.
How does the forward pass work?
The forward pass answers one question per activity: what is the earliest this can happen? You start at day zero and move left to right.
For each activity, ES = the largest EF among its predecessors; EF = ES + duration. When an activity has two predecessors, it waits for the slower one — which is why the largest number wins, not the average.
Here is the forward pass for a ten-activity ERP rollout. Durations are in working days, dependencies are finish-to-start with no lag.
| ID | Activity | Duration | Predecessors | ES | EF |
|---|---|---|---|---|---|
| A | Requirements and scope | 5 | — | 0 | 5 |
| B | Process mapping | 8 | A | 5 | 13 |
| C | Vendor selection | 6 | A | 5 | 11 |
| D | Solution design | 10 | B, C | 13 | 23 |
| E | Data migration build | 12 | D | 23 | 35 |
| F | Integration build | 15 | D | 23 | 38 |
| G | UAT | 8 | E, F | 38 | 46 |
| H | Training and comms | 5 | G | 46 | 51 |
| I | Cutover | 3 | H | 51 | 54 |
| J | Hypercare | 10 | I | 54 | 64 |
Two rows deserve attention. D has two predecessors, so it starts at 13 — the later of B’s finish (13) and C’s finish (11). C’s two spare days are invisible in this table; they only appear in the backward pass. G waits for F (day 38), so E’s finish at day 35 leaves three days of daylight that nothing in the forward pass records.
The project duration is the largest EF in the network: 64 working days.
How does the backward pass work?
The backward pass answers the opposite question: what is the latest this can happen without moving the deadline? You start at the project finish and work right to left.
For each activity, LF = the smallest LS among its successors; LS = LF − duration. The first activity’s late start and early start are both zero, which is the check that your arithmetic closed the loop.
| ID | Activity | Duration | LS | LF | Total float | Free float |
|---|---|---|---|---|---|---|
| A | Requirements and scope | 5 | 0 | 5 | 0 | 0 |
| B | Process mapping | 8 | 5 | 13 | 0 | 0 |
| C | Vendor selection | 6 | 7 | 13 | 2 | 2 |
| D | Solution design | 10 | 13 | 23 | 0 | 0 |
| E | Data migration build | 12 | 26 | 38 | 3 | 3 |
| F | Integration build | 15 | 23 | 38 | 0 | 0 |
| G | UAT | 8 | 38 | 46 | 0 | 0 |
| H | Training and comms | 5 | 46 | 51 | 0 | 0 |
| I | Cutover | 3 | 51 | 54 | 0 | 0 |
| J | Hypercare | 10 | 54 | 64 | 0 | 0 |
The critical path is the set of activities with zero float: A → B → D → F → G → H → I → J. Its length is 5 + 8 + 10 + 15 + 8 + 5 + 3 + 10 = 64 days, which matches the forward pass. If the two numbers disagree, you have a broken dependency, not a clever insight.
Note what happened to C. It has total float of 2 because it can start as late as day 7 and still let D begin on day 13. E has total float of 3 because G cannot start before day 38 regardless. Both activities are genuinely flexible, and both are the first place to look when someone asks for resources.
What does a real CPM template need in it?
The arithmetic is four columns. The template needs six sections around it, because a spreadsheet full of numbers with no context gets abandoned in week two.
| Section | Fields | Why it exists |
|---|---|---|
| Header | Project name, version, date calculated, calendar | Prevents the “which file is current” conversation |
| Activity table | ID, name, duration, predecessors, successors, owner | The only place dependencies are recorded |
| Pass columns | ES, EF, LS, LF, TF, FF | Calculated, never typed by hand |
| Calendar block | Working days, holidays, shift pattern | Converts working days into dates people recognise |
| Float register | Activities with TF > 0, amount, planned use | Turns float into a managed reserve |
| Change log | Date, what changed, days added, approved by | Explains why the answer moved |
The header is not decoration. Two versions of the same plan with different calendars will produce two different finish dates, and both will look correct in a meeting.
Worked example: 64 working days on a real calendar
Working days are not calendar days, and this is where plans lose credibility. The 64-day plan above starts Monday, 2 March 2026 and finishes Thursday, 28 May 2026 — 88 calendar days later.
The arithmetic: 64 working days means 12 full weeks (60 days) plus 4 days. Twelve weeks from Monday 2 March lands on Friday 22 May, and four more working days take you to Thursday 28 May. The 24 weekend days in between inflate the elapsed time by 23%, and no stakeholder hears “64 days” as “three months.”
Two practical rules follow. First, put the calendar block in the template and calculate dates from it, never from the day count. Second, when a sponsor asks to “save two weeks,” translate that into 10 working days before agreeing to anything, because 10 working days is what actually moves the date.
Worked example: how much compression can you actually buy?
Suppose the integration build (F, 15 days) is late and the business wants the go-live pulled forward by four days. Two contractors can join the team for $1,800 per day and shorten F by one day for every day they work, up to a limit of four days.
The naive calculation is 4 × $1,800 = $7,200 to save four days, or $1,800 per day saved. The CPM calculation says something different.
Run the forward pass with F at 11 days instead of 15. G now starts at day 34 instead of 38, and the project finishes at day 60. Four days saved, $7,200 spent. But check E: its EF is still 35, so G cannot start before 35. The compression that is *real* is three days, not four, because at day 35 the data migration chain becomes critical.
Re-run with F at 12: project finish is 61 days, G starts at 35, E’s total float drops from 3 to zero. From that point, every day saved on F must also be saved on E, because you are now compressing two chains at once. The fourth day costs $1,800 for F plus whatever E’s compression costs, and both are on the critical path.
The lesson generalises: the float on parallel paths limits how much compression you can buy. Before approving any crash cost, calculate the second-longest chain. In this network it is 61 days, so the project cannot go below 61 without touching two chains.
A second cost check keeps the decision honest. Saving four days at $7,200 costs $1,800 per day. If the project’s daily overhead — team, licences, facilities — is $2,400, the compression pays for itself. If it is $900, the $7,200 buys goodwill and nothing else.
Worked example: what happens when a non-critical task slips?
Vendor selection (C) has two days of total float. In week three it slips by four days, finishing on day 15 instead of day 11.
D cannot start until both B (day 13) and C (day 15) are finished, so D moves to day 15. Every activity downstream moves with it, and the project finishes on day 66. The slip was four days; the project lost two, because the first two days were absorbed by float. C is now on the critical path with zero float, so the next slip is one-for-one.
This is the calculation that saves arguments. Without a float number, a four-day slip on vendor selection looks like a catastrophe and triggers a crisis meeting. With the number, it is a two-day problem with a known owner, and the correct response is to ask what the team needs to recover one of the two remaining days.
The same logic works in reverse when you are deciding where to add resources. Adding a person to an activity with three days of float does not shorten the project; it shortens the float. Adding them to F, which has zero, shortens the project by the amount the extra person actually delivers.
Worked example: three tasks sharing two days of float
Float does not multiply. Three parallel activities each with two days of total float do not give you six days of buffer; they give you two days for the group, and the probability that all three stay inside it is much lower than the probability for any one of them.
Take three reviews, each estimated at 4 days with 2 days of float, each with a realistic 70% chance of finishing on time. The chance all three finish inside their estimates is 0.7 × 0.7 × 0.7 = 34%. The joint buffer is exhausted by whichever review slips first.
The practical fix is the one experienced schedulers use: do not spend float in the plan. Keep total float visible as a reserve, publish free float to the team, and treat the 80% mark as a warning line. When a chain has consumed 80% of its float, it goes on the weekly agenda — not before, and not after.
Should you build the template in a spreadsheet or a project tool?
A spreadsheet is the right tool for learning the method and for networks under roughly 40 activities. It is transparent, everyone can audit the formula, and it forces you to think about predecessors instead of clicking a Gantt bar.
It stops being the right tool at three points. When more than one person updates it, because concurrent edits overwrite the calculation. When the same task feeds six successors, because the predecessor column becomes a string-parsing exercise. And when the schedule needs to be read by people who will not open a spreadsheet, which is most stakeholders.
A project tool earns its place by recalculating on every change. In Doitify, task dependencies, timelines and Gantt views carry the same arithmetic: move a duration and the downstream dates follow, with the critical chain visible instead of hidden in column L. Disclosure: Doitify is our product, and the reason we built dependency-aware timelines is that the spreadsheet version of this method fails exactly when projects get big enough to need it.
The honest trade-off is transparency. A tool hides the forward and backward pass behind a view. Keep the calculation table for the top 20 activities even if the tool manages the other 180, so that when the finish date moves, someone in the room can explain why.
What does CPM not tell you?
The method is precise about time and silent about almost everything else. Four limits are worth stating plainly.
It assumes durations are known. CPM takes a single number per activity. Real estimates carry a range, which is why PERT exists; a CPM plan with optimistic durations will produce an optimistic critical path and no warning.
It ignores resources. Two activities on the critical path can require the same database administrator in the same week. The schedule is legal and undeliverable. Resource levelling usually lengthens the plan, sometimes by a lot, and that new length is the honest number.
It says nothing about value. The critical path is the longest chain, not the most important one. A compliance activity with two weeks of float can be more consequential than a critical-path task that reorders a slide deck.
It punishes optimism with arithmetic, not judgement. Compressing the critical path always looks possible on paper. Whether the team can actually deliver 15 days of integration work in 11 is a question for the people doing it.
Which mistakes break a CPM template?
Mixing working and calendar days. The single most common error. Durations in working days, columns in calendar dates, and no conversion block in between.
Using one predecessor where there are two. A task waiting for design *and* procurement is not waiting for design. Missing a predecessor shortens the critical path on paper and lengthens it in reality.
Typing dates into calculated columns. The moment ES and EF are hard-coded, the template stops being a model and becomes a picture.
Treating total float as free time. Float belongs to the project, not to the task owner. Spending it early removes the buffer that later tasks will need.
Never re-running the passes. Dependencies change, durations change, and the critical path migrates. A plan calculated monthly is a report; a plan calculated weekly is a control.
Forgetting lags and leads. A two-week cure time or a mandatory 30-day approval window is a lag, and it belongs in the network as a number, not as an assumption.
How should you run the first cycle?
The first pass takes an afternoon for a 30-activity project, and the output is only half the value. The other half is the conversation about predecessors, which surfaces dependencies nobody had written down.
A workable sequence: list activities at a consistent level of detail, assign durations with the people doing the work, record predecessors as “finish-to-start” unless there is a reason otherwise, run both passes in the same sitting, and then read the critical path aloud in the next team meeting. If someone disagrees with a dependency, you have found something the schedule was hiding.
Then fix a review rhythm. Weekly is right for most projects; daily during cutover or a launch window. Each review updates durations, re-runs the passes, and records the change in the log. The log is what turns a schedule into an audit trail for the next estimate.
FAQ
Conclusion
The critical path method is arithmetic, not opinion. Enter durations and predecessors, run a forward pass for early dates, run a backward pass for late dates, and subtract. The activities where the two answers meet are the ones that decide whether you launch on 28 May or 3 June.
Build the template once with the six sections above, keep the calculated columns calculated, and re-run the passes on a fixed rhythm. Then use the numbers for the decisions they were built for: where to add people, which slip deserves a meeting, and how much compression is genuinely available before the second-longest chain becomes critical.
Sixty-four working days is 13 weeks. Knowing that on day one is worth more than any amount of schedule recovery later.
If this post on critical path method cpm was helpful, you might also enjoy Project Management Software for HR Teams: 2026 Guide and Free Project Calendar Template.
Join Doitify Today
Move projects forward without the chaos: all your tasks, progress, and team reports in one unified workspace. Built for companies, startups, and remote teams — with a quick setup and a free trial.