← All posts

Traceability ·

Inventory records that admit uncertainty

When lots mix and batches split, the honest answer to "where did this go?" is sometimes "one of these two places." Factorial records that answer instead of inventing a cleaner one.

Orion Follett & Andrew PoggioneCo-founders, Factorial

Traceability is easy to promise and hard to keep. Serialized parts are the easy case: one part, one number, one place it went. The hard cases are the ones every real factory has. Fasteners pulled from two open bins. A batch of panels where some pass inspection and some don't. A coating step that turns one material into another.

A system that wants to look tidy will smooth those cases over. It will pick a lot, assign it, and move on. The record looks complete. It is also wrong, and nobody finds out until a supplier calls about a bad lot.

Factorial takes the other approach. Inventory records say what is known, and they say plainly where the knowledge stops.

Every operation is recorded

In Factorial, inventory is the digital record of the physical material in the factory. It can be created, installed, uninstalled, consumed, split, merged, and scrapped. Each operation is recorded with the task it happened on, the person who did it, the equipment used, the location, and the time.

The verbs are deliberately distinct, because they mean different things later:

  • Install puts one inventory line onto another, and can be undone. Installs build the as-built record of an assembly, many levels deep.
  • Consume is for material that can't come back out, like glue or paint. Consumed inventory had a productive use.
  • Scrap marks inventory as waste. A partial scrap is a split followed by a scrap.

Splits keep shared history

Splitting an inventory line creates two new lines. Their histories diverge from that point, and both keep the history from before the split.

Say a batch of ten car doors goes through inspection and three fail. The seven good doors are split off and continue to the next operation. The three bad ones are split off to be scrapped or reworked. Every door still carries the record of everything that happened to the batch before inspection. The lines can be merged again later, or stay separate for good.

Where certainty runs out

Now make it harder. Those ten doors each got a screw. Six screws came from Lot A and four from Lot B, installed across the batch without anyone recording which door got which. Then the batch is split into two lines of five.

Which line has the Lot A screws? Nobody knows. It could be either, or both.

Factorial says exactly that. Both lines show that screws from Lot A and Lot B could be installed on them, and each shows the expected split: three from Lot A and two from Lot B. That is an expected value, not a claim about where any particular screw went. The calculation is deterministic, so the same history always produces the same answer.

Serial-tracked inventory can't be split, since a serial is indivisible. Ambiguity only appears where the physical process actually created it.

kestrel.factorialhq.com
Three IGBTs from one supplier lot. Left: the board, controller, and drive unit they were built into. Right: the lot's lineage through an inspection split, a merge, and the split that installed them
Three IGBTs from one supplier lot in our demo factory. Left: what they were built into. Right: the lot's lineage through an inspection split, a merge, and the split that installed them.

Why honesty beats tidiness

The moment this matters is containment. A supplier reports that Lot A is out of spec, and quality needs to know which units used it.

A system that invented a clean assignment gives a confident, short list, and some of the affected units aren't on it. A system that records the ambiguity gives a list that may be a little longer, and every unit that could have used Lot A is on it. When the alternative is shipping a unit with a bad part, the longer list is the one to have.

The same history answers the question in both directions. Open any inventory line and see what it went into and where it came from, side by side.

Modeling transformations

Some material doesn't get installed. It gets turned into something else. For that, a create-and-consume pattern keeps the lineage intact.

Take a metal sheet that must be chemically coated before it's stamped into a body panel. A coating procedure creates a new Metal Sheet (coated) and consumes the original sheet into it. The stamping procedure requires Metal Sheet (coated) as its material, creates a Body Panel, and consumes the coated sheet into it.

The body panel now traces back to the exact sheet it came from. And because stamping requires the coated part, the process rule that a sheet must be coated before it's stamped is enforced by the data model, not by a reminder on the wall.

Merges keep records clean

The opposite of a split is a merge. Untracked inventory lines merge automatically when they arrive at the same location, so the record doesn't fill up with fragments. Lot-tracked lines can be merged by hand when they share a lot number. Either way, the history of what was merged stays with the result.

The goal is a record you can defend. That means writing down what happened, including the parts nobody could see, and never filling the gaps with a guess that looks like a fact.

Read more in the docs on inventory and inventory history.