top of page

Measuring Utilization With Simple Downtime Codes


Measuring utilization with simple downtime codes: a practical 5-code set for CNC shops to capture decision-grade downtime across shifts—without a bloated list

Measuring Utilization With Simple Downtime Codes

More downtime codes do not create better utilization data. In most CNC shops, bigger lists create slower choices, more guessing, and more “other” entries—until utilization turns into a shift-to-shift argument instead of an input you can run the floor on.


If your ERP says jobs are “in process” while you can still find pacer machines sitting idle, the problem usually isn’t effort—it’s classification. Measuring utilization with simple downtime codes is about capturing decision-grade loss categories consistently, across days, nights, and weekends, without turning coding into a taxonomy project.


TL;DR — measuring utilization with simple downtime codes

  • Downtime code lists fail when they’re too granular to pick quickly and consistently.

  • A “good” code is one an operator can select in under 3 seconds with no debate.

  • Use 5 primary codes that map directly to owners: scheduling, materials/tooling, setup, programming, and maintenance.

  • Write tight boundaries (“use when / don’t use when”) so the same stop gets the same code on every shift.

  • Measure utilization from runtime vs planned production time; review a weekly downtime-by-code Pareto.

  • Fix process issues (dispatch cadence, kitting, program release) before considering new equipment.

  • Keep the primary list stable; add notes or a lead-only tag for detail instead of adding more codes.


Key takeaway Utilization doesn’t improve when you “explain downtime better”—it improves when you can see, quickly and consistently, where hours are disappearing by shift and by cell. A small, enforceable code set closes the gap between ERP status and actual spindle behavior, making capacity recovery actions (dispatch, staging, program readiness) straightforward to assign and verify.


Why most downtime code lists fail in CNC shops

The most common failure mode is simple: too many codes forces operators to guess. When a machine stops, the person closest to it has seconds—not minutes—to decide what bucket the stop belongs in. If the list is long or the wording is fuzzy, people default to what feels safest (“setup,” “waiting,” “other”), and the data becomes noisy fast.


Multi-shift reality makes this worse. Night shift may label frequent stops as “waiting,” “no job,” “setup,” or “material” based on who they ask (or whether anyone is available to ask). Day shift then disputes the report because the categories don’t match what they see. That’s how utilization turns into a debate instead of a decision tool—especially when the owner or ops manager can’t personally watch every pacer machine across 2–3 shifts.


Granularity feels precise, but it’s a compliance killer. A list with 30–60 micro-causes might look “professional,” yet it slows coding, increases miscodes, and delays action. The goal isn’t perfect classification; it’s day-to-day operational visibility: where time is leaking, which team owns it, and what you do next.


If you need the broader framework for reading utilization patterns and turning them into capacity decisions, start with machine utilization tracking software. This page stays focused on the practical piece most shops get wrong: a minimal downtime code set that produces usable data.


What “simple downtime codes” must accomplish (and what they don’t need to do)

“Simple” doesn’t mean vague. A simple code set has enforceable requirements that protect consistency across people and shifts. First, each code must be selectable fast—think under 3 seconds—without scrolling through a long menu. If coding feels like paperwork, it won’t survive nights, weekends, or the busiest changeover days.


Second, the codes must be mutually understood. That means short definitions plus a couple examples so “waiting on job” means the same thing to the lead on first shift and the operator on second. This is where many shops get stuck: they write labels, not definitions.


Third, each code should map to an owner. If a code can’t be assigned to a function—ops/scheduling, programming, materials/tooling, maintenance—then even perfect data won’t create action. Utilization visibility is only valuable if it drives faster decisions: dispatch discipline, staging expectations, program release timing, or who covers the tool crib on nights.


What these codes do not need to do: capture root-cause detail. Root cause is a second step. The primary job is to separate categories of lost cutting time so you can decide where to investigate. If you want an overview of practical approaches to capturing stop reasons (without getting stuck on dashboards), see machine downtime tracking.


Keeping your reason codes simple for operators is the first step to getting accurate information. If you're curious about how those simple taps on a tablet translate into your reporting, check out our deep dive on structuring machine breakdown downtime data and reason codes behind the scenes.


The 5 downtime codes that usually drive utilization leakage

The point of a short list is coverage: capture most actionable downtime with the fewest choices. In CNC job shops, five categories typically account for the majority of “we thought it was running” hours that disappear—especially when you compare day vs night behavior.


1) Waiting on job (dispatch not ready)

