top of page

Why doesn't resource leveling in P6/MS Project work?


black and white image of a spinning top balancing on a flat wooden surface, and the article title "When resource leveling in P6 won't work"


A widespread frustration amongst Oracle Primavera P6 and Microsoft Project (MS Project) users is the resource leveling functionality. On paper, it seems super useful. With a resource loaded schedule, you can define your resource limitations, click "level" and hopefully magic happens. All constraints and restrictions are met, and you get a modified version of the schedule.


Unfortunately, this is rarely the case. The reason is that the algorithms behind the resource leveling functionality in both software have many limitations. They work great with simple plans and a few constraints but can't solve complex systems. Under the hood there is simple scheduling mathematics.


Complex resource leveling challenges can be solved with Artificial Intelligence powering mathematical optimizations. Continue reading for the details...



Some basics

Resource leveling in both P6, and MS Project works in a very simple way. Oracle support site explains it in the following way:


"During resource leveling, an activity is only scheduled to occur when its resource demands can be met. To accomplish this, tasks may be delayed to resolve resource availability conflicts."


Basically, scheduling software’s just delay activities until there are sufficient resources to meet the demand of the next activity that requires that particular resource. Let’s look at an example:


When resource leveling in primavera does not work

This simple project has 2 painting activities to be done in parallel. Each activity has 2 Minions allocated to it, totaling 4 Minions each day for 10 days duration. We now add a simple constraint: Maximum number of Minions per day = 2


When resource leveling in primavera does not work
When resource leveling in primavera does not work

Now we click "Level" getting a solution that complies with the restriction:


When resource leveling in primavera does not work
When resource leveling in primavera does not work

Let's look into the details

This looks great in principle. Then why doesn't it work when applied to complex projects? The reason is that simply delaying activities has many limitations:

  • Users can only level resource overloads that occur between two or more activities.

  • If a single activity is overloaded, scheduling softwares cannot level it because pushing its dates doesn’t solve the problem.

  • It doesn't consider varying resource allocation to individual activities that could be done faster/slower with more/less resources.

  • If you mix up overloaded non-labor resources with a labor resource, the leveler will ignore the activity unless the user goes into the individual detail of each of the activities.

  • It only considers delaying activities once the constraint cannot be met. It doesn't consider doing activities earlier, if possible, to release sufficient resources to meet the constraint.

  • By default the predecessor logic isn't changed unless specified, which means that any changes are reverted once the project is scheduled.

  • If the option of making changes permanent is selected, the predecessor logic isn't changed. In a complex schedule this incoherence can cause chaos. If an activity is delayed, the logic shoud be changed to either:

    • Finish to Start + LAG with its current predecessor or

    • Finish to Start with the activity that is releasing resources to the activity that is delayed


When resource leveling in primavera does not work

  • One can completely lose control of the schedule if this change in the logic is not done. Even worse, if later on the project the constraints change and re-leveling resources is required, the result will be completely illogical.


When resource leveling doesn't work

As outlined above, there are many instances when resource leveling produces sub-optimal results. Simply delaying everything is rarely the optimal solution. This is particularly important in construction because many activities are resource driven. In other words, many activities can be done faster or slower with more or less resources.


An electrical installation on a particular floor of a building can be done faster with more crews working on it. Or slower if there aren't enough crews available. But at least some progress can be made.


Let's take an example of residential building project made of 1400 activities and 36 different resouces.


Resource loaded schedule for resource leveling

Original start and end dates are as follows:

  • Start: 8/5/2023

  • End: 2/4/2025


When resource constraints are applied and leveling selected, this project is delayed by 6 months with new end date:

  • Start: 8/5/2023

  • End: 9/10/2025


Letting AI optimize the project activities and resource allocation to individual activities yields a slighlty better result:

  • Start: 8/5/2023

  • End: 11/9/2025


Delay is reduced by one month, or in a 17% compared with traditional scheduling software.


Closing remarks

AI is particularly well suited to find alternative options that meet the resource leveling constraints with minimal user input. The only requirements are defining the resource limitations and identifying resource-driven durations. AI will understand the nature of activities and do the rest finding the best options.


AI will find the best solution (or the least bad) and can go beyond simply representing it. AI-powered optimization algorithms have the ability to change the activity logic to ensure that the changes made make sense and are traceable. This way the user gets a modified schedule with traceable logic that can be trusted.


If you want to find out more, go to:




bottom of page