top of page

How to Calculate OEE Formula (Step-by-Step for CNC)


How to calculate OEE formula: the exact math, required inputs, and two CNC examples—so Availability, Performance, and Quality stay consistent across shifts

How to Calculate OEE Formula (Step-by-Step for CNC)

If your OEE “improves” when a supervisor changes how breaks or changeovers are counted, you don’t have better performance—you have a measurement problem. In CNC job shops, the biggest OEE disputes usually come from fuzzy time boundaries (planned vs. unplanned) and inconsistent treatment of small losses like feed holds or prove-out time. That’s why two people can calculate two different OEEs from the same day on the same machine.


This guide is calculation-first: the exact formula, the only inputs you need, and worked CNC examples you can copy. The goal is repeatable math across mixed assets and multiple shifts—so OEE becomes a diagnostic you can act on, not a dashboard argument.


TL;DR — how to calculate oee formula

  • OEE = Availability × Performance × Quality (use the same time rules shop-wide).

  • Define Planned Production Time first; inconsistent breaks/changeovers make shift comparisons meaningless.

  • Availability uses Run Time ÷ Planned Production Time—do not “fix” Availability by moving stops into Planned Time.

  • Performance depends on a defensible Ideal Cycle Time (proven standard, not best-ever or CAM theory).

  • Feed holds, reduced feeds, and optional stops typically belong in Performance loss, not Availability.

  • Quality is Good Count ÷ Total Count; decide (and document) how rework and first-article rejects are counted.

  • Use OEE to locate “utilization leakage” categories before you consider more machines or overtime.

Key takeaway OEE only becomes comparable across machines and shifts when you lock down (1) the time window you’re measuring and (2) where each loss type belongs. When your ERP or end-of-shift notes don’t match actual machine behavior—especially around breaks, changeovers, and short interruptions—Availability and Performance get distorted. A consistent baseline surfaces hidden time loss patterns by shift and turns OEE into recoverable capacity, not a debate.


The OEE formula (and the only inputs you need)

The core equation is straightforward:


OEE = Availability × Performance × Quality (typically expressed as a percentage).


To calculate it, you only need five inputs:


  • Planned Production Time (the time you intended the machine/cell to be available to produce)

  • Run Time (Operating Time—time the machine is actually producing/cutting)

  • Ideal Cycle Time (or a target rate, if you use a rate-based method)

  • Total Count (all parts produced/attempted in the window)

  • Good Count (parts that meet spec per your policy)

In CNC terms, Total Count should include scrap, first-article rejects, and any parts that required rework (even if they eventually ship). Good Count is what you consider conforming output—often “shippable without additional rework,” but you must decide and document this (especially if you frequently rework and still ship).


Rule that prevents most arguments: if you can’t define time boundaries consistently, OEE comparisons are meaningless. That includes comparisons between Shift 1 vs. Shift 2, a lathe vs. a mill, or a standalone machine vs. a pallet system.


Step 1 — Set the time baseline: Planned Production Time vs. Run Time

Start by setting your baseline window. Planned Production Time is the time you intended the machine to be available for production. You typically exclude planned shutdowns (e.g., holiday closure) and other deliberately scheduled non-production windows. The key is to be explicit about what you do with breaks, meetings, and planned clean-up.


Next, define Run Time (Operating Time): the time the machine is actually producing. In CNC shops, you’ll need a clear rule for borderline activities like warm-up cycles, probing routines, tool touch-offs, and in-process gauging. Some shops treat certain probing as part of the cycle (Performance), others treat it as planned non-cut time (Availability). Either can work—what fails is switching the rule by shift or by supervisor.


Availability is then:


Availability = Run Time / Planned Production Time


Multi-shift guideline: keep planned breaks consistent across shifts, or document exceptions and label them. Don’t mix “scheduled time,” “staffed time,” and “planned production time” without stating which one you’re using. This is exactly how a two-shift lathe can show Shift 2 “beating” Shift 1 when the only real difference is how changeover and breaks were categorized.


If you’re trying to reconcile these definitions with reality, it helps to pair your OEE math with disciplined event capture (what stopped, for how long, and on which shift). That’s the practical bridge between ERP-reported time and actual machine behavior, and it’s where structured machine downtime tracking becomes a capacity tool rather than an administrative chore.


Step 2 — Calculate Performance (and choose an Ideal Cycle Time that won’t sabotage you)

