My First Project

This page will guide you through your first example project. After this, you will know:

In this tutorial, we will schedule a project for creating a simple website. Don’t worry - even if you have no clue how to create a website, you will be able to follow this tutorial.


The syntax of project files

TaskFalcon is using the YAML syntax for the configuration file. See this page for a YAML introduction (external link).

If this is the first time you’re working with a YAML file, please be aware that…

It is strongly recommended to use an editor with YAML support. The following free editors have plugins that support YAML:


Creating a project file

Create a new project file. Name it first-project.yaml. Let’s assume it is placed in the folder first-project/

Now open the file in your editor of choice, add the following project settings and save it.

# File: first-project.yaml
project:                  # Configuration block for a new project
  start: 2020-06-01       # Start date of the project. Mandatory field!
  name: My First Web App  # Name of the project. This will show up in the gantt chart

Now we can run TaskFalcon for the first time on the command prompt. This assumes that the TaskFalcon binary is in the path, so it can be invoked directly from any directory. Otherwise please use the full path to the binary (e.g. /home/user/Downloads/TaskFalcon/falcon).

# Terminal
~> cd first-project
first-project> falcon -show-closed-tasks first-project.yaml
Loading 'first-project.yaml'
Finished scheduling on 2020-06-01 00:00:00 +0000 UTC

CRITICAL: There are no tasks left for rendering. Please check if you have added tasks. Or maybe all tasks are in the past and you need to add -show-closed-tasks.

Ok, for now, we got a warning from TaskFalcon that there are no tasks to be shown. Not a big surprise, since we haven’t added tasks yet.


Adding a few tasks

Now we will add a couple of tasks.

# File: first-project.yaml
project:
  start: 2020-06-01
  name: My First Web App

tasks:                    # Container for tasks
  - task: T1              # Each task starts with "- task: <identifier>"
    name: Software design # The name of the task will show on the gantt chart
    length: 5d            # The length is given in working days (or weeks/hours/minutes)

  - task: T2          
    name: Create Backend  # This will implement the server component of your website
    length: 5d

  - task: T3
    name: Create Frontend # This will implement the frontend (html) parts of your website
    length: 5d

  - task: T4              # Here we are doing the quality assurance for the website
    name: Testing
    length: 2d

There are a few things to keep in mind:

  1. All task identifiers (i.e. - task: <identifier>) must be unique within the same scope
  2. Keep the identifiers short and simple, since you will need to refer to them when creating dependencies
  3. Lengths are given in working time. Weekends are not counted

After running TaskFalcon again, we will get this result:

# Terminal
first-project> falcon -show-closed-tasks first-project.yaml
Loading 'first-project.yaml'
Finished scheduling on 2020-06-08 00:00:00 +0000 UTC

Exported chart to 'first-project.gantt.png'
Exported chart to 'first-project.gantt-with-resources.png'
Exported chart to 'first-project.resources.png'
Exported chart to 'first-project.resources-with-tasks.png'

If everything went well, TaskFalcon should have created 4 images:

The results should look like this:

first-project.gantt.png:
GANTT chart


Adding dependencies

Let’s assume that the backend and the frontend can be developed in parallel, but only after the design has been completed. Testing on the other hand requires both development tasks to be completed. While we could set explicit start dates for each task, we can let TaskFalcon figure it out by adding a dependency to T2, T3 and T4:

# File: first-project.yaml
project:
  start: 2020-06-01
  name: My First Web App

tasks:
  - task: T1              
    name: Software design 
    length: 5d           

  - task: T2
    name: Create Backend
    length: 5d
    depends: T1           # This task can not start before task T1 has finished

  - task: T3
    name: Create Frontend
    length: 5d
    depends: T1           # This task can not start before task T1 has finished

  - task: T4
    name: Testing
    length: 2d
    depends: T2, T3       # This task will depend on multiple other tasks
                          # It will not start before all of the dependencies have
                          # been completed

This results in:

first-project.gantt.png:
GANTT chart


Adding resources

Since we want to use TaskFalcon to not only schedule our project, but also consider available resources, we need to add resources to the project. This will be done in a separate section: resources.

We will have two developers in our project: a backend developer (Barbara Backend) and a frontend developer (Freddy Frontend). Barbara only works Monday to Thursday, while taking Friday off. Freddy on the other hand will only work part time, 4 hours a day.

Previously we defined the length of a task. TaskFalcon will calculate length based tasks just on elapsed time. Now we want TaskFalcon let the resources work off the estimated time for those tasks. Hence we need to change the keyword length to efforts and also assign one or more resources to each effort based task.

Finally, we want both developers work on the design together - i.e. they can only work on this tasks when they are both available.

# File: first-project.yaml
project:
  start: 2020-06-01
  name: My First Web App

