Working in OmniPlan: A Tutorial

Welcome to the tutorial! Starting with a blank slate, we’ll build a project from the ground up to show all of the core features of OmniPlan in practical use.

Step 1: Create a Project

For the purpose of this tutorial we’ll be looking at the development process of a game being put together by an independent team of intrepid designers, coders, and testers.

To create a new project, choose New (⌘N) from the File menu.

Creating a new project in the File menu.

You get a fresh, untitled project document with one task. Save the file to a convenient location, and give it a name (we’ll call ours The Game Plan).

Our new project saved and ready to begin.

Step 2: Choose a Start or End Date

When setting out to build a project, one of the most important aspects is the timeframe. This, in turn, is dictated by any deadlines or start constraints that exist for the project.

In the case of our game development scheme, we don’t have a hard deadline for the project to be finished - we want it to be done when it’s ready (but as soon as reasonably possible). To indicate this, we’ll go to the project inspector and set the start date as today.

The Project Information inspector with the default start date (the day the project is created).

Conveniently, this is the default setting for any new project.

Note
If you're planning a project in the abstract without a fixed start or end date, you can change the dates from Specific to Undetermined until the timeframe is more set in stone. You'll get dates that display as T+1d, T +2d... instead.

If you’re planning a project with a specific do-or-die deadline, you’ll want to switch the direction from forward to backward and put the deadline date in the End field. Tasks will be scheduled back from this date, filling in the time from project completion to the present.

Step 3: Create Milestones

Milestones are the anchor points in your project that mark important shifts in focus or unlocking a new phase of the project. Clarifying these will help break a dauntingly large project down into more manageable sections, and help dictate the tasks leading up to and following the milestone.

To create a milestone, choose Add ▸ Milestone from the Structure menu or the Gear menu in the bottom bar of Task view, or use the keyboard shortcut ⌘⇧M.

Adding a new milestone using the gear menu.

Alternatively, click on the currently existing task (“Task 1”) to select it, then go to the Task Information inspector. You can change the task type from a regular task to a milestone here.

Change a task to a milestone in the Task Information inspector.

We’ll change the name of “Task 1” by clicking it in Task View or editing the name field in the Task Information inspector, create a few more milestones for our game plan, and then go on to reinforce our milestones with tasks.

Step 4: Create Tasks

Create a task by clicking the plus button in the bottom bar, pressing return with a task selected, or choosing Add ▸ Task from the Structure menu.

A task is anything that needs to get done in order for the project to move toward completion. Each task has attributes such as start and end dates, a completion percentage, and resource assignments; these show up in the various columns of the task outline, and in the Task Information and Task Scheduling inspectors. Tasks can be grouped together, and a task can be dependent on other tasks.

For now, just create some tasks and name them. Select your first task and press the Return key once (or twice, depending on how your keyboard preferences are set) to create new tasks. If you still have a “Task 1” hanging around, you can just delete it or change its name. When you’re done, if your milestone is not the last item, click the bullet to its left and drag it down to the bottom of the list.

Each task in the outline corresponds to a bar on the Gantt chart.

New tasks appear below the currently selected item in the Gantt view, or at the bottom of the list if no tasks, milestones, or groups are selected.

A basic lists of tasks and milestones for our project.

For our project we’ll create several tasks beneath each milestone that they’re related to.

Step 5: Edit the Work Week

Now that we’re starting to see the game plan come together, we’ll set tasks aside for the moment and start setting up the work schedule for our project.

Switch to calendar view. By default, working hours are Monday through Friday from 8:00 to 5:00, with an hour-long break for lunch at noon, but you can move or resize the blocks to adjust the working hours for the project.

The default schedule for a work week in Calendar view.

Drag a block to move it, or drag the edge of a block to resize it. Double-click and drag in an empty area to create a new block, or select a block and press the Delete key to get rid of it. The text inside each block updates to reflect the changes you make.

Since we’re working with a bunch of more nocturnal folks, let’s change the schedule to reflect that. Click and drag one of the time blocks on the calendar to bring it to a new position, or drag one of the edges to change the size of the block. We end up with a schedule that fits our needs:

The work week updated to fit our needs.

Note
If your average work day isn't 8 hours long, you should visit the Project Unit Coversions inspector and change the hours per day setting, so that your task durations will make sense.

Step 6: Set Schedule Exceptions

Even the most accommodating work week will occasionally have days that are out of the ordinary. Whether it’s a national holiday, a team-wide training seminar, an industry expo or conference, or just a patch of bad weather that keeps folks out of the office, setting exceptions to the regular work schedule can be key to keeping a project on track.

Still in calendar view, choose Extra & Off Hours from the toggle below the resource list. Here you can change the work hours for a specific week, to account for exceptions such as holidays or overtime.

The project calendar overview.

