Multiple calendars and float
Last reviewed 9 September 20262,024 words9 min read
Why float goes strange across calendars on one path
π© In one line: P6 measures each activity's float in that activity's own calendar, so one continuous path can show 0, 1 and 2 days float in consecutive activities with nothing wrong β and if you define "critical" as float β€ 0, the critical path will appear to break.
π€ Who this is for: J/M. You should already understand total float and the difference between critical path and longest path.
First, let's be honest about why this page exists
The first time a junior planner filters for total float β€ 0 on a job with a 7-day curing calendar and a 5-day consultant calendar, they see a critical path with holes in it. Then they spend a day adding constraints or changing lags to "fix" it. Nothing is broken. P6 is doing exactly what it should; the display is just being read wrongly.
The second reason is contractual. Employer reviewers regularly reject programmes because "the critical path is discontinuous" or because a curing activity shows 2 days float "so it can't be critical". You need to be able to explain, in one paragraph, why that float is a calendar artefact and not slack.
π¨ The standard β what "good" looks like
| Source | What it says (paraphrased) |
|---|---|
| P6 Professional User Guide β Schedule Options, General tab | Critical activities can be defined either by total float threshold or by Longest Path. Total float is calculated and displayed in the activity's assigned calendar. |
| AACE RP 49R-06, Identifying the Critical Path | Where a network uses more than one calendar, float-based identification can misstate the critical path; the longest-path method is the reliable test. |
| DCMA 14-Point Assessment β Metric 12 (Critical Path Test) | The critical path must be continuous and responsive: extend a critical activity and the finish should move by the same amount. Calendar float gaps fail this test if the path is identified by float alone. |
| GAO Schedule Assessment Guide β Best Practices 6 and 7 | The critical path must be valid and continuous; float values must be reasonable and explainable. Unexplained float on a driving activity is a finding. |
| PMI Practice Standard for Scheduling, 3rd ed. β calendars component | Every activity carries a calendar; the number of calendars should be the minimum needed to model real working patterns. |
π’ Rule: on any schedule with more than one calendar, define critical activities as Longest Path and report float at the milestone, not activity by activity.
How it actually works
1. Float lives in hours, is shown in days. Everything in the XER is stored in hours. Total float on an activity is late finish minus early finish, measured in that activity's calendar, then divided by that calendar's hours per day for display. A 24-hour curing calendar shows 48 hours of float as 2 days. A 10-hour structure calendar shows 10 hours of float as 1 day. Both may describe the same two calendar days of slack.
2. Non-working days create float upstream. This is the one that catches people. If an activity on a 7-day calendar finishes on a Thursday and its successor is on a 5-day calendar (Friday and Saturday off), the successor cannot start until Sunday. So the 7-day activity could finish on Friday or Saturday and change nothing. P6 correctly gives it 2 days of late-finish room β 2 days total float. And because late dates flow backwards, every activity upstream of that point inherits a day or so of float as well. The path is still the longest path. It simply has weekend slack baked into it by the downstream calendar.
3. Hours-per-day mismatches do the same thing in miniature. An activity on a 10-hour calendar feeding one on an 8-hour calendar will show fractional float β 0.2 days, 0.8 days β because the working-hour boundaries don't align. This is harmless but looks untidy in a client report.
4. What to change in P6.
| Setting | Path | What to set |
|---|---|---|
| Critical definition | Tools β Schedule β Options β General β Define critical activities as | Longest Path. Float-based definition is fine on a single-calendar network only. |
| Float display | Edit β User Preferences β Time Units β Use assigned calendar to specify the number of work hours for each time period | Ticked. Otherwise P6 converts every activity's float at one fixed hours/day and a 168-hour curing float displays as 21 "days". |
| Multiple float paths | Tools β Schedule β Options β Advanced | Use when you need the second and third paths; see p6-multiple-float-paths. |
| Critical float threshold | Project β Details β Settings β Critical activities have float less than or equal to | Leave at 0. Raising it to 2 days to "close the gaps" also hides genuine near-critical work. |
5. Reduce the number of calendars. Most building jobs need three to five: a 6-day site calendar (with summer hours and Ramadan exceptions), a 7-day calendar for curing and other elapsed-time activities, a 5-day calendar for consultant and authority actions where the contract genuinely specifies working days, and perhaps a 24-hour calendar for shutdown or continuous-pour work. Check the contract before giving the consultant a 5-day calendar at all: if review periods are stated in calendar days (FIDIC 2017 Cl 5.2.2 states 21 days for Contractor's Documents review β verify per edition), the review activity belongs on a 7-day calendar and the artefact disappears.
6. Report float at the milestone. Negative float suffers the same distortion β a milestone on the project calendar can show β12 days while an upstream curing activity shows β15. In the narrative, quote the float on the contractual milestone and describe the driving path as a sequence of activity IDs. Never quote a per-activity float value from the middle of a multi-calendar path as if it were the project's float.
π₯ Where people go wrong
- Filtering on total float β€ 0 and calling it the critical path. On a multi-calendar network this filter will drop driving activities. Use Longest Path or the DCMA critical path test, not the float column.
- Adding a constraint to "close the gap". A Finish On constraint on the curing activity does remove the 2 days float β and adds a constraint you'll have to justify at every review. The gap wasn't a defect.
- Raising the critical float threshold project-wide. Setting it to 3 days hides the calendar gaps and also hides every genuinely near-critical path. You've traded a cosmetic problem for a real blind spot.
- Giving the consultant a 5-day calendar out of habit. If the contract measures review periods in calendar days, this is wrong on the merits and it injects weekend float into every upstream chain.
- Reporting an activity's float as the project's float. The employer reads "Cure L5 slab β TF 2 days" and concludes the project has 2 days in hand. It might have zero. Report at the milestone.
- Unticking the time-units preference to get "clean" numbers. You'll get whole numbers everywhere and they'll all be wrong for any activity not on the default calendar.
- Too many calendars. Eleven calendars on a mid-rise, one per subcontractor, guarantees float that nobody can explain. Consolidate to the pattern of work, not the name of the firm.
βοΈ When you're challenged
"Your critical path is broken β the curing activity shows 2 days float." The curing activity is on a 7-day calendar and the inspection that follows it is on the consultant's 5-day calendar, so curing that finishes Thursday, Friday or Saturday all lead to the same Sunday inspection. Those 2 days are weekend, not slack. The activity is on the longest path; the Longest Path filter shows the chain continuous, and I've attached it.
"Why does float jump from 1 day to 2 days and back to 0 along one chain?" Because each activity's float is measured in its own calendar. The 6-day activities see one working day of room, the 7-day activity sees two calendar days, and the 5-day inspection has none. Same slack, three rulers.
"Then put it all on one calendar so we can read it." Curing takes seven calendar days whether or not anyone is on site, and structure work stops on Fridays. One calendar would misstate one of those. I'd rather keep both and define critical by Longest Path, which is what the schedule specification asks for anyway.
"Can you just constrain the milestone so the float reads consistently?" The completion milestone already carries a Finish On or Before constraint against the contract date; that's where the project float is read. I won't constrain intermediate activities to tidy the display β every one of those would be a reviewer comment next month.
π Related pages
- Critical path vs longest path β the definitional difference this page depends on.
- P6 Multiple Float Paths β the Advanced-tab option for second and third paths.
- Calendar Setup and Holidays β building the 6-day, 7-day and 5-day calendars correctly.
- Calendar on Relationship Lag β the other calendar setting that moves dates.
- Total float β how float is calculated in the first place.
- Negative float β the same distortion when the numbers go below zero.
- Near-Critical Paths β why raising the critical threshold is the wrong shortcut.
βοΈ Worked example
A hospital extension in Riyadh. Three calendars in play on the structure: a 6-day 10-hour site calendar (Friday off), a 7-day 24-hour curing calendar, and the consultant's 5-day 8-hour calendar (Friday and Saturday off). Level 5 slab sequence, data date Sunday 8 June 2025, all FS with zero lag.
| ID | Activity | Calendar | Early start | Early finish | Late finish | TF shown | On longest path? |
|---|---|---|---|---|---|---|---|
| A2100 | Fix rebar L5 | 6-day 10h | Sun 8 Jun | Mon 9 Jun | Tue 10 Jun | 1 d | Yes |
| A2110 | Pour L5 slab | 6-day 10h | Tue 10 Jun | Thu 12 Jun | Sat 14 Jun | 1 d | Yes |
| A2120 | Cure L5 | 7-day 24h | Fri 13 Jun | Thu 19 Jun | Sat 21 Jun | 2 d | Yes |
| A2130 | Consultant inspection L5 | 5-day 8h | Sun 22 Jun | Sun 22 Jun | Sun 22 Jun | 0 d | Yes |
| A2140 | Strip formwork L5 | 6-day 10h | Mon 23 Jun | Wed 25 Jun | Wed 25 Jun | 0 d | Yes |
What happened: curing finishes Thursday; the inspection can't happen until Sunday. So curing could finish Saturday with no effect β 2 days late-finish room. Pushing that back, the pour could finish Saturday 14th (Friday isn't a working day for the pour, so that's one working day later), and rebar could finish Tuesday 10th. Every upstream activity picks up a day of float from a downstream weekend.
The float β€ 0 filter shows: A2130 and A2140 only. Three of five driving activities disappear.
The Longest Path filter shows: all five, continuous, and the DCMA Metric 12 test confirms it β add 10 days to A2100 and A2140 finishes 10 working days later.
The fix applied: the contract's review period for inspection requests was 2 calendar days, not 1 working day, so A2130 was moved to the 7-day calendar with a 2-day duration. Result: Thursday finish on curing, FridayβSaturday inspection window, Sunday strip. Float upstream returned to 0 across the chain, and nobody had to add a constraint.
π References
- Oracle Primavera P6 Professional User Guide β Schedule Options; User Preferences, Time Units; Project Details, Settings tab.
- AACE International RP 49R-06, Identifying the Critical Path.
- DCMA 14-Point Schedule Assessment β Metric 12, Critical Path Test.
- GAO-16-89G, Schedule Assessment Guide β Best Practices 6 and 7.
- PMI, Practice Standard for Scheduling, 3rd ed. β schedule model components (calendars).
- FIDIC Conditions of Contract for Construction, 2017 β Cl 5.2.2 (check the edition in your contract).
From the field
Experience from working planners. Unreviewed β read it as experience, not guidance.
Add what you know about multiple calendars and float. What worked, what the consultant pushed back on, what you would do differently next time. A paragraph is plenty.
Contributors get their name and one link on the site β your own templates, course or consultancy. We take nothing and hold nothing.
Add your experience