The BOM Rap (Part III) — Scaling Up

The BOM Rap recommended restricting the centrally managed part of the Bill Of Materials (BOM) of an assembly plant to the Gozinto (“goes-into”) structure of the items. Building on this, Part II used a small toy example to introduce the Vàzsonyi procedure as a tool usable on a laptop computer to extract useful information from BOMs for use in assembly improvement projects, together with graphic visualization tools.  Here, we apply these tools on the larger, more realistic BOM, of the Legotractors from our Leanix games.

Application to Legotractors

In 2010, my colleague Christophe Caberlon developed the assembly and logistics Legotractors simulation game for AGCO’s tractor factory in Beauvais, France. This game was based on the 2009 LEGO City Set #7634 that Lego no longer sells.

The complete set had 78 components and 47 unique items, including the farmer; the tractor itself, 73 components and 43 items and came in multiple colors, which enriched the simulation game. While Lego no longer sells this tractor set, you can still buy the bricks it is built from, at least for the red version.

The Engineering BOM for Tractors in Multiple Colors

The game involves assembling tractors in multiple colors. From the perspective of a design engineer, it makes sense to partition the items between those that are common to all colors and those that are specific to each color. These different sets of items, however, are phantoms, not subassemblies. In the cab, for example, a common part like the windshield is surrounded by colored parts.

BOM with parts grouped by color into “phantom items”

A production line designer who receives a BOM with this structure can flatten it and introduce subassemblies that make sense for production, like cabs, engines, or axles.

Retrieving the Legotractor Part List

The tractor BOM on the Lego Brickset website is shown as just a list of items and quantities going into the red tractor, with additional data. For human readability, the most useful are photographs and descriptions of the items. In a real manufacturing situation, the additional data would include the supplier’s lead time and possibly a reference to an agreement setting terms and conditions. For quantity calculations, all we need is the Item ID, Element, and Quantity used, Qty.

Naming Subassemblies

To write a BOM with the common parts and the colored parts as phantom subassemblies for the different tractors, we need to set up Item IDs for the blue, yellow, and white tractors as well as for the different sets of parts. As these IDs must be unique, since the Lego IDs are all numeric, all we need is to start the new IDs with a letter. Because these IDs are not descriptive, we retain the descriptions for human readability:

  • A1, A2 and A3 are IDs for the tractors in colors other than red
  • A4, for the set of common parts going into all tractors
  • A5, A6, A7, and A8, for the colored parts.

As a result, the head of the table is as follows:

Item Gozinto Item Quantity Description Unit of measure
7634-1 Market 32 Red tractor pcs
A1 Market 16 Blue tractor pcs
A2 Market 8 Yellow tractor pcs
A3 Market 8 White tractor pcs
A4 7634-1 1 Common parts pcs
A4 A1 1 Common parts pcs
A4 A2 1 Common parts pcs
A4 A3 1 Common parts pcs
A5 7634-1 1 Red parts pcs
A6 A1 1 Blue parts pcs
A7 A2 1 Yellow parts pcs
A8 A3 1 White parts pcs
281726 A4 1 Technic Doub. Bearing Pl. 2X2 pcs

A Gozinto Graph for the Engineering BOM

To validate the table, we use igraph to draw a Gozinto graph for it. It’s not as pretty as the manual one above, but visually verifying the consistency of the two is a means of checking the table for errors.

With 82 directed connections between 80 items, we can barely see the whole structure at a glance and most readers are likely to say “We’re gonna need a bigger sheet.” For a real tractor with thousands of items, it is a practical impossibility. The best you can do is draw single level Gozinto graphs for individual products or subassemblies.

Conversion to a Manufacturing BOM

As we have seen, the “subassemblies” in the Engineering BOM are not usable for Manufacturing. First, we flatten the BOM to get rid of these subassemblies. Then we identify subassemblies that make sense for Manufacturing and rebuild the BOM with these new subassemblies.

Flattening the POM

As discussed in the BOM Rap, Part II, it takes several simple steps:

  1. Convert the Gozinto table into a Gozinto matrix
  2. Use the Gozinto matrix to identify all subassemblies as items that go into other items and have other items going into them.
  3. Remove the rows and columns for the subassemblies from the Total Input Matrix (TIM) to obtain the flat TIM.
  4. Subtract the identity matrix from the flat TIM to get the flat Gozinto matrix.
  5. Convert the flat BOM back into a table.

Without the subassemblies, the Gozinto graph looks worse, but we can still see that each common part goes into all the products while each colored part only into only one product.

Identifying Manufacturing Subassemblies

A common practice to identify potential subassemblies is to fully disassemble and reassemble the product. In Japan, this is called Zenbara (全バラ). If we do it with the red tractor, we get the following result:

Both the Cab and the Engine combine colored and common parts; the Chassis only uses common parts.

Creating Subassembly BOMs

Defining subassemblies that make sense for production is an engineering judgment call involving considerations of tooling and line balancing discussed in section 6.4 of Lean Assembly. What we are concerned with here is the procedure to integrate a subassembly into the bill of materials and, for the purpose of describing it, we’ll consider the following opportunities:

  1. Cabs, one of each color.
  2. Axles, front and rear, as common parts
  3. Wheels, going into the Axles.

After creating the table just for these subassemblies, omitting all the items that still go directly into each tractor, we can draw a Gozinto graph:

It shows the Windshields and the Taillights as a common part going into the Cabs of all different colors, and the colored parts going into only one. It also shows the Front and Rear Axles going into all the products.

Integrating New Subassemblies Into the Overall BOM

The challenge now is to integrate these subassemblies into the overall BOM. We can always assume we start from a flat BOM and consider only the items that do go into subassemblies, as the other ones are unaffected.

