tl;dr

I see a lot of posts like this or this or this on HackerNews asking about time management

I was disorganised until my 30s.

Then I got organised and changed my life with:

JIRA

Notes in Git

Automating environment setup

What I’ve ‘got done’ since is listed below.

The Phone Call

About 6 years ago I missed something important at work. While working in ops, a customer had asked me to do something while I was busy, I’d moved onto another fire and clean forgot to do it.

Monday I got a phone call from her: “Ian, the payments went through over the weekend. Did you remember to switch off the cron job?”

Fuck.

She had to go and sort it out. I could only give my apologies to help her with the grief she was going to get.

I had the excuse that I was busy, that I’d been distracted, that I’ve got two kids and lots on.

But deep down I know something was wrong, that it was my fault. That I’d made a contract with someone and not honoured it.

It hurt.

A Chance

A few weeks later I was on a rare day off, and happened to be in a bookshop, and in this bookshop I saw Getting Things Done. I guess my unconscious led me to it, and though I’d always mocked books like this, I picked it up and scanned it. To my surprise, the advice was flexible, human, and practicable. I inhaled it, and my life changed from there.

What Happened?

It’s fair to say a lot in my life changed since that phone call 6 years ago. Since then, I’ve:

Also (and no less importantly), I’ve still got a job, and am a happily married father of two (I overlook the fact that my wife refuses to use JIRA).

I also generally feel less stressed, and more productive. I don’t know if all of it can be attributed to getting organised, but it certainly feels that way. Here’s what I did.

What I Did – JIRA

The first thing I did was set up a home JIRA instance. I’m a dinosaur, a control freak, and a cheapskate, so I buy the license and run it from home.

It doesn’t matter that it’s JIRA, the point is that all the things that impinge on my consciousness get put in here, and get out of my mind, giving me a clear head.

When the board gets too full, I start ditching things. Most of these are articles I intended to read, or little ideas my ardour has cooled on. That stops me getting overwhelmed.

Over time, I made a few tweaks that helped me be a little more efficient:

I created my own workflow that matched the way I thought about tasks: Open/New To-Do Waiting for Something Reminder Set Closed

I set up a gmail account and linked it to JIRA so I could create tickets

I use mail this link to send links I’m interested in to my JIRA

I use send to kindle to mail articles directly to my kindle, so I can batch-read them asynchronously

There’s no separation between work and home tasks. Tax returns and birthday reminders sit right next to work tasks I want to stay on top of.

If it takes up space in your head, it goes in one place.

What I Did – Notes

That’s what I did for tasks – I had another frustration that I wanted to address. I would work on something, then either:

forget it

make notes and forget where they were

make notes, remember where they were, but couldn’t find them

I did something really simple to solve this: I created a git repo for all my notes.

imiell@Ians-Air-2:/space/git/work/notes ⑂ master +  ls | head R X actiona aircrack-ng algorithms alpacajs angularjs ansible ant anyorigin [...]

Then, I wrote some helper scripts. For example, mk_notes.sh creates a folder in this repo with some file pre-created:

#!/bin/bash if [[ $1 = '' ]] then echo folder name needed exit 1 fi BASE=/space/git/work NOTES=${BASE}/notes LEARNING=${BASE}/learning mkdir -p ${NOTES}/$1 mkdir -p ${LEARNING}/$1 touch ${NOTES}/$1/cheat_sheet.asciidoc touch ${NOTES}/$1/links touch ${NOTES}/$1/git_repos touch ${NOTES}/$1/$1.asciidoc touch ${LEARNING}/$1/$1.asciidoc git add ${NOTES}/$1 git add ${LEARNING}/$1

This creates a folder and adds it to git with a file for related links , a cheat_sheet , any related git_repos and a file that has the subject name in it.

Now if I pick up a new skill and then pick up my learning later, I can track my notes up to where I left off. I’ve used these notes to compiled blog posts like these.

I create asciidocs because I like the format, and it works well with vim.

I did try other methods (google docs, email, JIRA tickets), but this works best for me because:

It is available offline (git being a distributed note-taking tool)

It is text only

The current content is easily searched (grep)

A history is maintained that I can also search if needed

I can control/extend this system the way that makes sense to me

These things are important to me. They might be more or less important to you, so choose a tool accordingly. The vital thing is that it’s all in one place.

For example, here’s a link I literally just saw on Twitter while writing this: Organizing your life using GitHub

Work Environment Setup

Another constant niggle was setting up work environments. Like many people, I work on Linux servers, Mac laptops, and occasionally a Windows machine.

Mostly I dial into my home servers, but not infrequently I have to work on other servers.

To save time I wrote a ShutitFile to set up a server the way I like it. Here’s an abbreviated version of the full version:

# We assert here that we are running as root SEND whoami ASSERT_OUTPUT root SEND lsb_release -d -s | awk '{print $1}' ASSERT_OUTPUT Ubuntu # We assert here the user imiell was set up by the OS installation process SEND cut -d: -f1 /etc/passwd | grep imiell | wc -l ASSERT_OUTPUT 1 # Install required packages INSTALL openssh-server INSTALL run-one [...] # Install docker IF_NOT RUN docker version INSTALL apt-transport-https INSTALL ca-certificates INSTALL curl INSTALL software-properties-common RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - RUN add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" RUN apt-get update RUN apt install -y docker-ce ENDIF # Add imiell to the docker user group RUN usermod -G docker -a imiell # Create space folder and chown it to imiell RUN mkdir -p /space && chown imiell: /space RUN mkdir -p /space/git # Generate an ssh key IF_NOT FILE_EXISTS /home/imiell/.ssh/id_rsa.pub RUN ssh-keygen # Note that the response to 'already exists' below prevents overwrite here. EXPECT_MULTI ['file in which=','empty for no passphrase=','Enter same passphrase again=','already exists=n'] ENDIF # Log me in as imiell USER imiell # If it's not been done before, check out my dotfiles and set it up IF_NOT FILE_EXISTS /home/imiell/.dotfiles RUN cd /home/imiell RUN git clone --depth=1 https://github.com/ianmiell/dotfiles ~imiell/.dotfiles RUN cd .dotfiles RUN ./script/bootstrap EXPECT_MULTI ['What is your github author name=Ian Miell','What is your github author email=ian.miell@gmail.com','verwrite=O'] ENDIF LOGOUT

ShutIt is a tool I wrote for simple automation of interactive sessions. Like traditional CM tools, but simpler.

Exceptions/Difficulties/Lessons Learned

This method works, for me, but there are limitations. I can’t keep all my work Confluence notes and JIRAs on my home JIRA or Git repo (not least for security reasons), so there is some separation between work and home notes and information.

That can’t be helped, but what’s more interesting are the downsides of this approach.

Is It Productive?

Sometimes it feels like managing this is a tax on my attention. I do wonder whether sometimes I’m just shuffling tickets around rather than tackling the hard stuff that happens over much longer time periods than individual tasks.

I Have to Remember to Let Go

Managing your workload more formally like this can make it hard to let go. There’s always something to do, but sometimes you need to take time out and smell the flowers. That’s when other good things can happen. Being productive is not everything, by a long chalk.

Or, as Lennon didn’t put it: Life is what happens when you are busy grooming your backlog.

Any Suggestions?

I’m always open to improving my workflow, so please let me know below if you have any suggestions.

Author is currently working on the second edition of Docker in Practice

Get 39% off with the code: 39miell2