Manufacturing ERP for Small Producers: BOMs, Work Orders and Traceability
How a small producer moves from spreadsheets to multi-level BOMs, work orders with a material check, scrap-aware costing and lot traceability. A worked example of 100 jars, from recipe to a unit cost of $3.56.
Author
Anichur Rahaman
1 week ago11 min read2 views
The stock sheet says there are 14 kg of shea butter on the shelf, enough for the whole run. At 9:10 on a Monday, the owner of a small body-care workshop has just taken an order for 100 jars of balm for Friday. She walks to the store room and finds 10 kg. The other 4 kg went into last Thursday's batch, which nobody wrote down.
Then the supplier emails: one shea lot is under a quality review, and the lot number is on the invoice. Which jars contain it, and who bought them? The answer is somewhere in three spreadsheets and a notebook.
This article is about the small set of records that removes that morning: a multi-level bill of materials, work orders that move stock, and lot numbers that link inputs to outputs. You do not need an enterprise suite for any of it. You need the right records, kept at the moment work happens.
Where spreadsheets break first
A spreadsheet handles one product made by one person. It starts to fail when the recipe has levels, when two people work on the same day, and when a customer asks a question about the past.
The failures are specific. The stock count and the recipe live in different files, so a batch consumes ingredients on paper but not in the count. Scrap is invisible, so the cost per unit is always lower than reality. Purchases are decided by memory, so you find the shortage after the batch has started. And nothing connects a supplier lot to a finished jar.
All four problems have the same root: the plan, the stock and the cost are three separate documents. A manufacturing system joins them. One record, the work order, reads from the recipe, writes to the stock ledger and produces the cost.
The bill of materials is the recipe the system obeys
A bill of materials (BOM) lists every component needed to make one unit or one batch of a product, with quantities and units. Real products are rarely flat, so a BOM has levels. A jar of balm needs a jar, a lid, a label and the balm itself. The balm is its own sub-assembly with its own recipe: shea butter, coconut oil and beeswax.
One batch of 100 jars, three levels of demand: the base is a product in its own right, with its own recipe and its own loss.
Levels matter because each one can be stocked, bought or made on its own. You can make balm base in a larger batch and fill jars on another day. You can buy jars from two suppliers. The system explodes the BOM from the top down and adds the quantities that land on each raw material.
Two details decide whether the numbers can be trusted. Every line carries a unit and a conversion: the recipe says kilograms, the supplier sells 25 kg sacks, the scale reads grams. And every line carries a scrap percentage, the share of the component you expect to lose.
A worked example: 100 jars of body balm
An illustrative example, with made-up prices. Each jar holds 200 g of balm, so 100 jars need 20 kg of base. The base process loses about 5% in the pot and on the paddles. Components of the finished jar carry their own allowances: 2% for jars (cracked or dented), 5% for labels (misprints). This example adds scrap on top of the net quantity, so 5% of 20 kg is 1 kg extra. Some systems divide by (1 minus scrap) instead, which gives 21.05 kg. Pick one convention and use it everywhere.
Component
Per unit
Scrap
Batch requirement
Unit price
Cost
Balm base (made in-house)
200 g per jar
+5%
21 kg
from rows below
$158.55
Shea butter
0.55 kg per kg of base
in base
11.55 kg
$8.00/kg
$92.40
Coconut oil
0.35 kg per kg of base
in base
7.35 kg
$5.00/kg
$36.75
Beeswax
0.10 kg per kg of base
in base
2.10 kg
$14.00/kg
$29.40
Jar and lid
1 per jar
+2%
102 pcs
$0.60
$61.20
Label
1 per jar
+5%
105 pcs
$0.08
$8.40
Shipping carton
1 per 12 jars
rounded up
9 pcs
$0.90
$8.10
Total material
$236.25
The arithmetic is simple, which is the point. 21 kg of base times 0.55 is 11.55 kg of shea. 100 jars divided by 12 is 8.33 cartons, so you need 9. Software does this in a second, for every product, every time the recipe or a price changes. A spreadsheet does it only when someone remembers.
Work orders: the record that moves stock
The BOM says how to make a product in general. A work order says "make 100 of them now". It copies the BOM at the moment of release, so a later recipe edit does not rewrite a batch already on the floor.
Where a work order can stop: at the material check, until the shortage is bought and received.
Follow WO-1042 through the diagram. On release, the system explodes the BOM into the table above and compares each line with available stock, meaning on hand minus what other orders have reserved. Suppose only 10 kg of shea is free. The order is short by 1.55 kg, so the check fails and a purchase request is created for that shortage. When the goods are received into a new lot, the check runs again and passes.
Issuing materials moves them from the store into work in progress (WIP). The stock ledger gets one row per component and lot, each tied to WO-1042. Operations then log hours against the order: 2 hours melting and blending, 3 hours filling and labelling, 1 hour packing.
On completion you count. Say 100 jars pass and 2 are cracked. The system posts +100 jars into finished stock under a new lot, L-0927-A, at the computed unit cost, and posts the 2 lost jars as scrap with a reason code. The scrap allowance in the BOM already covered them, so the material variance is zero. If 22 kg of base had gone into the pot instead of 21, the extra kilogram would appear as a variance instead of disappearing into the average.
Costing: material, labour and overhead
A production cost has three parts. Material comes straight from the BOM and the lots actually issued. Labour is the hours logged on the order times a rate. Overhead is the part nobody logs: rent, power, equipment, the bookkeeper. You allocate it with a rate, commonly per labour hour or per machine hour.
Cost element
Basis
Batch of 100
Per jar
Material
BOM with scrap, at lot prices
$236.25
$2.36
Labour
6 h at $14 per hour
$84.00
$0.84
Overhead
6 h at $6 per labour hour
$36.00
$0.36
Total
$356.25
$3.56
The $6 overhead rate is itself an illustration: $1,200 of monthly workshop overhead spread over 200 labour hours. The cost is divided by good output, so the 2 scrapped jars are paid for by the 100 good ones. This is why ignoring scrap flatters the cost. The same batch costed without allowances shows $2.27 of material and $3.47 per jar, 9 cents too low. Sold 5,000 times a year, that error is $450 of margin that was never there.
The finished lot enters stock at $3.56, and that figure feeds cost of goods sold when the jar is sold.
Lot traceability: recall readiness in minutes
Traceability means you can walk the chain in both directions. Backward: this finished lot, which input lots went into it? Forward: this supplier lot, which finished lots contain it, and which orders shipped them?
Every stock row in the work order example already carries the information. WO-1042 consumed shea lot S-2291 and produced L-0927-A. L-0927-A shipped on order lines to named customers. The supplier email from the opening scene becomes two queries instead of a weekend: find work orders that issued S-2291, then list the shipments of the lots they made.
For food, this is moving from good practice to rule. The US FDA's food traceability rule requires businesses that handle foods on its Food Traceability List to keep lot-level records and deliver them within 24 hours of a request. The compliance date was January 20, 2026, but an appropriations law now directs the FDA not to enforce the rule before July 20, 2028 (FDA, FSMA final rule on additional traceability records). Other products have their own rules, and retail buyers ask for the same lot-level answers whatever you make.
BOMs, production orders and lot traceability, recorded on live demo data (2:03).
Make to stock or make to order
The work order is the same in both modes. What differs is who triggers it. In make to stock, a forecast and a reorder level trigger production, and the customer buys from the shelf. In make to order, a customer order triggers production, so the work order links to that order and the finished goods are reserved for the buyer.
The same work order, two triggers: one carries stock risk, the other carries delivery-date risk.
Food and cosmetics usually lean toward make to stock, since shelf life and forecasts drive the plan. Furniture, print and custom apparel lean toward make to order, since the product does not exist until someone commits. Most small producers run a mix: a few fast sellers built to a reorder level, everything else on request. The system should allow both on the same product.
What to track at each stage
Stage
Record
Why it matters
Receiving
Supplier lot, expiry date, quantity and unit
Starts the backward trace
Storage
Location and status (quarantine or released)
Blocks unreleased material from being issued
Issue to WIP
Lot consumed per component, per work order
Links inputs to the batch
Production
Hours, good output, scrap with a reason
Feeds labour cost and yield
Finishing
Finished lot, best-before date, quality result
Defines what a customer can be sold
Shipping
Lot on each order line
Makes the forward trace possible
How to start small
Do not model the whole business. Choose one product family and run it end to end before adding another.
List the components of your best-selling product, down to the label, and weigh or count them for one real batch.
Set the units: one stock unit per item, with conversions for how you buy and how you measure.
Enter the BOM with scrap percentages taken from your last five batches, not from a guess.
Load opening stock by lot, with expiry dates, after a physical count.
Run the next real batch as a work order and log the hours and the scrap as they happen, not at the end of the week.
Compare the system cost with your old estimate, and investigate any gap above a few percent before you add the next product.
A word on mistakes. The most common is a BOM that was correct once. A supplier changes the jar, a recipe gains 10 g of wax, and nobody edits the BOM, so every cost afterwards is wrong by a small, steady amount. Give each BOM an owner and a review date. The next is missing unit conversions, which turn a 25 kg sack into 25 grams in the ledger. The third is ignoring scrap, as the earlier example showed.
What to measure
Four numbers, reviewed weekly, cover most of it. Yield is good units divided by planned units. Scrap rate by cause tells you whether the loss is in the pot or at the filling station. Material variance is actual issued quantity against the BOM, which catches recipe drift and weighing errors. On-time completion is the share of work orders finished by their due date, which shows whether the material check is working. Add a quarterly drill: pick a random finished lot and time how long it takes to list its inputs and its customers.
Back to the Monday morning
The same owner now releases the 100-jar order on Monday at 9:10. The material check finishes before she has put her coat down: everything is covered except 1.55 kg of shea, so one purchase request goes out before 9:15. The stock count is right because the last batch consumed its ingredients when it was issued.
When the supplier email arrives, she searches the shea lot number. Two work orders appear, three finished lots, and eleven orders. She has the call list in minutes, and she knows each jar cost $3.56 to make, not the $3.47 her old sheet suggested. The rest of the week is spent making balm.
Key takeaways
A manufacturing system joins three things spreadsheets keep apart: the recipe, the stock ledger and the cost.
Model the BOM in levels, with units, conversions and a scrap percentage on every line.
A work order copies the BOM at release, runs a material check, moves stock into WIP and posts good output and scrap on completion.
Production cost is material plus logged labour plus allocated overhead, divided by good output. Ignoring scrap understates it.
Lot numbers on every issue and every shipment turn a recall from a weekend search into two queries.
Start with one product family, and give each BOM an owner and a review date.
Anichur Rahaman is a software architect and the creator of StoreConsole. He designs commerce and ERP systems for growing businesses, with a focus on event-driven architecture, data integrity and self-hosted operations.