On face value, resource leveling in Microsoft Project seems like a great solution to overallocation. It allows team leaders to spot overallocations and either delay or break up the tasks to get them accomplished. But resource leveling for most Microsoft Project users, particularly newer users, can be problematic. I’ve gathered tips on how Project works with this feature and how it works when you tell it to level your resources.

A first look
Resource leveling a project “by hand” can be a very complicated process. If you have a resource that is working on several tasks, leveling is not always as simple as delaying one of them to make sure that they’re not overallocated; delaying that one task might also delay several other tasks assigned to other resources. And delaying these tasks may not only delay the whole project but might also overallocate these other resources. This is the business problem that the resource leveling features in Project try to solve. They use an algorithm to look at the sometimes huge numbers of interrelationships between tasks and assignments in an effort to come up with a workable schedule.

You might decide to use resource leveling when you look at your schedule and see that you have one or more resources that are allocated at more than their Max Units values for a given time period (or periods). The best place to see this is in the Resource Graph view, which shows you allocation levels for your resources over time. If you know that Steve, for example, is overallocated, you must try to lower his allocation without moving so many tasks that you overallocate other resources in the process. This is where the resource leveling features in Project come into play. It’s important to have an understanding of what leveling will and won’t do, and how the settings will affect the way leveling works.

To get an understanding of what resource leveling is on a practical level, let’s look at the settings in the Resource Leveling dialog box (see Figure A). To get to this dialog box, click Tools | Level Resources. Let’s look at the dialog box control by control.

Figure A

Leveling calculations
The first section covers leveling calculations and lets you choose Automatic or Manual. This setting lets you decide if resource leveling should happen all the time as an automatic service or manually, only when you click on the Level Now button.

I recommend that you do not use Automatic leveling unless you’re familiar with what leveling does in Project. If you’re not sure, using Automatic leveling will likely cause you great confusion because Project will make the leveling changes it sees without asking for input and without telling you what it’s doing. You’ll make a change to your project, and MS Project may change several other tasks in response.

The next control, “Look For Overallocations On A…Basis” sets the threshold for how Project looks for overallocations. The possible values for this setting are: Minute By Minute, Hour By Hour, Day By Day, Week By Week, and Month By Month. A large percentage of the confusion about Project’s leveling feature comes from not understanding what this setting does to the leveling process.

For example, if you have a resource, Steve, assigned to work on two tasks during a day, and the total work for that day between the two tasks is seven hours, there might be an overallocation on this day. This will happen if the two tasks overlap for even a minute, assigning Steve more work than what has been designated as his Max Units value. You may not want Project to spend time dealing with every one of these minor overallocations. Perhaps for this particular project, as long as Steve isn’t assigned to work more than eight hours in a day, that is okay with you. In that case, you would level on a Day By Day basis, telling Project to ignore any overallocation that is at the level of overlapping hours or minutes.

However, if Steve were assigned to work nine hours in a day, then leveling with a Day By Day setting would try to resolve that overallocation. Doing so would resolve the overallocations that have Steve working more than eight hours in a day but could leave some of the smaller, minute-by-minute overlapping assignments alone. Many project managers choose to trust their resources to “self level” on these kinds of small overallocations.

Maybe you have a project that is tightly scheduled, and hours or minutes are important. In this kind of project, you might want to level with a Minute By Minute or Hour By Hour setting. Leveling with a Minute By Minute setting would leave no overallocations of any kind, no matter how small. This is useful in a project in which the tasks are very tightly scheduled, such as in the moving of a server room to another location. Tasks like those involved with removing servers and bringing up backup servers are very tightly controlled so that uptime is not affected. An overallocation on an hour-by-hour basis could mean that one task might deliver an hour or two late. In a tightly controlled and scheduled project, this could mean disaster.

The next control is the Clear Leveling Values Before Leveling check box. If you have this checked (which is the default), Project will clear leveling delays added the last time you leveled the project.

