This week I attended training for Microsoft project 2010 through dynamic web training. I have been using MS Project for different projects since its 2000 incarnation and have always known enough to get by, but have often got stuck and spent hours "fixing" a schedule.
The first thing to know about MS Project is, as with XPAC, it is basically a database driven application. MS Project is based on three main databases, the project, the tasks and the resources. These are accessed easily via the ribbon menu. There are additional tables used for joins and additional data, for instance the "task assignment" table joins tasks to resources, and the "costs" table contains pay rates for resources. There are also tables used for calendars for projects, tasks, and resources, as each of these can have their own calendars that can be new or inherited from another calendar.
In all my years of database programming and working with MS Project for some reason I hadn't actually ever thought about the underlying structure of the MS Project database. In thinking about the database schema I was about to understand some of the concepts a lot better.
Some nice quick tips that we quickly learnt were:
- Never use the start and finish dates on the Gantt chart as they become constraints
Instead use the task information dialog
Or even better is to use the split view
You can access this via the view tab
If you enter a start date for a task it is sometimes automatically assigned either a "Start No Earlier Than" or "Start No Later Than" constraint depending on how you have set up the project.
Constraints are useful, but only when you really want them to be used, like if you have a promotional expo on a certain date that you cannot move or is out of your control. Then a "Must Start On" or "Must Finish On" constraint would be the thing to use.
- Use fixed duration
Most tasks that we estimate within software development are based on an amount of time that we think the task may take to complete. This is a fixed duration – fixed at time of planning, you can obviously update this when tracking the task but at the start if it is set at a fixed duration it can be easier to manage.
By putting a fixed duration we can then have multiple people working on it for different amounts of time but have the total task time remain the same. For example, if a task is set for a 1 week at a fixed duration, we can have a developer work on it for 3 days, have a senior developer code review it for ½ day, additional rework by developer for ½ a day and then testing for 2 days. We can add or change the amount of work that goes into this task as much as we need to, but the duration of the task remains the same.
You can update this from either the task dialog or the split screen.
- Use automatic scheduling for new tasks
This is an easy one, especially if you follow the earlier lesson. It means that any new tasks will be slotted in according to the resource availability and its predecessors.
- The quick access toolbar is your friend
If you have been using 2007 or 2010 for a while you may have used this feature before, but it really comes in handy in MS Project as there are so many commands that you need to use that switching between tabs can become very tiresome.
The best few, in my opinion, to have in the quick access toolbar are
- "Zoom – Entire Project" – this zooms the Gantt or table to the whole project
- "Zoom – Selected Tasks" - this zooms the Gantt or table to the selected tasks
- "Scroll To Task" – this scrolls (horizontally) the Gantt or table to the selected task
One scenario that Tarang wanted to know more about was flights and hotels associated with a task. There are many different ways to do this but the two best ways that I saw were
- Add costs as a "fixed cost" to the task
This is not exactly what Tarang was after but it is an easy way of adding additional non-person related costs to a task. First go to the "Cost" table – by showing the Gantt chart and right clicking in the top left corner.
This shows that for each task you can enter a cost for each task that accrued either at the start, end or as the task is completed. For example flights would be accrued at the start of the task as we have to pay before boarding. If the task involved a car than the hire of the car would be accrued at the start but petrol used during the task may be prorated.
This works if we know the full cost (or a good estimate of it) at time of planning, or can retrospectively add the cost in after.
- Create a resource for costs
This is a bit trickier but solves the problem of hotels. For example if you have a task where you have to fly somewhere and stay in a hotel then you could create new resources for flights and hotels.
In my example I have created a "Flight (To)" and "Flight (From)" resource that is accrued at the start of the task. This can be set on the task "Assignment Information" dialog, where tasks can be assigned per resource per task.
This is ok for flights as it is a fixed one off cost and doesn't change if the length of the task changes (or course if the flight costs more on different days than this would have to be updated).
Conversely, hotels need to be calculated pro-rata depending on the number of days you are away for. These are "Work" resources so that we can assign a calendar, in this case a new calendar called "Everyday" which makes every day of the week a working day. This resource is then assigned to the task at 100% and if the task goes over a weekend it can then have a hotel cost for those days, but not a consulting charge assigned to it.
Have I lost you yet?
Basically, a lot of people, including myself, think they know MS Project, but there is a hell of a lot of functionality in there and if you know how to use it even a little bit better than it can make "fixing" it later on much easier.