Owners read schedules from the milestones down. A board asks when the building is weathertight, a lender asks when Substantial Performance is due, and the operations team asks when racking can start. In Microsoft Project those answers sit on milestones: tasks with no duration that mark an event. They look simple, a diamond on the Gantt chart, but a milestone that is typed in rather than driven by logic will report a date that nothing supports. This lesson shows how to build milestones properly in Project desktop and how Northgate's twelve contract milestones should sit in the owner's master schedule.
Learning outcomes
- Create zero-duration milestones in Microsoft Project desktop, and mark a task with duration as a milestone.
- Predict the date and time Project gives a milestone from its links.
- Model start events, finish events and external events (such as a permit) correctly.
- Set owner rules for milestone naming, logic and reporting.
The lesson
What Project treats as a milestone
The quickest way to make a milestone is to give a task a duration of zero. Microsoft's instructions are to type the name in an empty row of the Gantt Chart (or select an existing task) and enter 0 in the Duration field; the milestone symbol then appears in the chart [1]. On the ribbon, the Task tab also has a Milestone button in the Insert group, which inserts a new zero-duration row above the selected task.
Project also lets you flag a task that has duration as a milestone. Select the task, then Task > Task Information (Properties group), open the Advanced tab and check Mark task as milestone [1]. Microsoft gives the example of a week-long approval, and notes that such a task shows the milestone symbol on its last day rather than as a bar [1]. Figure 1 shows the three shapes side by side.
Use the marked-milestone option sparingly. A five-day "milestone" is really an approval task, and it is clearer as an ordinary task followed by a zero-duration milestone for the approval itself. Reports and filters that look for milestones will pick up both, and a reader who sees a diamond expects an instant, not a week.
Milestones take their date from logic
An auto-scheduled milestone sits where its links put it. A zero-duration milestone with a finish-to-start predecessor lands at the predecessor's finish: if the predecessor ends Friday at 5:00 p.m., the milestone shows Friday, not the following Monday. That is correct for a finish event ("roof complete") and wrong for a start event ("mobilization"), which people expect to see on the morning the work starts.
The fix is to tie a start milestone to the start of the work it marks. Link the predecessor event to the first task of the new stage FS, then link that first task to the start milestone with a start-to-start (SS) link. The milestone then reads the task's start date and time. Lesson 7 covered SS links; this is one of their most useful jobs.
Do not type a date into a milestone's Start or Finish field to make it "look right". On an auto-scheduled task Project turns a typed start date into a Start No Earlier Than constraint [2], and the milestone stops responding to its predecessors. Constraints are the subject of Lesson 12; for now, the rule is that milestones should be driven by links.
External milestones
Some events are controlled by someone outside the project: a building permit, a utility connection, a regulator's sign-off. Microsoft's advice is to model the outside party's work as a milestone and monitor and update it yourself, or, if the work sits in another project in your organization, to use a cross-project link [1]. In an owner's master schedule, permits and utility dates are classic external milestones. They need an owner, a source for the forecast date and a regular check.
Finding and showing milestones
To list only milestones, choose View > Filter > Milestones. The Milestone field (Yes or No) can also be added as a column. To show milestones on the Timeline, select them and choose Task > Add to Timeline in the Properties group, or right-click and choose Add to Timeline. A Timeline that shows only contract milestones is the cleanest one-page picture an owner can give a board.
Northgate worked example
Northgate Distribution Centre (fictional) has twelve baseline milestones, M0 to M11, from contract execution on Mon Jan 11, 2027 to final completion on Fri Mar 31, 2028 (see the Northgate fact sheet). The owner's master schedule, NDC_OwnerMaster_2027-01-11.mpp, carries all twelve as zero-duration, auto-scheduled milestones, each named with its M-number so it can be matched to the Oracle Primavera P6 schedule of Halvorsen Builders Ltd. (fictional).
Who drives each milestone
Figure 2 sorts the twelve by who controls the event. The contractor drives most of them. The owner drives contract execution, the kickoff meeting and the start of its own racking work. The City of Vaughan drives the building permit, so M2 is an external milestone that the owner's project manager checks with the city, not a date to be scheduled from the owner's side.
View the data
| ID | Milestone | Date | Driven by | Event type |
|---|---|---|---|---|
| M0 | Contract executed | Mon Jan 11, 2027 | Owner | Finish |
| M1 | Kickoff meeting | Tue Jan 19, 2027 | Owner | Finish |
| M2 | Building permit issued | Fri Feb 26, 2027 | External | Finish |
| M3 | Site mobilization | Mon Mar 1, 2027 | Contractor | Start |
| M4 | Foundations and slab complete | Fri May 14, 2027 | Contractor | Finish |
| M5 | Tilt-up panels erected | Fri Jun 25, 2027 | Contractor | Finish |
| M6 | Roof complete, weathertight | Fri Sep 3, 2027 | Contractor | Finish |
| M7 | Permanent power | Fri Oct 1, 2027 | Contractor | Finish |
| M8 | Commissioning starts | Mon Nov 1, 2027 | Contractor | Start |
| M9 | Ready-for-Takeover / Substantial Performance | Fri Jan 14, 2028 | Contractor | Finish |
| M10 | Racking and occupancy start | Mon Jan 17, 2028 | Owner | Start |
| M11 | Final completion | Fri Mar 31, 2028 | Contractor | Finish |
Getting M3 onto Monday
The permit milestone M2 is Fri Feb 26, 2027, and mobilization M3 is Mon Mar 1. A first draft links M2 to M3 FS. Project puts M3 at Friday 5:00 p.m., the moment M2 occurs, so the Gantt chart says mobilization happens on a Friday evening. The fix, shown in Figure 3, is to link M2 to the first site task (Site preparation and excavation) FS, and then link that task to M3 SS. Site preparation starts at the next working time, Mon Mar 1 at 8:00 a.m., and M3 reads that start. The same pattern applies to M8 (commissioning starts) and M10 (racking starts). M9 to M10 is a nice check: M9 is a Friday finish, and the owner's racking start follows on Monday, Jan 17, 2028.
The permit as an external milestone
M2 is owned by the city, not by anyone on the project. In the master it is a zero-duration milestone at the end of a "Building permit review (City of Vaughan)" task, whose duration the owner's project manager updates from the city's status. When the forecast changes, the PM changes that task's remaining duration; M3 and everything after it move by logic. That keeps the schedule honest about the one milestone nobody on the team controls.
Owner's move
- Name milestones with their M-numbers. "M6 Roof complete, weathertight" survives every update, export and import; "Roof done" does not.
- Require logic into and out of every milestone. A contract milestone with no predecessor is a typed date. A milestone with no successor tells you nothing about what it enables.
- Keep milestones at zero duration. If an event takes time, model the time as a task and the event as a milestone after it.
- Give each external milestone an owner. Someone must check the permit, utility or regulator date before every update and record where the forecast came from.
- Report from the milestone filter. A one-page Timeline of M0 to M11 with baseline against forecast is the board report. Baselines come later in this track.
Common mistakes
- Typing milestone dates. Project converts a typed start into a constraint [2], and the milestone stops moving when the work moves.
- One-day "milestones". A 1-day task is a bar, not a diamond. Filters, reports and the P6 import on the contractor's side will not treat it as a milestone.
- Start events linked FS. The milestone shows the previous Friday evening, and reports print the wrong date for mobilization or commissioning start.
- Dangling milestones. A milestone that nothing depends on can slip without moving anything, which hides the effect of a delay.
Quick quiz
The quickest way Microsoft documents to turn a task into a milestone is to:
- Set its constraint to Must Finish On
- Enter 0 in its Duration field
- Give it a deadline
- Change it to manually scheduled
Where is the "Mark task as milestone" check box?
- Task Information, Advanced tab
- Task Information, General tab
- Project Information dialog
- File > Options > Schedule
A zero-duration milestone has one FS predecessor that finishes Fri Feb 26, 2027 at 5:00 p.m. The milestone shows:
- Fri Feb 26 at 5:00 p.m.
- Mon Mar 1 at 8:00 a.m.
- Sat Feb 27
- No date until a constraint is set
Microsoft's advice for work controlled by an outside party is to:
- Leave it out of the schedule
- Model it as a milestone and monitor and update it yourself
- Give it a Must Start On constraint
- Make it a summary task
For Northgate, which milestone is external to both owner and contractor?
- M1 Kickoff meeting
- M2 Building permit issued
- M7 Permanent power
- M10 Racking and occupancy start
Show answers and explanations
- B. Typing 0 in the Duration field makes the task a milestone and shows the milestone symbol [1].
- A. It is on the Advanced tab of Task Information [1].
- A. An FS successor with zero duration sits at its predecessor's finish time. Use an SS link from the first task of the next stage to show a Monday start.
- B. Microsoft says to create a milestone for the outside party's work and monitor and update it manually [1].
- B. The City of Vaughan issues the permit. (Permanent power involves the utility too, but on Northgate it is tracked as a contractor milestone.)
Key terms
- Milestone
- A task that marks an event. In Project, usually a task with zero duration shown as a diamond.
- Mark task as milestone
- An option on the Advanced tab of Task Information that shows a task with duration as a milestone.
- Start event / finish event
- A milestone that marks the beginning of a stage (mobilization) or its end (roof complete). They need different linking.
- External milestone
- A milestone for an event controlled outside the project, such as a permit, monitored and updated by a named person.
- Timeline
- The summary band in Project desktop where selected tasks and milestones can be shown for reporting.
References
- Microsoft. Add a milestone. Microsoft Support (Project desktop).
- Microsoft. Constraint Type (task field). Microsoft Support.
Verified on November 6, 2026.
Next lesson in this trackAuto vs manual schedulingPMI, 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.