In this tutorial you will learn how to:
You might wonder what this tutorial is about, since you already know how to schedule a multi-project scenario.
In a perfect world, when there is no change in circumstances and everything always works out as planned, you probably wouldn’t need this. If you are in this situation, feel free to stop here and let me know where you are living and what business you’re in. Seriously - I want to know!
For everyone else: The art of tracking a project helps to detect resource problems or slipped deadlines in advance to bring things back on track or escalate problems early on.
Let’s imagine there are two project managers using
TaskFalcon. We will call them Webby, who is taking care of the website project and Abby, who is taking care of the mobile application. After Abby created her project plan for the mobile application the two plans looked like this:
Let’s now assume Webby already communicated the delivery milestone on 1st of July to her customer.
Now Abby tries to tweak her project plan to speed up the delivery of her project by increasing the priority, as we did in the previous tutorial.
Awesome, Abby improved her delivery date by 10 days. Life is good.
Or is it? Let’s have a look again at Webby’s project plan.
Of course, since
TaskFalcon can not magically create more resources (I’m working on it - but don’t expect results soon…), Abby’s changes have delayed Webby’s delivery day. In this case it’s just by one day - but I’m sure you can imagine that it could have gone worse easily.
While you could say this was to be expected, it actually is a problem. The main problem here is that Webby might not even notice this delay until it is too late and she has to confess to her customer that she can’t deliver on time for reasons completely out of her control.
Why did this go south?
TaskFalcon schedules your project plan, it doesn’t matter whether the project lies in the past, present or future.
TaskFalcon always sees the whole set of tasks and schedules it from the beginning to the end.
TaskFalcon can not see when you’ve changed something in your project file, in order to decide whether an implicit change was intended or not.
This can result in changes that can alter the past and the future (again - for
TaskFalcon past and future means nothing - at least with what we’ve learned so far). Since the past has already happened, it will probably deviate from the plan and it is likely to affect the future as well. And if you have deliveries planned and communicated with a customer, those releases might get moved without a warning and maybe without someone noticing it until it is too late.
TaskFalconwill consider those changes as known from the start.
In order to apply changes to the project safely, you need to tell
TaskFalcon a date from which on the changes should be applied.
This can be done with
An update consists of a date and a list of changes for resources and tasks.
Let’s revert the change of the priority and make it part of an update instead:
# File: second-project.yaml project: start: 2020-06-08 name: My First Mobile App imports: - resources.yaml tasks: - task: T1 name: Software design # priority: 200 # Removed change of priority here efforts: 5d assign: MobileDev+BackDev - task: T2 name: Create Backend efforts: 5d depends: T1 assign: BackDev - task: T3 name: Create Mobile App efforts: 8d depends: T1 assign: MobileDev - task: T4 name: Testing efforts: 2d depends: T2, T3 assign: MobileDev,BackDev - task: T5 name: Customer Review depends: T4 length: 5d efforts: 4h assign: MobileDev.1hSupportPerDay - milestone: M1 name: Delivery depends: T5 updates: # All updates start with an update section, which contains a list of updates - update: 2020-06-08 # Each individual update contains a specific date tasks: # An update can contain changes to tasks and/or resources - task: T1 # A task inside an update needs to be referred to with a fully qualified task identifier priority: 200 # Inside the task setting, you can change any task property you like
Let’s see what happened to Abby’s plan.
# Terminal > falcon -show-closed-tasks -sub-projects all-projects.yaml
Wait, what happened here? The task
Customer Review finishes on 13th of July, but the
Delivery Milestone is stuck on 23rd of July. This must be a bug, right?
No, this is actually the intended behaviour. The reason for this is to avoid changing milestones accidentally. If an update is supposed to reschedule a task or milestone, which is not directly, but indirectly affected (i.e. due to dependencies), you need to tell
TaskFalcon explicitly to reschedule this task.
Let’s make a small change:
updates: - update: 2020-06-08 tasks: - task: T1 priority: 200 - milestone: M1 reschedule: true # Here we're telling the scheduler to explicitly re-schedule this milestone
Let’s check the results again:
# Terminal > falcon -show-closed-tasks -sub-projects all-projects.yaml
Nice. Abby still improved her delivery date. Life is still good.
Now let’s have a look at Webby’s plan:
For the same reason, the milestone in Abby’s project was stuck on 23rd of July, Webby’s
Delivery milestone is stuck on 1st of July.
And since the depending task will not finish on time, we now have a broken dependency.
TaskFalconfirst schedules the whole plan without considering any update. Once it knows the initial dates for the milestones, it schedules the plan again for each given update.
TaskFalconremembers the previously scheduled dates, so it can tell you when an update breaks previously scheduled milestones.
The problem will also show up on the multi-project overview chart (see the previous tutorial on how to create this):
# Terminal > falcon -show-closed-tasks -no-tasks -max-depth 0 all-projects.yaml
I guess Abby and Webby now need to get together to solve this issue - but that’s outside the scope of this tutorial.
TaskFalconand how to change it
As we have seen in the previous chapter, by default,
TaskFalcon will warn you when an update moves a dependant milestone. But is there a way to change this behaviour? And can
TaskFalcon also warn me if the end date of a task is changed?
Short answer: Yes.
We already learned one way to tackle this by using the property
reschedule: true in an update for a task/milestone.
On top of this, each task or milestone has a property
locked, which determines if a task/milestone will stay at the scheduled date of the original plan. With this date being fixed,
TaskFalcon just checks if all dependencies are met for this task/milestone and if all work got done by the end of a task.
You can change this behaviour by manually adding the property
locked: true or
locked: false to a task or milestone. Unlike
reschedule: true, this can be done on a task/milestone definition as well as in an update. Also unlike
reschedule, this will permanently change the behaviour of the task (or until changed again).
The default setting for tasks is
locked: false, while for milestones it is
# This is just an example - don't make that change to your tutorial file tasks: - task: T1 name: Software design efforts: 5d assign: FrontDev+BackDev locked: true ... - milestone: M1 name: Delivery depends: T5 locked: false
Here a couple of recipes for common problems when tracking projects:
Let’s start with what you shouldn’t do: Just change it in the task definition.
The reason is that another task/milestone might depend on it. And now
TaskFalcon would assume this task was always supposed to be that long and move the depending tasks/milestones accordingly without raising a warning.
Instead, you should create an update, where you can either set the new total
efforts of the task (including the time that already passed) or set the remaining length (
lengthleft) or efforts (
effortsleft) from the time of the update.
tasks: - task: T1 start: 2020-06-01 length: 5d - task: T2 start: 2020-06-01 efforts: 5d assign: xyz - task: T3 start: 2020-06-01 length: 3d efforts: 3d assign: xyz updates: - update: 2020-06-03 tasks: - task: T1 length: 10d - task: T2 effortsleft: 8d - task: T3 efforts: 10d lengthleft: 7d
Length based tasks can be closed by setting
Efforts based tasks can be closed by setting
If a task has a length and efforts set, you can do both at the same time.
tasks: - task: T1 length: 3d - task: T2 efforts: 3d assign: xyz - task: T3 length: 3d efforts: 3d assign: xyz updates: - update: 2020-08-01 tasks: - task: T1 lengthleft: 0d - task: T2 effortsleft: 0d - task: T3 effortsleft: 0d lengthleft: 0d
You should never remove a task if someone already started working on it. Otherwise
TaskFalcon doesn’t know that it ever existed and would assume that this someone was free to work on other tasks, which didn’t happen in real life.
However in an update, you can disable a task, which will accomplish the same from the time of the update on.
A disabled task will no longer be considered by the scheduler, nor will it show up on the GANTT chart.
For disabling a task, you would need to set
active: false as part of an update.
tasks: - task: T1 efforts: 3d assign: xyz updates: - update: 2020-08-01 tasks: - task: T1 active: false
This will most likely screw your whole plan, since
TaskFalcon would now assume that this employee never existed, so all the work he/she already did in the past would be assigned to someone else.
Instead, you should add an update, where you disable this employee. This can be done by setting
active: false for this resource. From the day of the update, this resource is no longer available and won’t show up on the resource charts.
resources: - resource: FrontendDev name: Freddy Frontend updates: - update: 2020-08-01 resources: - resource: FrontendDev active: false
TaskFalconhas changed the schedule without me noticing. What can I do to prevent this?
When adding a new task or group of tasks and you want to make sure it doesn’t interfere with your current plan, the best approach is to disable this task/group in your task definition and re-enable it with an update:
... tasks: - task: T1 name: My new task efforts: 10d assign: xyz active: false updates: - update: 2020-06-01 tasks: - task: T1 active: true
If you want to track projects safely, I would recommend getting used to using updates.
However, if you follow a few rules, you should be fine without using updates most of the time
TaskFalconschedule milestones for you. Always enter specific dates for milestones, since they can not be changed accidentally
You should know everything to plan, schedule and track complex projects.