FPM is being rebuilt, learn more
Back to Blog
Product Update7 min read

Critical Path Drag: Read the Whole Curve

What holds a milestone, how much cut it rewards, and what takes over

A year ago the FPM Team published "Optimizing the Critical Path Drag Calculation" on LinkedIn. Among its ideas was a notation for the two numbers a scheduler actually needs: how far the milestone can come in, and how much of a cut it takes to get there. We wrote it as (X | Y).

FPM now measures both, for any open activity, to any milestone, on any schedule update, in seconds. It also measures where the gain stops, what takes over, and what lags, constraints and calendars hold.

What Drag Measures

Critical path drag is the time an activity adds to a milestone: how far the milestone would come in if that activity took less time. The dependable way to find it is to shorten the activity, recalculate the schedule and read the milestone. Schedulers have done this by hand in P6 for years, one activity at a time, and it is an established technique. FPM does it for every open activity ahead of the milestone at once, on the schedule's own calendars, constraints and relationship types.

Two rules hold throughout. Drag is a reading of one update: it says what is holding the milestone as of that data date. It never says what moved the milestone between updates. That is the job of the impact analysis, and FPM keeps the two apart on every page. And each reading is that one activity alone, so drag readings are never added together, for the same reason concurrent impacts don't sum.

One Zeroing Is One Point

The usual test zeroes the activity's remaining duration and reads one number. On a schedule with mixed calendars, that number hides most of the story. Here is a reading from Riverdale, one of our anonymized demonstration projects.

In the March 2018 update, the Level 2 cast-in-place walls on the East Canyon have 28 working days left on a six-day calendar. The milestone they feed, East Canyon CIP Walls, runs on a seven-day calendar with an early finish of 9 March 2019. Zero the walls and the milestone comes in 17 days, to 20 February 2019. That is the drag. The curve below is the rest of the reading.

Drag profile
Level 2 CIP Walls, 28 d remaining
(17 d | 14 d)
Another path takes over these 14 days of cut earn nothing 0714212805101520 Cut (working days, activity's calendar) Milestone gain (days) X = 17 d gainY = 14 d cutzeroed

Steps where the cut carries the work past non-working days. A single zeroing reads only the hollow point; the curve shows the first 14 days of cut buy all of it.

Riverdale, March 2018 update. Gain in days on the milestone's seven-day calendar, cut in working days on the walls' six-day calendar.

The first 14 days of cut earn all 17 days. The other 14 earn nothing, because by then another path drives the milestone. In (X | Y) terms the walls read (17 d | 14 d). A crew asked to recover the full 28 days would spend half the effort for no gain at all.

The curve also climbs in steps. Each time a cut carries the walls' finish past a Sunday or a holiday on their calendar, the milestone, which works every day, gains an extra day. On other activities the shape is harsher: a short cut that reads zero until it is long enough to clear a shutdown, then a jump many times its size. FPM searches the curve for its bends and places each one to the minute, so a step from a weekend, a holiday or even a lunch hour is found rather than averaged away.

The curve classifies each activity as well. Most are normal: shorten them and the milestone comes in. Some are reverse, where a shorter activity pushes the milestone out because finish-to-finish or start-to-finish logic holds its finish. FPM reports those as measured and names the links responsible. Neutral, bi-critical and the mixed forms that calendars produce are each read from the curve, never assumed.

What Takes Over

Every gain stops somewhere, and the place it stops is the most useful part of the reading. For each activity FPM names the path that takes over once it is cut. For the Level 2 walls, it is the path through the Level 4 and Level 5 walls and footings.

Activities stopped by the same path form a drag path. FPM measures the group by cutting its members together. The group's drag is shared by its members and is never a sum of them. On a large schedule, dozens of activities in one chain can share a single drag, and the page shows them as one holder rather than dozens of rows.

Readings That Don't Add, and the One That Does

On the same update, the Level 5 wall footings read 47 days of drag alone. Zero the Level 5 walls first, and the footings then gain 51. Neither number is wrong. Each describes one position: the footings on the update as it stands, and the footings once the walls ahead of them have been shortened.

That is why the recovery sequence exists. FPM takes the most useful cut, measures the schedule again on what that cut leaves, and repeats. It is the one drag reading that adds up, because each step is measured on top of the steps before it. When two paths are tied and no single cut gains, the sequence names the tie and the least set of activities to cut together, and carries on past it.

Drag Beyond Activities

Work content is only part of what holds a milestone. The Logic view applies the same measurement to everything else in the milestone's network, one element at a time:

LAGS

Each lag cut, by any amount, with its own response curve.

RELATIONSHIPS

Each link removed, and each finish-to-start link made start-to-start, read separately.

CONSTRAINTS

Each constrained activity with its constraints cleared.

CALENDARS

Each non-work period, such as a holiday or a winter shutdown, worked through.

"The finish is held by the holiday shutdown, and the pour ahead of it hardly matters" stops being an argument and becomes a pair of readings.

Your Own Recovery: Drag Plans

The recovery sequence answers what the engine would cut. An analyst usually needs to answer a narrower question: what does this plan buy? The Builder saves a drag plan, an ordered list of steps on one update and one milestone. A step is one or more cuts, or one logic change, and each is measured on the schedule the earlier steps leave.

Each plan also says whose work may be cut. "Only the steel contractor's work, except the crane erection" or "nothing of the owner's, except the permit review" is one setting, by activity or by responsible party, and every reading on the plan honours it. The page shows what the restriction costs against cutting freely. When the analyst wants a suggestion, Auto adds the engine's next steps within the same limits.

A plan stores only the analyst's choices. Every reading is measured fresh when the plan is opened, so nothing in it goes out of date, and every step is checked as it is added, so a saved plan always reads.

In the App and in the Conversation

Drag needs no analysis run. It works on any imported update as soon as the file is in, and since nothing is stored, nothing goes out of date when the engine improves.

The same readings are available over our MCP server. get_critical_path_drag reads ranked drag, any activity's whole curve, drag paths, the recovery sequence and logic drag. edit_drag_plan and get_drag_plan write and read drag plans in working days, on the same choices the Builder offers. An AI assistant can draft a plan in conversation, and the analyst opens the same plan in the Builder to check it, change it or throw it away.

Drag does not say who should accelerate, whether acceleration is feasible, or what it would cost. Those remain the analyst's and the contract's questions. What it gives them is a measured answer to how much each piece of work, lag, constraint and calendar is holding the date, and how much of a cut it would take to get it back.