Imagine that you work as a dishwasher in a busy restaurant and the ice machine just broke. The solution to this luke-warm predicament is to apply a bit of elbow grease. You're tasked with filling a freezer full of ice cube trays. Better get to work.
You're just doing dishwashing to pay for your degree in Systems, so naturally you want to figure out the optimal way to make this ice. There are a few options.
Three basic steps could be done any number of ways, but the manager is starting to stress that no ice has been made yet, so you need to get hopping. The first choice feels like it is the most efficient, so you set out filling ice trays with water.
Unfortunately for you, the freezer can actually only hold half of the ice trays. You would have realized this had you gone to look at the freezer, but that was step 3 out of 3. This is fine though, it just means the recipe is halved.
This isn't some "gotcha" story, so let me say right out that doing large batches of work like this is not the most efficient or effective way of working. One danger is that you get to a step further in the process and realize a previous step had a defect. Another classic example of this is letter stuffing:
You have 100 letters that need to be stuffed into 100 envelopes. The steps are:
Cutting to the chase: if you fold all the letters first, what happens if you've folded them the wrong size for the envelope? You're waste is 100%. If you do one letter at a time you have 99 learning oppportunities and the 100 letters will be stuffed perfectly into the envelope.
Wait just a minute. Shouldn't there be an optimal batch size in which the rate of learning and the rate of completion meet? Yes of course! How would you suggest finding the optimal batch size? A round of planning poker anyone?
I lied about the steps for making ice above. There is more to it:
These two additional steps change things quite a bit. There is now a phase where we need to wait for ice to form. Our system needs to focus on minimizing the amount of waiting time. This means ice needs to enter the freezer as quickly as possible. All of a sudden, doing one ice tray at a time makes sense from a learning perspective, but also from a flow efficiency perspective.
If your task is a pipeline task; one that is repeated over again, you can adjust the batch size of each step to find the optimal flow through the system. If the pipeline has a waiting stage (maybe code is handed over to QA) then batch sizes should be adjusted to reduce the amount of time spent waiting.