This section contains a hierarchical breakdown of tasks, task-groups and milestones of your project.
Type: Boolean
With the active
flag, you can completely disable a task.
Keep in mind that this might influence scheduling of resources in the past, if you use this flag in a task configuration.
It is strongly recommended to only use this flag as part of a task update.
tasks:
- task: Test
active: false
Type: String, list of resource names
With assign
you tell TaskFalcon
which resources are available for completing a task.
You also need to provide the efforts this task will require.
You can provide a comma separated list of resources:
tasks:
- task: T1
efforts: 5d
assign: dev1, dev2
In this example, TaskFalcon
will try to assign dev1
to the task, if available. If dev1
is not free at the time the task starts, it will move on to dev2
.
You can also tell TaskFalcon
that a task requires multiple resources to be available at the same time, for example when a task requires the cooperation of multiple people for completing a task or if besides a human resource, the task also requires a room or special tools to be available.
This can be configured with a “+
”.
tasks:
- task: T1
efforts: 5d
assign: dev1 + room1, dev2 + room1
In this example TaskFalcon
may choose between the combination of dev1
and room1
or the combination of dev2
and room1
. As you can see, no matter who will work on this - room1
always has to be free at that time.
Type: String, list of relative IDs
This adds a dependency to a task or milestone. The task will begin as soon as the dependencies are met (i.e. the depending tasks have been completed).
If combined with start
, the task will start when start date has been reached and the dependencies are met.
Dependencies are configured as a comma separated list of relative task IDs. To navigate up in the hierarchy a task ID has to be prefixed with ~
. See examples.
tasks:
- group: G1
tasks:
- task: T1
length: 10d
- task: T2
length: 10d
depends: T1 # Depends on the task T1 of group G1
- group: G2
tasks:
- task: T1
length: 10d
depends: ~G1.T1 # Depends on task T1 of parent group G1
- task: T2
length: 10d
depends: T1 # Depends on the task T1 of group G2
- milestone: M1
depends: G1.T1, G2.T1 # Depends on both T1 tasks of both groups G1 and G2
Type: String
The description just contains a more detailed explanation of the task. It has no meaning to the scheduler.
Keep in mind that you can write multi-line texts in yaml, using the block style indicator >
or |
, where >
will conserve new lines, while |
will remove additional new lines.
tasks:
- task: T1
name: Task 1
description: >
This is the first task for this project.
It needs to be completed first, since it contains
the required preparation for the real work.
length: 10d
- task: T2
name: Task 2
depends: T1
description: Here we do the real work
length: 10d
Type: Duration
Efforts
describes how much work needs to be done to complete this task. It contains a duration (see duration).
Efforts always require resources to be assigned to the task, otherwise it won’t get done.
Efforts can only be configured for tasks but not for milestones or groups.
resources:
- resource: r1
- resource: r2
tasks:
- task: T1
name: Task 1
efforts: 10d
assign: r1
- task: T2
name: Task 2
efforts: 20d
assign: r1+r2
Type: Duration
EffortsLeft
tells the scheduler how much efforts are still required to get the task done. This property doesn’t make a lot of sense as part of a task definition, but definitely as part of a task update. Here you can use effortsleft
to tell the scheduler, where the task is at in reality, opposed to the previously scheduled plan.
tasks:
- task: T1
start: 2020-06-01
allocate: dev1
efforts: 5d
updates:
- update: 2020-06-04
tasks:
- task: T1
effortsleft: 8d # The task was more complex than thought.
# 3 days after the task was startet, it was
# estimated to require 8 more days, (totalling 11 days)
Type: Date
By using this property, you can tell TaskFalcon
when a task is supposed to be completed.
tasks:
- task: T1
start: 2020-06-01
end: 2020-06-10
Type: String
Each task/milestone/group starts with the keyword task
, milestone
or group
and an ID.
The ID is the main identifier of a task, milestone or group.
In a hierarchical task configuration, the fully qualified identifier is a string composed of all the parent group identifiers, separated with a “.
”.
This might explain why it is not recommended to use a “.
” as part of the ID in the task definition, since this will interfere with the task hierarchy. It is recommended to keep the task ID as simple as possible, to make the task easier to be referenced in another task’s dependencies.
However, for making incremental task updates in an update
section, it is reasonable to use “.
” in the task ID, when updating a specific task in the task hierarchy.
tasks:
- task: T1 # This task has a fully qualified ID of "T1"
length: 5d
- group: Subtasks # This group creates a new scope for subsequent tasks, prefixing their IDs with "Subtasks."
tasks:
- task: T2 # The fully qualified ID for this task is "Subtasks.T2"
length: 5d
- milestone: M1 # The fully qualified ID for this milestone is "Subtasks.M1"
depends: T2
Type: Duration
The length
setting defines the time this task will need to be completed. Opposed to efforts
, the length
does not require resources to be assigned.
Efforts can only be configured for tasks but not for milestones or groups.
tasks:
- task: T1
length: 5d
- task: T2
length: 1w 2d
Type: Duration
Like what EffortsLeft
does for an effort based task, LengthLeft
does for a length based task. It tells the scheduler the remaining duration required to complete the task.
tasks:
- task: T1
start: 2020-06-01
length: 5d
updates:
- update: 2020-06-04
tasks:
- task: T1
lengthleft: 8d # The task was more complex than thought.
# 3 days after the task was startet, it was
# estimated to require 8 more days, (totalling 11 days)
Type: Boolean
With the locked
setting, a task can be excluded from rescheduling during an update.
When processing updates, the update will reschedule all tasks, that start or end after the update timestamp.
For certain tasks, this might not be desirable (e.g. you’ve communicated a milestone with a customer and don’t want TaskFalcon
to change this due to indirectly related changes in the config).
In this example the update will trigger a reschedule of T1
and M2
. However, T2
is locked
, so it won’t get changed. In the result, M1
will be shown with a broken dependency, since it happens before T1
is completed.
tasks:
- task: T1
start: 2020-06-01
length: 10d
- milestone: M1
depends: T1
locked: true
- milestone: M2
depends: T1
updates:
- 2020-06-05:
tasks:
- task: T1
length: 15d
Type: String
The name of a task is an optional property to make the task easier to read in the generated documents.
tasks:
- task: T1
name: Installation and setup of working environment
length: 5d
Type: Number
Intuitively you might think, that priority will influence the order in which tasks are scheduled. While there is some truth to it, it is important to understand, that priority
does not influence the start or completion of tasks directly. Instead, priority
determines the order in which tasks will be assigned resources in case of a resource conflict.
The default priority of a task is 100
. A higher value makes the task more likely to get the assigned resources.
The keyword priority
has no effect on a task without efforts or assigned resources.
tasks:
- task: T1
assign: dev1
length: 5d
priority: 200
- task: T2
assign: dev1
length: 5d
priority: 100
In this example, T1
will be completed before T2
. Both tasks start at the same time, but require the same resource dev1
.
Since T1
has a higher priority, it will be given dev1
first, so it will be completed before T2
.
tasks:
- task: T1
assign: dev1
length: 5d
priority: 200
- task: T2
assign: dev2
length: 5d
priority: 100
- task: T3
assign: dev1
length: 5d
priority: 150
In this example, T1
will be completed before T3
, since both tasks require the same resource dev1
.
This time, T2
is using a different resource and will be completed before T3
, despite T3
having a higher priority than T2
.
Type: Boolean
This property can only be used in an update.
When an update changes the scheduling of a task or milestone, TaskFalcon
will keep the previous start and end times for a locked task/milestone. To avoid this, you can use two updates to unlock
the task in the first update and lock
it again in the second.
The property reschedule
provides a more convenient way of doing this. It will unlock a given task/milestone for the duration of a single update.
tasks:
- task: T1
start: 2020-06-01
length: 5d 4h # Without further changes, this task will finish on 2020-06-08
- milestone: M1
depends: T1
updates:
- update: 2020-06-03
tasks:
- task: T1
lengthleft: 5d
- milestone: M1
reschedule: true # Without this line, the update would break this Milestone,
# since the Milestone would still expect T1 to finish on 2020-06-08
Type: Date
By using this property, you can tell TaskFalcon when a task is supposed to be started.
tasks:
- task: T1
start: 2020-06-01
end: 2020-06-10
Type: List of tasks
This property is only allowed in groups. In a group this will define a list of sub-tasks for this group.
tasks: # This is the top level "tasks" section of your project
- group: G1
name: A simple group of tasks
tasks: # This "tasks" section adds more tasks to this group
- task: T1
name: The first task of G1
- task: T2
name: The second task of G1
Type: Special
Each element underneath tasks:
must be one of three different types:
group
of tasksgroup
is allowed to contain more tasks in its own tasks
section. It may not list efforts or resources itselfmilestone
milestone
is just a point in time, which consists of a start date or dependencies, but does not contain resources or efforts.task
task
is the most important element of a plan, since this is where the actual work gets done.The type is given by how the element starts:
tasks:
- group: G1 # Determines that the type of G1 is a group
name: A simple group of tasks
tasks:
- task: T1 # Determines that the type of T1 is a task
name: The first task
- milestone: M1 # Determines that the type of M1 is a milestone
name: This milestone is completed after the first task
depends: T1
Type: Duration
With the properties dailymax
, weeklymax
and monthlymax
you can limit the amount of time resources can spend on a task per day/week/month.
This can be used to model ongoing support tasks with a limited amount of efforts per time.
You can use those properties individually or in any combination you like.
project:
name: Daily/Weekly/Monthly Max
start: 2020-06-01
resources:
- resource: r1
name: Somebody
tasks:
- task: T1
name: DailyMax 2h
dailymax: 2h
efforts: 1d
assign: r1
- task: T2
name: WeeklyMax 2h
weeklymax: 2h
efforts: 1d
assign: r1
- task: T3
name: DailyMax 2h + WeeklyMax 6h
dailymax: 2h
weeklymax: 6h
efforts: 3d
assign: r1
- task: T4
name: MonthlyMax 2h
monthlymax: 2h
efforts: 4h
assign: r1