BRC Academy · Primavera P6

Constraints

A constraint is a date you type into a schedule that logic did not produce. Oracle Primavera P6 lets you put up to two on an activity, and every one of them changes early dates, late dates or float in a way the Gantt chart does not announce. Used for a real outside date, such as a utility connection or a contract completion, a constraint makes the schedule more honest. Used to hold an activity where the scheduler wants it, a constraint hides delay. For an owner, the constraint list is one of the first places to look in a contractor's file.

Learning outcomes

  • Name the nine P6 constraint types and say which dates each one moves.
  • Enter a primary and a secondary constraint in P6 Professional and find every constrained activity in a project.
  • Explain why a Mandatory Finish on a contract milestone can hide a delay, while a Finish On or Before shows it as negative float.
  • Write an owner's rule for which constraints a contractor may use, and when.

The lesson

Why constraints exist

The critical path method works out dates from durations and relationships, as you saw in Lesson 10. Oracle's help puts it plainly: network logic alone cannot reflect every project situation, so constraints let you model dependence on a specific date instead of on another activity [1]. A building permit, an owner-supplied transformer, a utility energization window and a contract completion date are all real dates that no predecessor in the contractor's network controls. Those are what constraints are for.

Oracle sorts the types into two groups [1]. Soft constraints do not stop an activity from moving, but they can change float: Start On, Start On or Before, Start On or After, Finish On, Finish On or Before and Finish On or After. Hard constraints stop an activity from moving: Mandatory Start and Mandatory Finish. A ninth type, As Late As Possible, does not take a date at all.

Which dates each constraint moves

The quickest way to learn the types is to ask what each one touches. A constraint can push the early dates later on the forward pass, pull the late dates earlier on the backward pass, or both. Figure 1 sets out the pattern.

  • Start On or After limits how early an activity can begin. It is used on the forward pass only when the calculated early start would be earlier than the imposed date, and it affects only early dates [2].
  • Start On or Before limits how late an activity can start. It is applied on the backward pass only when the calculated late start would be later than the date, affects only late dates, and can reduce total float [3].
  • Finish On or After sets the earliest date the activity may finish [4]. Finish On or Before affects only late dates and makes sure the late finish is no later than the date you impose [5].
  • Start On and Finish On work both ways: they delay an early date that would come sooner and pull forward a late date that would come later, while still respecting network logic [6][7].
  • Mandatory Start and Mandatory Finish set both early and late dates equal to the date you give, regardless of what logic says. They affect the late dates of everything leading to the activity and the early dates of everything after it [8][9].
  • As Late As Possible applies to an activity with positive float and sets its early dates as late as they can be without delaying successors [10].
What each P6 constraint type moves A matrix with nine rows, one per constraint, and three columns: moves early dates, moves late dates, overrides logic. Start On: early yes, late yes, overrides no. Start On or After: early yes only. Start On or Before: late yes only. Finish On: early yes, late yes. Finish On or After: early yes only. Finish On or Before: late yes only. Mandatory Start: early, late and overrides logic all yes. Mandatory Finish: early, late and overrides logic all yes. As Late As Possible: early yes, no date entered. Mandatory rows are highlighted orange as hard constraints. Movesearly dates Moveslate dates Overrideslogic Start Onsoft Start On or Aftersoft Start On or Beforesoft Finish Onsoft Finish On or Aftersoft Finish On or Beforesoft Mandatory Starthard Mandatory Finishhard As Late As Possibleno date; uses float Yes No Yes, hard constraint
Figure 1. The nine constraint types in P6 Professional and the dates each one can move. Source: BRC, based on Oracle Primavera P6 Professional Help v26, Types of constraints and the individual constraint topics [1]–[10].

Entering a constraint

In P6 Professional, choose Project, Activities, select the activity, open Activity Details and click the Status tab. Pick a type in the Primary field and set its date; then, if needed, pick a Secondary type and date [11]. Two rules from Oracle's help matter in practice: the Secondary list is filtered by what you chose as Primary, and you cannot constrain Level of Effort or WBS Summary activities [11].

