First, a simple question. Why level resources? Simply put, if resources are not leveled, resources are either overallocated or underallocated (or both). Overallocation means the scheduled work is not likely to occur (or the resource may be annoyed, overworked or burned out). Underallocation means suboptimal utilizing and billing of resource, lowering of profitability. Lastly, your schedule won’t be accurate, unless resource are correctly loaded.
As a rule, I’ve always used the Dependency Driven approach, where most every task is linked explicitly. Simply put, the Dependency Driven approach is using dependencies (predecessors) to sequence work to be done by a given resource. The common myth is that resource leveling never works in the real world, breaks project plans, and should be avoided like the plague. Much of this myth is due to lack of understanding of how to utilize the tool at hand (our friend, MS-Project). To start with, the Dependency Driven approach proscribes an overuse of dependencies which masks the actual work-related dependencies. In all fairness, not every project is a candidate for resource leveling, in fact for resource leveling to be effective, the underlying plan already constructed should already have the following characteristics:
- Minimum number of tasks with more than one resource assigned
- Removal of any constraints that are not absolutely necessary
What’s common wisdom for Resource Leveling?
- Never click automatic resource Leveling
- Always save your plan before even thinking of resource leveling
- It messes up your plan, throwing tasks in random order, and blowing dates
- It’s hopelessly broken and unworkable
Well, let’s explore Resource Leveling and utilization, and you may find my analysis below can help save huge time and effort in using Level Resources to optimize your plans. Let’s start with how MS-Project reports overutilization.
Crying wolf: how MS-Project over-reports resource overallocation
Has MS-Project ever identified resources as overallocated while you believe the plan is correct? Well, the calculation engine in MS-Project is somewhat primitive and can over-report utilization. As an example, I created a plan with three one hour tasks that occur on the same day. MS-Project immediately flags me as overallocated, even though I only work three hours in an eight hour day. That’s because MS-Project schedules all tasks to start at the same time of the day. Let’s have a look at a simple 3-task plan:

Here’s the resource sheet, note I am “red” meaning overallocated:

Here’s the resource graph:

Why am I overallocated? Let’s take a closer look at the default resource scheduling by MS-Project by looking at the Resource Usage view, looking in 15 minute increments at how these tasks get scheduled by default:

Clearly, the tasks are all scheduled to start at 8am.
Interestingly, if I use “Level Resource” it will not fix the problem, unless I set a high level of granularity, by telling the leveling engine to fix problems minute-by-minute or hour-by-hour. Note the default “day-by-day” leveling will not fix the problem. Here’s how it looks after I level on an hour-by-hour basis:

Note the red is gone, indicating there is no more overallocation. The actual calculation engine will report overallocation if a resource has to work for more than 60 seconds in any one minute of a project. This is because the scheduling and calculations are a bit simplistic, combined with MS-Project natively using one-minute increments for calculations. There are three basic approaches to resolving this:
- Tools/Resource Leveling
You will need to set fine granularity (hour-by-hour in this case) for leveling. - Edit Task Usage
View/Task Usage and change the minor time scale to hours, then manually edit the working hours so there is no overlap. - Adjust units
Set the Resource Units of the two tasks to be 50% on both so when there is an overlap the maximum is 100%. Make this edit by selecting Window/Split and change the units in the Task Entry form that appears in the lower window. The man-hours of work can be edited here as well to more realistic amounts if appropriate.
Resource Leveling –approaches
There are really three approaches to creating a project plan that has resource appropriately allocated. Your choice strongly affects the effort you will put into the plan up front, and how much effort needed as you manage the plan. MS-Project indeed can be frustrating or rewarding, depending on how it is used and how well you understand its behavior.