Performance answers: “When the machine was running, did it run at the expected pace?” The most common time-based formula is:


Performance = (Ideal Cycle Time × Total Count) / Run Time


Some shops prefer a rate-based view (Actual Rate / Ideal Rate). Either is fine—pick one method and keep it consistent across the shop so you can compare machines, shifts, and part families without redoing the math.


The make-or-break input is Ideal Cycle Time. In high-mix environments, “ideal” should mean a defensible standard, not:


  • the best-ever cycle someone hit once

  • a theoretical CAM estimate that ignores real probing/handling

  • an outdated standard that didn’t survive a program revision

Now place micro-losses correctly. On a high-mix mill running short jobs, Performance is often where you see the real leakage: feed holds, reduced feeds/speeds, optional stops, first-article adjustments, and program prove-out. If you incorrectly label these as “downtime,” you inflate Availability and hide the very losses you need to fix. If you want the metric to point to action, keep the taxonomy simple: stops where the machine is not producing reduce Availability; slow/paused production while “running” reduces Performance.


If you’re standardizing how to capture run/idle states and pace across a mixed fleet (new controls plus legacy), review what’s typically included in machine monitoring systems—not for feature shopping, but to understand which inputs must come from the machine versus operator context.


Step 3 — Calculate Quality (what counts as a defect in a job shop)

Quality is the simplest formula and the easiest place to “game” unintentionally if policies aren’t clear:


Quality = Good Count / Total Count


Define these CNC realities up front:


  • Scrap: nonconforming part that cannot be brought to spec.

  • Rework: part that can be corrected (extra op, re-cut, deburr beyond standard, etc.). Decide whether a reworked part is counted as Good (many shops do) and document it.

  • Concessions/deviations: if a part ships under deviation, make a consistent rule—either count as Good (with documentation) or treat as not-good.

First-article rejects belong in Total Count. Excluding them makes Quality look better while hiding instability that actually consumed time (often showing up as Performance loss through adjustments and prove-out). For short runs, Quality can swing dramatically with one bad part; the calculation doesn’t change, but interpretation should. Use rolling windows (by part family or by week) to see whether you have a repeatable issue without rewriting the rules per job.


Worked example 1: Single CNC machine, one shift (full math)

Example: one CNC mill on a single shift. Numbers are plausible and intended for copy/paste practice.

Metric

Value

Planned Production Time

420 minutes

Stop Time (Unplanned + Planned)

90 minutes

Run Time

330 minutes

Ideal Cycle Time

3.0 minutes/part

Total Count

95 parts

Good Count

92 parts


Stop time breakdown (to show where losses “live”):


  • Setup/changeover: 35 minutes

  • Waiting on material: 20 minutes

  • Tool break + recovery: 25 minutes

  • Minor stops (door open, chip clear): 10 minutes


Now compute each component:


Metric

Calculation

Result (Percentage)

Availability

$330 / 420 = 0.7857$

$78.6\%$

Performance

$(3.0 \times 95) / 330 = 285 / 330 = 0.8636$

$86.4\%$

Quality

$92 / 95 = 0.9684$

$96.8\%$

OEE

$0.7857 \times 0.8636 \times 0.9684 = 0.657$

$65.7\%$


Two gotchas to watch:


  • Gotcha 1 (changeover): If one person removes setup/changeover from Planned Production Time but another leaves it in, Availability shifts dramatically and you’ll “discover” a performance difference that’s really just accounting.

  • Gotcha 2 (ideal cycle): If you set Ideal Cycle Time to a best-ever 2.5 minutes instead of a stable 3.0, Performance drops and the metric becomes a blame tool rather than a diagnostic.

Interpretation: Availability is the biggest lever in this example. The next question isn’t “how do we raise OEE?” It’s “which stop category is repeatable and controllable?” Waiting on material and long recoveries from tool breakage are different problems than changeover discipline. This is where pairing OEE with consistent utilization loss tracking helps you recover capacity before you assume you need more machines—see machine utilization tracking software for the broader framework.


Worked example 2: Mixed machine types / automation (pallet system or multi-op cell)

Automation makes “running” feel blurry: the pallet system can be cycling while operators are away, and a cell can be blocked or starved even though one machine is technically available. Before you calculate anything, choose your unit of analysis: per machine or per cell. Pick one, document it, and stick with it—otherwise your OEE won’t be comparable across assets.