One that we know is in the future for our project is the upcoming Memorial Day. We can add that to our schedule right now. Use the arrows bracketing the current month to navigate to May, then click on the week of Memorial Day (the 25th) to access the exceptions calendar for that week.

The week of May 24-30 in detail.

To quickly remove working time from the schedule, you can Shift-drag, creating a red box that marks normal working time as unavailable.

To add extra hours, double-click and drag to create a blue box which represents available hours apart from the normal working hours.

We know we want to take Memorial Day off, but we can also predict that this week will be crunch mode for the team. We create a block of time that covers the 25th, and then replace that lost time with evening overtime hours through the rest of the week.

The week of May 24-30 with exceptions added.

Note
When making changes to the schedule for the whole project, be sure not to have any resources selected in the sidebar. Editing the calendar with a resource selected will change the schedule for that specific resource rather than the project as a whole (see Step 13: Set Individual Schedule Exceptions for more on how to do this).

Step 7: Set Task Durations

Now we can begin to scope out how long each task will take.

Use the view switcher to get back to task view. Each task takes a certain amount of time to complete. You can set a task’s duration by typing in the Duration column of the task outline, or by clicking and dragging the ridges on the right end of a bar in the Gantt chart. If you’re typing durations, you can use unit abbreviations like 2d (2 days), 1w (1 week), and so on.

The length of the bar in the Gantt chart represents the duration.

A task with its duration extended to two days.

Step 8: Group Tasks

When tasks are closely related or interdependent it can be useful to put them in a group. Groups help organize a project conceptually, and also act as meta-tasks that can be linked via dependencies to other tasks or groups.

Selecting multiple tasks for grouping.

Select some tasks and choose Group from the Structure menu (⌥⌘L) to group them. Grouped tasks are indented in the outline, and represented by a parent task of the “group” type, which can be named like any other task.

With all of the tasks in the group selected, this would be a good time to add a bit of visual distinction to the group as well. Go to the Project Styles inspector and choose a color in the Task Bar Color section that will identify all of the tasks in the group.

Styling a group's bar color with the task inspector.

After organizing tasks and milestones into groups and estimating the time required to complete them, we’re starting to get a better picture of how our project will take shape. At this stage our Gantt chart looks something like this:

The project with groups, color styles, and task durations.

Step 9: Connect Tasks with Dependency Lines

We can’t complete all of our tasks simultaneously! Even if we had the resources to do so, some parts of the project can’t happen until others are finished. Thankfully, the pieces are now in place to establish the ways that those tasks are dependent on the status of others. There are four ways that dependencies can exist:

  • Finish → Start dependencies are the most common type, indicating that when task A finishes, task B can start.

  • Start → Finish dependencies indicate that when task A starts, task B can finish.

  • Start → Start dependencies indicate that when task A starts, task B can also start.

  • Finish → Finish dependencies indicate that when task A finishes, task B can also finish.

Select two tasks which need to be connected, and click the Connection button in the toolbar. A Finish → Start dependency line appears between the tasks, starting from the task which comes first in the outline. You can also draw dependencies right in the Gantt chart by clicking an arrow on the end of a selected task and dragging it to the beginning of the next.

Note
The type of dependency is based on the start- and end- points of the arrow: dragging an arrow from the completion of one task to the beginning of another will create a finish → start dependency, and so on.

As you connect tasks, they automatically reschedule to respect the dependencies.

A finish-to-start dependency between two tasks, as illustrated in the Gantt view.

Milestones, like other types of tasks, can be connected with dependency lines. If you find that your milestones (or other tasks) don’t look like they’re as well positioned in the Gantt chart as their dependencies would indicate, you can drag to rearrange them in the outline for a more natural flow.

Milestones rearranged and tasks connected by dependencies throughout the project.

Remove dependencies by selecting all the relevant tasks and choosing Disconnect Tasks from the Structure menu (⌃⌘-) or Disconnect from the drop-down Connection toolbar button menu.

Step 10: Create Hammock Tasks

A hammock task is one in which the duration is dependent on both when the previous task ends, and the next task starts. This type of task is useful when facing a hard deadline and deciding what can be compressed if the project is running behind schedule, or if external factors influence when parts of the project must happen.

In our example we realize that alpha testing for the game can’t begin until April 26th, since that’s when we receive our prototype testing hardware. We give the “Testing phase” group a “start no earlier than” constraint of April 26th by selecting it, going to the Task Schedule inspector, and setting Start No Earlier Than to April 26th 12:00 AM.

Setting a start constraint for the Testing phase group.

Note
A start no earlier than constraint can also be set by selecting a task and dragging it along the timeline by the left handle that appears at its edge.

