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].
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.
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:
- M6 Roof complete, weathertight carries a Mandatory Finish on Fri Sep 3, 2027.
- Two office fit-out activities in WBS 6 carry Start On constraints with no predecessor, so the constraint is standing in for missing logic.
- 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.
View the data
| Item | Finish On or Before on M6 | Mandatory Finish on M6 |
|---|---|---|
| Roofing early finish | Fri Sep 10, 2027 | Fri Sep 10, 2027 |
| Roofing total float | −4 days | −4 days |
| M6 finish shown | Fri Sep 10, 2027 | Fri Sep 3, 2027 |
| M6 total float | −4 days | 0 days |
| Successors driven from | Sep 10 | Sep 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.
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.
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
- Constraining instead of linking. A constraint gives an activity a date but no driver, so delays upstream never reach it.
- Mandatory Finish on a completion milestone. The milestone always looks on time; the negative float is pushed back onto predecessors where few people look.
- Constraining every milestone. Interim milestones that are not contract dates should float with the work. Too many constraints make float meaningless.
- Mandatory dates on non-working days. P6 splits the early and late dates and creates negative float with no real cause [8][9].
- 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
A Start On or After constraint affects:
- Late dates only
- Early dates only
- Both early and late dates, overriding logic
- Neither; it is only a flag
Which two constraint types does Oracle classify as hard constraints?
- Start On and Finish On
- Start On or Before and Finish On or Before
- Mandatory Start and Mandatory Finish
- As Late As Possible and Finish On
Where do you enter an activity's primary constraint in P6 Professional?
- Activity Details, General tab
- Activity Details, Status tab
- Project Details, Defaults tab
- Schedule Options, Advanced tab
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?
- M9 stays on Jan 14 with zero float
- M9 moves to Jan 21 with negative total float
- P6 refuses to schedule
- M9 moves but float is unchanged
Which activity type cannot take a constraint?
- Finish Milestone
- Task Dependent
- Level of Effort
- Resource Dependent
Show answers and explanations
- 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].
- C. Mandatory Start and Mandatory Finish prevent movement; the other date constraints are soft [1].
- B. The Primary and Secondary constraint fields are on the Status tab of Activity Details [11].
- B. Finish On or Before affects only late dates, so the early finish follows the work and the gap shows as negative float [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
- Oracle. Types of constraints. Primavera P6 Professional Help, Version 26.
- Oracle. Start on or after constraint. Primavera P6 Professional Help, Version 26.
- Oracle. Start on or before constraint. Primavera P6 Professional Help, Version 26.
- Oracle. Finish on or after constraint. Primavera P6 Professional Help, Version 26.
- Oracle. Finish on or before constraint. Primavera P6 Professional Help, Version 26.
- Oracle. Start on constraint. Primavera P6 Professional Help, Version 26.
- Oracle. Finish on constraint. Primavera P6 Professional Help, Version 26.
- Oracle. Mandatory start constraint. Primavera P6 Professional Help, Version 26.
- Oracle. Mandatory finish constraint. Primavera P6 Professional Help, Version 26.
- Oracle. As late as possible constraint. Primavera P6 Professional Help, Version 26.
- Oracle. Enter activity constraints. Primavera P6 Professional Help, Version 26.
- Oracle. General tab, Schedule Options dialog box. Primavera P6 Professional Help, Version 26.
- Oracle. Default filter criteria. Primavera P6 Professional Help, Version 26.
Verified on November 6, 2026.
Next lesson in this trackRetained logic vs progress overridePMI, 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.