How to approach leveling
Prior to leveling (or more likely, to tune the way Level Resources works), you may want to set the task priorities. Just add a column for “Priority”. Priority is an indication of a task's importance and availability for leveling. Tasks with the lowest priority are delayed, and those with the highest priority tend to be scheduled earlier. The priority value that you enter is a subjective value between 1 and 1000, which enables you to specify the amount of control you have over the leveling process. For example, if you don't want Project to level a particular task, set its priority level to 1000. By default, priority values are set at 500.
- Task Dependencies
Use task dependencies to reflect a necessary sequence of events. Don’t overuse them, as each additional dependency can result in resource underutilization or completion date slippage. - Constraints
Avoid inflexible constraints, except where necessary. Inflexible constraints are those tying a task to a date. The inflexible constraints are Must Finish On and Must Start On date constraints. You can specify that a task must start on or finish no later than a particular date. Note such constraints limit the adjustments that Project can make when determining which tasks to adjust when leveling resources. - Priorities
These values act as “hints” to the resource leveling engine that affect the schedule sequencing of tasks. Tasks with the lowest priority are delayed or split first. Use a task priority of 1000 (meaning do not level this task) only when a task absolutely cannot be delayed. 500 is the default value.
Some recommendations on settings when leveling resources:
Never use “Automatic”
Manual is best, so you don’t get blindsided by automatic changes. Plus automatic changes can be slow in a large plan.- Start with “Day by Day” for overallocation
If you need to eliminate all overallocations, go with minute-by-minute. - Enable “Clear leveling values before leveling”
Otherwise you will accumulate delays and elongate the plan - Level the entire project or from the current day forward
You may wish to delete leveling for a range of tasks, which you can easily do afterwards. - Use “Priority, Standard” leveling order
This allows you to use “Priority” as a hint to task sequencing. See the section below for more information on what is going on in the engine for this setting. - Enable “Leveling Can Adjust Individual Assignments On A Task” only if you find that resources are insufficiently allocated
This setting allows multiple resource assigned to a task get their day-to-day assignments tuned to optimize completion of the task. This setting will have no effect unless multiple resource are assigned to one task. - Disable “level only within available slack” if you want some meaningful resource leveling
Note this enables the engine to adjust your completion date. - Disable “Leveling Can Create Splits In Remaining Work” unless you are ok with work getting stopped and started at random to create full utilization
Bear in mind there are stresses and task switching overhead for human beings that get yanked between tasks seemingly at random.
What “Leveling Order” does
There are three values for leveling order, which drive how the underlying leveling engine performs. Here’s what’s going on for each of these values:

My recommendation? Only use “ID Only”, I use a minimum amount of adjustments to “Priority” values, but then use “Priority Standard” so my priority settings then get taken into account.
- Reassign tasks
It is up to the PM to make the resource assignments. - Optimize a resource's allocation
Because leveling does not move tasks earlier or reassign units, a resource flagged as overallocated might become underallocated as a result of leveling. If you have multiple resources assigned to each task at varying units, you are likely to have underallocated resources, as MS-Project will level to ensure there is no overallocation. - Reassign units
For example, if I am assigned to work on two tasks that are both scheduled at the same time, leveling won't change my units so that I works on both tasks at 50 percent.
When you're ready to have Project level resources, on the Tools menu, click Level Resources. To accept all the defaults, click Level Now.
After Project finishes leveling an overallocated resource, certain tasks assigned to that resource are split or delayed. The split or delayed tasks are then scheduled for when the resource has time to work on them. You can see the results of leveling in the Leveling Gantt view, which graphically shows preleveled values compared with postleveled values, including newly added task delays and splits.
The effect of delay on leveling and scheduling
Leveling delay lets a project manager precisely manage the start and end of every task without adding dependencies and without fixing the start date. Leveling delay is a hidden field that exists at two places: the task level and the resource-assignment level:
- Task Level
Task level is the easiest to apply, but the hardest to manage. Simply add the “Leveling Delay” column to the Gantt chart view, or use the “Leveling Gantt” view. Enter the number of hours or days delay, and the entire task shifts out in time. Note the delay must be in elapsed days or hours. Elapsed days do not honor holidays and non-work time. A project manager must often adjust these delays manually as task start and end dates shift. - Resource Level
Resource-assignment leveling delay can be entered for each resource assigned to a task. It can be entered in work-hours or work-days. It provides flexibility to level out any imaginable work. If two people are assigned to a task, but only one is over allocated by 4 hrs, delay the over allocated resource by 4 hrs. The other resource’s start date is unaffected. To delay the entire task, though, every resource assigned to the task must be delayed. Make maintenance simpler; allocate one and only one resource per task.
Leveling delay is measured from the dependencies of the task. For instance, if task #4 and task #5 are both dependent upon task #3, ending on Monday, they will both begin on Tuesday with no delay. Putting a two-day delay on #5 will make task #4 start on Tuesday and #5 start on Thursday. If the end-date of #3 moves to Tuesday, they will both roll forward to Wednesday and Friday start-dates.
By combining units (% allocation) and leveling delays, a project manager can accurately represent complex work. People can work multiple tasks simultaneously, participate in multiple chains of dependent tasks, and still work all available work hours, and not one hour more.
“Level Resources” adds a “Leveling Delay” that is visible as a column (field) in MS-Project. This is shown in Elapsed Days (edays) that represent calendar (elapsed) time, and not work time. You can use the short hand “ed” (such as 5ed) to represent 5 elapsed days, and you can edit these fields, either to manually remove or adjust the output of leveling resources.
Some observations looking at the Leveling Gantt view, looking at “Leveling Delay”:
1. Task ID 2 and 3 were slipped within the same day to avoid overallocation
2. Task ID 7 has a predecessor Task ID 4, so the later has no green trailing line
3. Since priority was not set, the tasks are generally in ID order
Task level delays described above move an entire task with all assignments. A more fine-grained adjustment is to insert delays at the resource (assignment) level within a task.
In summary, Level Resources requires some understanding to use effectively, but it can save you significant effort in tuning a plan to effectively utilize resources to achieve your project objectives.
No comments:
Post a Comment