How Work Is Generated

A deep-dive into how the priority, purchasing, and shipping lists are derived from demand, routings, and inventory levels.

Zach Cloud avatar
Written by Zach Cloud
Updated over a week ago

🎓 What Can I do here?

  • Learn what the work generation system controls.

  • Understand how demand, inventory, and routings affect what the work generation algorithm outputs.

  • See some examples of the output of the work generation system.

Introduction

Work generation is the proprietary computer program inside StartProto that ties all of your business functions together. It determining what should be worked on, what is ready to be shipped out, and what should be bought.

Note that this article dives into some advanced concepts that you don’t necessarily need to be understand to use StartProto. However, understanding what is happening behind the scenes can be helpful when trying to understand why the system shows what it shows.

🛑 Before diving into this article, we highly recommend reading the Building Effective Routings article- it lays out a lot of the groundwork needed to understand what is happening here!

Work Generation: Diving In

The best place to get started understanding work generation is to understand what controls it (inputs), and what it gives you (outputs)—especially because tweaking inputs such as inventory levels can have a drastic effect on the outputs. Below both the inputs & outputs are outlined, as well as a high-level overview of the algorithm and some considerations as you use the tool.

Inputs

The following user-inputted data is used to schedule work:

Routings

When you define routings, you’ve given the system a map of how to build a make item- all the prerequisite items and operations that are needed to create that one item. Using this blueprint, the system can make decisions and determine which items, in what amount, are needed to satisfy demand.

The following updates to routings will affect the work generation system:

  • Changing which input parts are used in a routing

  • Adding and removing operations

  • Adjusting quantities on operation inputs & outputs

❗ Routings are live documents- when you update a routing that has demand, the outputs of work generation will change that instant!

Demand

Demand tells the work generation system what final parts we’d like to have in our hand at the end of the day. Without any demand, there would be no work to do! Often, we have competing demand—too much demand, and not enough parts. Therefore, all demand is prioritized using a time-based sorting method (through the sort date).

Using these priorities, the system can now have a ranked list in which to try to assign inventory to demand. If the priorities are rearranged, inventory is instantly re-allocated to the higher demand source!

Minimum stock is always set to an extremely distant sort date (and therefore always has lower priorities than demand from jobs & sales orders).

(To learn more about demand prioritization works, check out The Scheduling Module (coming soon))

Inventory

Lastly, inventory tells us how close we are to fulfilling the demand. This is most dynamic element- as people complete work, inventory moves around.

💡 Example: If someone completes a Step 2 operation, these inventory actions happen:

  1. Inventory of the output part from the previous operation (Step 1) is consumed (goes down)

  2. Inventory of the output part from the Step 2 operation is created (goes up)

Changes to inventory can have drastic implications on the work generated. For example, if someone marks all of the inventory of a part as scrapped and there are no extras available, it will re-trigger the purchasing of materials to make up for that part. To identify and fix cases like these quickly, the audit tooling in the The Make Item / Routing Module can be useful.


Outputs

The work generation system builds the following for you:

Priority List

The priority list is an ordered list that shows the shop floor what needs to be done. Each item is a combination of an operation to do, a demand source (or sometimes, multiple), and a quantity of that operation that needs to be done. These items are ranked from highest priority to least. If there are multiple operations from the same demand source in the list (for example Step 1 and Step 2), the preceding operation will have the higher priority.

💡 Note that for multi-out operations, the system has the ability to grab any “extra” inventory that is being created and assign it to another demand source.

The operator home in the app shows the priority list:

Purchasing List

If we don’t have enough inventory in the system, the purchasing list will automatically populate with what needs to be bought. Note that this takes open Purchase Orders into account, so items that have been ordered but are waiting to be received won’t show up on the purchasing list.

The purchasing list in the app:

Shipping List

If we have enough of the demanded item to be able to ship out the order, it will appear in the shipping list.

The shipping list in the app:

Demand Tracking Lists

As the algorithm runs, it keeps tabs on every item that it processes. This generates a list of demand for every item in the system- i.e. at some point, we will need to possess X number of those items (even if a subset of X will be further processed).

Demand tracking for a Buy Item in the app:

(Learn how the demand analysis tool can help you drill into how your inventory is allocated: The Demand Analysis Tool)

