Welcome to TechNet Blogs Sign in | Join | Help

Three Point Estimation (PERT) in Project 2010: Take 1

 

As some of you may already know the PERT Addin that was in Project for several versions was NOT included in Project 2010. The good news is that below we have the first version of some sample code you can use to add the feature back into the product! This first version does not use a form like the old one. It uses custom fields at the task level to store the Pessimistic, Optimistic and Most Likely estimates and the weights for each estimate. This is just a preliminary version. We hope to gather feedback and then release a future version of the code as a Visual Studio project that can be customized and used to create a Project 2010 Addin.

 

This code depends on using 7 task level custom fields:

Field Name Purpose
Duration1 Optimistic Duration
Duration2 Most Likely Duration
Duration3 Pessimistic Duration
Number1 Optimistic Weight
Number2 Most Likely Weight
Number3 Pessimistic Weight
Text30 Calculation State

 

The image below shows a Gantt Chart view with these fields inserted. In this example we see weights only on the first task. This is an option you can set in the code. If the option is set to ‘False’ then each task can have its own set of weights. Duration estimates are inserted for each task. The code at this point will estimate every task. (We could add the option to allow a project manager to specify which tasks should be estimated.)

image

 

To use this sample code in your own projects:

  1. Open Project 2010
  2. Click on the View Tab of the Ribbon
  3. Click Macro | Visual Basic
  4. Double Click on the “ThisProject (Global.MPT)” node just under the ProjectGlobal node
    image
  5. In the code window that opens up on the right paste in the code below
  6. Decide if you want to use only one set of weights or if you want each task to have its own set of weights
    If you want one set leave the code as it is. If you want separate weights then change this: “UseOneSetofWeights = True” to this:
    ”UseOneSetofWeights = False”
  7. Close the Visual Basic Editor
  8. Click on the “Customize Quick Access Toolbar” item on the ribbon
    image
  9. Click on “More Commands”
  10. In the “Choose commands from” list box pick “Macros”
  11. Select “PERT” in the left hand box and then click the Add button
    image
  12. Click OK

 

Now the code is ready to be used. All that is left is to insert the fields in the table above into a Gantt Chart view, enter your estimates and your weights (Remember that the weights must add up to 6!!) and then run the macro using the Quick Launch button you just added.

 

Feedback Wanted!!

This is just a first pass at a sample for replacing the PERT functionality. Please email me (brian.kennemer@microsoft.com) with your feedback.

Some things to think about:

  • Should there be the ability to specify which tasks should have their Durations estimated when the tool is run?
  • Do you prefer a form for setting the weights?
  • What other options would you like to see?

 

One last thing: This is just sample code and should be thoroughly tested before you use it on a ‘production’ project.

 

_____________________________________________________________________________________________________________

 

Sub PERT()
Dim tskT As Task
Dim tskFirst As Task
Dim FoundBadWeights As Boolean
Dim UseOneSetofWeights As Boolean

UseOneSetofWeights = True
FoundBadWeights = False

CustomFieldRename FieldID:=pjCustomTaskDuration1, NewName:="Optimistic Duration"
CustomFieldRename FieldID:=pjCustomTaskDuration2, NewName:="Most Likely Duration"
CustomFieldRename FieldID:=pjCustomTaskDuration3, NewName:="Pessimistic Duration"
CustomFieldRename FieldID:=pjCustomTaskNumber1, NewName:="Optimistic Weight"
CustomFieldRename FieldID:=pjCustomTaskNumber2, NewName:="Most Likely Weight"
CustomFieldRename FieldID:=pjCustomTaskNumber3, NewName:="Pessimistic Weight"
CustomFieldRename FieldID:=pjCustomTaskText30, NewName:="PERT State"

