You already have a cycle time — extracted from G-code, pulled from CAM, or reported by a monitoring tool. The problem isn't getting a number; it's that the number doesn't match what happens on the floor. This guide won't teach you how to build a cycle-time extraction pipeline from scratch — see our step-by-step extraction guide for that. Instead, it helps you diagnose why your existing estimate is wrong, using the pattern of the mismatch itself as the first clue.
TL;DR:
-
The shape of the mismatch — uniform, short-part-only, run-to-run, sudden-onset, CAM-vs-controller, or machine-specific — points to a different root cause before you touch a single line of code.
-
Most teams re-run their entire extraction model when only one input is actually wrong; a 10-minute triage test usually isolates the cause faster than a full re-audit.
-
Once you know the pattern, the fix is almost always one of four things: model the override, model the acceleration, separate deterministic from stochastic events, or reconcile the executed program against the reference file.
Quick Triage Table
Start here. Match what you're observing to the closest row, then jump to that section.
| What you're seeing | Most likely cause | First test to run |
|---|---|---|
| Real time is longer on every job, by roughly the same margin | Feed override, spindle ramp, or rapid traverse not modeled | Compare average feed override telemetry to the 100% programmed assumption |
| Mismatch only on short-segment or small-part programs | Simple geometric model ignoring acceleration/jerk | Isolate one short segment, simulate with and without a kinematic profile |
| Same program, different result on every run | Stochastic events (operator tasks, variable probing) mixed with deterministic ones | Run 5–10 cycles, compare median and standard deviation |
| Mismatch appeared suddenly, wasn't there before | Program revision drift, tool wear/offset change, controller or post-processor update | Diff the executed program against your reference file |
| CAM and controller disagree even in a dry run with no operator involved | Post-processor inserting hidden dwell/ramps, or canned-cycle expansion differs | Compare CAM-posted output to the program actually loaded on the control |
| Same program is accurate on one machine, wrong on another | Kinematic profile not specific to that machine model or controller firmware | Compare stored machine profiles against the physical machine's actual specs |
If more than one row applies, work top to bottom — uniform-offset causes are the fastest to rule in or out and often explain part of a more complex mismatch.
Symptom 1: The Real Time Is Longer on Every Job, by a Similar Margin
When every job — long or short, simple or complex — runs a bit longer than estimated by roughly the same percentage, the cause is usually something applied uniformly across the whole cycle rather than something buried in a specific move.
Likely Causes
-
Feed override in daily use. Operators or schedulers commonly run production at something other than 100% programmed feed. This never appears in the G-code text, only in controller telemetry.
-
Spindle ramp time. Reaching programmed RPM takes a few seconds per tool change; on programs with many tool changes, this adds up quickly and rarely gets modeled.
-
Rapid traverse assumptions. Treating G0 moves as instantaneous, or applying a single axis's rapid rate to a multi-axis move, understates rapid time.
First Test
Pull average feed override percentage from controller telemetry for a representative sample of runs and compare it to the 100% assumption baked into your estimate. If the average sits at 85–95% rather than 100%, you've likely found most of the gap. If overrides look normal, check spindle ramp and rapid handling next.
See exactly what feed override your machines are actually running, in real time, without asking operators to self-report.
Explore JITbase Production MonitoringSymptom 2: The Mismatch Only Shows Up on Short-Segment or Small-Part Programs
If long, steady cuts come in close to estimate but small parts or arc-heavy toolpaths are consistently underestimated, the geometric model itself — distance divided by programmed feed — is the problem, not any single missing input.
Likely Cause
Simple distance-over-feed math assumes the machine reaches full programmed speed instantly. In reality, axis acceleration limits, jerk-limiting filters, and cornering behavior mean short segments spend a meaningful share of their time accelerating and decelerating rather than cutting at steady speed. The shorter the segment, the larger the error — often 10–30% on programs dense with short moves. For the full method behind building a kinematic model rather than a geometric one, see our G-code cycle time extraction guide.
First Test
Isolate one representative short segment. Compute its time two ways: the simple geometric formula, and a kinematic simulation that accounts for the machine's axis acceleration and blending behavior. If the two diverge by more than roughly 10%, the program needs kinematic modeling rather than geometric approximation — not just for this segment, but for the whole job class.
Symptom 3: The Same Program Gives a Different Real Time Every Run
Some variability between runs is normal. The diagnostic question is whether that variability is random noise, or whether it's masking a deterministic event you haven't separated out.
Likely Cause
Operator-driven tasks — load/unload, in-process inspection, deburring, occasional probing — are sometimes deterministic (happens every cycle, roughly the same duration) and sometimes stochastic (happens occasionally, or takes a variable amount of time depending on the part or the operator). Treating a deterministic event as if it were part of fixed cut time, or lumping a stochastic event into the average, produces a cycle time that's technically correct on average but wrong for any individual run.
First Test
Run or pull 5–10 cycles of the same job and compute the median and standard deviation. A tight spread around the median points to a mostly deterministic process — any gap from your estimate is a fixed value you're missing. A wide spread points to a stochastic event; separate it out and model it as an allowance or probability rather than a fixed addition.
Symptom 4: The Mismatch Appeared Suddenly, on a Job That Used to Be Accurate
This is the most urgent pattern to investigate, because it usually means something changed — and whatever caused last week's accurate estimate to become this week's wrong one is worth finding before it affects other jobs too.
Likely Causes
-
Program drift. The program actually running on the machine is not the one you're timing against — an edit was made at the control and never synced back to the reference file.
-
Tool wear or offset changes. A worn tool or adjusted offset can change actual cut behavior without changing the program text at all.
-
Controller firmware or post-processor updates. A firmware update can change lookahead, blending, or canned-cycle behavior; a post-processor update can silently change how dwell or ramps are inserted into future posts.
First Test
Diff the program actually executing on the controller against your stored reference file. If they match, check the maintenance and tooling log for the affected date range before looking anywhere else — a firmware or post-processor change is a shop-wide event, not a single-job one, so check whether other jobs on the same machine or cell show a similar shift.
Symptom 5: CAM and Controller Disagree, Even With No Operator Involved
If a dry run on the controller — no manual intervention, no operator variability — still doesn't match the CAM-estimated or posted time, the disagreement lives entirely in software, and it's worth resolving before you validate anything else against this program.
Likely Causes
-
Hidden post-processor insertions. Some post-processors add dwell, spindle ramps, or safety moves that appear in the posted file but aren't obvious on a quick read.
-
Canned-cycle expansion differences. Fanuc, Siemens, and Heidenhain controllers can expand the same canned cycle into different underlying move and dwell sequences; CAM software may assume one behavior while the controller executes another.
First Test
Compare the CAM-posted output file, line by line, against the program actually loaded and running on the controller. If they're identical and the times still diverge, the difference is in controller-side canned-cycle or interpolation behavior — worth raising with the controller vendor if it isn't documented anywhere you can find.
Stop guessing at run-to-run variability. See operator interventions, tool changes, and machining time broken out separately, per cycle, without manual timing studies.
See JITbase Machine MonitoringSymptom 6: The Same Program Is Accurate on One Machine, Wrong on Another
When a program times out correctly on Machine A but not on Machine B — same G-code, same tooling — the estimate itself isn't the problem. The machine profile behind it is.
Likely Cause
A kinematic or timing model built around one machine's axis acceleration, rapid rate, or tool-change mechanism doesn't automatically transfer to a different machine model, even from the same manufacturer, and even less so across controller firmware versions. Reusing a single generic profile across a mixed fleet is a common shortcut that works until it doesn't.
First Test
Pull up the stored machine profile used for the estimate and compare its acceleration, rapid traverse, and tool-change-duration values against the physical machine's actual spec sheet and a fresh dry-run measurement. Version machine profiles per model and controller firmware rather than per shop.
The Diagnostic Loop, However You Got Here
Whichever symptom brought you to this page, the underlying loop is the same one: isolate the smallest piece of the mismatch you can test in isolation, simulate it two ways (with and without your suspected cause), capture real controller telemetry rather than a stopwatch, and adjust only the specific model parameter the test points to — not the whole pipeline. Re-running an entire extraction process from scratch when only one input was wrong wastes the time you were trying to save in the first place.
Preventing the Next Mismatch
-
Version your machine profiles. Track acceleration, rapid rate, and tool-change assumptions per machine model and controller firmware version, with a change date, so a future mismatch can be traced to a specific update.
-
Attach a confidence score to each program's estimate. A program validated against 10 live runs deserves more trust than one estimated from geometry alone — make that visible to planners. This is the same Performance factor that feeds directly into your OEE calculation, so an unreliable cycle-time input quietly skews a KPI well beyond scheduling.
-
Set a revalidation cadence. Quarterly for stable, unchanged jobs; immediately after any tooling, firmware, or post-processor change; within the first batch for any newly programmed job.
When the Real Fix Is Live Data, Not Another Audit
If you find yourself running this diagnostic loop every few weeks on different jobs, the underlying issue usually isn't any single symptom above — it's that your cycle-time inputs rely on periodic manual re-checks instead of continuous, automatic reconciliation between the program and what the machine actually does. At that point, the more durable fix is live telemetry that captures feed override, spindle state, and per-event timing automatically, so drift shows up as soon as it happens rather than after a planner notices a missed delivery.
Calculate what recurring cycle-time mismatches are actually costing your shop in missed schedules and buffer time.
Calculate Your ROIThe Bottom Line
A cycle-time mismatch is diagnostic information, not just an inconvenience — the shape of the gap tells you where to look before you touch your extraction model. Uniform gaps point to unmodeled overrides or auxiliary time; short-segment gaps point to missing kinematic modeling; run-to-run variance points to unseparated stochastic events; sudden onset points to program or firmware drift; CAM-versus-controller gaps point to post-processor or canned-cycle differences; and machine-specific gaps point to a profile that needs to be built per machine, not per shop. Diagnose the pattern first, and the fix is usually narrow and fast.
How do I know quickly whether the mismatch comes from my model or from what's actually happening on the machine?
Run a controller dry-run with no operator involvement and compare it to your estimate. If they still disagree, the gap is in your model or in CAM/post-processor/controller handling — not in operator or production variability. If the dry-run matches your estimate but live production doesn't, the gap is coming from something happening during real operation, such as feed overrides or operator tasks.
Should I trust the cycle time reported directly by the controller?
Use it as a reference point, not a final answer. Controller-reported estimates often assume idealized conditions — no feed override, instant tool changes, perfect acceleration — so they tend to run optimistic compared to real production. Validate against a handful of live, measured runs before treating a controller estimate as your standard time.
What size of mismatch is normal before I need to investigate further?
A gap within about 5 to 10 percent of measured time is typical for a well-validated estimate and usually isn't worth chasing further. A gap above roughly 15 percent is worth diagnosing using the patterns above, since it usually points to a specific, fixable cause rather than ordinary variability.
Can I diagnose a mismatch without stopping production to run tests?
Yes. Most of the tests above use data you can pull from existing controller telemetry or a handful of already-scheduled production runs rather than a dedicated test cycle. The one exception is the CAM-versus-controller dry run in Symptom 5, which is best run during an already-planned setup or changeover window rather than mid-production.
Related Articles
Production Planning and Scheduling for CNC Shops (Complete Guide)
Production planning and scheduling is the set of practices and...
-->