We decide that the “combine art and code” task is the one that’s going to give if the going gets rough. To convert it from a task of fixed duration to a hammock task:

  • First, make sure both the “coding” group and the “art” group are linked to “combine art and code” with finish → start dependencies.

  • Then, create a start → finish dependency originating from the testing phase and linking to “combine art and code.”

  • Finally, select the “combine art and code” task and open the task inspector. The fourth task type, Hammock, is available for selection.

Selecting the Hammock task type in the Task Info pane of the task inspector.

Step 11: Create Resources

Now it’s time to start adding the team members, equipment and materials we’ll be using to bring the project to fruition. Every person, piece of infrastructure, and raw ingredient that contributes to reaching the project’s goal is counted as a resource, so let’s get started.

The single default resource that comes with a newly created project, as seen in resource view.

Creating resources works much like creating tasks. Switch to resource view, which contains the resource outline. Create a few resources (as simple as pressing Return and name them. Then click the Type icon for each one and choose whether it is Staff, Equipment, or Material (like tasks, resources can also exist in hierarchical groups).

A timeline appears on the right side of the view for each resource you create, but it is empty until you assign the resource to some tasks.

A list of resources created for our project.

Note
When balancing workloads across multiple projects a staff member's email address is used as their unique identifier, so make sure their address is consistent across all the projects they're participating in.

Step 12: Assign Resources

You can assign resources to tasks from task view or from resource view.

In task view, you can select the task and then use the Task Assignments inspector to select which resources should be assigned to it.

Or you can just pop open the menu on the Assignment button in the toolbar.

In resource view, you can assign a task by dragging it from the Unassigned timeline (or the sidebar) into a resource’s timeline.

Assigning resources to a task using the Task Assignments inspector.

Customize the details of a resource with the Resource Information inspector (find more information in the Working With Resources chapter).

Note
When balancing workloads across multiple projects a staff member's email address is used as their unique identifier, so make sure their address is consistent across all the projects they're participating in.

Step 13: Set Individual Schedule Exceptions

Individual staff members may have personalized work schedules, and they’ll almost certainly have individual needs for time off. In the calendar view, choose a resource in the sidebar and create a regular weekly schedule for the resource just as you did for the project as a whole; then choose Extra & Off Hours from the toggle below the resource list and repeat the process for exceptions.

Describing vacation time for an individual staff member in Calendar view.

Step 14: Level Resources

Once we have a calendar of working hours, a set of established tasks and milestones, and a team of people with the tools they need to complete them, OmniPlan can optimize the efficiency of work that’s happening through a process called leveling.

Resource leveling analyzes your project and figures out the most efficient way to arrange it, taking into account things like dependencies and the amount of resources available.

If you make some manual changes to the schedule, like rescheduling incomplete tasks, setting up dependencies, or changing resource assignments, you should then level the project again to make sure your resource usage is balanced out.

To level the resource workload for your project, choose Level in the toolbar or Level Resources from the Project menu (⇧⌘L). The leveling dialog appears, with options to customize the leveling process; for now, leave these in the default configuration and click OK.

Unless your staff is already in the optimal configuration you’ll see the tasks in the Gantt view shift to accommodate the most efficient use of your resources’ time.

Leveling resource loads using the Level button.

Note
You can set OmniPlan to dynamically respond to updates in your project by automatically leveling resources every time you make a change. If you would prefer this, you can enable automatic leveling in the Project menu.

Step 15: Set the Baseline

With tasks set and resources assigned and leveled, the state the project is in now may be a glimpse at its fate in the best of all possible worlds — one where unforeseen hindrances don’t bog down progress, and where optimistic estimations rule the day.

This is the world that is captured when we set a baseline for progress, a feature used to compare how the project is actually doing against initial expectations, so milestones and resource allocation can be adjusted accordingly.

When you have a schedule set up and leveled properly, and the project is ready to begin, choose Set Baseline from the Project menu. This copies the schedule you created into a baseline schedule. The baseline schedules remain unchanged as you update the actual schedule; as the project goes on you can keep track of how closely it is following the original plans.

Comparing split actual vs. baseline schedules.

You can choose Split or Both from the Baseline/Actual menu on the toolbar to compare the baseline schedule to the actual schedule.

Step 16: Resolve Violations

Occasionally situations will emerge that break the rules of logic you’ve set up for your project. When one of these occurs, OmniPlan will let you know by indicating a violation related to the adjacent task.

If there are any logical inconsistencies in your schedule, they are marked with red icons in your task outline and in the status bar at the bottom of the window. Try creating a circular dependency in which two tasks both depend on each other. Because this is logically impossible, you should see a violation icon which you can click to resolve the problem.

A violation appears! Use the violations window to identify and resolve it.

Clicking on a violation icon displays the Violations window, which explains what the problems are and how to fix them. Most violations can be easily understood and solved here by clicking one of the provided links.

Resolving a violation in the violations window.

Step 17: Check the Critical Path

From the View menu, use the Customize Toolbar command to add the Critical Path button to your toolbar display.

The critical path button added to the toolbar.

The Critical Path button in the toolbar highlights the series of tasks and dependencies which determine the project’s duration (critical paths can also be charted to specific milestones rather than the project as a whole). If any of the tasks on a critical path ends up taking more or less time than planned, then the duration of the project as a whole will change as well. Usually, these are the tasks you most need to make sure are on track.

The project's critical path is highlighted.

Most of the tasks in a simple linear project will be on the critical path, because they are almost all in one continuous chain. Projects with multiple resources working in parallel, on the other hand, often have some tasks that can suffer a delay without affecting the deadline.

Note
Notably, in the case of our example project, only the final Testing Phase shows a critical path in the above screenshot. This is due to the presence of a hammock task prior to the Testing Phase group, which acts as a "shock absorber" to delays in earlier tasks. Until the duration of Combine art and code is reduced to zero by delays, tasks prior to it will not be considered part of the critical path for the entire project.

Step 18: Split Tasks

Whether because a key collaborator is on vacation or another part of the project has taken priority, suspending work on a particular task can be very helpful. When you want a resource or team member to devote time to something other than the task they’re currently assigned to, splitting the task into parts around the “time out” period is an ideal solution.

A task ready for splitting via the contextual menu.

To split a task:

  • Select the task in the outline.

  • From the Structure menu, choose Split Task.

  • In the popover, adjust the duration of both sides of the split, choose the date and time you want the task to resume after the break, and click the Split Task button; the task is split for later completion.

And now the task is split.

Note
To rejoin a split task, click on one of its parts and drag it to the other. The two segments will merge back into a single task on the Gantt chart.

After splitting a task it’s always a good idea to level to be sure the split is the most efficient way to manage the task at hand given the project’s available resources and time constraints.

Warning
A split task may mysteriously re-merge after leveling. If this isn't what you want, make sure that Allow Splitting is checked in the leveling dialog.

Step 19: Update Task Completion

As progress on the project continues, inevitably some tasks will be completed outside the timeframe initially projected. It’s a good idea to review the project in OmniPlan periodically and update it to reflect the new situation.

You can update progress of individual tasks by editing the percentages in the Completed column or the Task Information inspector. Or, just drag the completion handle on a bar in the Gantt chart.

Updating task completion using the task completion slider.

If everything is going as planned, you can click the Catch Up toolbar button to bring the completion percentage of every task (or just the selected tasks) to a selected date.

If you have tasks which were planned to be complete by now, but aren’t, you can click the Reschedule toolbar button to move them forward. Afterwards, remember to level the project.

Step 20: Collaborate via Server Repository

On a large project, or one where the collaborators are spread across diverse geographic locations, you may want to have multiple teammembers able to update the project status remotely. OmniPlan makes this easy!

Configuring publishing and subscriptions.

To share the project you’re currently working on, choose Configure Publishing and Subscriptions from the Project menu, then use the plus button below the Publish & Update Actions list to add Sync entire plan with OmniPlan server repository to the list of actions.

You’ll need to choose a server account to sync to; if you don’t have one set up, click Account Info to visit the Accounts pane of Preferences and set one up. See Accounts in the Preferences chapter to get started.

The options beneath the pub/sub actions list define when and how the project is automatically published to the server and updated from the remote version. You can update from the server at any time by choosing Update (⌃⌘U) from the Project menu or toolbar, and publish your local version to the server with Publish (⌃⌘P) or the Publish toolbar button.

When you have your settings the way you want them, click Publish in the toolbar to bring your project to the cloud with its very first sync.

Step 21: Balance Multi-Project Resource Loads

If resources (usually human members of your team) are shared between multiple projects in the same repository, you’ll want to decide in the Configure Publishing and Subscriptions panel whether you’ll publish the current project’s resource loads to other projects and whether the current project will subscribe to the resource loads of others.

Choose whether to publish the project's resource loads, subscribe to those of others in the same repository, or neither.

Choosing to publish a project’s resource loads means that other subscribing projects will obey its workload information when leveling; if Julie is working on Project A on Wednesday and its loads are being published to Project B, after leveling Project B won’t schedule her to work on Wednesday.

Choosing to subscribe to resource loads means that the project will obey all constraints by projects in the repository that are publishing their loads. By using only the publish or subscribe option a hierarchy of priority can be established between simultaneous projects — a project that only publishes will always have its needs met first, while a project that only subscribes will be assigned resources only when they can be spared.

By both publishing and subscribing, projects are treated as equals — and if a project neither publishes or subscribes, it ignores external factors and syncs only with its own updates.

Note
Reminder: the key to balancing resource loads across projects is that individual resources be tagged and identified by a unique email address that is shared across all projects. This can be set using the Resource Information inspector.