Category Archives: Productivity

Banking Blog Posts

Today is January 28th at 6:45pm. This blog post will be posted on February 10th at 10am.

This morning, I wrote a review of The Practice which published on February 9th. In that post, I mentioned that I published 30 posts in the last 30 days, but, I wrote those 30 posts in 19 days, and set them up to publish over 30 days.

Since I’ve been actively reading and writing notes, I have a big backlog of ideas and nascent writing. Blogging has been mostly about assembling these notes into posts, and banking them has taken all of the pressure off in trying to blog every day. With the pressure off, I sometimes write a couple of posts a day.

I have a few other tactics I use to make sure I publish every day, which I’ll post in the next few days (but I’ll write them right now).

Robotic Pair Programmers

If search engines ever get eclipsed, I think it will be by something in the environment that just brings things to your attention when you need them. I want this most when I code, like a pair programmer that just tells me stuff I need to know at exactly the right time.

When I’m in Xcode, there are so many times when I need information I don’t have. To get that information, I need to initiate a search. It breaks my flow to do this.

What I want is that information to just be in the environment.

One way this already happens with with code comments. In my source, I trust all of the editors, so I would like to see all of their comments and commit messages. This is actually possible if I turn on the Authors sidebar in Xcode.

But, what more could I get? Let’s say I index every Xcode project in GitHub, every iOS tutorial, every iOS question in Stack Overflow. Could that be distilled somehow and then shown to me at the right time?

One way that seems fruitful to me is rare API calls. There will be times when I am using an API that appears very infrequently in the corpus or my own repositories. In that case, it should infer that I probably need more help than usual and offer up a tutorial or the top Stack Overflow questions.

Another trigger might be my new comments. If I comment before I code, then it should be interpreted as a search query:

// Parse the JSON I get back from the data task

That should bring up links to likely API classes in the help pane (just like it would if I already knew the class). Maybe offer up imports to auto-add. Maybe offer a snippet. In Xcode it would be similar to the auto-suggested fixes for compiler errors.

This is just the beginning, and we can do a lot more. Whatever we do, we need to make sure that nearly every suggestion is useful, because we risk knocking the developer out of flow. Conserving flow should be the driver for how this works.

My Habit Totem for Daily Routines

In Environment Hacking, I wrote:

In [the Fogg Behavior Model], we add prompts to our environment for things we want to do more […] changing our environment to influence our own behavior. I have been thinking of “habit totems” I can put into the environment to prompt me.

So, in the past, when I’ve tried to institute daily startup and shutdown routines, it would fall apart eventually because I didn’t remember to do it. It was a partial habit at best.

So, this time, I designed a custom bookmark. I use them in my journal, my sketchbook, and any book I’m reading. Here it is (I got them made on VistaPrint):

The words under each routine are a short-hand. “Breathe” means meditate, which could be with the Breathe app on my watch, or any other way. “Practice” means to do my daily practice of coding, writing, and sketching. Hone is my yearly theme.

In practice, the biggest help is to remember to plan the next day. It only takes a few minutes, but makes all the difference.

I tried to think of something clever to put on the back of the bookmark, but I was so indecisive about it that I finally just stuck a photo I took of a Florida beach sunset and called it a day.

End Your Week with a Plan for Next Week

This is a follow up to my end-of-day tomorrow planning.

I run my weekly plan Monday-Sunday, so sometime on Sunday I’ll start to make my plan for the upcoming week.

The first thing I do is collect my WINS from my daily plans. At the end of each day, I tried to pick out something from the day that would bring me joy to reflect on later. Now (at the end of the week) is later.

Under that I put a BIG 3 checklist for the week. These are tasks I commit to do the following week. Each might take several days, so I need to break them down.

So, under that, I write the date of the next seven days on separate lines. I try to break down my Big 3 into tasks that need to be done each day that will eventually accomplish them. These will feed into my daily plans that week.

I’m not going to write a separate post for it, but I also have a monthly plan with a monthly Big 3 and biggest WINS. The entire thing rolls up to my yearly plan, which is a one-word theme and some high-level ideas of the kind of things I want to do that year. Months and years are not planned out as thoroughly as weeks and days—they are mostly a guideline to provide some direction.

