Ask a scheduler what the critical path is and you'll get a confident answer. Ask how it differs from the longest path and you'll get a pause. Most tools treat them as identical. They're not. The difference comes down to which calendar measures the float along each relationship, and it has real consequences for forensic analysis.
Two Float Measures, Two Calendars
In classical CPM, "critical path" and "longest path" are the same thing: the longest continuous chain of dependent activities through the network, with zero total float. That equivalence holds when every activity shares a calendar. Once calendars differ across relationships, the single float number splits into two, and the terms need to be separated.
Along each relationship, there can be a gap between when the predecessor finishes and when the successor needs to start. The question is: whose calendar do you measure that gap on? We use the terms pRFF and sRFF (our terminology, not industry-standard) to make this distinction precise.
Critical path (0 pRFF) answers a forward-looking question: can this predecessor slip without pushing the successor? If the answer is no along every link in the chain, delay anything on it and the milestone moves.
Longest path (0 sRFF) answers a backward-looking question: is the successor truly constrained by this predecessor, measured on the successor's own working time? If yes along every link, the chain is incompressible. It's what pins the milestone date.
Three Scenarios
The relationship between critical and longest paths falls into three cases. In each diagram below, Task A is a predecessor feeding Task B, which finishes at the milestone.
Longest and Critical
0 pRFF0 sRFFLongest but not Critical
2 pRFF0 sRFFCritical but not Longest
0 pRFF2 sRFFThe As-Built Complication
Traditional float calculations use early dates and treat everything behind the data date as having no float. That's fine for forward-looking scheduling, but for forensic analysis we need to know what actually drove the milestone through the as-built portion of the schedule.
Our engine calculates "Actual Float" (as-built float) for both predecessor and successor calendars. Two situations require special handling: data date push and constraints.
Data Date Push
When the data date pushes a successor's start beyond where its predecessors would place it, the gap between each predecessor and the successor overstates the available float. Some of those days aren't consumable slack at all: the predecessor already finished, the successor hasn't started yet, and the schedule is just waiting for the clock to reach the data date.
We call it Wait (our terminology, like pRFF and sRFF above).
Data date driven: 3 predecessors, 1 successor
2 Wait / 0 float
On longest path
2 Wait / 2 float
2 Wait / 1 float
Traditional float would compute 2, 4, and 3 days respectively. Subtracting the 2-day Wait reveals A → D has zero actual float and belongs on the longest path.
Constraints
Constraints on successor activities create the same problem as data date push. A "Start No Earlier Than" constraint can hold a successor back, creating apparent float in the predecessor relationships that isn't actually available. We calculate "constraint-aware float" that subtracts the constraint push from the apparent gap.
Constrained as-built
2 Cstr / 0 float
On longest path
2 Cstr / 2 float
2 Cstr / 1 float
Why It Matters
These two float measures answer fundamentally different questions from opposite directions:
From the data date, what can be delayed without impacting the milestone?
Answered by pRFF. Forward-looking. Identifies activities on the critical path (0 pRFF = cannot be delayed).
From the milestone, what is causing the current finish date?
Answered by sRFF. Backward-looking. Essential for retrospective as-built analysis (0 sRFF = driving the milestone).
Predecessor float is about future risk: what can still slip. Successor float is about what's actually pinning the outcome. For forensic work, you can't delay something that already happened. The predecessor finished, the successor started. Predecessor float in the as-built section is just "observed gap," not consumable slack. Successor float stays meaningful: was this link tight, or could the successor have been pulled earlier?
Question #1 is well understood. The successor calendar is essential to answering question #2 in a retrospective analysis of the as-built, and that's where most forensic schedule disputes live.
What This Means for FPM
We compute both float measures for every relationship in the schedule. Our engine calculates predecessor-calendar float and successor-calendar float side by side, identifies critical paths, longest paths, and paths that are both. It also handles data date push ("Wait") and constraint-aware float so the as-built analysis correctly identifies what actually drove each milestone.
When you ask FPM "what's driving this milestone?", you get the full picture. The critical path tells you where future risk lives. The longest path tells you what's pinning the date. When those two answers differ, that's usually where the most interesting forensic questions are.
For the formal definitions, proofs, and additional worked examples, see our full whitepaper.