Menu
Spare Parts Availability and Downtime: How to Measure the Link

Spare Parts Availability and Downtime: How to Measure the Link

Most plants cannot say how many downtime minutes went on waiting for a part. The wait reason code, the fields, fill rate denominators and a worked quarter.
Spare Parts Availability and Downtime: How to Measure the Link

Key takeaways

  • Almost no plant can answer how many downtime minutes last quarter were spent waiting for a part, because the stop and the part issue sit in records that never join.
  • Waiting for parts needs its own downtime reason and its own clock, and it splits into three sub-cases with three different fixes.
  • In the worked example below, 40.0% of repair downtime was waiting: 2,160 minutes out of 5,400.
  • The same storeroom honestly reports a 98.0% line fill rate and a 60.0% critical part fill rate, and only the second predicts a stopped line.
  • Three of the twelve waits were for parts that were on the shelf. Raising their stock level would have saved zero minutes and cost 248 EUR.

The one number nobody has

Ask a maintenance manager how many minutes of downtime last quarter were spent waiting for a spare part.

In most plants nobody knows, and the figure quoted is a memory of the two worst jobs.

That is a structural gap, not a failure of care. The facts that would answer it sit in three places, joined by nothing.

FactWhere it usually lives
The machine stopped at 14:02Machine data or downtime log
A technician was assignedThe work order
A part was requested at 14:40Nowhere
The part was issued at 16:20Inventory ledger
The machine restarted at 16:55Machine data

Row three is the gap. Most systems record the issue, when the storeroom handed the part over, and never the request, when the technician asked for it.

Without the request timestamp there is no wait to measure, only a distance between two events.

If your technicians book parts against a cost centre instead of a job number, this measurement is not hard, it is impossible.

That one rule, parts booked against the work order, is a schema decision in our CMMS data model.

How much to hold and when to order are separate questions, answered in safety stock vs reorder point and spare parts inventory management.

Waiting for parts is its own downtime reason

A four hour job with three and a half hours of waiting is reported as a four hour repair, so maintenance carries a storeroom number.

Give the wait its own reason code, at the same level as breakdown and changeover, never as a child of breakdown.

A child code is only reached by somebody who already chose the parent, so it gets picked at close, hours later. The rules it lives inside are in our guide to downtime reason code design.

Where the clock starts and stops

BoundaryDefinition
wait_startThe needed part is known and is not at the machine
wait_endThe part is in the technician's hand, at the machine

wait_start is not the moment the machine stopped, and not the moment somebody walked to the store.

It is the first moment a better stocked storeroom could have changed the outcome: the fault is diagnosed and the part is named.

wait_end is delivery at the machine, not the issue transaction. A part booked out at 16:20 and carried across a large site by 16:35 cost fifteen more minutes the ledger will never show.

Two rules keep the number defensible.

  • The wait window sits inside the downtime window. If the machine kept running while the part was on order, record the wait with zero downtime minutes.
  • Waiting time is not repair time. Subtract it before you compute mean time to repair, or publish both figures with the definition in the header.

A hall reporting a 150 minute mean time to repair may be reporting a 96 minute repair and a 54 minute logistics problem.

The three sub-cases

Sub-caseWhat the record shows
Not stockedNo part record, or a record with no min level
Out of stockOn hand was 0 at the moment of the request
Not foundOn hand was above 0, part located after a search

Not stocked means a stocking decision was never made. The wait is the supplier lead time, and no reorder point applies to a part with no record.

Out of stock is a level problem: the min was too low, the replenishment was late, or demand arrived in a lump.

Not found is a location problem. The stock was in the building and the plant paid downtime for a labelling failure.

The third case vanishes without this field. The system records the line as filled from stock, because it was, so the fill rate report shows no defect.

The fields that make the measurement possible

Six fields on the work order and six on the part issue line are enough.

Work order fieldWhat it holds
wo_noThe key both sides join on
asset_idMachine that stopped
downtime_startMachine stopped producing
downtime_endMachine produced again
wait_startPart named, not at the machine
wait_endPart delivered at the machine
wait_reasonnot_stocked, out_of_stock, not_found
Issue line fieldWhat it holds
wo_noThe join, never a cost centre
part_noYour part number
qty_issuedUnits handed over
issued_atTime­stamp of the issue
stock_on_hand_at_requestOn hand at wait_start
sourcestock, purchase, canni­balised

stock_on_hand_at_request decides the sub-case, and it has to be written at the moment of the request.

Recomputed later it is worthless. A delivery arriving after the technician gave up makes the part look available for a stop it did nothing to prevent.

source is the second field almost nobody keeps, and it finds the stockouts you are not counting.