Leveling range
The Leveling range section of the dialog box lets you decide to either level the whole project or just the tasks and assignments that fall within a date range. Using the date range can be nice if you’re using placeholder or generic resources during a latter stage of the project and would like to only level a certain period of time in which “real” resources are scheduled.

Resolving overallocations
The final section of the dialog box deals with the guts of the way Project resolves the overallocations that the other settings in the dialog box tell it to look at. The first control in this section is important because it picks the Leveling Order that Project will use. The three choices are ID Only; Standard; and Priority, Standard.

ID Only
Using ID Only, Project will delay tasks with higher Task ID values first before looking at lower IDs. This basically means that tasks listed at the top of the page automatically have a higher priority in the leveling algorithm than tasks at the bottom of the page. I cannot think of a situation where I would use this method over one of the other two methods mentioned, and I’ve never used this method for a production project. I’ve always preferred to use the other methods that use more criteria than just the ID.

Using the Standard method, Project examines the following criteria in the order they are listed to determine how to act on overallocated tasks and which to delay first:

  • Predecessor relationships
  • Slack (the number of time units that a task can be delayed without changing the finish date of the project)
  • Dates
  • Priorities
  • Constraints

Project will honor predecessor relationships first so that the leveling solution will not have tasks violating their relationships. Then, among tasks that have similar relationships, those tasks with higher slack will be moved before those with lower slack values. Then task dates, priorities, and constraints will be taken into account, in that order. This method is the default and is the one that is most commonly chosen for leveling.

Priority, Standard
This method takes the same criteria into account as the Standard method, except that it looks at priority first. Using this method, the task priority is the primary driver factor to determine how Project will delay your tasks. With this method, tasks with lower priorities are leveled first, and tasks with the same priority will be delayed based on the other criteria. This method gives you control over how Project will make its leveling decisions. For example, if you have a task that you do not want touched by leveling, you can give it a Priority of 1,000 (values range from 0 to 1,000), which means “Do not level.” With 1,000 priority choices, you have very granular control over the process.

Level Only Within Available Slack
The Level Only Within Available Slack option looks at the Slack value of a task and delays tasks only within that amount of slack. For example, if a task is five days long and has 15 days of slack, leveling with this option turned on will delay this task only 10 days, even if this means leaving some overallocations unresolved. This option is unchecked by default.

Leveling Can Adjust Individual Assignments On A Task
The Leveling Can Adjust Individual Assignments On A Task option gives Project the ability to move assignments on a task without having to delay the assignments of the other resources working on the task. This option lets Project move only the overallocated resource instead of having to delay the entire task. Figure B shows two tasks. Task Two is assigned to both Steve and Frank, but Steve works only the first four days. Steve is assigned to Task One also, but it conflicts with the eight hours he is assigned to Task Two.

Figure B

If this project were leveled with the Leveling Can Adjust Individual Assignments On A Task option turned off, Task Two would be moved to start on Tuesday, even though Frank could still work on Monday. But if you turn on this option, Project will delay Steve’s assignment on Task Two by one day so that he can work Task One on Monday and then start his work on Task Two on Tuesday. Frank is then allowed to work on Monday. In this case, this option saves an entire day over leveling without the option.

Leveling Can Create Splits In Remaining Work
With the Leveling Can Create Splits In Remaining Work option turned on (the default), Project can delay the remaining portions of tasks in progress just as it would normally do with entire tasks that haven’t started yet. If you turn off this option, in-progress tasks cannot be adjusted with leveling delay.

Turning off these last two options or turning on the Level Only Within Available Slack option will greatly limit Project’s ability to resolve overallocations. However, in certain situations, you may want Project to be limited so that it doesn’t adjust in-progress tasks or individual assignments. That’s why they’re options.

There you have it—leveling in a nutshell. As with any feature that will change your project, you’ll want to create test projects or take copies of existing projects to experiment with resource leveling. It’s not something to be taken lightly. It can change your project in profound ways, so be sure you know what to expect.