A milestone-level schedule structure for a typical commercial job, buildable in any scheduling tool or spreadsheet. It covers the phase skeleton from preconstruction through closeout, the procurement chains most schedules leave out, the four fields every activity needs — and how to recognize a schedule that was written to please rather than to plan.
Durations and activity IDs below are placeholder examples to show the structure. Sequence and logic transfer; the numbers are yours to supply.
Permits, submittals, and buyout. Each major submittal is its own activity with a review duration you do not control — put the architect/engineer review time on the schedule explicitly, because it is the first thing that slips and the last thing anyone models. Buyout of major subs and packages belongs here too: an unbought package cannot be procured, and an unprocured package cannot be installed.
For every long-lead item — switchgear, transformers, rooftop units and air handlers, elevators, storefront and curtain wall, steel joists, custom door hardware — schedule the full chain: submit, approve, fabricate, ship, deliver. Work each chain backward from the date the installing crew needs the material, and the order-by date falls out. A schedule that shows "install switchgear" with no upstream chain is not a schedule; it is a hope.
Temporary facilities, erosion control, site utilities, excavation, and pad prep. Utility company work (new services, transformer sets) gets its own activities with generous durations — it is on their calendar, not yours.
Foundations, slab, structural frame, roof deck and membrane, exterior envelope. Dry-in is the milestone that matters most in this stretch: it releases the moisture-sensitive interior trades. Weather-exposed activities in this phase are where seasonal weather allowances belong.
The classic commercial sequence: overhead MEP rough-in (ductwork, piping, cable tray — coordinated so trades are not stacked in the same ceiling zone on the same day), then wall framing and in-wall rough, inspections, insulation, drywall, and down the finish chain — prime, ceilings, flooring, casework, paint, MEP trim. Every jurisdiction inspection is an activity with a duration, because you wait for inspectors on their schedule.
Startup and test-and-balance, commissioning, life-safety inspections, certificate of occupancy, punch list, owner training, O&M manuals and as-builts, and final retainage. Closeout is weeks of real work that most schedules compress into a single line labeled "closeout" — which is why so many jobs are 98% done for three months.
Example rows (durations in work days, illustrative only). Note the RTU procurement chain (A020–A030) running alongside the build, and where float exists versus where it does not.
| ID | Activity | Dur (wd) | Predecessors | Float | Responsible |
|---|---|---|---|---|---|
| A010 | Building permit issued | 30 | — | 0 | PM |
| A020 | RTU submittal → approval | 15 | A010 (SS) | 10 | Mech sub |
| A030 | RTU fabrication + delivery | 60 | A020 | 10 | Mech sub |
| A100 | Foundations | 20 | A010 | 0 | Concrete sub |
| A110 | Structural frame | 25 | A100 | 0 | Steel sub |
| A120 | Roof + dry-in | 15 | A110 | 0 | Roofing sub |
| A200 | Overhead MEP rough-in | 20 | A120 | 0 | MEP subs |
| A210 | Set RTUs | 3 | A030, A120 | 10 | Mech sub |
| A300 | Drywall | 15 | A200 + insp. | 0 | Drywall sub |
| A400 | Finishes → punch → C.O. | 35 | A300 | 0 | PM |
Duration — in work days, estimated by whoever will perform the work. A duration the responsible sub never agreed to is a guess wearing a tie.
Predecessors — what must finish (or start) before this activity can begin, with the relationship type and any lag stated. The logic links are the schedule; the bars are just a drawing of them.
Float — how many days the activity can slip before it moves the finish date. Zero-float activities form the critical path — the chain that sets the end date. If the term is new, CPM (critical path method) scheduling is the concept behind this whole template.
Responsible party — one name per activity: a sub, a supplier, or your PM. "Various" is how activities become orphans.
A schedule where every activity is critical has no shock absorber: the first slipped day anywhere moves the end date. The mirror image is just as bad — a schedule with float that nobody can explain usually means the logic links are missing and the float is an artifact. Ask which chain is critical and why; a planner who built the schedule honestly can answer in one breath.
If the schedule shows "install elevator" but no submittal, fabrication, or delivery activities feeding it, the real critical path is invisible — and it is probably running through a purchasing decision nobody has made yet. Long-lead procurement is the most common hidden driver of the finish date on commercial work.
Earthwork, concrete, steel, and roofing scheduled through winter or a rainy season at fair-weather production rates is a schedule that has already slipped — it just hasn't told anyone yet. Exposed phases need explicit weather allowances sized to the season they actually land in. For putting odds on a finish date instead of a single line, Monte Carlo schedule risk analysis is the technique: run the schedule many times with duration ranges and get a probability of finishing by a given date, instead of one optimistic answer.
Every duration a suspiciously round number. No inspection or utility-company activities. Closeout as a single bar. A finish date that lands exactly on the contract date with nothing to spare. None of these is proof by itself; two or three together mean the schedule was drawn backward from the answer.
List the milestones first. Permit, dry-in, rough-in complete, substantial completion, C.O. Milestones are the contract; activities are how you get there.
Add the procurement chains. For every long-lead item: submit → approve → fabricate → deliver, worked backward from the install date. If the order-by date is already past, you have found your first problem early — which is the point.
Sequence the trades with real predecessors. Every activity gets at least one predecessor (except the first). Use finish-to-start unless you have a specific reason; note lags explicitly.
Assign duration and one responsible name per activity. Durations in work days, from whoever will do the work — a duration the sub never agreed to is your risk, not theirs.
Find the critical path and check the float. The longest chain sets the finish date. Know which activities are on it, and treat their dates differently from everything else.
Add weather and inspection reality. Seasonal weather allowances on exposed phases; a duration on every jurisdiction inspection and utility company action.
Update it weekly. A schedule updated monthly is a historical document. Statusing actual starts and finishes weekly is what keeps the float numbers true.
DesignFlow Build schedules carry predecessors, float, and responsibility on every activity, tie directly to the estimate and job cost on one data model, and update from field progress instead of a monthly statusing meeting.