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 have another look at the previous tutorial. In the section Tweaking projects to meet deadlines, we’ve changed the priority of a task to meet a deadline.
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:
first-project.gantt.png
:
and
second-project.gantt.png
:
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.
second-project.gantt.png
:
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.
first-project.gantt.png
:
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?
When 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.
TaskFalcon
will 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 updates
.
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
second-project.gantt.png
:
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
second-project.gantt.png
:
Nice. Abby still improved her delivery date. Life is still good.
Now let’s have a look at Webby’s plan:
first-project.gantt.png
:
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.
TaskFalcon
first 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.
TaskFalcon
remembers 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
all-projects.gantt.png
:
I guess Abby and Webby now need to get together to solve this issue - but that’s outside the scope of this tutorial.
TaskFalcon
and how to change itAs 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 locked: true
.
# 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 length
/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 lengthleft: 0d
.
Efforts based tasks can be closed by setting effortsleft: 0d
.
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
TaskFalcon
has 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
TaskFalcon
schedule milestones for you. Always enter specific dates for milestones, since they can not be changed accidentallydailymax
or workingtime
)You should know everything to plan, schedule and track complex projects.