The subassembly TIM gives us total quantities required of the purchased items to make the subassemblies but each of these items may also be used directly into the finished products. The same screw, for example, may be used both in fastening subassemblies and on multiple Finished Products.

The steps are therefore as follows:

  1. Flatten the original BOM.
  2. Compute the subassembly TIM.
  3. For each *Finished Product* and each *Purchased Items* in the flat BOM, subtract the quantities used in subassemblies from the quantity going into the *Finished Product* available in the TIM.
  4. Filter out the Gozinto records with Quantity = 0 from the Gozinto table.

Once we have done this, we have a BOM that can be used to determine how many units of each item need to flow through each assembly operation to produce a given mix of products. It is information we need, understanding that it is not all we need.

Attempting to Visualize the Whole BOM

When we attempt to visualize this BOM as a Gozinto graph, we get the following, busy picture:

We can still see the subassembly structure, but we can’t make out the items that go directly into tractors, even though there are only 30 of them.

Large BOMs as Sparse Gozinto Matrices

We can explain the Vàzsonyi procedure with the toy example above but, in this example, it provides no answers that you couldn’t obtain easily from the Gozinto graph. It is useful to the extent you can scale it up to real demands for thousands of products made from tens of thousands of items.

Since most items don’t go into most other items, the majority of the quantities in the Gozinto matrix are zeros. The BOM of an assembly plant with 20,000 different items would be expressed as a Gozinto matrix of 400 million coefficients, most of them zero. Fortunately, there are ways of representing such a sparse matrix with only the nonzero coefficients and yet operate on them as if all the coefficients were present.

The Gozinto triplets above are in fact a sparse matrix representation of the BOM. Software is available to apply matrix algebra on sparse matrices without cross-tabulating them into full matrices but unfortunately not with Excel or any Excel add-ons that I could find. On the other hand, you do find the scipy.sparse packages to do this in Python or the SparseM package in R.

The Gozinto Graph, the Gozinto Table, the Gozinto Matrix, and the Total Input Matrix are four different views of the same information, usable, as we have seen, for different purposes. The following picture shows software tools to navigate between these views that an engineer can have running on an ordinary laptop computer:

Ideally, we would like to create BOMs directly as Gozinto graphs, because a graph with pictures or pictograms of components and subassemblies hand-drawn on a board is a common starting point, as above in the Legotractor example. It may go down only two levels before getting hopelessly busy but it is intuitive, effective as support for discussions, and unlikely to include structural errors like loops.

Graphs and Tables

The next step would be to replicate the hand-drawn graph with software, with Item IDs and Quantities, and automatically extract the Gozinto pairs from this drawing. I don’t know how to do it with igraph but there are tools :

  • Visio. If you draw the graph in Visio, you can use a report to extract the Gozinto table.
    AutoCAD has a DATA EXTRACTION command.
  • The Gozinto graphs in the BOM Rap posts were generated from Gozinto Tables with [igraph](https://igraph.org/redirect.html). The conversion in the other direction, from a graph to a Gozinto table is also possible with igraph but was not needed.

In practice, engineers often start formalizing BOMs into Gozinto Tables, as they are similar to shopping lists. There are a few differences:

  • Shopping lists don’t specify a destination. The entry for *Leeks* does not specify that they go into a soup.
  • They include units, as in *2 lbs of rice.* In BOMs, we keep the units with the item master, not in the Gozinto table, because the unit is the same wherever we use the item. When you generate a shopping list to build a product, you join the Gozinto Table with the Item Master to retrieve the unit.

Errors in Gozinto Tables

The main drawback of the Gozinto Table is that its manual entry is error-prone. Even for a product as simple as a Legotractor, missing or extraneous connections become visible only when you generate the Gozinto graph. This happened in the process of writing this article: I made a mistake and found out when the Gozinto graph didn’t look right.

The Gozinto Table is useful for storage, retrieval, and database manipulations. In particular, you can attach differently structured additional data to items in the Item Master or Gozinto connections between items. For example, a purchased item has a contractually agreed order fulfillment lead times while a Gozinto connection in-house has an assembly process time.

Gozinto Matrix and Total Input Matrix

As we have seen, the Gozinto Matrix and the Total Input Matrix (TIM) are more convenient for materials requirements calculations or for reengineering the subassembly structure. In the previous post, we have introduced the Vàzsonyi procedure to compute the TIM H from the Gozinto Matrix G.

Going in the opposite direction is technically feasible but usually not necessary. Since, with I as the identity matrix, \mathbf{H =\left ( I -G \right )^{-1}}, we have

\mathbf{G = I -H^{-1}}

Consequently, if we ever needed to do it, retrieving G from H would just require a matrix inversion.

What More Can We Do?

Engineers commonly view BOMs are organized into levels but the Gozinto Table does not show levels. On the other hand, we have seen that each power of the Gozinto Matrix corresponds to a level. As discussed in Part II,  if you multiply a demand vector d by the Gozinto matrix G, you get quantities for the Level 1 items, that go into finished goods. Multiply the result by G again, and you get quantities for the Level 2 items, going into the Level 1 items, etc.

This allows you to assign a level to each item. Then, if you sort the items in the Item Master by decreasing level, you have the purchased items at the beginning and the finished goods at the end. If you order the rows and columns of the Gozinto Matrix by level, it becomes upper-triangular, meaning that all the non-zero coefficients are above the diagonal.

Also, you can layout the Gozinto Graph by level, with the sold products on top and the purchased items at the bottom, and the items in the same level placed in parallel at the same height. If the result is too busy, you can also use the levels to limit the depth of a graph and make it easier to read.