Task configuration

This section contains a hierarchical breakdown of tasks, task-groups and milestones of your project.

Active

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.

Example

tasks:
  - task: Test
    active: false

Assign

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.


Depends

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.

Example

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

Description

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.

Example

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

Efforts

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.

Example

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

EffortsLeft

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.

Example

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)

End

Type: Date

By using this property, you can tell TaskFalcon when a task is supposed to be completed.

Example

tasks:
  - task: T1
    start: 2020-06-01
    end: 2020-06-10

Task/Milestone/Group

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.

Example

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

Length

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.

Example

tasks:
  - task: T1
    length: 5d
  - task: T2
    length: 1w 2d

LengthLeft

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.

Example:

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)

Locked

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).

Example

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

Name

Type: String

The name of a task is an optional property to make the task easier to read in the generated documents.

Example

tasks:
  - task: T1
    name: Installation and setup of working environment
    length: 5d

Priority

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.

Example 1

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.

Example 2

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.


Reschedule

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.

Example

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

Start

Type: Date

By using this property, you can tell TaskFalcon when a task is supposed to be started.

Example

tasks:
  - task: T1
    start: 2020-06-01
    end: 2020-06-10

Tasks

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.

Example

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

Task Type

Type: Special

Each element underneath tasks: must be one of three different types:

  1. A group of tasks
    A group is allowed to contain more tasks in its own tasks section. It may not list efforts or resources itself
  2. A milestone
    A milestone is just a point in time, which consists of a start date or dependencies, but does not contain resources or efforts.
  3. A task
    A 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

Work Limits: DailyMax, WeeklyMax, MonthlyMax

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.

Example

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
    
GANTT chart with resource