As I have discussed in previous posts, the scheduling problem is not only selecting a start time for activities, but also the challenge of selecting the resources to support those activities (aka: the “assignment problem.”) If you are a scheduler and you select all the resources for the activities yourself, you are taking on the responsibility of making choices that are both deemed feasible and good. This is a difficult task because of the large number of alternative possibilities that exist for different start times. (See my post on the combinatorial explosion here.)
For example, suppose you need five people to do a particular task and all five have pre-existing assignments to other activities. Finding times when all five have sufficient time available is hard enough. But what if your pool of available people has 10 qualified people in it? And all of them have pre-existing assignments, of course. Now you must look at the combinations of 10 people taken five at a time. If I’ve done my math correctly, that means there are now 252 possibilities that have to be checked for time availability. This is getting beyond the capability of even the best human minds.
To make things even more realistic, suppose your task requires the five people at different times within the activity. Wow! What a challenge! Ready to simplify in order to make the scheduling manageable? If you do that, you are probably not going to get the best schedule. That is, there may be other possibilities that are faster, cheaper, or better! It’s a conundrum.
Well let’s make the task even more complex. Imagine that your pool of available people has different skill sets in it. Some people are expert programmers, some are database specialists, and others have unique user interfaces skills. Many of them have more than one of these skills. Now how do you make the best assignments?
In case you think this complexity applies only to personnel assignments, consider a project that requires moving a lot of heavy materials and you have multiple pieces of equipment that have different capacities. Or consider an event center that has many rooms with different seating capacities, different ceiling heights, and different audio/visual equipment. You don’t want to eliminate using a resource with greater capability than necessary if doing so would result in a better schedule.
These considerations necessitate the ability to attach attributes or descriptors or “tags” to resources and then allow an activity to require resources with certain conditions that involve these attributes.
Going back to my people assignment example, you should be able to specify—or tag–that you need two people with database skills and three with programming skills. The scheduling process must now screen the assignment possibilities to make sure that the attribute profiles are satisfied.
A couple more examples, to make my point:
- What if Sally will become a database expert after she finishes her certification test on July 23rd?
- What if my task could be done by two programmers and three database experts or two programmers, two database experts and a user interface person? These Boolean logic statements are not unusual in realistic scheduling problems.
A scheduling application that handles the assignment problem realistically and adequately is beyond the scope of most scheduling applications–but not all of them. Check them out carefully.