Environment Hacking

I’m a big believer in changing your environment to influence your own behavior. I wrote in Self Control that I block social media, news, and other distracting sites on my work computers (I now do it on all computers and devices I use). This means I don’t need to expend any willpower avoiding those sites—it’s simply impossible to get to them.

I also use Due and my own app, Habits, to give me reminders to do things I want to do, but forget.

These apps are using what the Fogg Behavior model calls a Prompt. In this model, we add prompts to our environment for things we want to do more and remove them for things we want to avoid.

My blocking of social media is using the environment to impair my Ability, which is another variable you can affect by changing your environment.

Fogg covers this in-depth in his book Tiny Habits.

One of BJ Fogg’s insights is that you already have habits that are completely automatic, so he suggests using those as prompts for a new habit you are trying to build. You repeat to yourself, “After I do [some automatic habit], I will do [some tiny version of a new habit]”. For example, “after I brush my teeth, I will floss one tooth”. In this case, the environment is your existing habit.

This works great, but I have some habits that I can’t easily tie to existing one (or at least I haven’t been successful at it yet). For these kinds of habits, I have been thinking of “habit totems” I can put into the environment to prompt me.

One example is that when I run, my arms tend to cross-over in front of my body instead of staying out at the sides. If I notice it, I fix it, but I can’t get it to be top of mind while running. So, I cut out a small arrow out of electrical tape and put it on my watch band.

This has helped a lot. I see this part of my watchband a lot during my run, and it leaves enough of an imprint to help me keep my arms out.

The difference is the habit totem is location-based, rather than time-based (like an alarm) or behavior-based, like another habit.

Yearly Themes

I’m a proponent of yearly themes to tie together a general direction for the year. I was first exposed to this idea from Gretchen Rubin and Elizabeth Craft’s Happier Podcast. It’s also a recurring topic on Cortex with Myke Hurley and CGP Grey. Here’s a video CGP Grey made about it:

My theme for 2021 is Hone. I am mostly fine with the things I am doing, but I just don’t do them enough. 2021 is about doing them more deeply and getting better at them.

I want to run more seriously, and since we might be able to race again in 2021, I’d like to try to set some PRs.

I am going to write more. My goal is quantity because I think that will be the best way to improve. To drive this, I am reading and note taking more diligently.

I have been sketching for years, but not often enough to improve. Now, I am setting aside at least a little time every day to sketch. One easy way to start this is blind sketching, where you look at the subject and not the paper at all. It lowers the bar enough to make it an anytime activity.

I became mostly vegan in 2019 for health reasons. My cholesterol is now normal, but I want to lower my oil and processed fat intake as well to see if I can get it even lower.

So, I am grouping this all together as HONE, which I interpret as sharpening via repetition.

End Your Day with a Plan for Tomorrow

I keep a physical daily journal in an A5 Dot Grid book. At the end of each day I draw a template for the next day and try to fill in as much as possible. For example: on January 18, I drew this for the 19th.

The red checklist at the top is three things that I must get done that day (The Big 3). This is reserved for my most important tasks. If I can’t commit to three, it’s ok, I can use one or two, but never more than three.

Then, below that are my time blocks for the morning and work-day. If I have meetings, I’ll put them in, and then I try to find a couple of big blocks to work on my Big 3. It’s ok for this to be a little blank the night before, but sometime in the morning it will be mostly filled in.

Under that I’ll keep a running list of tasks and notes for the day as a bullet journal.

This technique is a result of refinement over time derived from a combination of Free to Focus and Deep Work, both highly recommended.

I have a variant of this that I do at the end of the week that I’ll post about soon. One element of the weekly plan is to collect my WINS from the week before, so at the end of each day, I try to pick out one or two things I did that will bring me joy later when I reflect on them.

Self Control

Since my computer is factory equipment, I consider its ability to show me news and social media a defect. One easy fix is to edit /etc/hosts to block these sites, but that’s reversible by just re-editing it. A year ago I found an app, SelfControl, that takes these edits out of my hands.