If UseOneSetofWeights = True Then
    Set tskFirst = ActiveProject.Tasks(1)
    For Each tskT In ActiveProject.Tasks
      If Not (tskT Is Nothing) Then
        If tskT.PercentComplete = 0 And tskT.PercentWorkComplete = 0 Then
          If (tskFirst.Number1 + tskFirst.Number2 + tskFirst.Number3) = 6 Then
            tskT.Duration = ((((tskT.Duration1) * tskFirst.Number1) _
            + ((tskT.Duration2) * tskFirst.Number2) _
            + ((tskT.Duration3) * tskFirst.Number3)) / 6)
            tskT.Text30 = "Duration Calc'd: " & Now()
          Else
            tskT.Text30 = "Not Calc'd: Weights <> 6"
            FoundBadWeights = True
          End If
        Else
          tskT.Text30 = "Not Calc'd: Task In Progress or Complete"
        End If
      End If
    Next tskT
Else
    For Each tskT In ActiveProject.Tasks
      If Not (tskT Is Nothing) Then
        If tskT.PercentComplete = 0 And tskT.PercentWorkComplete = 0 Then
          If (tskT.Number1 + tskT.Number2 + tskT.Number3) = 6 Then
            tskT.Duration = ((((tskT.Duration1) * tskT.Number1) _
            + ((tskT.Duration2) * tskT.Number2) _
            + ((tskT.Duration3) * tskT.Number3)) / 6)
            tskT.Text30 = "Duration Calc'd: " & Now()
          Else
            tskT.Text30 = "Not Calc'd: Weights <> 6"
            FoundBadWeights = True
          End If
        Else
          tskT.Text30 = "Not Calc'd: Task In Progress or Complete"
        End If
      End If
    Next tskT
End If
If FoundBadWeights = True Then
    MsgBox Prompt:="Some Tasks Weight Values were found to be incorrect." & _
    Chr(13) & "Check the Text30 fields for details.", Buttons:=vbCritical, _
    Title:="WorkPERT Weights Error"
End If
End Sub

Posted by brianken | 0 Comments
Filed under: , ,

New Project Server Admin Blog

The product team for Project and Project Server have started a new blog to segment their content about the administration of Project Server environments. It can be found here and will be a must read if you are involved in the deployment or administration of Project Server.

It’s a Thanksgiving Beta!

If you are enough of a Project-nerd to read this blog you likely already know that the Project 2010 public beta is out and ready for you to download. I have been using and testing it several months and I can honestly say that it is the strongest version of Project I have ever seen. I mean that from a feature standpoint (lots of cool new stuff) and from a product quality standpoint. I have been looking at beta versions of Project since Project 98 and I have never seen a set of pre-beta builds with the quality and stability I have been seeing with 2010. Just amazing work by the product team. Everyone, testers, developers and program managers, really kicked it up a notch with this version. Great work to all of them. NOW…on with the nerdiness!

 

I am hosting a Thanksgiving dinner party for my family (sorry, not enough room for everyone) and my wife and I were thinking about the timing of all the food and preparations and we were wondering if we could do it all. Last year we just went for it and found out that our dishes all needed different oven temps and it was a huge, and very late mess. This year my wife asked "Hey, software bigshot, doesn't Microsoft make some kind of tool for planning and scheduling things?". "Well yes, I suppose they do", I said sheepishly. :-)

So I broke out my trusty copy of Project 2010 and started lining out my WBS. I started with the prep work and even had tasks for my kids to cleaning up the yard and such but I abandoned that idea and started concentrating on the food part of the event. I looked at all the recipes and broke them down into sets of tasks with proper durations. Then I figured out that to solve my oven problem I would need some Oven resources. So I entered a resource for each oven temp my dishes required. Oven - 350, Oven - 375, Oven - 400. I assigned the cooking tasks for each dish to the proper resource and then I went to the Team Planner and found that the only way I would be able to do all those dishes is if I had 3 ovens or I cooked them serially and had several of them sitting out cooling off while the others cooked. Obviously this was not good. So I moved some things to the day before and then planned to just heat them up just before the service. Then my wife and I went through and found some great dishes that all required the same oven temp! I reworked the plan and and now things are much better. The end result is a great dinner (I predict!) that is doable from a schedule standpoint and now I’m even more in love with the Team Planner than I was before! Here is how my Oven – 275 resource looks in the Team Planner, now that I reworked it:

image

You can see that the Oven is overallocated but I did check and all three of the overlapping items will fit at the same time. :-)

 

So bottom line? Project 2010 saved my Thanksgiving! :-)

 

I have attached the mpp file to this post.  Feel free to download the beta (link above) and play around with it, use it for your party planning, make fun of it or point out where my schedule is flawed. Hopefully, all of those things will happen1 LOL

 

This sample project contains resources for me, my wife and my daughter as well as various oven temps, burner sizes and other appliances I will be using. Most of the tasks started out as manually scheduled tasks while I was moving things around and messing around and then once I wanted full scheduling I moved them to Auto Scheduling. (I was not sure what I thought about manual tasks at first but I really like them now for that early scheduling stage when you are building your WBS and just experimenting with timings before the real scheduling starts!) It has a custom field for aligning tasks to a specific dish (there is also a view that shows the tasks grouped by this field that I used to make sure I did not leave anything out). I used a bunch of Start-to-Finish links (first time I ever used one outside of a training class!) to make sure that if the service time moved that it would “re-flow” my cooking tasks in relation to the new date.  I even went with an old-school feature and added a drawing object and pinned it to a specific task so I could have a vertical line on the Gantt chart tied to the “Guests Arrive” milestone to make it more visible. LOL

 

So download the beta (it pretty much kicks ass!), mess around with this project and have a good, filling and safe Thanksgiving holiday (or for those of you NOT in the US, have a great Thursday the 26th!) :-)

 

PS, the beta will install a little ‘Send a Smile’ and ‘Send a Frown’ tool for giving feedback and you should certainly make use of it if you find an issue. But if you find something really interesting or something you think is a big problem feel free to send me an email (brian.kennemer@microsoft.com) I would be interested in hearing about it.

Posted by brianken | 2 Comments
Filed under:

Attachment(s): Thanksgiving.mpp

Project 2010 Feature: Team Planner

OK, flat out this is the coolest thing to happen to the Project desktop since, well, since maybe EVER!

So here is a sample project. 5 tasks, 4 of them assigned to Del Griffith:

image

 

Here is the project represented in the Team Planner view:

image

A row for each resource with each of their task assignments shown in the timescaled area. You can see the red background behind Task 1, 2 and 4. This is showing that Del is overallocated for the time period shown. Now you can grab a task and move it to another date or even move it down and drop it into Neil Page’s row and assign it to him.

 

image

I was able to drag Task 4 down to Neil Page and then move Task 2 and Task 3 so that Del is no longer overallocated.

Like I said, this is the coolest thing ever. I think that this view will end up being popular not only for newcomers to Project (because of it’s simple, elegant way of showing what tasks are assigned to which resources) but also for experienced project managers (because it makes manual resource leveling much easier than before.)

Posted by brianken | 0 Comments
Filed under:

Project 2010 Features: Timeline

The Timeline is a very cool feature in Project 2010 Standard and Professional. It adds a pane at the top of the Gantt Chart view that looks very much like a Visio timeline drawing. You can pick which tasks from your project show up in the Timeline. It allows you to create presentation ready depictions of important tasks that you can show to management or customers without having to show a Gantt Chart.

 

For example. Here is a very simple project schedule. It has a Summary task, some milestones and a few regular tasks.

image

 

I have chosen to show the Summary Task, Task 2, Task 4, Task 5 and both Milestones on the timeline below.

image

Project 2010 lets me put this graphic into other programs such as an email or a PowerPoint so I can show just these tasks in a very easy to understand format.

There are tons of formatting options and some interactivity between this view and the Gantt Chart that I will need to show in a video. It is just too visual and dynamic to show with static images. More to come on this feature later on.

Posted by brianken | 0 Comments
Filed under:

Auto-Generate ProjectID in Portfolio Server 2007

