Daily Work consecrated in Routines (and a Dockerfile!)

My work setup includes this 1958 Olympia SM3 I picked up from the Gramercy Typewriter Company

 

I’ve been doing a lot of reading on the topic of attention lately. In particular, Cal Newport’s Deep Work and Greg McKeown’s Essentialism: The Disciplined Pursuit of Less have heavily influenced my thinking on the need to establish new habits enshrined in routine.


What I’m trying to achieve – generally

To reacquire the ability to learn hard things, and produce at a high level. Over the course of 2 or so years, I’ve reached a point of attention exhaustion – thanks to a firehose of requests, reminders, alerts, pings, and messages coming at me from a variety of digital doodads – the sum total of which has diminished my ability to focus; to be able to discern what is very important versus somewhat important, versus not-at-all important. I intend to rehabilitate my concentration by establishing a rock solid routine that emphasizes working deeply in areas/problems that elicit my highest possible contribution. The first iteration of that routine is described below.

Specifically…

To make flaky tests in CI less likely than the probability of being struck by lightning (0.033%)


The Routine

1. Typewriter (computer is closed)

The first thing I do is head downstairs to the kitchen. I make myself a single espresso and drink this as I make breakfast – 2 eggs over easy with either 1 cup of Oatmeal or 1 full plain bagel (toasted). I make 3/4 of a pot of French Press coffee, and once breakfast is done, head downstairs one more level to the garden apartment. I draw the curtains, shut the doors, then walk over to my typewriter. To my left is a short stack of paper, along with previously typed reports. I call them “reports”, but they are simply the artifacts of this stage of my “build process”. Once I’m sitting, I begin in this manner:

  • Do a full carriage return

  • Position my coffee pot and cup so that it’s reachable; a little bit to the right, and behind the backstop of the carriage return

  • I insert a clean sheet of paper into the feeder, advance it until about 1/8 of an inch pokes above the guide

  • My first typed output is a timestamp, using this date format – Friday Oct. 30, 2020 7:42am

  • I do another carriage return, then begin typing. I impose no rules on what comes out, but attempt to keep an even steady flow of grammatically correct sentences.

  • I end at a natural point of narrative closure, or at 30 minutes, whichever comes first

The typewriting exercise functions exactly as a martial arts kata or yoga warmup. Because it’s mentally arduous, it’s the perfect way to prime the central nervous system for several hours of single-threaded work requiring concentration. Typewriters don’t have cut and paste, delete, or undo functionality – a fact that forces you to engage with a presence of mind that is simply not required by a keyboard hooked up to a computer. With typewriters, mistakes cannot be swept away by a backspace key. And so the mental effect is similar (I imagine) to juggling steak knives. Although the content of the typing isn’t crucial, I’ve been trying to “guide” this process to engage my reticular activating system.

2. Pencil & Paper (computer is closed)

The point here is to engage in a bit of creative free-form thinking and doodling, culminating in identifying a small handful of both high-value and medium-value goals I’ll target in the next few hours – while the iron is hot. As I draw, the following items are within reach:

  • 2 large sheets of white butcher paper (approximately 36” x 36”)

  • 3 mechanical pencils (.5 and .7mm)

  • 3 Blackwing Palomino pencils

  • 1 Kum two-stage long point manual sharpener

  • 4 Colored pencils – orange, blue, green, red

  • A 12” ruler

  • 2 highlighters (yellow and orange) and 1 red sharpie

3. Pre-mortem (computer is open)

This has three parts:

  1. Zero in on a subset of the high-medium value items identified during pencil & paper, and define them clearly enough so that each one has a “done criteria”. For example…

    • Create a proof of concept Webhook using AWS lambda that can return either json or html to an incoming POST request with this type of payload (details)

    • Have a draft pull request done for <ticket xyz> regarding <abc>

    • Draft an email of essential intent to <manager xyz>

  2. Enumerate all the things that could derail your day, say each one out loud, then say the word “no”. For example:

    • Desire to turn on Slack or to take a peek at your email

    • Desire to check LinkedIn, Instagram, Facebook, Instagram, news, stocks, etc.

    • Desire to follow up on an item / request that I just remembered from the other …

  3. Translate all of the items in #1 (above) into discrete Omnifocus Tasks

4. Do the work (computer is open)

This is becoming quite mechanical, and I love it.

  • On a piece of paper, draw a schedule of the whole day, beginning with the current time. Use the first chunk of time for your high-value work. Sprinkle in blocks of time later on for low value/impromptu tasks (Slack requests, conversations, email follow-ups, etc.)

  • Open the computer, but turn OFF Slack and Outlook

  • Execute on high value stuff. If I begin to drift, I verbalize the question: is this essential right now?

  • Move upstairs, stretch the legs, and say hello to the family.

  • Transition to normal work mode - with its interruptions and short feedback cycles. Continue to ignore the items that could derail you (stock tickers, facebook, etc.) but be available to people over Slack and Email

  • Occasionally look back at my penciled-in schedule to make alterations as needed

5. Shutdown Routine (computer is open)

At around 4pm, I begin to transition into shutdown mode. I wrap things up, and mentally prepare to end my day. By 5:30, I’m ready to be done. In order for that to happen, I must go through all of these steps:

  • Groom my Omnifocus Inbox, and get it down to zero (move stuff into Project containers)

  • Inspect all outstanding Tasks I wanted to get done for the day. If 1 or more are incomplete, jot down some notes, defer the completion date by a day, then say the words “Consider it done”. This allows my brain to decouple from that Task so I don’t spend CPU cycles worrying about a pending unresolved commitment (ie: the Zeigarnik Effect)

  • Visually tally up all the tasks I completed – using Omnifocus – screenshot this, and text it to myself (as evidence that my day was in fact, a win!)

  • Close my computer

  • Say the words “Shutdown complete


The Routine (as dockerfile)

I imagine running docker build . on this badboy with my brain as the host machine.

FROM willenbring/routine_deep_work:master-2vpgri3aaeb

# --------------------------------------------------
# Create and set working directory, then bring essentials
mkdir /mnt/monk_mode 
WORKDIR /mnt/monk_mode
COPY ./essentials

# --------------------------------------------------
# Notify family, and verbalize intent
echo "Going downstairs"

# --------------------------------------------------
# Coffee
RUN yum install -y \
    coffee \
    && yum clean all

# --------------------------------------------------
# Install modules, then run scripts...
run npm install 

# Script => typewriter 
run npm run typewriter -- --mode=focus --duration=30 --make=Olympia --model=SM3
echo "Focus set!"

# Script => pencil_and_paper 
run npm run pencil_paper -- --mode=exploratory --duration=15 --trash_artifacts=true
echo "High and medium value work goals defined"

run npm run codify_work_in_omnifocus --duration=5
echo "Work goals clearly defined!"

# Script => Pre-mortem
run npm run pre_mortem --duration=10
echo "Low-value work and high-probability distractions ID'ed and neutralized"
echo "All clear!"

# Script => the essentials
run npm run execute_routine --duration=180 

# --------------------------------------------------
# Shutdown routine 
echo "Reviewing goals in Omnifocus"
echo "Shifting all unfinished business with deferred dates"
echo "Closing laptop"
echo "Shutdown complete"

# --------------------------------------------------
# Entrypoint 
ENTRYPOINT [ "sh", "docker-entrypoint.sh" ]