Free agile project management tools

Today most teams work remotely and use Slack for shared communication channels. Slack has essential app integrations to most agile tools and a API that lets you develop your own app integrations for any tool you need.

Slack plans include: free, pro, business and enterprise editions. The free plan comes with 5GB data, show the last 10.000 messages and can integrate with 10 apps, so for small teams the free edition is often fine.

Slack has many app integrations in the category project management, but since this article is about free agile tools, I will tell you about the free Kanboard tool.

Kanboard is an agile project management tool, that can be self hosted on any PHP and MySQL platform. The project is in maintenance mode, meaning there are no future development plans, other than what the community provides and shares.

Kanboard has a very well documented API and plugin development docs, that can be used for any app integration. Kanboard has many stable plugins for common tasks like:

  • GitHub Authentication, Frontend and WebHooks,
  • Slack and Mattermost for sending notifications
  • Calendar,
  • Gantt for task and projects,
  • Themes with better design: Essential, WeKanboard, BlueBoard,..

I created my own theme with colors like in Visual Studio Code.

Slack is by far the most customizable and used team communication platform for remote teams, whereas Mattermost is an out of the box solution.

I created a kanboard-feed channel in Slack and installed the Kanbaord Slack plugin that sends notifications to this channel. You can easily create your own Slack app with simple commands and install it to your workspace. Commands can call external scripts on your Kanboard project management tool to get information from the Kanboard API.

I created a Slack app called Kanboard with the command /kanboard to return a list of all projects, with links to overview, board, calendar and epics.

Aside: I use Kanboard tags (epic) and internal links to create a group of tasks that implement a given workflow (epic). I use Kanboard subtasks for describing user stories, that in the test driven development, describe a definition of done.

The Slack command script calls a PHP script on your Kanboard site with HTTP GET , that internally uses HTTP POST to call the Kanbaord API and get information on all projects.

Upload the PHP script below to the root of your Kanbaord site and replace domain, username, password and API token with your API settings.

You find the X-API-Auth token in Kanboard, when you login as admin and in the upper right corner select the menu, settings and API.

/projects.php

<?php
header('Content-Type: text/html');

$domain = "domain.com";
$username = "admin";
$password = "password";
$apitoken = "apitoken";

// Kanboard JSON API end point
$url = "https://".$domain."/kanboard/jsonrpc.php";

$data = array(
"jsonrpc" => "2.0",
"method" => "getAllProjects",
"id" => 1
);

$crl = curl_init($url);
curl_setopt($crl, CURLOPT_POST, 1);
curl_setopt($crl, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($crl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization: Basic '.base64_encode($username.':'.$password),
'X-API-Auth: '.$apitoken
));
curl_setopt($crl, CURLOPT_RETURNTRANSFER, 1);

$out = curl_exec($crl);
$json = json_decode($out);
switch (json_last_error()) {
case JSON_ERROR_NONE:
break;
case JSON_ERROR_DEPTH:
echo ' - Maximum stack depth exceeded';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - Underflow or the modes mismatch';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - Unexpected control character found';
break;
case JSON_ERROR_SYNTAX:
echo ' - Syntax error, malformed JSON';
break;
case JSON_ERROR_UTF8:
echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
break;
default:
echo ' - Unknown error';
break;
}

foreach ($json->result as $index => $val) {
echo $val->name.': ';
echo '<https://'.$domain.'/kanboard/?controller=ProjectOverviewController&action=show&project_id='.$val->id.'&search=status%3Aopen|overview> ';
foreach ($val->url as $name => $link) {
echo '<'.$link.'|'.$name.'> ';
}
echo '<https://'.$domain.'/kanboard/?controller=BoardViewController&action=show&project_id='.$val->id.'&search=tag%3Aepic|epics> ';
echo "\n";
}
?>

 

I hope you found this article on the free project management tool Kanboard useful as a starting point for developing your own commands.

The main Slack integration you need is of cause the plugin Slack that sends notifications, but it is always nice to be able to customize and automate your development processes anyway you want.