Skip to main content

project planning in markdown

Project description

markdown-plan

markdown-plan is a project planning syntax based on Markdown.

# Example plan

1. [x] This task is done
2. The next task is bigger
   - With some sub-tasks
   - This task is unique
   - This one depends on @(unique)

Writing your plan in Markdown offers some unique benefits:

  • Tracking it in version control
    • Plotting progress over time to calculate better ETAs
    • Documenting changes to the plan
  • Visualizing a plan (e.g. as a DAG of tasks)
  • Easily sharing a plan with others

All of these things make planning more transparent and, hopefully, fun.

Examples

A burn-up chart made from tracking a markdown plan in git:

Burn-up chart

Vizualizing a markdown plan as a DAG of tasks:

Generated DAG

A Gantt chart generated from a markdown plan (by topological ordering):

Example schedule

Syntax

Any line formatted as a list item or header is a task.

# Title task

- child task

Everything else is ignored by default.

- first task

This paragraph is ignored.

- second task

```
A code block, also ignored.
```

Tasks can be organized into hierarchical lists, ordered or unordered.

1. First
   - These two tasks...
   - Can happen in parallel
2. Second (must happen after First)

A task can be marked as "done" with a [x] at the beginning:

- [x] my finished task
- [ ] todo

Tasks can also have explicit dependencies using the @(...) syntax, although this is rarely needed.

- task1
- task2
- must be last @(task1, task2)

Each dependency is a unique substring of the task it depends on. The substring cannot include commas.

Parsing

Any valid plan can be parsed into a tree or a DAG, depending on the user's needs.

It is possible to create cyclic dependencies using the dependency notation above. A plan with cyclic dependencies is not a valid plan.

Tools

This repo ships with some basic CLI tools and a parsing library.

Install

pip install markdown-plan

Usage - command line

Changes to a plan can be tracked with git, where each commit effectively links a version of the plan to its timestamp. This history can be used to make projections about when the plan will finish, i.e. by plotting statistics over time.

mdplan history example.plan.md # outputs json
mdplan plot example.plan.md # opens a plot (using that json data)

Burn-up chart in browser

Usage - library

Users are encouraged to create their own tools as they see fit. The parsing library is designed to be easily extended.

from mdplan.parse import parse_tree

# ... get the plan text ...
tree = parse_tree(plan_text)

# count the leaves
num_tasks = len(tree.leaves)

# display the root task's description
root_node = tree.roots.pop()
task = root.value
print(task.description)

# ... see the Tree, Node, and Task classes for details
from mdplan.git import GitHistory

# ... get the path to a plan ...
history = GitHistory(path)

# a history is just a chronological list of version
dates = [version.datetime for version in history]
trees = [version.tree for version in history]
statistics = [version.task_statistics for version in history]

# ... see the GitVersion class for more details

Used by

Motivation

The main goal is to make planning easier and more useful. Ultimately, planning should help us answer questions like:

  • "When will this be done?"
  • "How are we doing so far?"
  • "What actually happened?"

Good plans should be:

  • easy to create
  • easy to adapt
  • easy to share

Plans that are hard to read or write are difficult to share.

Plans that are easy to edit encourage adapting to change. Editing is easier if the history of edits is never lost, and each edit can be documented.

If a plan is easy to parse, people are encouraged to build their own tools to help interpret the plan.

Acknowledgements

This project was inspired by Thomas Figg's "Programming is Terrible," Andrew Steel's gantt repo, Dave Farley's video "How to Estimate Software Development Time," and Allen Holub's talk "No Estimates" (itself inspired by the book by Vasco Duarte).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

markdown-plan-1.0.1.tar.gz (49.9 kB view details)

Uploaded Source

Built Distribution

markdown_plan-1.0.1-py3-none-any.whl (39.4 kB view details)

Uploaded Python 3

File details

Details for the file markdown-plan-1.0.1.tar.gz.

File metadata

  • Download URL: markdown-plan-1.0.1.tar.gz
  • Upload date:
  • Size: 49.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.8

File hashes

Hashes for markdown-plan-1.0.1.tar.gz
Algorithm Hash digest
SHA256 2a4169a737d3b83dd14331225f8fb98f530429b714b2284ae88e340705890b0d
MD5 4a292d1cc20d48f2458b245c046b41f6
BLAKE2b-256 555496c449a610fb40c5dc047463122d1600a7cd37b53c9301196fe0de55a0dc

See more details on using hashes here.

File details

Details for the file markdown_plan-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for markdown_plan-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8554599e1d5c64bada5366732562fc3780827bf50da10744883458b03e90ed46
MD5 cba3c3ed4744c7ebfd99ee435e11c123
BLAKE2b-256 b264941a5e9a1f4f0dea7f10ea9c5a732efcc55501f86b767dcf87a71f2f48b2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page