Many of our OnePager users like “birds on a wire” charts, which place a summary task in the background and then layer related milestones on top of the bar so that everything is in one line.
If the “birds” that are going to sit atop the “wire” are truly milestones, it’s easy. But what if the “birds” are actually tasks, and you want OnePager to display them as milestones? In other words, what if your birds on a wire chart is nothing but wires? How do you create birds when all you have are wires?
Many users will right-click on a task and manually convert it to a milestone:
This is OK, but if you have a lot of milestones, it can be a lot of work, and it’s not data-driven, so we tend to avoid this approach when lots of milestones are involved.
You could also try changing the task/milestone threshold to something that converts your shorter-duration tasks into milestones, but keeps your longer-duration summary activities as tasks. This is a great approach, but if some of your summary tasks are shorter in duration, you can end up with milestones in some places where you expect tasks, so it’s not always a one-size-fits-all approach.
Hack Your Microsoft Project Schedule to Create Conditional Milestones
We’ve come up with an approach that will give you the best of both worlds, creating milestones where you need them and leaving tasks where you don’t. The best part is that you don’t have to touch the main start and finish dates in your Microsoft Project schedule to do it.
Let’s start with a simple Microsoft Project schedule. For the purposes of this exercise, we want our “birds” to be all of the sub-tasks and our “wires” to be the summary tasks. In this example, everything is a task; there is not a milestone in sight:
When we first import everything into OnePager, we get more of a Gantt chart consisting of all wires and no birds. This is consistent with what we have in Microsoft Project:
What we want to do is trick Microsoft Project into converting non-summary tasks to milestones just for OnePager. The tasks in Microsoft Project will never actually make the switch, but OnePager will see them this way. To do this, we’ll write a formula that defines a new field called Start1:
Here is the formula for summary/non-summary milestones in plain text:
In plain English, this says that the new field Start1 will be equal to the Finish date of non-summary tasks, but will remain equal to the regular Start date for summary tasks. This lets each summary task preserve its original duration, but creates a zero-duration milestone for anything that isn’t a summary, since the start and finish dates are being set equal to each other in the formula.
By the way, if your project isn’t as black and white as mine, and you can’t make the summary/non-summary distinction for what should be a task and what should be a milestone, you could use a flag field instead. Insert any flag into Microsoft Project, pick the tasks that you want to convert to milestones, and then use this formula instead:
This formula says that anything flagged as “Yes” using Flag1 will auto-convert to a milestone using similar, albeit reverse, logic.
For this example, we’ll continue to use the summary formula as the basis for our conversion. Once that formula is applied, the duration between Start1 and Finish will now be zero for non-summary tasks, but will remain unchanged for summary tasks. Remember that this has no bearing on your actual duration in Microsoft Project, so it’s not going to break anything in your real schedule:
You’ll get similar results using a flag field; it just won’t be as cleanly delineated between summary and non-summary tasks.
In order for this to work properly, you do want to make sure that the formula is being applied to both summary and non-summary tasks. Otherwise, you could end up with “NA” in the Start1 field for your summary tasks:
Once you’ve sanity-checked your new start dates in Start1, go back to OnePager. We’re now going to tell OnePager to look at Start1 instead of Start, and this is where the magic will happen. Go to Home > Project View Properties > Field Mappings and change your Start Date field, like this:
As soon as you click OK, you should see OnePager refresh your chart. Milestones will automatically appear for anything that is not a summary task:
From here, it’s just a matter of switching OnePager into a timeline layout, which we’ve discussed multiple times on this blog. In short, we’re going to collect multiple tasks/milestones into the same row when they share the same Level 1 Summary parent:
To improve readability, I made a few other minor changes:
- Re-positioned milestone text above the milestones instead of left/right to avoid clutter. This is under Home > Project View Properties > Milestones > Milestone Label Properties.
- Increased the default row height (Home > Project View Properties > Page Layout) from 0.375″ to 1.0″ to create enough white space for the milestone text to sit above/below the bars without bleeding into adjacent rows.
- Reduced the default task bar height to make it more of a “wire”, and then turned off the task bar text, since it was repeating in the swimlanes anyway. Both settings are under Home > Project View Properties > Task Bars.
Depending on the density of milestones and the complexity of your Microsoft Project plan, your results may be slightly different, but this should give you an idea of how to build a data-driven birds-on-a-wire chart more robustly than before.