Use when the machine is available but there is no approved next job at the machine: traveler isn’t there, priority changed, WIP is missing, or nobody can tell the operator what to run next. Owner: scheduling/ops.


2) Waiting on material/tools/fixtures (kitting & staging)

Use when the next job exists, but the machine can’t cycle because something physical is missing: material, inserts, gages, fixture, jaws, holders, or a preset tool list. Owner: materials/tool crib/area lead.


3) Setup/changeover (including prove-out when it’s part of changeover)

Use for planned changeover work: fixture swap, tool loading, offset entry, warm-up, first-piece checks that are inherently part of getting the next job running. Owner: production/lead (and sometimes process engineering).


4) Program/engineering not ready

Use when the machine is waiting on information: NC program, ops sheet, setup instructions, tool list, first-article direction, offsets not confirmed, or an open engineering question blocking start. Owner: programming/engineering.


5) Unplanned stop (breakdown/alarms/crash)

Use for unexpected interruptions: breakdowns, persistent alarms, crashes, or failures that require maintenance/repair to restore normal operation. Keep the definition tight so it doesn’t become a dumping ground for “we’re stuck.” Owner: maintenance (or whoever restores the machine to runnable condition).


These five codes are intentionally not a root-cause library. They are the fastest path to “where should we apply pressure this week?” If you’re thinking about systems that collect and organize this kind of floor data across a mixed fleet, see machine monitoring systems for the operational considerations.


Definitions that prevent operator debates (tight wording + examples)

The difference between “simple” and “sloppy” is boundaries. Use a one-line definition plus “use when / don’t use when” so the same stop gets the same label regardless of who is working the machine.


Rule of thumb: choose the code that best explains why the spindle is not cutting right now. Not what started the chain of events three hours ago—what is blocking cycle time at this moment.


Code

Use when

Don’t use when

Waiting on job

There is no released/approved next job ready at the machine.

The job exists but material/fixture/tools/program are missing (use the specific waiting code).

Waiting on material/tools/fixtures

Job is known, but a physical item is missing to start or continue.

You’re actively changing over (setup) or you’re blocked by instructions/program.

Setup/changeover

Planned work to transition to the next job, including first-piece activities that are part of normal changeover.

You cannot proceed because a program/ops sheet/tool list is not available (use Program/engineering not ready).

Program/engineering not ready

Blocked by missing or unclear information needed to run safely/correctly.

Everything is ready, but you’re waiting for the next dispatched job (Waiting on job).

Unplanned stop

Machine cannot run due to an unexpected equipment issue requiring intervention.

Normal setup, normal waiting, or a preventable staging miss (don’t hide process problems here).


Mini-walkthrough - 1 (complex list vs simple list): A machine finishes a job at 9:40 pm. The next job is technically on the schedule, but the correct jaws are in inspection and the inserts for the rougher aren’t in the crib. In a complex code list, night shift might choose “waiting,” “no job,” “tooling,” or “material,” and day shift will challenge the report because each label implies a different problem. Under the simple set, the stop is consistently “Waiting on material/tools/fixtures,” which points directly to staging/kitting and tool crib coverage—no debate required.


Required scenario (night shift inconsistency): This is where the code set resolves the mismatch. If nights keep calling stops “setup” because they’re trying to get ready but are missing items, and days call the same pattern “material,” your utilization story fragments. Tight definitions align the labeling so you can see whether the true driver is job readiness (dispatch/program) or staffing/coverage (tools/material availability), instead of blaming a shift.


Add “Other (needs review)” only if you commit to a weekly cleanup. Otherwise “other” becomes permanent. The discipline is: if “other” shows up, you either clarify an existing definition or fix a process that’s creating confusion—without adding a sixth primary code.


How to measure utilization using these codes (simple math + reporting view)


Before you calculate anything, define “planned production time” so you don’t fight about the denominator. Many shops exclude non-production blocks like lunch, meetings, and planned training. The key is consistency: pick a definition, document it, and apply it across shifts and cells.


Utilization (illustrative example only) can be treated as: Utilization = Runtime / Planned production time If a cell has 40 planned hours in a week and records 26 hours of runtime, utilization is 26/40. The value isn’t the percentage itself—it’s the downtime-by-code breakdown that tells you what to fix next.


The management view that matters is a weekly downtime-by-code Pareto (by cell, then by shift). You’re looking for repeatable patterns: “Waiting on job” spikes on second shift after 8 pm; “Program/engineering not ready” clusters around first-article work; “Waiting on material/tools/fixtures” dominates a high-mix area.


