Redundant Relationships

Last reviewed 9 September 20261,431 words7 min read

Links a longer path already covers

🟩 In one line: A redundant relationship is a link between A and C when A β†’ B β†’ C already exists and B's chain is longer or equal β€” it changes no dates, it just adds noise, slows review, and hides the real driver. Remove them, but check first: a link that looks redundant today can become the driver when B is re-sequenced.

πŸ‘€ Who this is for: Juniors told "your logic is too dense"; mid-level planners cleaning a file with 4 relationships per activity; reviewers deciding whether density is quality or clutter. You should know relationship-types-explained and total-float.

e / c
First, let's be honest about why this page exists

Planners add redundant links for safety β€” "just in case". A finish milestone with 300 predecessors. Every MEP activity linked to structure topping-out as well as to its own floor. The file balloons, the driving-predecessor column becomes useless, and the reviewer can't tell what actually controls a date.

Redundant logic is rarely wrong; it's expensive. It costs review time, hides the real path, and makes every re-sequencing exercise a hunt through links that turn out not to matter.

🟨 The standard β€” what "good" looks like
SourceWhat it says (paraphrased)
GAO Schedule Assessment Guide, Best Practice 2Logic should be sufficient, not excessive; redundant links obscure the network
DCMA 14-Point, Metric 1Doesn't count redundancy, but reviewers apply a soft ceiling β€” many client specs cap relationships per activity around 4–6
PMI Practice Standard for Scheduling, 3rd ed.Relationships should represent real dependencies; duplicates degrade the model
AACE RP 49R-06Redundant logic can mask the true longest path when durations change
Typical Gulf client specificationsSome require the contractor to remove redundant logic before baseline acceptance; a few name a maximum predecessor/successor count

🟒 Rule to remember: link each activity to the thing that immediately drives it and the thing it immediately drives. If a link skips over an activity that's already in the chain, it's probably redundant.

How it actually works

Definition. A β†’ C is redundant if there is another path A β†’ … β†’ C whose total duration and lags are β‰₯ the direct link. The direct link never drives; it's covered.

CaseDirect linkIndirect pathRedundant?
Rebar FS Pour; Rebar FS Inspection FS PourRebar β†’ PourRebar β†’ Inspection (1 d) β†’ PourYes β€” indirect path is longer
Excavation FS Blinding; Excavation FS+5 Blinding via nothing elseβ€”β€”Not redundant β€” single link
Slab L5 FS Blockwork L5; Slab L5 FS Slab L6 FS Blockwork L5Slab L5 β†’ Blockwork L5Slab L5 β†’ Slab L6 (7 d) β†’ Blockwork L5Yes today; but if Slab L6 is deleted or re-sequenced, the direct link becomes the only driver β€” keep with a note
Every activity FS Project Finish milestoneManyEach activity's real chain reaches the milestone anywayYes for all but the last activities

Common sources.

SourceExample
Milestone catch-allsEvery activity linked to Substantial Completion
Belt-and-bracesMEP L5 linked to Slab L5 (correct) and to Topping-out (redundant)
Copied floorsLevel template copied with links to a shared predecessor that each floor already inherits
Fragnet insertionNew activities linked to everything around them "to be safe"
Merging subcontractor programmesTheir internal links plus your interface links overlap

Finding them in P6. P6 doesn't flag redundancy. Options:

MethodHow
Driving flagActivity Details > Predecessors: the Driving tick box. A link that is never driving across several updates is a candidate β€” not proof
Relationship count columnAdd columns Predecessors / Successors count; sort descending; look at anything over 5
Milestone checkOpen the finish milestone's predecessors; anything not among the last activities of its chain is redundant
Third-party checkerFuse-type tools and Schedule Analyzer report "redundant logic" directly
Export TASKPREDFor each pred/succ pair, test whether an alternative path exists β€” practical only with a script

Removing them safely.

StepAction
1Baseline the file (Reflection or copy)
2Remove candidates in one WBS area
3F9; run Schedule Comparison against the copy
4Any date change β†’ the link wasn't redundant; put it back
5Record removed links in the change log for the narrative

When to keep an apparently redundant link. If the indirect path exists only because of soft logic (one crew, one crane), the direct link is the hard one. Remove the soft chain later and the direct link is what saves you. Keep it, tag the relationship comment "hard β€” kept deliberately".

πŸŸ₯ Where people go wrong
  1. Deleting links because the Driving flag is unticked. Non-driving isn't redundant. A link can be non-driving for six months and become the driver in month seven. Test by removal and comparison, not by flag.
  1. Linking everything to the completion milestone. 300 predecessors, all redundant but the last five. The milestone's driving predecessor is unreadable and every date it shows looks unexplained.
  1. Removing the hard link and keeping the soft chain. Now the "covered" physical dependency is gone, and the first re-sequencing exposes a start before its physical predecessor.
  1. Treating density as quality. A reviewer asking for "more logic" wants each activity properly driven, not four links each. 1.5–2.5 relationships per activity average is typical for a clean Level 3 (logic-density-and-quality).
  1. Cleaning without a comparison run. Fifty links deleted, one wasn't redundant, completion moved 3 days, nobody noticed until the client's Schedule Comparison. Always compare.
  1. Not removing them before baseline acceptance. After acceptance every logic change goes in the narrative change table. Clean the file before it's frozen.
βš–οΈ When you're challenged

"Your finish milestone has 240 predecessors. Why?" "Legacy from the tender programme. All but 6 are redundant β€” every chain reaches the milestone through its last activity anyway. They're removed in Rev 1, no date change, comparison report attached."

"You deleted 80 relationships β€” how do we know nothing moved?" "Schedule Comparison against the pre-clean copy: zero changes to early or late dates. The report is Appendix D. The only links removed were ones already covered by longer paths."

"Isn't more logic safer?" "Only if it's right. Redundant links don't add safety; they hide which link is actually controlling. When Slab L6 slipped last month, it took an hour to find the driver because there were five candidates."

πŸ“„ Related pages
✏️ Worked example

Substantial Completion milestone on a school in Riyadh, baseline Rev 0:

Predecessor groupCountRedundant?Action
All 48 blockwork activities48Yes β€” each feeds plaster β†’ paint β†’ snagging β†’ SCRemoved
All 48 MEP first fix48YesRemoved
All external works activities2221 yes; final road surfacing genuinely lastKept 1
All commissioning activities1817 yes; final T&C sign-off genuinely lastKept 1
Authority approvals64 yes; civil defence and municipality final inspection genuinely lastKept 2
Snagging by zone87 yes; final zone genuinely lastKept 1

150 predecessors β†’ 5. F9 and Schedule Comparison: no change to any early or late date. Milestone's driving predecessor now readable β€” civil defence final inspection, total float 0. Review comments on "logic clarity" closed.

πŸ“– References
  • GAO, Schedule Assessment Guide (GAO-16-89G), Best Practice 2
  • PMI, Practice Standard for Scheduling, 3rd ed.
  • AACE RP 49R-06, Identifying the Critical Path
  • DCMA 14-Point Assessment, Metric 1
  • Oracle, P6 Professional User Guide β€” Relationships; Schedule Comparison

From the field

Experience from working planners. Unreviewed β€” read it as experience, not guidance.

Add what you know about redundant relationships. 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