A BOM that looks like a car
Sample data is part of the product. Six data sets, each answering one question, and a realistic SUV whose depth comes from subassemblies carrying their own parts, the way a real BOM's does.
- Project
- STP: Vehicle Cost Platform, part 3 of 10
- Published
- October 5, 2026
- Reading time
- 2 min read
Sample data is part of the product. A generated tree of "Part 0042" proves speed but convinces nobody, and a four-node fixture proves correctness but can't show anything else. So STP's seed ships one data set per question someone evaluating it will ask.
Data sets with a purpose
Six vehicle models, from 4 nodes to 20,000. The small ones are for checking by hand, the middle ones for showing the product on something that looks real, and the big ones for speed and limits.
The range is modeled on a premium hybrid carmaker:
- a hybrid SUV, with a 1.5-litre engine, a 50 kW motor and a 1.4 kWh battery;
- a V6 plug-in hybrid saloon;
- an electric saloon;
- an electric kart, small enough to check on paper.
Every part lives in one shared catalog library, used by both the backend's seed and the ERP simulator, so the two can never disagree about a part.
Where depth comes from
Generated trees get depth by nesting arbitrarily. Real BOMs get it from subassemblies that carry their own parts, and from branching at every level. In the large SUV, a seat carries its adjustment actuators, an actuator carries its geared motor, the geared motor carries its DC motor, and the motor carries its rotor, ten levels below the vehicle.
Electronic control units go just as deep (board, assembled board, power stage, converter, component). Built that way, 55% of all nodes and 70% of leaves sit eight levels or more below the root.
Two more traits make it a graph rather than a tree, as in a real BOM:
- Mirrored parts get their own references. The same subassembly at several positions (left and right, front and rear) is a separate part each time.
- Fasteners are shared. Screws and connectors stay one part across hundreds of parents.
Both exercise the partial recomputation, which has to follow every parent of a shared part.
Plausible, then calibrated
Raw, the numbers were absurd, so each model was calibrated in steps:
- The generated large BOM first cost 35 million euros and weighed 1,400 tonnes, because quantities multiply across six levels. The seed sets assemblies to quantity 1, then scales every price and weight by a single factor to land on a believable compact car.
- The realistic SUV came out at 43,800 EUR, cheap for a premium vehicle, so its parts carry a premium factor of 1.6.
- Market prices were then set so that every vehicle shows a margin between 8% and 15%, and tests check it.
The hybrid SUV's market price is the most constrained number in the project. At 42,550 EUR it's profitable at 10,000 vehicles a year, fragile when the dollar gains 10%, and profitable again at 15,000, which makes it the model that shows what scenarios are for. Recalibrating that after any change to the range is now a step of its own.
The catalog grew from 467 to 2,389 parts along the way, and the ERP simulator serves all of them. The stress test makes the full seed about twenty seconds longer, so most seed tests skip the generated BOMs and a single test covers them.