This is a pair of simple simulations, developed to assist a client (a software & services company) in their efforts to educate key members of the management team on the effect of variability on process throughput, bottlenecks, and resource utilization.
Both simulation models include a sequence of processing stations; jobs must flow through the entire sequence to complete. The models differ in the nature of these jobs, and how they enter and are staged in the system:
In the first, "Effect of Variable Processing Rates on Throughput", the process is one of transforming an essentially unlimited supply of raw materials through a series of steps. Each processing station pulls its input materials from the previous station at the same average rate per unit time – but there is variability in how much each station is able to pull and process, and no station can pull more than the previous station has ready. This model is directly inspired by the "matchstick game", from The Goal, by Goldratt and Cox.
The second model, "Effect of Variable Arrival & Service Times on Throughput & Utilization", recasts the matchstick game into a queuing & service process, where jobs enter the system according to a Poisson arrival process, and the service times at all processing stations (again, arranged in series) follow an identical exponential distribution. As a station completes a job, that job enters the input queue for the next station. Each station pulls its next job from its own input queue; if the input queue is empty, that station will be idle for some period of time.
In both cases, note that the variability in the system can easily produce bottlenecks – even when it would appear that the system has sufficient capacity. For example, we might assume that in the queuing model, if jobs arrive at an average rate of 1 job per unit time, and each station is able to complete an average of 1.1 jobs per unit time, and if we start out with zero jobs in-process, we should have around 90% resource utilization, and no large backlog of jobs building up. But as you will see on running the model (using the Launch links in the Code tab), that isn't what happens.