Guides · 23 October 2026
Which CNC jobs lose money? Comparing quoted and actual hours
Most shops know their busy months from their quiet ones. Far fewer know which jobs actually made money. The quote says 25%; the bank account says something else; and nobody can point to the job, the customer or the machine where the difference went. Finding out takes two things: the hours each job really took, and a fair way to cost them.
Log time per operation, not per job
A total like “the brackets took 20 hours” tells you the job ran long, but not why. Record time against the operations you quoted:
- Setup: machine time spent getting ready, fixtures, tools and the first part checked.
- Run: machine time cutting parts, for the whole batch.
- Labour: hands-on time that is not machine time, such as deburring, inspection and loading a second machine.
Operators will only do this if it takes seconds: a phone, the job, the operation, a number. Rough is fine. Ten minutes either way on a two-hour setup does not change the answer.
Cost the job again at the quoted rates
To judge the floor, keep everything else still. Take the quote, swap the quoted minutes for the actual ones, and keep the machine and labour rates, overhead and admin percentages that were in the quote. Any difference is then what happened on the floor, not a rate you changed since. Material, outside processing and programming stay as quoted unless you have the real figures.
profit kept = price − (quoted cost + extra minutes × rate × (1 + overhead) × (1 + admin))
A worked example
50 aluminium brackets, one milling operation at A$85 per machine hour, labour A$65 per hour, material A$260, anodising A$160, CAM programming A$190, manufacturing overhead 12%, admin 8%, priced for a 25% return on the full cost.
| Quoted | Actual | |
|---|---|---|
| Setup (machine minutes) | 75 | 150 |
| Run (machine minutes, 52 started) | 754 | 900 |
| Labour minutes | 90 | 110 |
| Full cost | A$2,276.37 | A$2,681.28 |
| Price to the customer | A$3,035.16 | A$3,035.16 |
| Profit kept | A$758.79 (25.0%) | A$353.88 (11.7%) |
The job still made money, but less than half of what was quoted. The breakdown says where: the setup took twice as long (A$106 of machine time before overhead), the cycle ran about 19% over (A$207), labour a little (A$22). That is two different problems. A long setup on a new job is often a one-off. A cycle time that runs 19% long will run 19% long on every repeat order, until the estimate changes.
Look for patterns, not single jobs
One bad job is noise. Group finished jobs and look for the same answer twice:
- By customer: tight tolerances, extra inspection or late changes that the price never covered.
- By process or machine: one machine's setups always run long, or turning cycles are consistently optimistic.
- By quantity: small batches losing money because setup and programming are spread over too few parts (see pricing small batches).
- By material: stainless or titanium jobs where the cutting data was borrowed from aluminium.
Use the middle value (the median) of several jobs rather than the average, so a single disaster does not swing the result. When a pattern holds over three or more jobs, adjust the estimate for that machine or process, and check again after the next few.
Close the loop on the next quote
The point is the next quote, not the post-mortem. If setups on one machine take 1.4 times what you quote, quote them 1.4 times longer, or tell the customer why the first batch costs more. If a customer's jobs keep losing money, price them up or let a competitor have them. Both are easier to do with numbers in front of you than with a feeling.