← Articles
MES/9 min read/ views

Why Adding a Rework Loop Made Our First-Pass Yield Go Up

Rework quietly breaks linear MES route models. How to bind visit numbers, dispositions, and equipment events to the right route step instance.

MESTraceabilityQualitySCADAProject Notes

The line didn't change, only the yield did

The week after rework handling went into the MES, first-pass yield climbed from 93% to 98%. Same equipment, same operators, same defects. What had actually improved was the speed at which failure records disappeared. A unit sent to rework and passed on the second try was overwriting the record of the first fail.

That is the most common rework accident. A fresh MES route is drawn as a straight line: start at step 10, finish step 20, inspect at step 30, ship at step 40. Add one loop to that line and the route becomes a state machine — and a state machine does not store history.

Model rework as a comment field or a manual spreadsheet adjustment and the MES will eventually lose one of these:

  • Where the unit physically is now.
  • Which route step it is allowed to run next.
  • How many times it has visited the same operation.
  • Which defect or disposition caused the rework.
  • Whether earlier process data should remain valid.
  • How WIP and yield reports should count the unit.

Rework handling is not only a quality feature. It affects dispatching, equipment interlocks, labels, historian context, and production reporting.

Separate current location from route history

Do not overwrite the original route history when a unit loops back. The MES needs both the current state and the full path taken.

A useful model keeps at least these records:

RecordPurposeExample
Current WIP stateShows where the unit is now and what action is allowedUnit A is waiting at Assembly Step 20
Route visit historyPreserves each pass through a stepStep 20 visit 1, Step 30 fail, Step 20 visit 2
Disposition recordExplains why the unit changed pathRework due to torque test failure
Quality statusControls whether the unit can proceedHold, rework, scrap, release
Genealogy linksKeeps material and equipment contextComponent lot used during both visits

The current state drives the operator screen. The history supports investigations and yield analysis. Mixing them into one mutable field creates confusing reports later.

The equipment-side standard has the same limitation. SubstrateProcessingState in SEMI E90 (Substrate Tracking) moves between NeedsProcessing, InProcess, Processed, Aborted, Stopped, Rejected, Lost and Skipped. Reprocess a substrate and the state goes back to NeedsProcessing — nothing in the state value records that it was Rejected a moment earlier. E90 is not a standard for counting visits. Counting is the MES's job.

Give each visit a sequence number

When a unit returns to the same operation, the second pass must not overwrite the first pass data. Use a visit number, pass number, or route step instance identifier.

For example:

UnitRoute stepVisitResultEquipmentTime
SN10045Press Fit1Fail downstream leak testPRS-0208:14
SN10045Leak Test1FailLKT-0108:22
SN10045Press Fit2CompletePRS-0309:05
SN10045Leak Test2PassLKT-0109:18

The detail that matters here is PRS-02 versus PRS-03. The second pass ran on a different press, and without a visit concept the analysis "units from PRS-02 fail leak test more often" cannot even be written.

Define allowed rework paths

Rework should be controlled by configured paths, not by free-text operator decisions. A route can allow several dispositions:

  • Return to the previous step for adjustment.
  • Send to a dedicated rework station.
  • Repeat the same test after inspection reset.
  • Move to engineering hold.
  • Scrap the unit and stop further processing.

Each path should define who can choose it, what reason codes are valid, and what data must be collected before release. For example, a failed torque audit may require supervisor approval and a new torque result before the unit can return to final test.

If every operator can move a unit to any earlier step, the MES becomes a workaround tool instead of a control system. Narrow the dispositions down to two or three, though, and the floor starts scrapping units in the system and quietly reviving them off it. Watch which paths people actually use, then freeze those into rules — not the other way round.

Count WIP and yield deliberately

Rework loops can make reports look wrong even when the shop floor is running correctly.

Common reporting traps:

  • Counting every route visit as a new unit start.
  • Counting a reworked unit twice in station throughput.
  • Treating first-pass fail and final-pass fail as the same metric.
  • Removing failed attempts from history after the unit passes.
  • Showing WIP at both the rework step and the original failed step.