The Algorithm

The work generation system, at a high level, operates like this:

To begin, we look at the highest priority demand and move down the list from there. Each demand source is run through a series of questions, trying to determine the minimum amount that can be done. These questions are:

  1. Do we have any available to ship?

  2. Do we have any available to work on? If so, what’s the fewest number of operations that we can do to meet the demand?

  3. Do we still need to purchase anything so we can begin work?

Considerations

This is complex topic. Don’t feel afraid to reach out to support for additional clarification. Another idea that helps is to think of what shows up on these lists as the intersection of what needs to be done and what can be done.

The algorithm follows this pattern exactly. This can lead to some interesting behavior that people don’t always expect, such as:

  • If there is some WIP inventory that can be worked on at Step 4 even though the rest of the parts for that demand still need to make it through Step 2 and Step 3, it will still show both Step 2 and Step 4 in the work list.

  • Let’s say there is a buy item that is used in different routings, and there is competing demand for this buy item. If we shuffle the order of the competing demand, we can get a completely different operation to show up in the priority list.

  • A demand source can be both active out on the shop floor and in the purchasing list needing material.

Work Generation Examples

Example 1: A Simple Routing

The Routing

Let’s say we have a very simple routing. To make one Make Item, a single buy item is needed. (assume all input & output quantities on this routing are 1).

Applying this to Work Generation

Let's say we have an order generating demand for 3 Make Items. Depending on the inventory levels of these items, there will be different things that we determine need to happen. Again, the idea is to determine ABSOLUTE minimum amount of work that we can do to fulfill the demand.

Starting Inventory Level

Work to be Done

Explanation

Make Item: 3
Buy Item: 0
WIP Item 1: 0
WIP Item 2: 0

None!

We have enough inventory, so no work needs to be done.

Make Item: 0
Buy Item: 3
WIP Item 1: 0
WIP Item 2: 0

3x Step 1
3x Step 2
3x Step 3

We have enough buy items to make this part, so all we need to do is do steps 1, 2 and 3.

Make Item: 0
Buy Item: 0
WIP Item 1: 3
WIP Item 2: 0

3x Step 2
3x Step 3

We’ve gone through and done step 1 (or told the system that we did 😉). We still need to do steps 2 and 3.

Make Item: 0
Buy Item: 0
WIP Item 1: 0
WIP Item 2: 3

3x Step 3

We have WIP parts that have been processed through step 1 and step 2. All that is left for us to do is step 3.

Make Item: 0
Buy Item: 0
WIP Item 1: 0
WIP Item 2: 0

Purchase 3x Buy Item
3x Step 1
3x Step 2
3x Step 3

We don’t even have enough inventory to begin work, so we also need to trigger purchasing of the Buy Item.

Make Item: 1
Buy Item: 0
WIP Item 1: 1
WIP Item 2: 1

1x Step 2
2x Step 3

We have one make item in inventory- great! Additionally, we have some WIP part that need to be processed. We need to run one more part through Step 2, and then that part plus another through Step 3.

Make Item: 0
Buy Item: 0
WIP Item 1: 2
WIP Item 2: 0

Purchase 1x Buy Item
1x Step 1
3x Step 2
3x Step 3

So maybe we scrapped something and no longer have enough material… shoot. We need to go back and purchase 1 of the Buy Items, run it through Step 1, and then continue with the rest of our routing.

Adding More Demand Sources

Let’s say we added another order to the system, this time for 2 of the Make Item. These will be ranked against each other using the sort date. This creates the following demand list:

Demand Source

Item

Quantity Demanded

Sort Date

Priority (from sort date)

Order 1

Make Item

3

Jan 17, 2023

#1

Order 2

Make Item

2

Feb 5, 2023

#2

Now, expanding on the examples above, let’s see what happens for a few different inventory cases. We’ve also added the Priority List column to demonstrate what you will see in-app:

Starting Inventory Level

Work to be Done

Priority List (Visible In-App)

Explanation

Make Item: 3
Buy Item: 0
WIP Item 1: 0
WIP Item 2: 0

Purchase 2x Buy Item

2x Step 1 (Order 2)
2x Step 2 (Order 2)
2x Step 3 (Order 3)

(empty)