Two settings act like constraints without living on an activity: the project's must-finish-by date on the Dates tab of Project Details, which sets the late finish for the backward pass, and the Use Expected Finish Dates scheduling option, checked by default [12]. Neither shows in a constraint column, so check both.

Screenshot to come
Screenshot to come: P6 Professional v26, project NDC-BL00 (EPS NDC.SUB), Activities window, M9 Ready-for-Takeover / Substantial Performance selected, Activity Details Status tab showing Primary = Finish On or Before, date Fri Jan 14, 2028, Secondary blank

Constraints and float

Every constraint that pulls in late dates also cuts total float on the activity and on everything before it. That is the intended effect of a Finish On or Before on a contract milestone: when the work cannot meet the date, the milestone and its drivers go negative, and the delay is on the screen. Lesson 12 covers how total float is computed.

Mandatory constraints break that signal. Because they set the dates regardless of logic, an activity with a Mandatory Finish shows its finish on the imposed date even when its predecessors run late. The predecessors may show negative float, but the milestone and every successor carry on from the constrained date as if nothing happened [9]. Oracle also warns that a mandatory constraint placed on non-working time splits the early and late dates and can create negative float on its own [8][9].

Northgate worked example

Northgate Distribution Centre (fictional) is a 12,000 m² tilt-up warehouse in Vaughan, Ontario, built under CCDC 2-2020 by Halvorsen Builders Ltd. (fictional) for Northgate Logistics Inc. (fictional). The owner's scheduler has imported Halvorsen's baseline as NDC-BL00 in the NDC.SUB branch of the EPS and, after checking activity types (Lesson 7), turns to constraints. Dates come from the Northgate fact sheet; the constraint choices below are illustrative.

What the specification allows

Northgate's schedule specification allows constraints only for dates the contractor does not control, and names the type for each case:

  • Contract completion milestones, M9 Ready-for-Takeover / Substantial Performance (Fri Jan 14, 2028) and M11 final completion (Fri Mar 31, 2028): Finish On or Before.
  • Outside availability dates, such as the local distributor's energization window ahead of M7 permanent power (Fri Oct 1, 2027): Start On or After.
  • Mandatory Start or Mandatory Finish: not allowed without the owner's written acceptance.

What the review finds

The scheduler applies P6's default Has Start Constraint and Has Finish Constraint filters, which catch both primary and secondary constraints of each kind [13]. (Filters are covered in Lesson 17.) Most of the constrained activities are fine. Two problems stand out, and one item checks out:

  1. M6 Roof complete, weathertight carries a Mandatory Finish on Fri Sep 3, 2027.
  2. Two office fit-out activities in WBS 6 carry Start On constraints with no predecessor, so the constraint is standing in for missing logic.
  3. M9 is present with the right Finish On or Before. Good.

Why the Mandatory Finish on M6 matters

Suppose the roofing activity in WBS 5 finishes four working days late, on Fri Sep 10, 2027 (Mon Sep 6 is Labour Day, a non-working day on the Northgate calendar). Figure 2 compares the two ways M6 could be constrained.

Finish On or Before versus Mandatory Finish when roofing runs four days late Two Gantt panels over the weeks of Aug 30 to Sep 17, 2027, with Labour Day Monday Sep 6 shaded. Top panel, Finish On or Before Sep 3: roofing bar ends Friday Sep 10; M6 diamond moves to Sep 10; M6 total float is minus 4 days; the delay is visible and carries forward to successors. Bottom panel, Mandatory Finish Sep 3: roofing bar ends Sep 10 with total float minus 4 days, but the M6 diamond stays on Sep 3 and successors start from Sep 3, so the milestone and everything after it look on time. Aug 30Sep 6Sep 13 Finish On or Before, Fri Sep 3 Roofing M6 Roof complete TF −4d Delay shows on M6 and flows to successors Mandatory Finish, Fri Sep 3 Roofing TF −4d M6 Roof complete stays Sep 3 Successors M6 and everything after it look on time
Figure 2. The same four-day roofing overrun under two constraints on M6 (illustrative). Orange marks the late portion; the shaded column is Labour Day. Source: BRC, based on the Northgate fact sheet and Oracle Primavera P6 Professional Help v26, Finish on or before constraint and Mandatory finish constraint [5][9].
View the data
ItemFinish On or Before on M6Mandatory Finish on M6
Roofing early finishFri Sep 10, 2027Fri Sep 10, 2027
Roofing total float−4 days−4 days
M6 finish shownFri Sep 10, 2027Fri Sep 3, 2027
M6 total float−4 days0 days
Successors driven fromSep 10Sep 3