sourceWhat actually happened
stockIssued from the storeroom
purchaseBought or expe­dited for this job
canni­balisedTaken off another machine

The third row matters most. A part stripped off a standby machine appears as a stockout nowhere, and the plant now owns a second dead machine.

Count those lines into the stockout total. They are stockouts paid for with an asset instead of time.

The repair side of the same work order is covered in our equipment failure record data model.

Capturing the request without a new system

The objection is that technicians will not fill in two more timestamps. They will not, so make both a side effect of something they already do.

  1. wait_start is written when the part is added to the work order as required, before it is issued.
  2. wait_end is written when the issue is confirmed at the machine, for example by scanning the machine code with the part in hand.
  3. wait_reason is one choice of three, offered only when the two timestamps differ by more than a threshold you set.

Set that threshold at ten or fifteen minutes. Below it the wait is walking time, and classifying walking time kills a measurement in its first month.

Service level, fill rate and stockout rate

These terms get used as one measurement. They have four denominators and answer four questions.

MetricDenominator
Line fill rateRequest lines
Unit fill rateUnits requested
Stockout ratePart days
Cycle service levelReplen­ish­ment cycles
  • Line fill rate = lines filled complete from stock at the moment of the request ÷ total request lines × 100.
  • Unit fill rate = units issued from stock at the request ÷ units requested × 100.
  • Stockout rate = part days at zero on hand ÷ (part numbers × days in the period) × 100.
  • Cycle service level = replenishment cycles with no stockout ÷ replenishment cycles × 100.

The two fill rates diverge whenever anybody asks for more than one unit. Four bearings met with two is a failed line but a half filled request.

Cycle service level is the odd one out. It is a planning input, the target you feed into a safety stock formula, not something you read off last quarter.

Quoting that target as a measurement is how a storeroom reports 95% while technicians wait every week.

Stockout rate measures over time, not demand, so it is the only one that notices a part sitting at zero for six weeks.

Why one fill rate hides the other

A 98.0% line fill rate and a 60.0% critical part fill rate can describe the same quarter in the same storeroom.

In the example below, 20 of 450 request lines were for parts in the top criticality class, and 8 of those 20 could not be filled.

Those 8 lines are 1.8% of the quarter's request lines, and they carry the great majority of the downtime.

Publish the fill rate per criticality class, with the line count beside it. A percentage without its denominator is not a measurement.

Worked example: one quarter in a packaging hall

Six machines, 1 April to 30 June 2026, which is 91 days.

The hall recorded 40 unplanned repair work orders and 5,400 minutes of repair downtime across them.

The storeroom issued 450 request lines that quarter, and twelve of the 40 jobs waited for a part.

1. The twelve waits

Work orderPartWait
WO-26-0412BRG-620635
WO-26-0418SEAL-24V20
WO-26-0427BLT-8M-1200180
WO-26-0433BRG-620650
WO-26-0441PCB-SRV-03960
WO-26-0455FIL-0245
WO-26-0463BRG-620630
WO-26-0470VLV-25-PN16180
WO-26-0482SEAL-24V25
WO-26-0491PCB-SRV-03480
WO-26-0498BLT-8M-120080
WO-26-0505CHN-08B-375
Total12 waits2,160

Every figure is minutes of machine downtime inside the wait window, not clock time in the storeroom.

2. How much of the repair time was waiting

2,160 ÷ 5,400 × 100 = 40.0%.

The other 3,240 minutes were diagnosis, repair, refit and test, the work maintenance actually controls.

2,160 minutes is 36.0 hours. At an illustrative 180 EUR per hour of lost contribution on this hall, the wait cost 6,480 EUR.

Use your own rate and get it from finance. It is the only figure here that is a judgement rather than a record, so publish it alongside.

3. Fill rate, two ways

Nine of the 450 request lines could not be filled from stock at the moment of the request.

Line fill rate = (450 − 9) ÷ 450 × 100 = 441 ÷ 450 × 100 = 98.0%.

Twenty of the 450 lines were for class C1 parts, and 8 of those 20 were among the nine that failed.

ClassLinesFill rate
C12060.0%
C2 and C343099.8%
All45098.0%

C1 fill rate = 12 ÷ 20 × 100 = 60.0%. Everything else = 429 ÷ 430 × 100 = 99.8%.

The headline reached 98.0% because C1 lines are only 4.4% of the total, so they cannot move the average.

A storeroom manager reporting 98.0% is not lying. One reporting only 98.0% is hiding the number that matters.

4. Stockout rate over time

The hall holds 38 C1 part numbers, so the quarter contains 38 × 91 = 3,458 part days.

Five of those part numbers stood at zero on hand at some point, for 96 part days in total.

