Reducing toil

I recently read Google's advice on Eliminating Toil. Although the guidelines are aimed at Google's web services, I thought it was useful to apply in other places too.

But first things first, what is toil?

Toil is the kind of work tied to running a production service that tends to be manual, repetitive, automatable, tactical, devoid of enduring value, and that scales linearly as a service grows.

I think using the word "toil" for these tasks is a little bit of hyperbole, but the idea is sound. There are tasks that I perform on a regular basis that I can automate or eliminate with some thought.

Things I have done

Some of these are really small.

Created elisp functions for writing notes
There are a couple of projects where I keep update logs in a Markdown file. I wrote some small elisp functions to add timestamped headings, so that I can add entries with a shortkey instead of opening the file and typing it in.
Digitized my diet and exercise tracking
I used to keep these all on paper, but I brought things into Emacs which is much quicker.
Automated blog regeneration
The old version of this site needed building through a script, and then the built files had to be uploaded. I've changed this so that adding a post to the blog automatically rebuilds it, and the site is rebuilt every hour so that I can schedule posts. This is something I'll write about in the future.
Wrote some small scripts for fetching error logs
Super small, logging into a machine, cd'ing into the log directory, then running tail can all be done with a single script. Helpful when I get downtime emails.
Tracked how I work on a typical project and looked for rough edges
Some of these were incredibly minor. Things like:
  • Finding quicker ways to skip between text in an Emacs file.
  • Learning how to jump to a function's definition instead of searching for it.
  • Wrote auto-packaging for MaxCop. Manually creating a zip file and adding three files isn't a huge burden, but automating things makes creating releases much easier. It's also something I can reuse for other projects.

More to do

There are still plenty of places where I can make improvements, and I think I'll have to spend some time really looking at my workflows.

A few things I can think of right now:

  • Make use of snippets for inserting boilerplate code.
  • Automate adding tasks to FacileThings when they come in via email.
  • Create a repeatable checklist when processing each inbox item. Having a simple flowchart would reduce some of the mental overhead.
  • Automate downloading and parsing of data sources that I normally do by hand:
    • RunKeeper archives
    • Bank csv files
    • Calorie information for foods

Making these improvements takes some time, but sharpening the saw is an important habit to develop. I'm pretty confident that the effort I've put into to optimizing other areas has already paid off many times over.

Tracking my workouts with Emacs

The system I use for tracking my workouts is similar to the one I use for tracking my diet. Both of them use Emacs and an org-mode file for storing data, but my workout tracking is simpler as I'm not making entries during the day.

A typical workout entry looks like this:

* CAL-OUT Exercise for <2020-10-26 Mon>
  :beeminder: bodyweight-workouts
  :beeminder-skip-deadlines: true

** Warm up

 - [X] 10 x Shoulder Band
 - [X] 20 x Wrist rotations
 - [X] 20 x Side leg raises
 - [X] 20 x Glute bridges
 - [X] 20 x Donkey kicks
 - [X] 90s x Dead Bugs
 - [X] 90s x Hollow Hold

** Strength

Aim for 5-8 of each one, 3 sets total (4 optional). Rest 90 seconds between  pairs.

| Exercise               | Set 1 | Set 2 | Set 3 | Set 4 |
| Bodyweight Squat       |     5 |     5 |     5 |     5 |
| Pull Up                |     8 |     8 |     8 |     8 |
| Ring Hold (seconds)    |    20 |    20 |    25 |       |
| Romanian Deadlift      |     8 |     8 |     8 |       |
| Incline Row            |     8 |     8 |     8 |       |
| Pushup                 |     8 |     8 |     8 |       |
| Lying leg raise        |     6 |     6 |     8 |       |

** Notes

- Some soreness in the left elbow

It's a really simple mix of an org-mode checklist and a table for individual exercises. I like how flexible tables are in org-mode, and entering data is quick and simple.

The PROPERTIES: block is entirely optional. It uses beeminder.el to submit a data point whenever I close the org-mode headline.

Like my diet file, adding new entries is handled by org-capture. I don't currently extract statistics from my workout file, but it's on my TODO list. Even without any stats it's extremely useful to look back and see where I've improved, and the notes section reminds me of what worked and what didn't.

The routine itself is based on the /r/bodyweightfitness recommended routine.

How to measure my productivity?

I often read - and write - about productivity, but what am I actually thinking of when the word "productivity" comes up? How should I measure how productive I'm being?

