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
tailcan 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
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.