You would have thought that creating a dynamic capacity activity in ProcessModel simulation software would be as simple as declaring an attribute or a variable and using it as the capacity of the activity, it isn’t. There are a few reasons why this is, from what I think; the obvious reason could be that in almost 99.9% of the scenarios / models a dynamic capacity would not be needed.

Consider a process simulation of an assembly order where each activity represents a process that takes place, if you could somehow increase the capacity of any of the processes you are making that process more efficient, and there is a cost involved with it, so it makes sense that if your adding to capacity you add it when you start the model simulation. In cases you want to try out how your process will gain in process improvement when the capacity of the process is increased you can use multiple scenarios (you can change the capacity of the activity every new scenario run… so this means every simulation start capacity can be changed of an activity).

Enough talk about the alternatives to this process mapping problem let’s talk how you can make the capacity of an activity dynamic so that your business process improvement objectives are met. The first thing you need to do is declare two integer variables, let’s take for example v_Counter1 and v_Capacity1. We will use the v_Counter1 variable to count the number of entities that come into an activity, we will use the variable v_Capacity1 to set the capacity of the activity dynamically as we require.

Coming to the Action Logic, we will first select the incoming route to the activity that we want to have dynamic capacity of and increment the variable v_Counter1 (example: Inc v_Counter1) this will let us know how many entities have moved into the activity, now at the exit route of the same activity we will decrement the variable (example: Dec v_Counter1), both the increment and decrement of the v_Counter1 variable will help know how many entities are in the activity at any given time, now we can control the maximum number of entities that can come into the activity.

By using a WAIT UNTIL statement at the incoming route of the activity that we need a dynamic capacity of we can have the entities wait until the v_Counter1 variable is less than the v_Capacity1 variable (example: WAIT UNTIL v_Counter1 < v_Capacity1). This will mean that any entity that is on its way to the activity will be checked against this condition and until the condition is met the entities will be allowed to pass, as soon as the condition becomes false the entities will wait until the statement is true again. You can set the value of the variable v_Capacity1, later or earlier in the model as is required by your business process.

If you have any suggestion on improving this, please let me know as I would love to hear of an alternate method. I came across this solution while working for a client on a six sigma process improvement project. If this helped you do share.

If you do not know what ProcessModel is or are interested in a free evaluation copy of the software head over to I recently also wrote about Using Alternate GET Order For Resource Utilization.