Three levels, and why they cannot be two

Identity, revision and iteration are three different things that most tools collapse into one field called version. The collapse is invisible for about a year, and it is not recoverable afterwards.

ERPShipped in segment S02 · 943 words
IDENTITYREVISIONS — WHAT OTHERS REFERENCE100-4420never changesrev Asuperseded 2025-11rev Breleased · superseded 2026-07rev Cin workITERATIONS — PRIVATE TO THE WORKSPACE.1.2.3Nobody outside can reference an iteration.unit #1420built 2026-03-14resolves to rev B, not to currentCollapse these three into one and engineering history stops being recoverable — and it cannot be recovered later.

What the three levels are

Identity is the part. 100-4420 is one thing in the world, and the number never changes — not when the geometry changes, not when the supplier changes, not when it moves to a different product. Everything else hangs off it.

Revision is a released state of that part which other things reference. Revision B is what shipped between November and July; a BOM line can point at it, a drawing can be issued against it, a qualification can name it. Revisions are public, ordered, and immutable once released.

Iteration is the work in progress inside the revision currently being made. Somebody saves eleven times on a Tuesday; those are iterations. Nothing outside the workspace can reference an iteration, which is precisely what makes it safe to be wrong in one.

The distinction people find hardest is that a released revision cannot be edited. That is not a restriction — it is what the word *released* means. If it could be edited, everything referencing it would silently change meaning.

The mechanism: revision is orthogonal to lifecycle

A common modelling error is to treat lifecycle states as revisions — draft, reviewed, released as though they were A, B, C. They are different axes and conflating them produces a system that cannot express *revision B, currently under review for obsolescence*.

In Manufacturing PLM an object record holds identity, object versions hold revision and iteration, and the lifecycle state machine runs alongside. A revision moves through states; a new revision starts a new pass through the same machine. Per-type revision schemes mean drawings can be numbered differently from parts without either being special-cased.

Revision references come in two kinds and the difference matters more than any other setting in the product. A pinned reference names an exact revision and never moves. A floating reference names the part and lets the revision policy decide — latest released, revision effective at a date, or the revision pinned at parent release. Both are legitimate; the mistake is not knowing which a given line uses.

The failure it prevents

A customer reports a failure on a unit built fourteen months ago. The question is what that unit actually contained.

In a system with one version field, the honest answer is a reconstruction from work orders and material issues — what was consumed, not what was specified. If a substitution happened on the floor and was recorded as the original, the reconstruction is confidently wrong. If the BOM was edited in place at some point, there is no record that it ever said anything else.

With three levels the question is a query: resolve the structure as at that date, for that unit number, at that plant. Every line names the revision that was effective, and the iterations that were in flight at the time are correctly invisible because nothing ever referenced them.

This is the single most expensive thing to get wrong, because the data to fix it does not exist retroactively. A tool that collapsed the levels for two years cannot be migrated into one that does not — the history is gone.

How it meets the rest of the product

The resolution engine takes revision policy as one of its four conditions, alongside effectivity, variants and plant scope. That is why a floating reference resolves differently depending on the date you asked about, and why the answer is reproducible.

Change control is the only route from one released revision to the next. A change names the affected objects and the revisions that will result, and release commits every one of them in a single atomic transaction — there is no state in which half a revision exists.

Workspaces make iteration safe. Work in progress is visible inside the workspace and nowhere else, so an engineer can restructure an assembly across a week without anybody downstream seeing a half-finished BOM. Optimistic locking and check-out expiry handle the case of two people and one part.

Deep copy carries a per-edge policy, so saving-as a product copies the structure but references the same released parts rather than duplicating them — which is the behaviour people expect and almost never get.

How it meets your ERP

Your ERP sees revisions and never sees iterations. That boundary is not a filter applied on the way out — an iteration is not a referenceable thing, so there is nothing to filter.

What publishes on release is the resolved structure at the change's effectivity, carrying the revision identifiers in whatever form the target models them: a BOM Revision in NetSuite, a Part Revision in Epicor, a versioned Production BOM in Dynamics 365. Where an ERP has no revision concept for a given object, the mapping is stated in the connector configuration rather than inferred.

Revision identity is Manufacturing PLM's under the system-of-record matrix, with one common exception: in SAP landscapes the material number itself is usually SAP's, and Manufacturing PLM holds engineering identity alongside it. That is a configuration decision recorded in the matrix, not a behaviour that varies quietly by deployment.

Where the boundary is

Manufacturing PLM does not track what was physically installed. A resolved structure says what a unit was *specified* to contain as at its build date. If the floor substituted an approved alternate and recorded it, that record lives in your ERP or MES; serialised as-built configuration is a separate capability that consumes both.

It also will not let you rewrite a released revision, including to correct a genuine mistake. The route is a new revision through a change, or a deviation if the intent is to permit something off-specification. Both leave a record, which is the point.

Facts

LevelsIdentity · revision · iteration — three, not one
IdentityNever changes, for the life of the part
Released revisionsImmutable — supersede, never edit
IterationsUnreferenceable from outside the workspace
LifecycleOrthogonal to revision, not a substitute for it
ReferencesPinned or floating, per line, always explicit
SchemesPer object type — drawings need not match parts
Not recoverableCollapsed history cannot be restored later

Frequently asked

What is the difference between a revision and an iteration?

A revision is a released state other things reference — a BOM line, a drawing, a qualification. An iteration is work in progress inside the revision being made, visible only in the workspace. Nothing outside can reference an iteration, which is what makes it safe to be wrong in one.

Why can a released revision not be edited?

Because everything referencing it would silently change meaning. That is what released means. Correcting a genuine error is a new revision through a change, or a deviation if the intent is to permit something off-specification — both of which leave a record that the correction happened.

Is a lifecycle state the same as a revision?

No, and conflating them is a common modelling error. They are different axes: a revision moves through lifecycle states, and a new revision starts a fresh pass through the same machine. Collapsing them makes revision B currently under obsolescence review inexpressible.

What is a floating child reference?

A line that names the part rather than an exact revision, letting the revision policy decide — latest released, effective at a date, or pinned at parent release. Pinned references never move. Both are legitimate; the mistake is not knowing which a given line uses.

Can drawings use a different revision scheme?

Yes. Revision schemes are configured per object type, so drawings can number differently from parts without either being special-cased in code. Custom schemes are supported for organisations whose existing convention predates the system and is not worth the disruption of migrating away from.

Does our ERP see iterations?

No, and not because they are filtered out. An iteration is not a referenceable object, so there is nothing to filter. What publishes on release is the resolved structure carrying revision identifiers in whatever form the target ERP models them.

Can we migrate history from a tool that collapsed these?

Not fully, and it is worth being blunt. If a previous system had one version field, the distinction between released revisions and in-progress saves was never recorded and cannot be reconstructed. You import what exists; the three levels start applying from that point forward.