You can have Project Portfolio Server 2007 auto-generate a ProjectID for you. To do so:

  1. Click Settings | Organization Management | Organization Settings
  2. Pick your organization and then click Edit
  3. In the Organization Template Code you enter the template codes for how you want the number generated using the following codes:
    {D} - current day (1,2...31)
    {DD} - current day on 2 characters (01,02...31)
    {MM} - current month {1,2,...12)
    {MMM} - current month abbreviation {"Jan","Feb",...)
    {YY} - current year on 2 characters; e.g. 04 represents 2004
    {YYYY} - current year on 4 characters; e.g. 2004
    {ORG} - Organization Code
    {N} - the project number; if the template uses {ORG}, then the project number is the current number per project created in ORGANIZATION; otherwise it's per Account
    {Nx} where x = 2, 3, 4 - the project number on 'x' characters; if the template uses ORG, then the project number is the current number per project created in ORGANIZATION; otherwise it's per Account
  4. Click the “Use Organization Template For ProjectID check box
  5. Click Update

For example, the entry below will generate a code that has the 4 digit year and then a sequential number (2009-1, 2009-2, 2009-500, etc)

image

 

But that is not quite it. At this point the system will auto-generate your ProjectID but the field will still be editable so users could overwrite the auto-generated number. A quick change to the Project.aspx will fix that right up.

  1. Navigate to C:\Inetpub\wwwroot\PortfolioServer\Default\
  2. Make a copy of Project.aspx named Project_OLD.aspx or something to that effect. This will be your backup.
  3. Out of the box the Project.aspx file contains the following line:
    <cell position="1" attribute="PROJECTID" label="ProjectID" mandatory="yes"/>
    Edit this line so that it looks like this:
    <cell position="1" attribute="PROJECTID" label="ProjectID" readonly="true" mandatory="yes"/>
  4. Save the file

Now the system will auto-generate your ProjectID but the user will not be able to overwrite it.

Posted by brianken | 0 Comments

Project Conference

Late next week I will be in Phoenix for the pre-events and meetings for the Project Conference. If you are going to be there let me know.

I will be trying to update here with the big stuff and will be updating http://www.twitter.com/briankennemer with the small things.

 

I hope to see everyone there.

Posted by brianken | 1 Comments

PMBlvd Blog Guest Post

I guest posted over on the PMBlvd blog “PM Bistro” about keeping processes and PM tools simple. Check it out.

Planning as Guessing

The guys at 37 Signals were almost on to a good thing with this post about Planning as Guessing. Sure plans are guesses. Sure they are just a hopeful take on what we think might happen. Nobody that is good at what they do has ever questioned the transient, unsteady nature of plans (and yes, to be perfectly clear, by this I am implying saying out-right that those that think that their plans are cast in stone and not to be wavered from are bad at what they do.) But what their post gets wrong is that by dismissing plans and planning as a waste of time and diminishing the importance of planning they encourage the very thing that we need WAY LESS of in the world of, well the world of EVERYTING: a lack of planning. They seem to think there is too much planning. Well Im going to go the other way and say that there is nowhere near enough (good) planning. Maybe the problem is that it is assumed that the only outcome of planning is a plan. That is often the tangible product that one can hold in their hand or email to the team but it is not the only output of planning. The process of building that plan (the one that SHOULD be assumed will not last through the first week or so of the project) makes us smarter about what we are doing. It makes us think about what might go wrong. It makes us walk through different scenarios and different possibilities. Creating that solid plan that we know will get at least heavily modified if not out-right replaced is the very thing that equips us to make those heavy modifications or to come up with the replacement plan. Without the planning, if we dismiss planning as just the creation of guesses, we leave ourselves exposed to the four winds like so many backpackers huddled around the campfire at basecamp.(Sorry, just kidding. I could not resist. LOL. 37Signals makes some cool stuff for sure. I mean them and their products no disrespect.) But seriously, the planning process is not about coming up with the be-all, end-all, rock-solid path through the project. It is about preparing yourself and your team for what might happen. It is about thinking through what could go wrong, figuring out what will likely go wrong and figuring out what you will do when it DOES go wrong. My fear when I read posts like the one at 37Signals is that they seem to minimize the importance of planning (and even, if just a little and very subtly, ridicule those that think planning is important.) If this leads to even one team doing less than the appropriate amount of planning because a plan is “just a guess” then it has done a disservice.

