This page will guide you through your first example project. After this, you will know:
TaskFalcon
projectTaskFalcon
to schedule a task treeIn 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.
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…
name: value
) does not matter-
) starts a new list entryIt is strongly recommended to use an editor with YAML support. The following free editors have plugins that support YAML:
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
).
TaskFalcon
will hide tasks that have already been closed.
To make this work, we need to add the parameter -show-closed-tasks
.
In a real project, you probably don’t need to do this.
# 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.
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:
- task: <identifier>
) must be unique within the same scopeAfter 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'
TaskFalcon
you should always check the output on the command line.
TaskFalcon
is trying hard to schedule the projects, even if there are errors in the project file. However the result might deviate from what you had expected. It is strongly recommended to fix all errors and warnings that are shown in the TaskFalcon
command line output.
If everything went well, TaskFalcon
should have created 4 images:
first-project.gantt.png
first-project.gantt-with-resources.png
first-project.resources.png
first-project.resources-with-tasks.png
The results should look like this:
first-project.gantt.png
:
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
:
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
:
first-project.gantt-with-resources.png
:
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.
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
:
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
:
first-project.gantt-with-resources.png
:
first-project.resources.png
:
first-project.resources-with-tasks.png
:
You’ve scheduled your first project.
In the next tutorial we will cover the planning of multiple projects.