We have enough parts for Order 1, which means that we can ship that out. However, we don’t have anything in the system for Order 2, so we need to purchase these. Nothing shows up in the priority list because as of this instant, we don’t need to do shop-floor work for Order 1, and we can’t do any work for Order 2 due to the missing materials.

Make Item: 0
Buy Item: 3
WIP Item 1: 0
WIP Item 2: 0

Purchase 2x Buy Item for Order 2

3x Step 1 (Order 1)
2x Step 1 (Order 2)

3x Step 2 (Order 1)
2x Step 2 (Order 2)

3x Step 3 (Order 1)
2x Step 3 (Order 2)

#1: 3x Step 1 for Order 2

We have enough buy items to fulfill Order 1, so we don’t need to purchase it. However, everything else needs to be done for both orders. Since we’re ready to do Step 1 for the first order, it shows up in the priority list.

Make Item: 2
Buy Item: 0
WIP Item 1: 3
WIP Item 2: 0

1x Step 2 (Order 1)
2x Step 2 (Order 2)

1x Step 3 (Order 1)
2x Step 3 (Order 2)

#1: 1x Step 2 for Order 1

#2: 2x Step 2 for Order 2

We have two of the three parts ready to for Order 1, and the last part plus the other two for Order 2 are stuck at Step 2. Since we have enough of the WIP Item 1 to do Step 2 and we need that work to be done, it all shows up on the priority list.

Make Item: 1
Buy Item: 1
WIP Item 1: 1
WIP Item 2: 1

Purchase 1x Buy Item for Order 2

2x Step 1 (Order 2)

1x Step 2 (Order 1)
2x Step 2 (Order 2)

2x Step 3 (Order 1)
2x Step 3 (Order 2)

#1: 1x Step 2 for Order 1

#2: 1x Step 3 for Order 1

#3: 1x Step 1 for Order 2

Parts are all over the place. We begin as close to the make item as possible (so that one part is ready to ship for Order 1) and work from there. Note that we use the two WIP items for Order 1, so we don’t need to do any more Step 1 for that order. The priority list uses the three parts. Note that all the work for Order 1 is ahead of the work for Order 2.

Phew! 😅 Ready to go onto some more complex examples?

Example 2: A More Complex Routing

So, let’s do something a bit more complicated! Let’s say you work at a drinkware manufacturer. Your team manufactures a tumbler from parts you source from a distributor. Additionally you sell your tumbler in both a standard version and a laser-etched set (which comes in packs of 10 tumblers). That routing may look something like this:

In this system, this would look show up in your make item list as two different items. The Etched Tumbler Set has 10x Plain Tumbler as its single Input Part, while the Plain Tumbler has two buy items each at 1x as its inputs.

Let’s add demand for a single tumbler that someone ordered. The demand table would look like this:

Demand Source

Item

Quantity Demanded

Sort Date

Priority (from sort date)

Order 1

Plain Tumbler

1

Feb 20, 2023

#1

And, here’s what the system would output dependent on inventory levels:

Starting Inventory Level

Work to be Done

Priority List (Visible In-App)

Explanation

Etched Tumbler Set: 0
Plain Tumbler: 0
Tumbler Base: 0
Tumbler Lid: 0

Purchase 1x Tumbler Base for Order 1 Purchase 1x Tumbler Lid for Order 1

1x Build (Order 1)

(empty)

Nothing is in the system- we need to purchase both items.

Etched Tumbler Set: 0
Plain Tumbler: 0
Tumbler Base: 0
Tumbler Lid: 1

Purchase 1x Tumbler Base for Order 1

1x Build (Order 1)

(empty)

Even though we have a tumbler lid, we still require 1x Tumbler Base to allow the Build operation to show up in the priority list.

Etched Tumbler Set: 0
Plain Tumbler: 0
Tumbler Base: 1
Tumbler Lid: 1

1x Build (Order 1)

#1: 1x Build for Order 1

Now that we have both items, the Build operation shows up.

Etched Tumbler Set: 1
Plain Tumbler: 0
Tumbler Base: 0
Tumbler Lid: 0

Purchase 1x Tumbler Base for Order 1
Purchase 1x Tumbler Lid for Order 1

1x Build (Order 1)

(empty)