Mini-walkthrough - 2 (weekly view → operational decision): A high-mix cell shows “low utilization,” and the instinct is to blame setup time or buy another machine. The downtime-by-code view shows the bigger bucket is actually “Waiting on material/tools/fixtures”—long gaps between cycles because jaws, holders, or inserts aren’t staged. That drives a specific fix: implement a kitting expectation (what must be at the machine before a job is released), assign ownership (lead/tool crib/materials), and review misses in a short daily standup.


Required scenario (late programming releases): If machines sit idle between jobs because programs and ops sheets are late, “Waiting on job” and “Setup” will hide the real constraint. A clear “Waiting on program/ops sheet” (Program/engineering not ready) code makes the capacity impact visible without arguing anecdotes. It also gives programming a prioritization signal: pre-release the next job earlier in the day, or establish a cutoff time for night shift readiness.


Mid-article diagnostic (5-minute check)

Pull one week of stops (even if it’s manual notes). If more than a handful end up as “other,” “waiting,” or “setup” with no consistent meaning, your utilization number is not stable enough to manage from. Tighten definitions first; then look at automation options that reduce reliance on someone “with a clipboard” across shifts.


If you have a lot of raw machine-state data and need help translating patterns into plain-language actions for leads and supervisors, an AI Production Assistant can be useful for summarizing what changed week-to-week without turning the discussion into “whose notes are right.”


Rollout in a multi-shift shop: make it stick in 2 weeks

Rollout fails when it’s framed as “everyone start coding everything.” Start with a pilot cell or a small set of pacer machines where lost time matters and where leadership will actually review the data. You’re building trust first, not coverage.


Train with 10 real examples from your shop. Use photos or quick notes: “machine finished job, next job staged but missing soft jaws,” “alarm cleared but program question unresolved,” “operator waiting for dispatch.” Have day and night shift leads label them independently, then align on the definition boundaries.


For the first week, do a short daily audit: review any “Other (needs review)” and the top miscodes, then adjust wording—not the code list. This is how you prevent the night-shift “waiting/no job/setup/material” inconsistency from becoming permanent.


Set a clear trigger for when a code is required, such as “stop longer than X minutes.” Pick an X that fits your environment (many shops start in the 5–15 minute range). The objective is to capture meaningful loss without forcing constant interaction during normal micro-stops.


As you scale, cost and effort are usually tied to install friction, support expectations, and how you manage licensing—not just the software line item. If you want to understand how packaging typically works (without getting buried in numbers), review pricing for the implementation-level considerations.


Common failure modes (and how to correct them without adding codes)

The goal is to keep the primary five codes stable. When things go wrong, the fix is almost always definition tightening, coaching, or process ownership—rarely “add more codes.”


Failure mode: “Unplanned stop” becomes a dumping ground

If “Unplanned stop” balloons, it often contains process problems: missing tools, unclear instructions, or “waiting for someone.” Correct it by tightening the definition: unplanned stop must involve an equipment condition that prevents normal operation and requires repair/intervention to restore run capability. Then coach with examples for a week so operators trust they won’t be punished for choosing the “waiting” codes.


Failure mode: “Waiting on material/tools/fixtures” stays high

Required scenario (high-mix gaps due to missing items): This is common in high-mix cells where utilization looks low, but the real issue is gaps between cycles. Don’t relabel it as “setup” to make the chart feel better. Implement a kitting/staging SLA: define what “ready” means (material, fixture, critical tools, gages, traveler) and who owns it by shift. If nights lack tool crib coverage, schedule coverage or pre-stage critical items before handoff.


Failure mode: high “Waiting on job” despite “full schedules”

This is the ERP vs reality gap in plain form: the schedule says work exists, but the machine can’t run it. Fix with dispatch cadence and next-job readiness checks: at shift change (and before breaks), confirm the next job is physically staged and approved. If priorities change mid-shift, make the change visible where the operator is making decisions, not just in an office system.


Failure mode: you want more detail, so the list starts growing

If you need detail, add notes or a secondary tag used only by leads—not more primary codes. Example: keep “Waiting on material/tools/fixtures” as the main code, but allow a lead-only tag like “tools not preset” or “fixture in inspection” for weekly problem-solving. That preserves shop-wide consistency while still supporting targeted fixes.


If you’re evaluating how to implement this without heavy IT overhead—and want to see how near-real-time capture plus simple codes works in a mixed fleet—schedule a working session and bring one week of your current stop notes or ERP timestamps. schedule a demo.

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