A bit of fun for Friday afternoon. A question came via the forums on the subject of Portfolio Analysis in Project Server 2010 and how a decision would be made on the allocation of resources if the projects had exactly the same priority. Firstly there is no real optimization logic in the resourcing part of the analysis – most of the heavy lifting happens in the cost analysis – where other metrics can also be taken into account. In terms of the resourcing this just happens in order of priority – so the top project gets resourced, then the next, and so on. For any project where there is insufficient of any type of resource then that gets forced out. But what if you have equal priority projects? In truth the Portfolio Manager would probably make the call and force in or out appropriately – but it is still technically interesting to know how it happens (well I wanted to know anyway…)
I had a play around with this today. So in my scenario I was also interested in seeing how equal cost choices were differentiated as well as equal priority ones chosen to get resourced. And the interesting result is that each appears to make the choice in the totally opposite way!
If I have 4 projects of equal cost and equal priority then the order of selection if the budget is not available to do all of them is carried out in the order of their GUIDs (PROJ_UID from the SQL Server database table MSP_PROJECT) - but not in the strict order that SQL might use - that sorts by the lowest order grouping of the last 6 bytes, but in the more straightforward left to right order of the hexadecimal characters.
As an example - SQL Server would put D741FE6E-D426-4A41-8BCC-370FDE23A3E4 before 6EDBF314-BFAE-4838-8CBC-6B95E91EC0C5 based on the last group (37.. before 6B..) but the order the Portfolio Analysis uses would take 6E... before D7... So almost random, unless you happen to know (and care) what your GUIDs are.
Now on to the resourcing. This happens in entirely the opposite order. So the 'highest' value of GUID (still using the full left to right logic) will get resourced first and the lowest gets resourced last. Again - it is really irrelevant how this happens and I'd guess you'd be forcing things in and out based on other criteria rather than some random 32 character hexadecimal string.
If you are keeping up - or slightly ahead of me - this opens up an interesting paradox. If I have 4 projects that have equal cost ($20,000 each) and equal priority - and I have a budget of $80,000 - but they each require a resource that I only have one of - then the project with the highest GUID will get selected for resourcing! However, if my budget is just $79,000 then that very same project would be the one that was rejected at the cost analysis stage - leaving the next highest to get resourced!