Emacs, org-mode, Kanban, Pomodoro… Oh my…

This post is slightly off-topic of our usual AgileSoC theme; instead it is aimed at you Emacs folks who use org-mode and have been asking yourself “How can I combine Kanban and org-mode?”  Here’s how I did it.  It’s not rocket science, but it is very handy.

OK, I admit that I’m an Emacs geek.  I’ve used Emacs for a very long time, and have always been amazed at how many powerful, useful features are created for it.  The one feature that I’ve used for years is the org-mode.  org-mode is an organizer, note taker, outliner, planner,  etc.   Check out the web-site (orgmode.el).  It has so many features, I’m sure that I don’t know them all.

I use org-mode for three things:

  1. track my tasks;
  2. my time associated with each task, and
  3. a short journal of what I do every day (including any research).

All this information is located in one spot and org-mode allows me to keep it organized and easily searchable (it’s a text file).

Being an Agile-Emacs geek, I’ve been trying to use web-based and desktop systems keep track of my personal to-do lists using Kanban.  For the stuff I do I found Kanban provides me with the best way to track and report what I’m doing.  After being mildly impressed with many of these tools,  I never got into using them because they required me to get out of Emacs and get into a browser.  Using a GUI after being used to a straight text entry was also a little more trouble than I wanted.  Lastly, the data is usually in a proprietary format — that would be my data is now stuck in a proprietary format.

Being an Agile-Kanban-Emacs geek, my next step was to Google “emacs org-mode kanban”.  No luck.  What follows is my solution to creating a Kanban board using org-mode.

Kanban Board meet Org-mode Tables

org-mode provides an awesome table editing facility.  Once you’ve defined what the table looks like it automatically resizes the table to balance any new text you add.  My first step in creating my Personal Kanban board was to create a org-mode table.

Sad, Lonely, Empty Kanban Board

Initial view of Personal Kanban Board

My workflow (i.e., indicated in the header row) is pretty generic and straightforward:

  • Backlog (product stories not started yet);
  • Analysis (think, think, think);
  • Implementing (do, do, do);
  • Debugging/Testing (ensuring that it’s right); and finally
  • Done (proven correct and accepted).

Product Story meet Org-Mode Internal Links

Now I need to add my Product Stories to my backlog.  For this I use the org-mode markup language to add internal hyperlinks.  Links are created in org-mode using the format: `[[link]].  The target is simply: <<target>>.  Here’s a picture of my first Product Story added to the table.

My First Product Story in the Backlog

As you can see, org-mode has done several things:

  • readjusted the table to accommodate the new “Product Story 1″ link in the Backlog column;
  • Translated my input of the link `[[Product Story 1]] to the `Product Story 1 hyperlink.  NOTE: If you click on this link with your mouse the cursor moves to the target line indicated by <<Product Story 1>>.

I use the org-mode tags :BACKLOG: and :STORY: so that I can filter on those for reporting, and I use the priority [#A] to indicate the importance of this story.

The next thing I do is add the sub-tasks that make up the Product Story and History to capture what the heck I did for each sub-task.

Adding the Details

I continue to add new Product Stories and sub-tasks as above, until I’ve got a decent size Backlog.

Initial Backlog

Now, I start working.  I’ll move Product Stories across my work flow, update history and complete actions.    Here’s a snapshot where I’ve done some work.

Work In Progress

OK, that picture is getting a little busy now, but the interesting elements are:

  • the Kanban board automatically re-sized as I moved the Product Story links from column to column;
  • I can use the org-mode folding capability (notice that <<Product Story 1>>  ends with ellipsis … i.e., “:BACKLOG:STORY:…” — the ellipsis indicates that some text has been folded, or is currently hidden from view.  Use the tab key when the cursor is on the line to toggle the fold/unfold);
  • I’m using the org-mode time-tracking feature to capture how much time I spend on each Product Story (captured in the lines indicated with CLOCK:).   org-mode has a way to generate a report summarizing the time spent on each Product Story.
  • There’s even an iPhone app (http://mobileorg.ncogni.to/) so that I can update my Personal Kanban board on my iPhone.  You can’t get sexier than an iPhone App; unless you’re not an Agile-Kanban-Emacs-iPhone geek. ;-)

I’ve found it extremely easy to use Kanban and org-mode to capture and track my work.   If you’re a power org-mode user and can suggest other features of org-mode that would be useful in this context — I’d be all ears.

Pomodoro meet Emacs

Just to be clear.  I’ve been in management for over 15 years, and I pride myself in that I’ve never micro-managed anyone that I’ve supervised (for those of you who I have worked with, here’s your opportunity to contradict me).  However, I love to micro-manage myself.   I’ll break down any significant work until I have a set of tasks around 0.5 to 1.0 day in duration.   I need that for two reasons:

  • I’m too methodical (aka ‘anal-retentive’) to not capture a plan;
  • I have the attention span of a gnat.  If there’s a “bright shiny object”… I’ll be attracted to it.  Creating a set of a short sub-tasks means that I can progress toward the ultimate goal, and then as a reward take a break and go look at that bright shiny object for a bit, and then go onto the next task.

For the second issue of focus, I’ve been using the pomodoro technique for several months.  Go check out the web-site for more details on how to use this technique.  Again, I tried browser-based, desktop, and iPhone applications to track my pomodoros for me — but they were even worse than the Kanban applications I alluded to above for keeping me on track. As most of day is spent looking an Emacs screen — that’s where I need to be notified when a pomodoro is over.  Once again some kind Emacs elisp coder created pomodoro.el.  This allows me to start a pomodoro timer within Emacs; it automatically starts the short and long breaks and the next pomodoro; allows me to stop and rewind the pomodoro (for when I’m interrupted), and keeps a crude track of how many pomodoro’s I’ve completed.  Check out the elisp code for more details.

You may find using pomodoro will drive you nuts… or you may love it.  But if you’re an Agile-Kanban-Emacs-iPhone-Pomodoro geek, you’ll probably love it.

Happy tasking!

Share/Bookmark

About Bryan Morris

I have been doing ASIC verification for over 13 years, and before that I did about 15 years of embedded software design & management. The software world dealt with increasing complexity by creating these agile development techniques; I think hardware can adapt and evolve their own agile techniques. I'm working as a consultant now and see where agile practices can help hardware development get a much-needed productivity boost. I'd always welcome your thoughts: bryan.morris@agilesoc.com
This entry was posted in Agile Development, Tools and tagged , , , . Bookmark the permalink.

9 Responses to Emacs, org-mode, Kanban, Pomodoro… Oh my…

  1. a says:

    did you write some elisp to facilitate creation of new entries into the table (automatic adding of hyperlinks and todo entries below the table)?

    also, how do you move entries in the table? i didn’t find a “move cell to next column” function in orgmode.

    thx.

    • Bryan Morris says:

      re:elisp macros for new entries?. No I haven’t seen the need to spend the time to create such a macro. I simply use the org-mode’s internal link format to set things up.
      i.e., in the cell of the kanban table where I want to add a new task, I write:

      `[[My internal link]]

      which org-mode then translates automagically to a link that now looks like:

      `My internal link

      (where each character above is underlined)

      Then I place the org-mode’s anchor where I want that link to jump to. For this application, that’s an “action” item.

      ** ACTION < < My internal link >>

      Where the double braces (e.g., < >) indicates the anchor.

      As to moving entries around in the table, I don’t use anything fancy there either. I just cut’n’paste. A move cell to next column would definitely be nice.

      Hopefully, that makes sense.

  2. Pingback: Emacs and Kanban – Brett Hutley's Blog

  3. Nice idea. The use of <<…>> in first level titles doesn’t work nicely with clocktables, as the link endpoints will end up in these tables as …., right, link endpoints. I’d rather type the link endpoint in the text of the entry. The entry title (in my case project names) is too long anyway.
    I’m trying your ideas right now in my 1.2MB todo-file.

  4. Is this not just mapping the state onto a table? Map al STARTED items into Implementing and TODO in Backlog? I wrote a babel shell-script to generate a kanban table for it’s own org-file. Problem is that it’s 1900 rows now.

  5. Pingback: Kanban pour org-mode | Yet Another Noob's Blog

  6. Jonathan Cameron says:

    Brian,
    Noticed this cool post. A couple of things (maybe improvments to the Org mode since you wrote this note:

    * You do not need the leading backqoute (`) in front of your hyperlinks. Just the [[ xyz ]] text is enough.

    * If you put your cursor on a hyperlinked item in your kanban table and press ALT-ArrowKey (ALT-RIGHT), it will move to the next cell cleanly. No need to cut and paste!

    Thanks for this post!

    -Jonathan

    • Paul D says:

      Great post! I tried using Alt-RightArrow to move an entry from one cell to the adjacent cell, but what happens is the entire table column moves right.

      What am I doing wrong?

      Thanks!

  7. Ali says:

    You can move a field with cut and paste of table regions:

    C-c C-x C-w (cut)
    C-c C-x C-y (paste)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>