Bland Industries

This site is under construction. Please come back often as I add features and content.

Workdown

Markdown to define scope

Division: Ideas

Date: 2022-08-10

I struggle with scoping work in a way that allows me to capture all our thoughts and decisions in a quick and convenient way.

I have scoped work in many different ways and different formats: spreadsheets, text documents and task managers. I found they all has some kind of friction that made it unsatisfactory.

The things I want in a scoping process:

With these desires I I reviewed the different method's pros (+) and cons (-).

Task managers

Spreadsheets

Text document

So it seems that the text document is the best except for the structured data part. This is where my solution comes in. There is a wonderful text format that has structured data in a way that maintains the human readable nature of the content: Markdown. One of the great design aspects of markdown is how little you need to add to human readable text in order for it to be machine readable. The machine doesn’t need to understand the human readable parts and the machine readable parts are logical enough for the human to also parse it. There is also a large ecosystem for rendering and displaying markdown text for non-technical people. That ecosystem also has lots of parsers available to convert the text into more machine readable structure for interoperability.

Any one can take this idea and create scope documents and developer parsers and workflows to accomplish this task. Here is the way I format my documents, I call it "Workdown".

Headers

Headers allow for the hierarchy of tasks. We will use the standard markdown header notation to denote the different levels of items. Each level has a specific meaning as described below. And the headers will be the main delimiter between tasks.

Project Name: #

What project this scope is being written for. I usually assume one project per markdown file.

Epics/Phases/Feature sets: ##

Large chunks of work. Can group work by timeline milestones, by like features or anything else you want. Examples

Stories ###

Discreet deployable unit of code. Examples:

Issues: ####

Discreet testable unit of code Examples:

tasks: #####

Helpful break outs of larger issues. If an issue is able to be broken down further for the benefit of the person doing the work then use this. Examples:

When parsing and importing the headers act like a tree structure where the higher number headers (more #'s) are child items of the lower number headers above it.

Body

The body of an item is defined as the content between the headers. The content is associated to the header item immediately above it. Aside from the below format for attributes the remaining markdown syntax is used to format as normal markdown would be formatted.

Attributes

When working on scoping out a section you will want to add specific attributes, such as estimates or assignees. You can accomplish this in two ways. Markdown code blocks can group all the attributes in a single spot. Or using a standard in a popular Obsidian plugin called Dataviewto assign variables.

Code Blocks

Markdown code blocks use three back tick characters ``` to open and close the block. If you define the language after the first three backticks many renderers will parse and style the code when displaying. I use workdown as the language and write attributes in yaml formatting. This could allow a workdown parser to read and parse the attributes.

Example:

```workdown
estimate: 3h
assignee: andy.rooney@example.com
type: bugfix
```

Data values?

The Obsidian plugin Dataview defines the ability to set key-value pairs. On their own line use :: to separate the key and value. For example I could add in the body of an issue Estiamte:: 2h or assigneee:: andy.rooney@example.com,ed.asner@example.com

Example Attributes

Examples of variables I have used:

Conclusion

I have written scopes in this format and have enjoyed them. There is still a learning curve to give this document to others to read but it is pretty simple. I still need to build a workdown parser to make this fully interoperable. This is a step I hope to take as I use this format more.


Example

Below is an example of a workdown file

# Project Name
```workdown
PO: xxxxx@xxxxx.com
SPM: xxxxx@xxxxx.com
BE: xxxxx@xxxxx.com
FE: xxxxx@xxxxx.com
Devops: xxxxx@xxxxx.com
Job number: PROJ-xxxxx
```
The body of the project section is here for the description of the whole project. Introduce the reader to what the work is about.


## Phase 1
Start Date:: 2026-06-04
Here is the text for the description of the phase. The above attribute defines the start date of the phase


### Story Name
Heres is a particular story


#### Issue 1
```workbreakdown
estimate: 2h
type: Action
sprint: 1
assignee: BE
```
This is the contents of the task body
- any markdown syntax allow
- You can have lists


#### Issue 2
```workbreakdown
estimate: 2h
type: Style
sprint: 1
assignee: FE
```
You can even leave the body empty like below


##### task
```workbreakdown
estimate: 2h
type: Style
sprint: 1
assignee: FE
```

#### Issue 3
```workbreakdown
estimate: 2h
type: Component
sprint: 1
assignee: BE
```

### Story Name here 2
Heres is a particular story

This would render like:

Project Name

BE: xxxxx@xxxxx.com
FE: xxxxx@xxxxx.com
Job number: PROJ-xxxxx

The body of the project section is here for the description of the whole project. Introduce the reader to what the work is about.

Phase 1

Start Date:: 2026-06-04

Here is the text for the description of the phase. The above attribute defines the start date of the phase

Story Name

Heres is a particular story

Issue 1

estimate: 2h
type: Action
sprint: 1
assignee: BE

This is the contents of the task body

Issue 2

estimate: 2h
type: Style
sprint: 1
assignee: FE

You can even leave the body empty like below

task
estimate: 2h
type: Style
sprint: 1
assignee: FE

Issue 3

estimate: 2h
type: Component
sprint: 1
assignee: BE

Story Name here 2

Heres is a particular story