C1 stockout rate = 96 ÷ 3,458 × 100 = 2.8%.

Three true numbers from one quarter: 98.0%, 60.0% and 2.8%. Each is correctly computed and tells a different story.

The 2.8% is the most comforting and the least useful, because 30 quiet days at zero count the same as the one day the line went down.

5. The same quarter with the sub-case recorded

Read as twelve stockouts, the quarter says raise stock levels on twelve part numbers, and that would be the wrong action on five of them.

One extra field, wait_reason, splits the same 2,160 minutes into three different problems.

Sub-caseWaitsMinutes
Not stocked21,440
Out of stock7615
Not found3105
Total122,160

The shares are 66.7%, 28.5% and 4.9%, and they sum to 100% before rounding.

Only the middle row, 615 minutes and 1,845 EUR, is a stock level problem a higher min would have prevented.

The top row, 1,440 minutes and 4,320 EUR, is one part number that was never on the stock list at all.

6. The three parts that were on the shelf

WO‑26‑0412, WO‑26‑0418 and WO‑26‑0433 waited 35, 20 and 50 minutes for two part numbers, BRG‑6206 and SEAL‑24V.

In all three cases stock_on_hand_at_request was above zero and the part was found after a search, in the wrong bin.

That is 105 minutes and 315 EUR, and a min level rise on those two part numbers would have prevented none of it.

It would also have cost money. Raising BRG‑6206 from a min of 2 to a min of 6, at 62 EUR each, adds 248 EUR of stock that solves nothing.

The fix is a bin location on the part record, a label on the bin, and a cycle count.

Reading of the quarterMinutes a level rise could remove
Version A, twelve stockouts2,160
Version B, seven true stockouts on stocked parts615

The two versions describe exactly the same twelve stops and disagree by 1,545 minutes, which is 71.5% of the total wait.

That gap is the entire value of one extra field on the downtime record.

7. Ranking by minutes waited, per part number

PartRequestsMinutes
PCB-SRV-0321,440
BLT-8M-12002260
VLV-25-PN161180
BRG-62063115
CHN-08B-3175
FIL-02145
SEAL-24V245
Total122,160

One part number, PCB‑SRV‑03, carries 1,440 of the 2,160 minutes from two requests out of twelve.

That is 66.7% of the wait, and finding it needs no statistics. A Pareto on this table is the whole analysis.

Now notice what a request count would have told you. BRG‑6206 has the most requests of any part number and 5.3% of the minutes.

Rank by events and the plant goes shopping for bearings. Rank by minutes and it goes shopping for a spare control board.

The correlation question, answered honestly

The natural next step is to correlate stock availability with downtime month by month and report a coefficient.

On one plant's data that is almost always a waste of a quarter, for three reasons.

The sample is too small

A quarter of monthly data gives three points. A full year gives twelve.

With twelve monthly pairs, a correlation of 0.5 has a 95% confidence interval of roughly minus 0.10 to 0.83.

That interval contains zero, so the honest conclusion from a coefficient of 0.5 on twelve months is that you still do not know.

Twelve wait events will not support a coefficient anybody should act on.

The variables are mismatched

Monthly fill rate is a ratio over hundreds of routine lines, so it barely moves. Monthly downtime is driven by two or three large events, so it is spiky.

Correlating a stable ratio against a spiky total mostly measures which month held the big breakdown.

The confounder is obvious once you say it out loud

A serious breakdown stops the line and consumes critical parts in the same hour.

Downtime and part issues therefore rise together for a reason unrelated to how well the storeroom is run.

A positive correlation between parts issued and downtime is close to certain, and it says nothing about availability.

What to do instead

Rank part numbers by minutes waited and act on the top two.

The measurement is a sum, its denominator is stated, and no statistical method needs agreeing first.

For a number that moves with performance, track wait minutes as a share of repair downtime each month, next to your unplanned downtime total and your equipment availability figure.

In the example that share is 40.0%, and a quarter where it falls to 25% is a result you can defend.

Correlation becomes worth computing at hundreds of events, for example every wait line across a year and twenty machines.

Availability targets belong per criticality class

A single storeroom target averages a bearing you can buy in an hour with a control board that takes eight weeks, and describes neither.

ClassMeaningTarget
C1Stops the line, no work­around98% line fill
C2Reduced output or a work­around exists95% line fill
C3No pro­duction impactNone, order on demand

Those two figures are an example. Set your own against what a miss costs.

Criticality belongs to the part in its position on a specific asset, not to the part number in the abstract.

The same filter is C1 on the bottleneck and C3 on a standby unit, so the class lives on the asset to part link, not the part master.

Insurance spares are a decision, not a service level

An insurance spare is held because the consequence of not having it is intolerable, not because you expect to use it.

A fill rate cannot justify one, because with expected usage near zero it is undefined in most years.

Do the arithmetic on the consequence instead.

A gearbox with a 26 week lead time, on a line losing 180 EUR per hour across 16 hours a day and 5 days a week, exposes 26 × 5 × 16 × 180 = 374,400 EUR.

Against that, 40,000 EUR of stock is cheap. The honest part is the assumption underneath: that no workaround exists.

Write that assumption on the part record, with the date and the person who accepted it.

Then review it yearly. Some insurance spares in a long running storeroom protect a machine that was replaced years ago.

What to fix first

The wait_reason field plus the part number routes every wait to the right fix.

Pattern in the dataThe actual fix
Out of stock, short lead timeRaise min and max
Out of stock, long lead timeRaise min, add a second source
Not found, on hand above 0Bin location, label, cycle count
Not stocked, seen twice or moreAdd to the list with a min level
Not stocked, first occur­renceDecide on criti­cality, not on one event
Canni­balised from another machineCount as a stockout, then stock it
Short waits, same part, repeatedPoint of use box at the machine

The first occurrence row is where storerooms grow fat. One breakdown is not evidence of demand, and a stock list built from single events becomes a museum with a budget.

The long lead time row beats stock levels. Cutting eight weeks to one does more for availability than any min level, and costs nothing to hold.

The point of use row is the cheapest win. Filters, belts and seals used weekly on one machine do not belong in a store four minutes away.

Work the table top down, then re-measure next quarter with the same definitions. Change the definition and the stock together and you cannot say which moved the number.

Five questions to ask a vendor about linking parts to downtime

  1. Can one work order hold a wait window separate from the repair window? Ask to see wait_start and wait_end beside downtime_start, and a report that subtracts one from the other.
  2. Is on hand captured at the moment of the request? Stored then, or recomputed at report time? Only the first can tell a stockout from a search.
  3. Can a wait carry a sub-case? Ask them to record not stocked, out of stock and not found on three different jobs in front of you.
  4. Can you report minutes waited by part number? Grouping only by work order or machine cannot produce the ranking that decides what to buy.
  5. Does every fill rate print its denominator and filter by criticality class? A single storeroom percentage with no line count is the number that hides the problem.

Question two separates the tools. Few systems tell you what was on the shelf when the technician asked (equipment maintenance software).

How Fabrico helps

Fabrico is an OEE platform with a full CMMS built in, so the stop and the part issue can live on the same work order.

Parts sit in an inventory module with min and max levels, and consumption is booked against the work order that used it, the join this page depends on.

QR codes on machines and parts open the right record from a phone, and the iOS, Android and web apps let a technician book a part at the machine, not an hour later at a desk.

Downtime and micro stops come from PLC connections, IoT sensors and AI cameras, and notifications reach the storeroom while the machine is still down.

Reports cover stock and consumption per machine alongside downtime, OEE and MTTR, and you can export them.

What Fabrico does not do: it will not place a purchase order for you, and the wait window and sub-case above are a specification you configure.

Want to know how many of your downtime minutes were spent waiting for a part? Book a 30 minute demo with a Fabrico consultant, no commitment, or contact us with your questions.

Frequently asked questions

How do you measure downtime caused by spare parts?

Record a wait window on the work order, from the moment the needed part is named and missing to the moment it reaches the machine. Then sum the wait minutes that fall inside a downtime window, separately from repair time.

What is the difference between fill rate and service level?

Fill rate measures demand met, the share of request lines or units filled from stock. Cycle service level is a planning target over replenishment cycles, fed into a safety stock formula.

Should waiting for parts be its own downtime reason code?

Yes, at the same level as breakdown and changeover rather than underneath them. Folded into the repair it becomes invisible, and a storeroom problem gets reported as slow maintenance.

Can you correlate spare parts availability with downtime?

Not usefully on one plant and one year, because twelve monthly points cannot separate a real link from the month that held the big breakdown. Rank part numbers by minutes waited instead.

What fill rate should a critical spare part have?

Set the target per criticality class, for example 98% line fill on parts that stop the line and 95% on parts with a workaround. Always publish the line count next to the percentage.

Последно от блога

Начертайте вашата пътна карта за надеждност
Изчислете потенциалната възвръщаемост: запазете час за демонстрация
Начертайте вашата пътна карта за надеждност
Като натиснете бутона Приемам, вие давате съгласието си за използването на `бисквитки`, докато ползвате до този уебсайт. За да научите повече за това как `бисквитките` се използват и управляват, моля, вижте нашата Политика за поверителност и Декларация за Бисквитките