SMW-420 · Lesson 10 of 12 · 19 min
Production planning and shop scheduling
By the time the Eastgate shop drawings were approved, Keelson had about eight months of fabrication ahead and three other jobs already running through the same shop: the Ashgrove school addition, a restaurant fit-out for Brine & Ember, and the copper roof work at St. Brendan's. Every job wanted the coil line, the plasma table and the best fitters at the same time. Production planning is how a shop decides what to make, when, and on which machine, so that every job gets its duct when the field needs it without the shop running out of capacity or filling the yard. This lesson walks through how Walt Szymanski and Halima Noor plan Keelson's shop: releasing work, measuring capacity, finding the bottleneck, sequencing jobs and using a simple critical path to see which tasks control the finish.
From the site schedule to shop releases
The shop schedule starts in the field. The general contractor's project schedule shows when each floor and area will be ready for ductwork: when the structure is complete, the sprinkler mains are in, and the ceiling space is open. Aggie MacLeod, Keelson's foreman at Eastgate, turns that into a duct installation sequence, area by area, and Lin Zhao's shop drawings are already divided into the same areas, each with its own spool list and fitting tags. The shop then works backwards: if level 3 east must be hung in week 18, its duct must be delivered in week 17, fabricated in weeks 15 and 16, and released to the shop, with final dimensions confirmed, by week 14.
A release is the formal handoff of a package from the detailing team to the shop. It contains the approved shop drawings for the area, the cutting lists for the coil line, the nests for the plasma table, a fitting list for the fitters and a delivery date. Releasing too early risks fabricating duct that changes after a late RFI or a field clash; releasing too late leaves the shop idle or forces overtime. Keelson aims to release each area about three weeks before installation and to freeze it after release, so that late changes come through the change process from Lesson 4 instead of being slipped in at the machine.
| Step | Who | Typical lead before installation |
|---|---|---|
| Field ready date confirmed | Foreman with the general contractor | 6 weeks |
| Final field dimensions and model check | Detailer and foreman | 4 weeks |
| Release package to shop | Detailer | 3 weeks |
| Plasma nests and coil line cutting | Shop | 2 to 3 weeks |
| Fitting assembly, sealing, inspection | Shop | 1 to 2 weeks |
| Staging and delivery | Shop and driver | Days before installation |
Capacity and the bottleneck
Capacity is how much work a resource can do in a given time. For a shop, the resources are machines and people: the coil line, the plasma table, the spiral machine, the fitting benches, the welders, the seam closer and the delivery truck. Each has a capacity in hours per week, and each job needs a certain number of hours on each. Walt's planning sheet lists the hours each released package needs on each resource, taken from Halima's estimate and refined from past jobs, and compares the total with what each resource can provide.
The bottleneck is the resource with the least spare capacity, the one that limits the whole shop. Any hour lost at the bottleneck is an hour lost for the whole shop, while an hour saved at a resource that is not a bottleneck does not raise output at all, because work just waits at the bottleneck. This idea, central to the theory of constraints, shapes Keelson's planning: Walt protects the bottleneck from starving, schedules its maintenance outside production hours, and moves work away from it where he can, for example by buying some spiral fittings rather than making them when the fitting benches are full.
# Load against capacity for each resource in one week (illustrative)
capacity = {"coil line": 40, "plasma table": 40, "fitting benches": 160, "spiral machine": 40, "welding": 40}
load = {"coil line": 31, "plasma table": 37, "fitting benches": 172, "spiral machine": 22, "welding": 18}
for r in capacity:
u = load[r] / capacity[r]
flag = " <-- over capacity" if u > 1 else ""
print(f"{r:16s} load {load[r]:5.0f} h of {capacity[r]:4.0f} h {u:6.0%}{flag}")
bottleneck = max(capacity, key=lambda r: load[r] / capacity[r])
print("bottleneck this week:", bottleneck)coil line load 31 h of 40 h 78% plasma table load 37 h of 40 h 92% fitting benches load 172 h of 160 h 108% <-- over capacity spiral machine load 22 h of 40 h 55% welding load 18 h of 40 h 45% bottleneck this week: fitting benches
In the example week, the fitting benches are loaded beyond their capacity while the coil line has spare hours. Walt has several choices: pull a fitter forward from a later week with overtime, move some simple fittings to the coil line operators during its spare time, buy in standard fittings, or push a lower-priority package back a week if the field can absorb it. The planning sheet does not make the decision, but it shows the problem early enough that a good decision is still possible.
Takt time and flow
Takt time is the rate at which work must be finished to meet demand, the available time divided by the quantity needed in that time. If Eastgate needs about 1,100 kg of fabricated duct per working day to keep two crews hanging, and the shop has eight productive hours a day for this job, the takt is roughly 138 kg per hour. Each resource must be able to keep up with that rate on average, or the field will run short. Comparing takt with each resource's rate is a quick way to see whether a plan is realistic before the detailed schedule is built.
# Takt check for one job (illustrative)
daily_need = 1100 # fabricated duct the field installs per day, kg
hours = 8 # shop hours per day for this job
takt = daily_need / hours
rates = {"coil line": 260, "plasma and fittings": 120, "sealing and inspection": 170} # kg per hour
print(f"takt: {takt:.0f} kg per hour")
for r, v in rates.items():
print(f"{r:24s} {v:4.0f} kg/h {'ok' if v >= takt else 'short by ' + str(round(takt - v))}")takt: 138 kg per hour coil line 260 kg/h ok plasma and fittings 120 kg/h short by 18 sealing and inspection 170 kg/h ok
The fitting stage is short of takt, which matches what the load sheet showed: fittings are labour intensive, and a hospital job like Eastgate has a high proportion of them. The plan therefore added a second fitting shift for six weeks during the peak floors.
Sequencing jobs through the shop
When several packages compete for the same machine, the order matters. Common rules are first come first served, earliest due date, and shortest processing time first. Earliest due date tends to minimise lateness against the field dates, which is what matters most in construction, and it is Keelson's default. Two practical rules sit on top of it: group work by gauge and material on the coil line and plasma table to cut changeovers, and keep stainless separate from galvanized work. Walt's weekly planning meeting with Lin, Halima and the foremen reviews next week's sequence, checks material on hand and confirms delivery dates.
A simple critical path
Inside a package, some tasks must follow others. Plasma cutting must come before fitting assembly; straight duct from the coil line can run at the same time; sealing and inspection follow both; then staging and delivery. The critical path method lists each task with its duration and its predecessors, works forward to find the earliest finish of each task, and identifies the longest chain, the critical path, which sets the earliest finish of the whole package. Tasks not on the critical path have float, time they can slip without delaying the finish.
# Critical path for one release package (durations in shop days)
tasks = {
"release": (0.5, []),
"plasma": (2.0, ["release"]),
"coil line": (1.5, ["release"]),
"fittings": (3.0, ["plasma"]),
"spiral": (1.0, ["release"]),
"seal+inspect":(1.5, ["fittings", "coil line", "spiral"]),
"stage+ship": (0.5, ["seal+inspect"]),
}
early = {}
for t, (d, pre) in tasks.items(): # tasks are listed in dependency order
start = max((early[p] for p in pre), default=0)
early[t] = start + d
finish = max(early.values())
late = {}
for t in reversed(list(tasks)):
succ = [s for s, (_, pre) in tasks.items() if t in pre]
late[t] = min((late[s] - tasks[s][0] for s in succ), default=finish)
for t in tasks:
fl = late[t] - early[t]
print(f"{t:13s} early finish {early[t]:4.1f} float {fl:3.1f}{' critical' if fl == 0 else ''}")
print("package finish:", finish, "days")release early finish 0.5 float 0.0 critical plasma early finish 2.5 float 0.0 critical coil line early finish 2.0 float 3.5 fittings early finish 5.5 float 0.0 critical spiral early finish 1.5 float 4.0 seal+inspect early finish 7.0 float 0.0 critical stage+ship early finish 7.5 float 0.0 critical package finish: 7.5 days
The critical path runs from release through plasma, fittings, sealing and inspection to delivery. The coil line and spiral tasks have float, so they can be fitted around other jobs without delaying this package, while any slip in plasma or fitting work delays delivery. On a real shop, Walt does not run this for every package, but he uses the idea every week: he knows that fittings are usually critical on hospital work and protects their hours first.
Material and inventory
A schedule is only as good as the material behind it. Keelson's coil and sheet stock, accessories such as dampers and access doors, and bought items such as spiral fittings and flexible connectors all have lead times. Halima's estimate lists them, and when the job is awarded, the project manager orders long-lead items immediately, in particular fire dampers and stainless sheet, which can take weeks. The shop keeps a minimum stock of common gauges and reorders coils when stock falls below a set point, so the line never waits for steel. Too much stock ties up cash and space, so the set points are reviewed when the shop's workload changes.
Overtime, shifts and buying out
When load runs ahead of capacity for more than a week or two, the shop has three main levers. Overtime is quick to arrange but costly, because premium pay raises the hourly cost and productivity tends to fall after long weeks of extended hours, so Halima's estimates treat sustained overtime as a cost factor rather than free capacity. A second shift adds capacity on the same machines without buying new ones, but it needs a lead hand, its own quality checks and good handover notes between shifts. Buying out, purchasing standard fittings, spiral duct or flexible connectors from another fabricator or a manufacturer, moves work off the shop entirely, at a price that can be compared directly with the shop's own cost. Keelson used all three on Eastgate: short overtime in week 12, a second fitting shift during the peak floors, and bought-in spiral fittings for the parking level exhaust.
Measuring how the plan is going
Each week, Walt compares planned and actual hours and output for each resource. Two simple measures help. Schedule attainment is the share of planned packages finished on time. Productivity is the output per labour hour, in kilograms or pounds of duct or in fittings per hour, compared with the estimate. When productivity falls below the estimate, the cause might be a harder mix of fittings, a machine problem, new crew members or rework from defects, and Lesson 11 shows how tracking data helps find it. Halima feeds the actual results back into her labour units, closing the loop between estimating and production.
Worked problem
Finding the bottleneck
In one week the coil line has 31 of 40 hours loaded, the plasma table 37 of 40, the fitting benches 172 of 160, the spiral machine 22 of 40 and welding 18 of 40. Which resource is the bottleneck, and by how much is it over?
Show solution
- Utilizations: coil line 78 percent, plasma table 92 percent, fitting benches 108 percent, spiral 55 percent, welding 45 percent.
- The fitting benches have the highest load against capacity.
- They are over by 172 − 160 = 12 hours.
Answer: The fitting benches are the bottleneck, 12 hours over capacity, as the code shows.
Common mistakes
MistakeReleasing packages before field dimensions are confirmed.
InsteadConfirm dimensions and model checks before release, then freeze the package.
MistakeSpeeding up a resource that is not the bottleneck.
InsteadFind the bottleneck first and protect its hours.
MistakeOrdering long-lead items after the shop drawings are approved.
InsteadOrder fire dampers, stainless and other long-lead items as soon as the job is awarded.
MistakeSequencing work only by arrival order.
InsteadUse earliest due date and group work by gauge and material.
MistakeNever comparing actual and estimated productivity.
InsteadTrack hours and output weekly and feed the results back into estimating.
Summary and key terms
- The shop schedule works backwards from the field installation sequence.
- A release hands an approved package to the shop and is then frozen.
- The bottleneck is the resource with the least spare capacity, and it limits the whole shop.
- Takt time compares the rate the field needs with each resource's rate.
- Earliest due date sequencing, grouped by gauge and material, suits construction work.
- The critical path is the longest chain of tasks; tasks off it have float.
- Release
- The handoff of an approved package from detailing to the shop.
- Capacity
- The work a resource can do in a given time.
- Bottleneck
- The resource with the least spare capacity.
- Takt time
- Available time divided by the quantity needed.
- Critical path
- The longest chain of dependent tasks.
- Float
- Time a task can slip without delaying the finish.
Practice problems
Work each problem on paper first, then reveal the answer to check.
Why does Keelson freeze a package after release?
Show answer
So late changes go through the change process rather than being made informally at the machine.
Why does saving an hour on a non-bottleneck resource not raise output?
Show answer
Work still waits at the bottleneck, which limits the shop's output.
A shop has 8 hours a day for a job that needs 2,000 kilograms a day. What is the takt?
Show answer
250 kilograms per hour.
What does float on a task mean?
Show answer
The time it can slip without delaying the package finish.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.