#ScrumMD

lachlan slowly taming rustlachlan
2025-10-28

Those of you who have potentially (open source) pet projects that nobody else cares about (at least yet), who do you get to bounce off you with design decisions?

Got a feature of I'm designing and needed the kind of argument I get at work to refine it. Because it's all public, ChatGPT did a passable job checking consistency with the rest of my apparent design philosophy.

Feels like there should be a better option though.

lachlan slowly taming rustlachlan
2025-10-27

, the CLI tool for managing tickets, work or cards (and yeah, originally designed for ) as files, that absolutely nobody but me wanted (and even fewer people asked for) has been updated to v0.2.

Big feature is `swrite` allows you to modify cards without loading in an editor. Also - `scard` now has customizable Jinja 2 templates for output.

Get it for Python >=3.11 with `pip install scrummd`.

Doco (including examples) on scrummd.readthedocs.io/en/late

lachlan slowly taming rustlachlan
2025-10-19

Sometimes, it's tough to tell if your code is elegant (and pure!), or if you've made things hard and complicated looking for the sake of it.

It's my project. It's staying, for now, and I'll no doubt get a chance to argue about it next time I run a session on neat maintainable code.

Look - I know that I could probably do this more tidily with a for loop. If I keep adding functions, I'll probably opt for something different.

(from github.com/lkingsford/scrummd/ )




    # Apply all - but again, not actually outputting until we've proven we're all good with

    # everything

    modified_cards = [

        from_parsed(

            config,


            reduce(


                lambda parsed_md, to_remove, config=config: parsed_md.remove_from_list(


                    config, *to_remove


                ),


                remove_values,


                reduce(


                    lambda parsed_md, to_add, config=config: parsed_md.add_to_list(


                        config, *to_add


                    ),


                    add_values,


                    card.parsed_md.set_fields(config, set_fields),


                ),


            ),
lachlan slowly taming rustlachlan
2025-09-14

What if developers self-organised?
What if leadership wanted to organise them instead?
What if we stopped them again?

lachlan slowly taming rustlachlan
2025-09-14

So anyway - it's a year later, and there's development happening on again.

Once I've added editing fields, probably a basic command to add a new card with the next index in order (because that's currently manual) and maybe a file-date based filter to be available, it'll probably live on v0.2 for another year.

lachlan slowly taming rustlachlan
2025-09-14

I ate my dog food with it, and stored my plans in it. Wouldn't recommend this workflow - but I actually have the cards for _in_ the repo. There's nice bits about it - I can move a card to Done in the same commit as completing it, but it's probably not feasible for bigger teams.

The problem is, the more I used this joke, the more I actually liked using it.

lachlan slowly taming rustlachlan
2025-09-14

started as a joke - basically ' was supposed to be developer lead, but has ruined it by inviting leadership in. What would it look like to have a tool that I'd want to use as a developer?' I knew that nobody else probably would want something like this - and that a '' tool that requires a cli/text editor to use, as well as having the cards be local files (so, you'd need to manage distribution yourself) wasn't going to be endorsed by any company.

lachlan slowly taming rustlachlan
2025-09-14

So - why am I looking at again?

Frankly - because I'm actually using it. In my new role, I'm losing track of the amount of work and things I need to track coming in from lots of directions.

Like in most big orgs that use Jira - our boards are associated with projects, managers, teams, cost centres; just making a board to track my own work wasn't feasible. Turns out I'd already written a great tool for doing it.

lachlan slowly taming rustlachlan
2025-09-14

Sometimes, when coding your own thing, you do little things to make yourself happy even if it isn't _strictly in scope_ of the feature you're building.

I'm adding writing fields to . I needed to rewrite the output code to make that work - which meant I'm moving (eventually) all output to Jinja2 templates rather.

And, to make me happy: I added ANSI color when using interactively to the new default template.

ScrumMD card in terminal. The headings and titles highlighted in color.

Text reads:
---
cli001: Display basic collection from cards
---

status: Done

# description

A basic collection is a folder in the `scrum` folder containing md cards.

By default, all cards are in the inventory. There's no filters being applied at the moment.

For now, a card must have a summary. Other fields are optional. Fields are defined either in obsidian style properties:

```md
---
Property 1: Value
Property 2: Value
---
```

or by the text following a hash header with.

A card's index is currently its filename.

# cucumber

**GIVEN** a collection of cards, and a collection folder _C_.
**WHEN** `sbl C` is run.
**THEN** a table showing the index and description all the cards in the collection is shown.
lachlan slowly taming rustlachlan
2025-09-10

So, I wanted to have a write function (so I could change fields of cards without a text editor). Which, after getting the physical order/casing on the fields, I thought 'well, that just seems like a special format of outputting the card with scard'. Well, I'll probably want a template for that.
Well, I could use Jinja.
Hey - I could use that for sboard as well.
Anyway, guess I'm rewriting all of the output code, and some of the config, for ScrumMD.

lachlan slowly taming rustlachlan
2024-05-02

The is the tool of the software engineer. Not as clumsy or random as an electron app.
An elegant tool of a more... civilized age.

(pssst: haaaaave... you checked out yet? youtube.com/watch?v=xn7ZRUzN_Tc)

lachlan slowly taming rustlachlan
2024-04-22

I made a video introducing , my tool that lets you manage scrum with markdown files, if you're in the tiny niche of folk into that.
youtu.be/xn7ZRUzN_Tc
(Sorry - YouTube. I'll repost with the PeerTube link when it's approved)