Define metrics explicitly:

MetricSuggested definition
First-pass yieldUnit passes a defined inspection without entering rework
Rolled throughput yieldProbability of passing all steps without rework or scrap
Final yieldUnit eventually ships or completes after all dispositions
Station workloadNumber of visits handled by the station, including rework visits
Physical WIPCurrent units physically waiting or processing at a location

Watch equipment utilisation alone and rework is invisible. SEMI E10 files rework under Productive time — the same bucket as regular production and engineering runs. That classification is defensible; the tool really is working. It also means rework can double without moving E10 utilisation at all. The metric that sees rework lives on the yield side.

A station supervisor may care about visit workload. A quality engineer may care about first-pass yield. Finance may care about final good units. One report rarely satisfies all three without clear definitions.

Connect equipment events to the right route instance

When SCADA, PLC, or test equipment sends events to MES, include enough context to bind the data to the right visit.

Good event context includes:

  • Unit ID or carrier ID.
  • Operation or route step ID.
  • Route step instance or visit number if available.
  • Equipment ID.
  • Start and complete timestamps.
  • Recipe or program revision.
  • Test result and defect code.
  • Operator or automated station identity.

On a SECS/GEM tool this becomes a question about which SVIDs go into the S6F11 report body. Report content is fixed when the report is defined with S2F33, so "please add a visit number too" arrives later as a software change request to the equipment vendor. That request usually loses — you are asking for an SVID covering a concept the vendor's software does not track.

The side you can win on is the host. Keep exactly one open route step instance per unit and bind incoming S6F11 to that open instance rather than to a timestamp. Make the move transaction the only thing that opens and closes an instance, and the equipment never needs to know visits exist. The rule breaks in one case — the equipment event arrives before the MES has the move — and that is not a rework problem but the ordering problem covered in Every S6F11 Arrived and the Lot History Still Has Holes.

If equipment sends only unit ID and result and the host does not manage instances either, the MES is left guessing. That guess fails the moment the same unit returns to the same station within one shift.

Field checks before enabling rework

Before go-live, run a scripted unit through the full loop.

  1. Start a unit on the normal route and complete the first operation.
  2. Fail it at inspection with a real defect reason code.
  3. Send it to the configured rework path.
  4. Collect rework data at the rework or previous operation step.
  5. Return it to inspection and pass it.
  6. Verify WIP shows the unit in only one current location at each moment.
  7. Verify both first and second visit data remain visible.
  8. Verify first-pass yield reports the first failure and final yield reports the later pass.
  9. Verify labels, recipes, and equipment interlocks use the current route state.
  10. Verify an unauthorized role cannot choose restricted dispositions.

Do this with the same scanners, HMI screens, and equipment interface used in production. A rework loop that works only from an admin MES screen is not ready for operators.

Step 8 is the easy one to skip. Everything can look right on screen while the yield report is built from a separate view or an overnight rollup whose SQL reads only the last record in the route history. That was exactly the bug behind the 98% in the first paragraph.

Common failure modes

Failure modeWhat it looks likeFix
Route history overwrittenOnly the latest pass is visibleStore route step visits as separate records
WIP duplicatedUnit appears in two queuesUse one authoritative current state and transactional moves
Defect reason lostRework shows no root causeRequire disposition reason before route change
Equipment result attached to wrong passTest data appears under the first visitKeep one open route instance on the host side
Yield report improves artificiallyFailed first pass disappears after reworkKeep first-pass and final yield as separate metrics
Operators bypass routeManual move skips required repair dataRestrict dispositions by role and route rule

Keep the operator screen simple

The underlying model can be detailed, but the operator should see a clear next action:

  • Current unit and current route state.
  • Why the unit is here for rework.
  • Required repair or inspection steps.
  • Data fields that must be completed.
  • Whether supervisor approval is needed.
  • Where the unit goes next after pass or fail.

Visit number is not on that list. Operators rarely need to know which pass they are on, and putting it on screen invites the judgement that follows — second time round, close enough. Visits exist for reporting and traceability, not for work instruction.