Project Management

Deciding when to use resource leveling in Microsoft Project

Resource leveling can help project managers resolve overallocations by delaying or splitting up tasks. Depending on your project, you may want to level at different intervals. Here's how to make the best use of this feature.

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.

Hi there, I am in a situation where I need a resource problem solved and any help would be greatly appreciated. I have a group of 114 items to get done. There are 25 very high complexity items that each take 16 weeks to complete, 23 high complexity items that each take 13 weeks to complete, 39 medium complexity items that each take 9 weeks to complete and 27 low complexity items that each take 7 weeks to complete. I am looking to complete them by the end of the year and want to know how many people I would need to make that happen and what their makeup of the different task would be. Each person could handle 7 at a time. I did it manually and in doing so, I believe that they are probably several ways to lay it out to complete by the end of the year. I also think that each person might be able to handle 8 or 9 at a time. Additionally, I may learn that the medium complexity item may take only 8 weeks to complete but the high one might take 14. So I would like to be able to enter different scenarios. Can MS project help me?


I am compiling a master project that contains all of the project currently being executed. I need to level the resources across that plan. One of the "projects" list cannot be changed. I want to anchor those dates associated with that project and level the remaining projects around the "anchor" project dates. any help would be greatly appreciated.


Currently I am using 2007 MS Proj. Although I use day by day basis resource levelling, many times my resources are shown over allocated even if they are working less than 8 hours a day. Is it s bug? To resolved - I have to go to the timescale option and resolve it hourly if I want to see a clean report. Mostly it happens when a team member works on multiple tasks in one day. However, I have seen cases when s/w puts 2 hours of the same task in one hour slot and would not resolve it in automatic levelling. Am I missing any setting? Regards, Gaurav


Hi, I found your article very interesting. Maybe you can help me with a leveling problem I'm having. Taking your example in the article, figure B, let's imagine that Steve is only working 50% in Task One. Couldn't Task Two also start on Monday at 50% and then 100% in the remaining days? I'm having this case. The problem is even with Steve at 50% in Task One, Task Two only starts after One's finished. If I put Steve also at 50% in Task Two, Project puts the 2 tasks starting at the same time (good!) but when Task One's finished, Steve keeps at 50% till the end in Task Two. Some configuration's missing? Project limitation? What's wrong? Can you help? Thanks a lot! Tiago


i am a new user for MS Projects, can u tell me 1 thing..... is right to level your over allocated resources manually??


i am a new user for MS Projects, can u tell me 1 thing..... is it right to level your over allocated resources manually??


Try re-posting in the Q&A section.The 'Discussion' forum is for matters of general discussion, not specific problems in search of a solution. The 'Water Cooler' is for non-technical discussions. You can submit a question to 'Q&A' here:;content There are TR members who specifically seek out problems in need of a solution. Although there is some overlap between the forums, you'll find more of those members in 'Q&A' than in 'Discussions' or 'Water Cooler'. Be sure to use the voting buttons to provide your feedback. Voting a '+' does not necessarily mean that a given response contained the complete solution to your problem, but that it served to guide you toward it. This is intended to serve as an aid to those who may in the future have a problem similar to yours. If they have a ready source of reference available, perhaps won't need to repeat questions previously asked and answered. If a post did contain the solution to your problem, you can also close the question by marking the helpful post as "The Answer". .


My recommendation would be to break the work package down further so Steve is working 100% on each task and then assign the predecessor as appropriate. This approach ensures the resource is working on the task for the estimated duration and can then proceed to the next scheduled task. As a practice, I try to avoid 50% resource utilization. I try to assign 100% utilization and reduce the duration for the appropriate amount of time. Your other approach could include resource leveling within slack to see if it adjusts. Thanks! Andy MS Project Tutorial: Schedule Development Learn how to EFFECTIVELY develop a project schedule


When it comes to resource leveling the project, I always prefer a manual leveling approach as MS-Project can extend you end date unrealistically. MS-Project uses heuristics that examine slack within the project schedule to prioritize and allocate resources. You can use the Priority attribute in the Task Information section to setup priorities. Then you can use the automatic leveling feature to either level within slack (which won't adjust your dates) or outside of slack (which will adjust and extend your date). My recommendation is to do resource leveling manually by finding each overallocation and rescheduling the work with predecessors. Hope that helps. (I actually get this question a lot so I included it in my book) Thanks! Andy MS Project Tutorial: Schedule Development Learn how to EFFECTIVELY develop a project schedule

Editor's Picks