My current method is really simple: I count my hours billed. As long as I'm doing enough work, I class my day as productive.

There are a whole bunch of problems with this approach:

  1. It prioritizes work over everything else.
  2. Some days are filled with fixing bugs across a number of different projects. This adds up to more billed time, so I earn more than if I'd concentrated on a single project.
  3. It doesn't take organizational work into account.
  4. It feels like I'm trying to extract as much money out of myself as possible. If I have the choice between working through the evening or relaxing, I'll often pick work because it's the "productive" thing to do.

So it's not ideal. What else could I use?

Count the number of TODO items checked completed
This one sounds good, but it has issues. It's easy to prioritize small, less-important tasks to bump up the numbers.
This comes from extreme programming and involves counting how many story points have been completed during a sprint. This would probably involve me summing the estimated time of tasks completed during a week, and then graphing them as the year goes on.
Some kind of points system
I did this before using The Printable CEO. It helped at the time, but it still has the habit of skewing things depending on how points are assigned. I also spent a little too much time on tweaking how everything was set up.
Some kind of calculated score
This would be something that takes priority, size, and earliness (or lateness) of completion into account. I have a feeling I'd end up spending too much time tweaking the calculation.

Out of all of these I prefer the velocity calculation. But it's still missing a key part: what about my goals?

What I really want to be checking is "am I doing enough to move me closer to each goal". I don't have to work on every goal every day, but I also don't want long periods where I'm ignoring them.

I think I'll end up going with a mix of velocity, regular check-ins, and some magic ingredient that I haven't quite figured out yet. None of them have the external reward that comes from completing billed work, so maybe I need to start with some kind of reward system.

Goal ideas for 2021

One of my tasks from yesterday's GHD post was to start planning my 2021 goals. Although I don't have any concrete plans yet, I wanted to start thinking of ideas so they can stew in my brain for a while. Here are some of the goals I'm considering:

Create a screencast
This is something I wanted to do in July, but it turned out to be more complicated than I originally thought. I don't see myself creating more than one or two of these, but I'd like to try it out.
Enter a game jam
Tiny Tactics is the last game I tried to make. It didn't go well. The last playable game I made was Mini Shinobi all the way back in January of 2017. I'd like to try again in 2021, this time with a big neon sign above my desk saying "KEEP IT SIMPLE!" so I don't try to make something giant in a month.
Write a piece of software for the Atari ST
I got extremely nostalgic when looking at my nineties development setup, so I'd love to create something for the ST. Like the previous goal, I'll need to remind myself to keep it simple.
Release a game and earn at least $1 from it
This is a tougher one, but I think it's possible. There are a million more games available these days, but there are also plenty of places to sell them. I think $1 is doable.
Learn to throw a football
Hey, not all goals have to be huge!
Improve my marathon time
I ran my first marathon this year, but I was disappointed at how long it took me. I'm never going to be setting records, and I'm absolutely fine with that, but I'd like to finish in under 5 hours next time.

It feels good to be coming up with ideas, but it feels really weird to be thinking about 2021.

Groundhog Day Resolutions - November 2020

October is now a distant memory. Let's see how it went.

October's Primary Goals

1. Publish version 0.5 of Writing PHP with Emacs

Version 0.5 is now available for purchase, or as a free update if you already own a copy of the book. I'm still working on the Serenata section of the chapter, but I didn't want to hold everything else up until that was finished.

2. Start blogging every day

I am just over halfway through my 30 days of blogging goal. It's going okay.

3. Complete another secondary goal

Writing took up most of my spare time so I missed out on this one. Must try harder.

Primary Goals for November

1. Finish my 30 days of blogging trial

Writing every day has been challenging, but I've been publishing something every day. I still have some ideas I want to write about and I think I can make the full 30 posts.

2. Start planning my 2021 goals

Last year I left it far too late to set goals, so I ended up throwing in things I wasn't 100% sure I wanted to do. Covid restrictions also put a damper on a lot of the goals I wanted to do, either through cancellation (my marathon and half marathon), or by making goals not so fun (lock myself in my office for a week? Kinda already doing that).

For 2021 I want to mix some smaller, more practice-oriented goals into my list.

I'm keeping things light in November and focusing on getting important things done well, instead of trying to scrape together my minor goals. October involved a lot more writing than I'm used to, and there are still 15 days of writing left. I don't expect I'll feel like doing much else until December.