Posted by brianken | 3 Comments

New Behavior in Timesheets with Project Server 2007 SP2: Timesheet Pre-population Goodness

Brian Smith writes here about a new behavior added in SP2 around timesheet pre-population and some reports of some customer dissatisfaction.

The ‘Gist’ is that with SP2 if you have the ‘Current task assignments’ option in the Default Timesheet Creation Mode then even after a user creates their timesheet new tasks assigned to them that fall within that timesheet period will still be added to the timesheet. Pre SP2 these new task assignments would NOT show up in the timesheet. The user would have had to delete the timesheet and recreate it. That was a HUGE bummer and the new functionality is VERY cool.

As Brian states there are a few customers that have users that want to delete a line from their timesheet but now, with SP2, if the line was a task from a Project the timesheet line comes back the next time the user opens their timesheet. The timesheet will now ALWAYS contain all tasks to which the user is assigned (that fall into that timesheet period.) These customers are unhappy with this behavior.

I think this is the best thing that could happen for these users. Basically, we have a situation here where a team member has been assigned a task by a project manager so it shows up on their timesheet. Then for whatever reason the team member feels that the task should not be on their timesheet. Either they feel that the task should be done by someone else or they feel that it should be done next week or some other reason. So they delete the line but then it comes back. So the good part of this is that it will encourage this user to talk to their project manager and explain why they think the task should not be on their timesheet. If the PM agrees then they can remove the assignment or move the task to a later week and it will drop from the users timesheet.

This feature not only makes timesheet task population dynamic but will now also encourage team member-project manager communications! Now THAT is a good feature. :-)

 

UPDATE (on 6/30/2009):

Here is the KB on this issue. Funny…it actually links back here and to Brian Smith’s blog. :-)

Posted by brianken | 8 Comments

Project 2010 Technical Preview

Just in case mine is the only Project blog you read, in which case you should really expand your blogroll by the way, here is an invitation to join the Technical Preview for the next version of Project and Project Server. :-)

_________________________________

Final call to those wishing to have access to the Microsoft Project 2010 client and Microsoft Project Server 2010 Technical Preview.

We have issued an invitation asking to show and expression of interest in gaining access to the Technical Preview of Project/Project Server 2010. The invitation was issued to all known EPM Specialized partners; Independent Software Vendors (ISV’s) that build on Project/Project Server; Project Most Valued Professionals (MVP’s) and  Project/Project Server courseware builders (books, Computer Based Training (CBT) DVD’s, instructor lead, on-demand).

There is only one invitation per company and it was sent to the company’s primary contact as registered in the Microsoft Partner Portal or through the Microsoft field providing contact details. Be aware as part of the process the person accepting the invitation must also sign a Non-Disclosure Agreement which applies to the individual and their company.

This is a final call to express and interest in receiving an invitation. If you fell that you company has not received this invitation (and should have based on the criteria given) please email proj2010@microsoft.com with your contact name, company name and email address.

For all other partners who are reading this and wish to participate in the Project/Project Server 2010 please email proj2010@microsoft.com with your name, company, email address, city, country and three sentence explanation why you should participate in the Technical Preview. Your name will be added to a wait list, there is not a guarantee that you will receive an invitation.

It is also worth noting that  as an added value to the Microsoft Project Conference registration at no additional cost to the conference ticket, you and your technical colleagues have been invited to attend the Microsoft Project 2010 Ignite Airlift which will be held on September 13-14, 2009 at the Phoenix Sheraton in Phoenix, Arizona, USA . This is a training workshop for EPM specialized partners and ISV’s who are looking for in-depth technical training on setting up the next EPM version: Project 2010.

See  http://blogs.technet.com/doug_mccutcheon/archive/2009/04/09/project-2010-readiness-be-one-of-the-first-off-the-line.aspx

