aboutsummaryrefslogtreecommitdiff

busiless

busiless is a simple task tracking and auto-prioritization tool. Using a directory of arbitrarily organized files, each with a simple front matter header, busiless is able to:

  • Generate visual dependency graphs based on dependency information in task headers.

  • Generate a task priority list based on task dependencies.

busiless aims to be lightweight, service-less, and flexible. Tasks themselves can be any arbitrary file format, including markdown or text, and can be named and organized arbitrarily according to project needs.

Task Files

All task files are discovered recursively within a particular directory, which is considered to be the root directory. Task files are all files containing a front matter with a field type: task. Any other file is ignored.

Identifying Tasks

Task files are identified by their absolute path relative to the root directory. For example, given ./tasks as the root search directory, a file at ./tasks/milestone1/fix-bug.txt will have the ID /milestone1/fix-bug.txt.

The root directory can be specified using the BUSILESS_ROOT environment variable, or on the command-line using the -r/--root argument.

When one task refers to another it can also use a relative path, relative from itself.

Task Metadata

As mentioned, a task file must have a type: task field/value in its front matter. It may also have these optional fields which provide additional metadata:

  • after - An array of task identifiers which a task depends on. Elements in the array can also use doublestar patterns to match multiple tasks using wildcards.

  • status - An arbitrary string indicating the current status of a task. Task status can be used to filter out tasks when executing commands.

  • weight - An arbitrary number which will be used during prioritization to break ties between two tasks. If not given then a value of 10 is assumed.

Installation and Usage

busiless can be installed using go install:

go install dev.mediocregopher.com/busiless.git/cmd/busiless

The binary provides multiple sub-commands, each providing different functionality.

prioritize

The prioritize sub-command will analyze all task files in a task set and produce a list of tasks which should be worked on next, ordered by their relative "total weights".

Tasks which can be worked on next are those which don't depend on any other tasks, as determined by their after metadata field.

The "total weight" of each task is determined by adding the task's weight to the total weights of all tasks which depend on it. In effect a higher total weight indicates that more tasks depend on the task being completed.

Example Usage

> busiless prioritize --root ./tasks --ignore-status done
0)      /mvp/cli/base.txt (30)
1)      /mvp/dag.txt (30)
2)      /mvp/license.txt (10)

visualize

The visualize sub-command will generate an SVG depicting the dependency graph of a set of tasks. This can be useful for understanding a task set at a high level, as well as to help identify and untangle dependency cycles.

Example Usage

> busiless visualize --root ./tasks --pattern '/mvp/**' > mvp.svg

Example

A set of example task files can be found under the ./tasks directory in this project.