resources:                          # Container for our resources
  - resource: BackDev               # New resource with unique resource identifier
    name: Barbara Backend           # Full name, which will show up on the resource chart
    workingtime: mon, tue, wed, thu # This employee will only work Monday to Thursday

  - resource: FrontDev
    name: Freddy Frontend
    dailymax: 4h                    # This employee will only work 4 hours per day

tasks:
  - task: T1              
    name: Software design 
    efforts: 5d                     # Switching length to efforts
    assign: FrontDev+BackDev        # A task with efforts always requires resources to be assigned
                                    # The "+" will make sure that both resources will work on this task at the same time 
  - task: T2
    name: Create Backend
    efforts: 5d
    depends: T1          
    assign: BackDev

  - task: T3
    name: Create Frontend
    efforts: 5d
    depends: T1          
    assign: FrontDev

  - task: T4
    name: Testing
    efforts: 2d
    depends: T2, T3                 # This task will depend on multiple tasks
    assign: FrontDev,BackDev        # The "," will assign any of the listed resources to this task that is available

This time I would like to see an overview of efforts spent. This can be done by passing -show-efforts to the falcon command:

# Terminal
first-project> falcon -show-closed-tasks -show-efforts first-project.yaml

Results:

first-project.gantt.png:
GANTT chart

first-project.gantt-with-resources.png:
GANTT chart with resources

We now see that for the Software design task, both developers are working part time from Monday to Friday, since they can only make progress on this task if both developers are available at the same time.

While the Backend task starts on 8th of June, the Frontend task starts a day later. As you can see, this is due to the fact that the required resource for the Frontend task was already working on the Design task for 4 hours this day. Since this resources only works 4 hours per day in total, the Frontend task can only commence next day.

For the Testing task, instead of assigning both resources at the same time, we told TaskFalcon to assign any resource, that is available.


Tasks with length and efforts

We’ve already learned to schedule tasks by length and we’ve already learned to schedule tasks by efforts. Now we’re going to do both at the same time. Let’s assume the Testing task completed successfully. Now we’re adding a customer review phase. This phase will take 5 days where the customer is testing the website.

We’re using a length here, since we’re not scheduling resources of our customer. However, we assume that the customer will have some questions, so we’re going to assign our frontend developer for one hour per day to support the customer and make some minor adjustments to the website.

To accomplish this, we’re going to add a resource filter, to limit the availability of the frontend developer for this task to one hour per day.

# File: first-project.yaml
project:
  start: 2020-06-01
  name: My First Web App

resources:
  - resource: BackDev
    name: Barbara Backend
    workingtime: mon, tue, wed, thu

  - resource: FrontDev
    name: Freddy Frontend
    dailymax: 4h

  - filter: 1hSupportPerDay             # Creates a new filter
    dailymax: 1h                        # This limits resources to 1h max per day

tasks:
  - task: T1              
    name: Software design 
    efforts: 5d
    assign: FrontDev+BackDev

  - task: T2
    name: Create Backend
    efforts: 5d
    depends: T1          
    assign: BackDev

  - task: T3
    name: Create Frontend
    efforts: 5d
    depends: T1          
    assign: FrontDev

  - task: T4
    name: Testing
    efforts: 2d
    depends: T2, T3
    assign: FrontDev,BackDev

  - task: T5
    name: Customer Review
    depends: T4
    length: 5d                          # This task will require 5 working days to finish
    efforts: 5h                         # But it only has 5 hours of efforts
    assign: FrontDev.1hSupportPerDay    # Here we're applying the previously created filter to the resource

Results:

first-project.gantt-with-resources.png:
GANTT chart with resources


Finishing the project

What would be a project plan without a milestone? Ok let’s add one.

# File: first-project.yaml
project:
  start: 2020-06-01
  name: My First Web App

resources:
  - resource: BackDev
    name: Barbara Backend
    workingtime: mon, tue, wed, thu

  - resource: FrontDev
    name: Freddy Frontend
    dailymax: 4h

  - filter: 1hSupportPerDay
    dailymax: 1h

tasks:
  - task: T1              
    name: Software design 
    efforts: 5d
    assign: FrontDev+BackDev

  - task: T2
    name: Create Backend
    efforts: 5d
    depends: T1          
    assign: BackDev

  - task: T3
    name: Create Frontend
    efforts: 5d
    depends: T1          
    assign: FrontDev

  - task: T4
    name: Testing
    efforts: 2d
    depends: T2, T3
    assign: FrontDev,BackDev

  - task: T5
    name: Customer Review
    depends: T4
    length: 5d
    efforts: 5h
    assign: FrontDev.1hSupportPerDay

  - milestone: M1       # This is our milestone
    name: Delivery      # Milestones do not need length or efforts and no assigned resources
    depends: T5

Here are the final results:

first-project.gantt.png:
GANTT chart

first-project.gantt-with-resources.png:
GANTT chart with resource

first-project.resources.png:
Resource chart

first-project.resources-with-tasks.png:
Resource chart


Well done!

You’ve scheduled your first project.

In the next tutorial we will cover the planning of multiple projects.