Posted by brianken | 0 Comments

Filtering for an NA date in a PWA View

This post is for the person named Santhiya that commented on my “Server-side Calculation of Custom field formulas” post. I accidentally deleted it instead of approving it. I have it in my notification email so here is what they asked:

How do we use to check whether the Date fields contains values or not.

IN Project professional they are using

" Actual Finish = NA".

how can we use in PWA site while creating view with Filtering option.

Thanks!

Here is the answer:

As you found you cannot filter for “equals NA”. You also cannot filter for '”contains /”. Both of these give you an error when you try to save your filter.

What you can do is test to see if the value in the date field is greater than 1/1/1984. If it is greater than 1/1/1984 then the field contains a valid date.

So “is greater than 1/1/1984” will return only rows where the date value is NOT “NA”. The hard part is that you cannot use this idea to have a filter only show rows there there is NOT a date. The filtering mechanism does not seem to understand the idea of NA.

So the workaround for this is to do a ‘does not contain’ filter for a character that you know will always be in your dates but NOT the forward slash character (which throws an error.) If your dates for this field will always be in this century and you always use regional settings that show four digit dates then you can use this filter:

“does not contain 2”

This filter will return all rows that do not have a date in them if you use 4 digit years and your dates are always greater than 12/31/1999.

 

I hope this helps. Sorry I deleted your comment Santhiya. :-)

Posted by brianken | 2 Comments

Code to Show Which Tasks have Which Baselines Saved

Here is a sample of some VBA code that will populate the Task Text30 field with the numbers of the baselines for which each task has values saved. This is useful if you are using lots of the baselines but not all your tasks have had all the baselines saved.

For example:

image

“Task” has values in Baseline, Baseline2, Baseline4 and Baseline9 while “Other Task” only has values in Baseline2.

 

   1:  Sub WhichBaselinesSaved()
   2:  Dim t As Task
   3:  Dim i As Long
   4:   
   5:  For Each t In ActiveProject.Tasks
   6:      If Not (t Is Nothing) Then
   7:          t.Text30 = ""
   8:          For i = 0 To 10
   9:              If i = 0 Then
  10:                  If t.BaselineStart < 50000 Then
  11:                      t.Text30 = t.Text30 & i & ", "
  12:                  End If
  13:              ElseIf Not t.GetField(Application.FieldNameToFieldConstant("Baseline" _
  14:              & i & "Start", pjTask)) = "NA" Then
  15:                      t.Text30 = t.Text30 & i & ", "
  16:              End If
  17:          Next i
  18:          t.Text30 = Left$(t.Text30, Len(t.Text30) - 2)
  19:      End If
  20:      
  21:  Next t
  22:  End Sub
Posted by brianken | 1 Comments
Filed under:

The Project Conference…Be there or be…er…um…slightly more or less square than those that are actually there.

OK as nerdy things go I’m pretty sure a 4 day conference about Project Server ranks right up there. Maybe not as nerdy as Blizzcon but for sure more nerdy than Comdex. Of course I’m using ‘nerd’ in its most complimentary sense.
:-)

September 14-17 2009 in Phoenix. The Project Conference is THE place to be to learn from and rub elbows with all the best minds in the Project\Project Server\Portfolio Server universe. From the designers, the developers, testers, support pros, Microsoft Consulting Services on the consulting and implementation side, as well as the many GREAT partners providing addins, training and top notch deployment consulting…everyone is represented.

It is going to be a huge geek-out that is sure to answer all your questions about this version and the next! :-)

Posted by brianken | 0 Comments

Taking Requests

After having tested and found what I think are good settings for my screencasting I would like to gather suggestions for topics to cover.

Im thinking of a variety of topics ranging from beginning user tips around using Project Standard\Professional (creating views, setting baselines, using Usage views to look at and edit time scaled data) all the way up to more advanced things like Data Analysis views, security model ins and outs and resource management.

Please email me with any ideas.

Posted by brianken | 0 Comments
Filed under:
More Posts Next page »
 
Page view tracker