Even though we have an etched tumbler set ready to sell, we don’t have any inventory that can be used to fulfill a plain tumbler.

Adding Op Quantities

Now, let’s say we had someone order 2x Etched Tumbler Set. Since a set requires 10x of the standard tumbler, this means that we’ll have some higher quantities scheduled.

The demand table:

Demand Source

Item

Quantity Demanded

Sort Date

Priority (from sort date)

Order 2

Etched Tumbler Set

2

Mar 1, 2023

#1

And the outputs for different cases:

Starting Inventory Level

Work to be Done

Priority List (Visible In-App)

Explanation

Etched Tumbler Set: 0
Plain Tumbler: 0
Tumbler Base: 0
Tumbler Lid: 0

Purchase 20x Tumbler Base for Order 2
Purchase 20x Tumbler Lid for Order 2

20x Build (Order 2)

2x Kit & Laser (Order 2)

(empty)

Not only do we need to purchase 20 of each item, we need to do the Build operation 20 times. These will make 20 Plain Tumblers that we can use in 2 Kit and Laser Operation. This is because each Kit and Laser operation requires 10 Plain Tumblers.

Etched Tumbler Set: 0
Plain Tumbler: 5
Tumbler Base: 15
Tumbler Lid: 15

15x Build (Order 2)

2x Kit & Laser (Order 2)

#1: 15x Build for Order 2

In this case, we need fifteen more Plain Tumblers. The app won’t let us Kit and Laser until we have at least 10.

Etched Tumbler Set: 0
Plain Tumbler: 15
Tumbler Base: 5
Tumbler Lid: 5

5x Build (Order 2)

2x Kit & Laser (Order 2)

#1: 5x Build for Order 2

#2: 1x Kit & Laser for Order 2

Now that we have at least 10 Plain Tumblers, the Kit & Laser operation shows up in the priority list.

Etched Tumbler Set: 0
Plain Tumbler: 20
Tumbler Base: 0
Tumbler Lid: 0

2x Kit & Laser (Order 2)

#1: 2x Kit & Laser for Order 2

Now that we have enough plain tumblers to run both, it shows up in the priority list.

Even More Complex: Varied Demand Sources

Now that we’ve explored what happens when you have individual sources of demand, what happens if we had demand from the two orders above—at the same time?

First off, the demand table would look like this:

Demand Source

Item

Quantity Demanded

Sort Date

Priority (from sort date)

Order 1

Plain Tumbler

1

Feb 20, 2023

#1

Order 2

Etched Tumbler Set

2

Mar 1, 2023

#2

Remember the competing demand idea from earlier? Yep, that applies here. Because Order 1 has a higher priority than Order 2, it always gets to grab inventory first. Let’s see how this looks for a few different inventory cases:

Starting Inventory Level

Work to be Done

Priority List (Visible In-App)

Explanation

Etched Tumbler Set: 0
Plain Tumbler: 0
Tumbler Base: 0
Tumbler Lid: 0

Purchase 21x Tumbler Base for Order 1 & Order 2
Purchase 21x Tumbler Lid for Order 1 & Order 2

1x Build (Order 1)
20x Build (Order 2)

2x Kit & Laser (Order 2)

(empty)

We have to purchase everything!

Etched Tumbler Set: 0
Plain Tumbler: 10
Tumbler Base: 11
Tumbler Lid: 11

11x Build (Order 2)

2x Kit & Laser (Order 2)

#1: 11x Build for Order 2

In this case, we theoretically have enough Plain Tumblers to Kit & Laser. However, a single plain tumbler is ready to ship for Order 1, meaning that the remaining 9 aren’t enough to trigger a Kit & Laser operation.

Etched Tumbler Set: 0
Plain Tumbler: 11
Tumbler Base: 10
Tumbler Lid: 10

10x Build (Order 2)

2x Kit & Laser (Order 2)

#1: 10x Build for Order 2

#2: 1x Kit & Laser for Order 2

Now that we have enough Plain Tumblers to BOTH fulfill Order 1 and open up Kit & Laser for Order 2, it appears in the list.

In the case you would rather have Order 2 take inventory before Order 1, don’t worry! That is what the scheduling module is for. (docs here: The Scheduling Module (coming soon))

Did this answer your question?