With Finish On or Before, M6 moves to Sep 10, shows four days of negative float, and every successor, including M9, moves with it. With Mandatory Finish, M6 stays on Sep 3. Only the roofing activity shows the problem; the rest of the job, all the way to Ready-for-Takeover, still reports on time.

The two Start On constraints

The office fit-out activities had no predecessor, so Halvorsen's scheduler placed them with Start On dates. That gives them a date but no driver. If the mezzanine structure runs late, fit-out still shows its old start, and the delay never reaches M9. The fix is logic: link fit-out to the mezzanine deck and services rough-in, then delete the constraints. Lesson 9 covers the relationship types.

Owner's test for a contractor's constraint A decision tree. Question 1: is the date set by the contract or by a party outside the contractor's control? If no, replace the constraint with logic. If yes, question 2: is it a completion milestone? If yes, use Finish On or Before. If no, question 3: is it an outside party's earliest availability, such as a permit, utility or owner-supplied item? If yes, use Start On or After. If no, a Mandatory or Start On type is proposed: accept only with written owner approval and a stated reason. 1. Is the date set by the contract or by someone the contractor does not control? No Delete it and add the missing logic Yes 2. Is it a completion milestone? Yes Finish On or Before e.g. M9 Fri Jan 14, 2028; M11 Fri Mar 31, 2028 No 3. Is it the earliest date an outside party can deliver or allow the work? Yes Start On or After e.g. utility energization, permit, owner supply No Mandatory or Start On proposed Accept only with a written reason and the owner's approval
Figure 3. A simple owner's test for each constraint in a contractor's schedule. Source: BRC practice, based on Oracle Primavera P6 Professional Help v26, Types of constraints [1].
Screenshot to come
Screenshot to come: P6 Professional v26, project NDC-BL00, Activities window with the default filters Has Start Constraint and Has Finish Constraint applied (View > Filter By, Any selected filter), columns Activity ID, Activity Name, Primary Constraint, Primary Constraint Date, Secondary Constraint, Secondary Constraint Date, Total Float, with the M6 row selected

The outcome

The owner's review comment asks Halvorsen to resubmit with the Mandatory Finish on M6 removed or changed to Finish On or Before, the two Start On constraints replaced with logic, and a constraint register (activity, type, date, reason) with every update.

Screenshot to come
Screenshot to come: P6 Professional v26, project NDC-BL00, Project Details (Enterprise > Projects, project selected) Dates tab, showing the Must Finish By field and the Data Date, with NDC-BL00 highlighted in the EPS NDC.SUB branch

Owner's move

  • Name the allowed constraint types in the specification. Finish On or Before for contract completion dates, Start On or After for outside availability dates, and nothing else without approval.
  • Ban mandatory constraints on contract milestones. They break the link between the work and the date, which is the one link an owner most needs to see.
  • Ask for a constraint register with every submission. Activity, type, date and reason. Compare it with the default constraint filters each month; new entries need an explanation.
  • Check the must-finish-by date and Use Expected Finish Dates. Both change float without appearing in a constraint column.
  • Treat a Start On with no predecessor as missing logic. Ask for the relationship, not a better date. Our schedule review guide lists the other logic checks.

Common mistakes

  1. Constraining instead of linking. A constraint gives an activity a date but no driver, so delays upstream never reach it.
  2. Mandatory Finish on a completion milestone. The milestone always looks on time; the negative float is pushed back onto predecessors where few people look.
  3. Constraining every milestone. Interim milestones that are not contract dates should float with the work. Too many constraints make float meaningless.
  4. Mandatory dates on non-working days. P6 splits the early and late dates and creates negative float with no real cause [8][9].
  5. Forgetting secondary constraints. A reviewer who only adds the Primary Constraint column misses half the picture. Add both, or use the default filters, which check both.