lachlan slowly taming rustlachlan
2024-04-18

New feature.

Turned out to be less work than I thought.

You can now go [[!card_index]] to refer to a card_index to display (for instance, with scard) but not add it to the collections made by the card.

So - you can have your dependency collection, but refer to other cards in it, and still go something like

sbl card1.dependencies

without seeing the ! marked cards

lachlan slowly taming rustlachlan
2024-04-17

I think at some point, I need to start sharing around the thing I made. So - I think I made the v0.1 milestone for

Short version - I made some new very unopinionated command line tools to help you manage (nominally ) cards stored locally in files

Doco on scrummd.readthedocs.io/
Source on github.com/lkingsford/scrummd
Install with `pip install scrummd`

ScrumMD logo featuring "#ScrumMD A tool for self organising teams"
lachlan slowly taming rustlachlan
2024-04-13

Almost there with to be willing to say 'ready for other people'!

Look at that nice visual board in the console. Can customize to group by anything.

lachlan slowly taming rustlachlan
2024-04-06

I don't even know if it's really practical as a daily driver. It's been great for dogfooding - I'm using a folder of cards in the repo itself and scrummd to manage it to keep track of what's left to add.

But - as an exploration of one way that developer-centric could work, I'm really enjoying using it already.

That'll do for now.

(6/6)

lachlan slowly taming rustlachlan
2024-04-06

A team can manage those cards however the hell they want; they can share them with git, shared folders or dropbox. They can import to make scripts to play with it in Python; there's no server or API that you need to interface with. It's just there locally. You can work in the process without leaving the terminal, which might be good for flow state.

I've even thought about the ceremonies - you can stand up with vim `sbl sprint1 -b` if you want vim through the cards

(4/x)

lachlan slowly taming rustlachlan
2024-04-06

The main tools show collections of cards and individual cards. They manage relationships between the cards and can enforce rules that you set.

But doesn't come with any rules beyond making sure every card has a 'summary' field and that it has an index (which it defines by default from the filename)

You can collect them how you wish - it recognises folders, you can manually tag. You can require fields or limit their values, if you wish. It's up to a self-organising team.

(2/x)

Scard Output

(env)  lachlan@MacBook-Pro  ~/scrumcli   main  scard cli017
---
cli017: `sbl` relative file path output only
---
status: Done
# description
We want to be able to just list the paths of all the cards that `sbl` returns when `sbl -b` or `sbl --bare` is called. The idea is that you'll be able to call

```
vim `sbl scrum1`
```

and be able to run the whole stand up going through the cards. Ordering the cards is a future goal.

We want to add the `_path` field as well, so it can be used in other queries.

depends: cli004 [Done]
# cucumber
**GIVEN** a collection of cards
**WHEN** `sbl` is called with the `-b` or `--bare` parameter
**THEN** the paths of all cards in the collection are returned with no other data - including no headers.

**GIVEN** a column configuration including the `_path` field
**WHEN** `sbl` is called
**THEN** then the path of the card is shown

implementation note:
No unit test exists for this actual output yet. I'm not really happy enough with output to test for it.
Command line output for sbl showing command `sbl --group-by status --sort-by index`.

Sample of output:
index, summary
[status = not fully defined]
cli003, Customize columns in sbl by command line
cli005, Allow collection specific config to be set in meta file
cli006, Allow meta/config to define compulsory fields
cli008, Permit newlines in header style descriptions
cli010, Allow report from md template
cli012, Allow cards to set fields in other cards
cli015, Show scrum board
cli027, File name X.Y.md is only indexed X
cli029, Allow subheadings to create subcollections
[status = ready]
cli019, String property after list property fails to be added to fields
cli028, Allow underline header styles
cli030, Support Python 3.10
cli031, Modify sphinx doco to generate output from examples
lachlan slowly taming rustlachlan
2024-04-06

So - what is it?

Fundamentally, a tool nobody _really_ wants. It seemed like an awful idea. And the more I thought about it - the more I wanted it.

It's really the exploration of an idea: "What would it look like to tell Jira to sod off, and manage the or process with markdown files and a command line?".

(1/x)

ScrumMD logo showing '#ScrumMD' and 'A tool for self organising teams'
lachlan slowly taming rustlachlan
2024-04-06

is getting close to the point I'm willing to start telling people about it properly.

The code to do the arbitrary levels of group by with arbitrary levels (and directions) of sorting is more complicated then I would prefer (github.com/lkingsford/scrummd/) - and I'm not 100% pleased with the interface if it was being used as a library.

But - tagged v0.0.10 yesterday. Can already install with `pip install scrummd` if you're using 3.11 or higher!

Command line output for sbl showing command `sbl --group-by status --sort-by index`.

Sample of output:
index, summary
[status = not fully defined]
cli003, Customize columns in sbl by command line
cli005, Allow collection specific config to be set in meta file
cli006, Allow meta/config to define compulsory fields
cli008, Permit newlines in header style descriptions
cli010, Allow report from md template
cli012, Allow cards to set fields in other cards
cli015, Show scrum board
cli027, File name X.Y.md is only indexed X
cli029, Allow subheadings to create subcollections
[status = ready]
cli019, String property after list property fails to be added to fields
cli028, Allow underline header styles
cli030, Support Python 3.10
cli031, Modify sphinx doco to generate output from examples

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst