diff --git a/blog/org-mode-flow-2020-09-08.markdown b/blog/org-mode-flow-2020-09-08.markdown new file mode 100644 index 0000000..2f0f3ac --- /dev/null +++ b/blog/org-mode-flow-2020-09-08.markdown @@ -0,0 +1,129 @@ +--- +title: My Org Mode Flow +date: 2020-09-08 +tags: + - emacs +--- + +# My Org Mode Flow + +At almost every job I've worked at, at least one of my coworkers has noticed +that I use Emacs as my main text editor. People have pointed me at IntelliJ, VS +Code, Atom and more, but I keep sticking to Emacs because it has one huge ace up +its sleeve that other editors simply cannot match. Emacs has a package that +helps me organize my workflow, focus my note-taking and even keep a timeclock +for how long I spend working on tasks. This package is called Org mode, and this +is my flow for using it. + +[Org mode](https://orgmode.org/) is a TODO list manager, document authoring +platform and more for [GNU Emacs](https://www.gnu.org/software/emacs/). It uses +specially formatted plain text that can be managed using version control +systems. I have used it daily for about five years for keeping track of what I +need to do for work. Please note that my usage of it _barely scratches the +surface_ of what Org mode can do, because this is all I have needed. + +## `~/org` + +My org flow starts with a single folder: `~/org`. The main file I use is +`todo.org` and it looks something like this: + +```org +#+TITLE: TODO + +* Doing +** TODO WAT-42069 Unfrobnicate the rilkef for flopnax-ropjar push... +* In Review +** TODO WAT-42042 New Relic Dashboards... +* Reviews +** DONE HAX-1337 Security architecture of wasmcloud +* Interrupt +* Generic todo +* Overhead +** 09/08/2020 +*** DONE workday start... +*** DONE standup... +``` + +Each level of stars creates a new heading level, and these headings can be +treated like a tree. You can use the tab key to open and close the heading +levels and hide those parts of the tree if they are not relevant. Let's open up +the standup subtree with tab: + +```org +*** DONE standup + CLOSED: [2020-09-08 Tue 10:12] + :LOGBOOK: + CLOCK: [2020-09-08 Tue 10:00]--[2020-09-08 Tue 10:12] => 0:12 + :END: +``` + +Org mode automatically entered in nearly all of the information in this subtree +for me. I clocked in (alt-x org-clock-in with that TODO item highighted) when +the standup started and I clocked out by marking the task as done (alt-x +org-todo with that TODO item highlighted). If I am working on a task that takes +longer than one session, I can clock out of it (alt-x org-clock-out) and then +the time I spent (about 20 minutes) will be recorded in the file for me. Then I +can manually enter the time spent into tools like Jira. + +When I am ready to move a task from In Progress to In Review, I close the +subtree with tab and then highlight the collapsed subtree, cut it and paste it +under the In Review header. This will keep the time tracking information +associated with that header entry. + +I will tend to let tasks build up over the week and then on Monday morning I +will move all of the done tasks to `done.org`, which is where I store things +that are done. As I move things over, I double check with Jira to make sure the +time tracking has been accurately updated. This can take a while, but doing this +has caught cases where I have misreported time and then had the opportunity to +correct it. + +## Clocktables + +Org mode is also able to generate tables based on information in org files. One +of the most useful ones is the [clock +table](https://orgmode.org/manual/The-clock-table.html#). You can use these +clock tables to make reports about how much time was spent in each task. I use +these to help me know what I have done in the day so I can report about it in +the next day's standup meeting. To add a clock table, add an empty block for it +and press control-c c on the `BEGIN` line. Here's an example: + +```org +#+BEGIN: clocktable :block today +#+END: +``` + +This will show you all of the things you have recorded for that day. This may +end up being a bit much if you nest things deep enough. My preferred clock table +is a daily view only showing the second level and lower for the current file: + +```org +#+BEGIN: clocktable :maxlevel 2 :block today :scope file +#+CAPTION: Clock summary at [2020-09-08 Tue 15:47], for Tuesday, September 08, 2020. +| Headline | Time | | +|-----------------------------|--------|------| +| *Total time* | *6:14* | | +|-----------------------------|--------|------| +| In Progress | 2:09 | | +| \_ WAT-42069 Unfrobnica... | | 2:09 | +| Overhead | 4:05 | | +| \_ 09/08/2020 | | 4:05 | +#+END: +``` + +This allows me to see that I've been working today for about 6.25 hours for the +day, so I can use that information when deciding what to do next. + +## Other Things You Can Do + +In the past I used to use org mode for a lot of things. In one of my older files +I have a comprehensive list of all of the times I smoked weed down to the amount +smoked and what I felt about it at the time. In another I have a script that I +used for applying ansible files across a cluster. The sky really is the limit. + +However, I have really decided to keep things simple for the most part. I leave +org mode for work stuff and mostly use iCloud services for personal stuff. There +are mobile apps for using org-mode on the go, but they haven't aged well at all +and I have been focusing my time into actually doing things instead of +configuring WEBDAV servers or the like. + +This is how I keep track of things at work.