To set it up, you give it a list of blocked sites. Then, when you start it, it will put entries into /etc/hosts that sets their IP addresses to 0.0.0.0. If you remove these entries, it will keep reapplying them. And since it asks for privileges, it can do this in a complex way. You could thwart it if you wanted, but it’s enough of a pain that you probably won’t bother.

After using it for a while I added a few practices that make it more useful.

  1. I use the Due app on my iPhone (and Watch) for simple recurring reminders. I set up a morning reminder to restart SelfControl.
  2. I went into my /etc/hosts and made a copy of the SelfControl section (it’s clearly marked with comments) and made it a permanent part of my hosts file. I italicized permanent because I can edit this part, but it’s there to be a little bit of a deterrent if I try to go to any of these sites in a non-blackout period.
  3. At the end of the week, RescueTime sends me an email with a summary of my productivity. I can easily see if any new distracting sites are taking significant time and add them to SelfControl.
  4. I found an app for iPhone called Zero Willpower that does the best it can to replicate SelfControl on the iPhone. It’s essentially a content-blocker that you can edit and a timer you can set to disallow deleting. On the iPhone there is nothing they can do to stop you from removing the app or disabling its content blocking privileges, so thwarting it is easy if you want. Again, it’s enough of a pain, that it’s enough to keep me off distracting sites.

Deep Work for Programmers

In Deep Work, Cal Newport makes the case for sustained, focused work on hard problems and gives practical advice for helping you do it. The book helped me realize why two practices I had adopted were working so well. They are both related to the mindset I have about my computer and devices:

  1. I think of the computer I program on as factory equipment.
  2. I monitor my usage of it and make it impossible to do anything that interferes with productive work.

Most of the tactics I employ flow from adopting those two practices.

Your computer is factory equipment

To me, it’s a big problem that the same computer I use to write code can also go to Reddit. And Slack. And Gmail.

It’s bad that the phone that I develop apps for also gets text messages, calls, and other notifications.

The typical way to treat these machines is to use them as intended — as a general purpose machine. But programmers are not typical users of computers.

Imagine if Picasso’s paintbrush rang a few times a day. Or if Jane Austen’s notebooks also showed Tweets. Maybe we’re not doing as important work, but coding requires long spans of deep concentration, and we don’t need distractions to be a CMD-Tab away.

Business communication apps like Slack and e-mail are a tougher problem as it’s usually not ok to not run them at all. But even our collaboration apps can be a distraction if we don’t control their use.

If you accept this, it’s logical to take steps to turn this general purpose machine into just a coding computer.

Monitor your productivity

It’s hard to convince most people that they have no idea how productive they are, but you don’t need to trust me. Do this test:

  1. Write down how many hours you think you spend coding, doing business communication, and other work activities during the week.
  2. Go install computer usage monitoring software like RescueTime or Qbserve and let it run for a week.

I have been spending my whole career trying to measure and optimize my productivity. I used to do this more manually — just jotting down the number of hours between programming interruptions (this is a Peopleware suggestion) — but these tools are far more accurate and unforgiving. Even with diligence, I was surprised where my time was going.

But even more important than monitoring your work is doing something to increase the number of contiguous hours you spend programming (and on programming-related activities — code review, testing your work, technical documentation, estimation, etc).

Cal argues that there are two kinds of work we do:

  1. Work that only experts can do
  2. Work that you could train a smart intern to do in an hour

Look through your logs and try to figure out how many hours in a row you are spending doing the things that need your expertise (or expertise you want). You may still need to do the other work, but the time spent should be shrunk and sequestered to not interfere with the work that matters.

This doesn’t even address distractions like social media, time-wasting sites, or non-business communication. I’ll let your logs speak for themselves on whether you have a problem, but they will probably be incomplete since most of these distractions come on your phone, which isn’t as easily monitored.

Since usage monitoring software can’t be installed on an iPhone, I just assume that my phone is a giant distraction and set it up accordingly. Android users can install RescueTime, which I would recommend.

In the coming weeks, I’ll expand on my suggestions and explain my personal setup. If any of this sounds interesting, go read Deep Work, as Cal lays out the fundamental approach and many actionable suggestions.

NOTE: Here is a follow-up to this post with more details on how I use SelfControl.