Example: one palletized cell measured at the cell level for a day shift plus a planned lights-out window.



Metric

Value

Planned Production Time

600 minutes

Stop Time (inside window)

150 minutes

Run Time

450 minutes

Ideal Cycle Time

6.0 minutes/part

Total Count

70 parts

Good Count

68 parts


Stop time breakdown (automation-specific issues):


  • Robot/pallet fault recovery: 40 minutes

  • Blocked condition (downstream op not clearing): 35 minutes

  • Starved condition (waiting on upstream blanks/program release): 45 minutes

  • Planned changeover inside the window: 30 minutes


Where do blocked/starved land? If the cell is planned to produce but can’t because it’s waiting on upstream/downstream, that’s typically an Availability loss at the unit you’re measuring (the cell). The important part is not the label—it’s that you apply the same rule each day and each shift.


Metric

Calculation

Result (Percentage)

Availability

$450 / 600 = 0.7500$

$75.0\%$

Performance

$(6.0 \times 70) / 450 = 420 / 450 = 0.9333$

$93.3\%$

Quality

$68 / 70 = 0.9714$

$97.1\%$

OEE

$0.7500 \times 0.9333 \times 0.9714 = 0.680$

$68.0\%$


Comparability rules across assets: (1) keep your Planned Production Time definition stable (especially for lights-out), (2) standardize what “running” means at the chosen unit (machine or cell), and (3) don’t let cell-level OEE get compared to a standalone machine without explicitly stating the unit of analysis.


Common OEE calculation mistakes in CNC shops (and how to prevent them)

Most OEE issues in CNC shops aren’t math errors—they’re definition drift. Here are the repeat offenders and the prevention step for each:


  • Mixing scheduled time, staffed time, and planned production time without labeling. Prevention: write the chosen baseline on the report (e.g., “PPT excludes lunch; includes two paid breaks”).

  • Treating setup/changeover inconsistently (planned one week, unplanned the next). Prevention: decide whether changeovers are in Planned Production Time and treat them the same across shifts—this addresses the two-shift CNC lathe scenario where Shift 2 looks better simply because breaks and changeovers were handled differently.

  • Using inconsistent Ideal Cycle Times between part revisions or programs. Prevention: tie Ideal Cycle Time to a program revision/standard and update it intentionally, not casually.

  • Misplacing micro-losses (feed holds, prove-out, first-article tweaks). Prevention: keep these in Performance unless the machine truly stopped producing; this prevents the high-mix mill scenario from “hiding” the real leakage inside Availability.

  • Counting rework inconsistently; excluding first-piece problems. Prevention: define whether reworked parts count as Good and always include first-article rejects in Total Count.

Action rule: document your shop’s OEE definitions on one page and apply them across shifts and machines. That single page is what keeps your ERP-reported story from drifting away from real machine behavior—and it’s what makes OEE usable for fast decisions about where capacity is leaking.


If you’re already calculating OEE but still arguing about “what really happened,” the next step is tightening the input capture at the machine and shift level, then making interpretation faster for supervisors. Some teams use an assistant layer to summarize patterns (repeat stoppages, shift-specific idle clusters) so OEE becomes a daily diagnostic instead of a weekly spreadsheet exercise—see the AI Production Assistant for an example of that interpretation workflow.


Implementation note (cost framing without pricing numbers): if you move from manual logs to automated capture, keep the focus on data definitions first, then rollout. Evaluate total effort in terms of installation time, operator burden, and how quickly you can get consistent Planned Production Time/Run Time/Counts across your mixed fleet. If you need to sanity-check packaging and what’s included, start at pricing and map it back to the exact inputs used in this article.


If you want to pressure-test your current OEE definitions and see what your numbers look like with consistent boundaries (especially across shifts), you can walk through your machines and a recent day’s production in a working session. Use schedule a demo to review your inputs, agree on stop categorization rules, and confirm you can calculate OEE the same way on every machine—before you spend time debating the output.

Machine Tracking helps manufacturers understand what’s really happening on the shop floor—in real time. Our simple, plug-and-play devices connect to any machine and track uptime, downtime, and production without relying on manual data entry or complex systems.

 

From small job shops to growing production facilities, teams use Machine Tracking to spot lost time, improve utilization, and make better decisions during the shift—not after the fact.

At Machine Tracking, our DNA is to help manufacturing thrive in the U.S.

Matt Ulepic

Matt Ulepic

bottom of page