Quick quiz

  1. A Start On or After constraint affects:

    1. Late dates only
    2. Early dates only
    3. Both early and late dates, overriding logic
    4. Neither; it is only a flag
  2. Which two constraint types does Oracle classify as hard constraints?

    1. Start On and Finish On
    2. Start On or Before and Finish On or Before
    3. Mandatory Start and Mandatory Finish
    4. As Late As Possible and Finish On
  3. Where do you enter an activity's primary constraint in P6 Professional?

    1. Activity Details, General tab
    2. Activity Details, Status tab
    3. Project Details, Defaults tab
    4. Schedule Options, Advanced tab
  4. Halvorsen's M9 milestone has a Finish On or Before of Fri Jan 14, 2028, and the work drives it to Fri Jan 21. What does the owner see?

    1. M9 stays on Jan 14 with zero float
    2. M9 moves to Jan 21 with negative total float
    3. P6 refuses to schedule
    4. M9 moves but float is unchanged
  5. Which activity type cannot take a constraint?

    1. Finish Milestone
    2. Task Dependent
    3. Level of Effort
    4. Resource Dependent
Show answers and explanations
  1. B. It is used on the forward pass only when the calculated early start would be earlier than the imposed date, and it affects only early dates [2].
  2. C. Mandatory Start and Mandatory Finish prevent movement; the other date constraints are soft [1].
  3. B. The Primary and Secondary constraint fields are on the Status tab of Activity Details [11].
  4. B. Finish On or Before affects only late dates, so the early finish follows the work and the gap shows as negative float [5].
  5. C. Level of Effort and WBS Summary activities cannot be constrained [11].

Key terms

Constraint
A date imposed on an activity that limits when it can start or finish, used where logic alone cannot represent a real date.
Soft constraint
A constraint that does not stop an activity moving but can change its float, such as Finish On or Before.
Hard constraint
Mandatory Start or Mandatory Finish: sets early and late dates to the imposed date regardless of logic.
Primary and secondary constraint
The two constraint slots on an activity's Status tab. The secondary list depends on the primary choice.
As Late As Possible
A constraint with no date that pushes an activity's early dates as late as its successors allow.
Constraint register
An owner-required list of every constraint in a submitted schedule, with its type, date and reason.

References

  1. Oracle. Types of constraints. Primavera P6 Professional Help, Version 26.
  2. Oracle. Start on or after constraint. Primavera P6 Professional Help, Version 26.
  3. Oracle. Start on or before constraint. Primavera P6 Professional Help, Version 26.
  4. Oracle. Finish on or after constraint. Primavera P6 Professional Help, Version 26.
  5. Oracle. Finish on or before constraint. Primavera P6 Professional Help, Version 26.
  6. Oracle. Start on constraint. Primavera P6 Professional Help, Version 26.
  7. Oracle. Finish on constraint. Primavera P6 Professional Help, Version 26.
  8. Oracle. Mandatory start constraint. Primavera P6 Professional Help, Version 26.
  9. Oracle. Mandatory finish constraint. Primavera P6 Professional Help, Version 26.
  10. Oracle. As late as possible constraint. Primavera P6 Professional Help, Version 26.
  11. Oracle. Enter activity constraints. Primavera P6 Professional Help, Version 26.
  12. Oracle. General tab, Schedule Options dialog box. Primavera P6 Professional Help, Version 26.
  13. Oracle. Default filter criteria. Primavera P6 Professional Help, Version 26.

Verified on November 6, 2026.

Next lesson in this trackRetained logic vs progress override

PMI, PMP and PMBOK are registered marks of the Project Management Institute, Inc. Oracle and Primavera are trademarks of Oracle. Microsoft Project is a trademark of Microsoft. BRC Academy is not affiliated with or endorsed by these organizations.

← All BRC Academy lessons

Have a program that's slipping, or about to start?

Book a 30-minute call. We'll tell you where your schedule and budget are exposed, and what an owner's rep would change, before you commit to anything.