This is mostly a collection of my notes on productivity and little tips for saving time or being more efficient while doing knowledge work.

Organization vs Execution

To me most productivity advice either falls under “organization” or “execution”. Organization being advice like “create task lists”, “process your inboxes”, etc. I could write a whole separate post just this category. Whereas execution is all about finding the time to actually do the tasks that are on your plate.

Attention and Focus

I’ve noticed that a lot of the advice on the execution side is really boils down to managing your attention and focus. And what’s fascinating is that a lot of the most popular advice and techniques just deal with focus and different levels of abstraction.

  • Mindfullness Meditation
  • Pomodoro Technique
  • Time-block planning / scheduling

So many techniques

In my post on how I get things done as a tech lead, I talk about the methods I use. It’s mostly still the same today though use time block planning a lot more.

Don’t live life by default - Scott Hanselman

Avoid Distractions

Always be Learning

Avoid the mouse and save your keystrokes

You only have so much time and keystrokes left so in general, automate as much as possible.

  • Pressing Ctrl + Backspace will delete the last word you typed
  • speed up informational videos (< > youtube keyboard shortcuts)
  • use markdown-like shortcuts in google docs, confluence, slack, etc.
  • global hotkeys
    • win+. windows emoji picker
    • alt+a mute in zoom (change setting to make this global)
    • alt+tab or command+tab
    • alt+f4 to close a window

Remap keys

If you find a keyboard key or hotkey that you use frequently but it’s awkward to type then you should use a utility to remap it.

Some I use:

  • remap capslock key
    • a lot of people map it to ctrl but I personally do esc
    • you can map shift+capslock to capslock if you still want that functionality
    • have a look at A useful Caps Lock key if you’re on mac
  • remap alt+f4 to capslock+q
  • capslock+n is backspace since I was getting RSI from reaching for backspace button so frequently
  • capslock + h,j,k,orl remapped to ,,, to mimic simple vim key bindings
  • capslock+{1|2} for switching between virtual desktops

In his post on autohotkey, Hillel Wayne talks about fast window switching by creating hotkeys to pull up specific apps. These are some of the ones I have:

  • win+z - zoom
  • win+w - browser windows
  • win+c - code editor
  • win+backtick - terminal
  • win+s - slack

On windows you can achieve something similar by pinning apps to the taskbar and using the built-in taskbar hotkeys.. I think you can do this with Alfred on mac.

Text expansion

I’ve only been using a text expansion app the last couple of years but I regret not starting sooner because it’s a game changer! There are tons of potential ways it can save you time but here are some of the ones I use the most:

  • personal info like email addresses or phone numbers
  • things you type all the time like client/company/project names
  • hard to type characters or words
  • text utilities like typing out the current date

There are lots free/paid text expanders but I like Espanso because it’s cross-platform and open source and you configure it entirely with a yaml config file. I could probably write an entire post on my espanso setup. But there are lots of alternatives:

You can also use a key remapper like autohotkey for text expansion with a bit more manual effort.

Misc

  • enable clipboard history (native in Windows)
    • Alfred on mac
    • Ditto for more features
  • chrome profiles for different personalities
  • setup custom searches in Chrome
  • Microsoft powertoys adds some very handy functionality
    • always on top
    • always awake
    • global mute (win+shift+a)
    • command executor (alfred on mac)
    • key remapper

For developers

Powershell aliases

I have a bunch of these just to save me a few keystrokes by not having to type git in from of my most-used git aliases. I mostly use powershell these days but most shells have similar capabilities.

# Git helpers
Function st { git st $args }
Function stand { git standup $args }
Function ci { git ci $args }
Function cia { git ci --amend $args }
Function rsh { git reset --hard $args }
Function p { git pr $args }
Function ri { git rebase -i $args }
# Runners
Function nr { npm run $args }
Function dn { dotnet watch $args }
# leverage PSFzf
Function fsa {Invoke-FuzzyGitStatus | % { git add $_ }}
# list and execute psake tasks for a specific project from any directory
Function fp {Get-PSakeScriptTasks -BuildFile \path\to\project\psakefile.ps1 | Invoke-Fzf | % { Invoke-PSake $_ }}

Automate machine setup

Now that you’ve optimized your setup and are in the habit of making tweaks and optimizations as the need arises, you should make sure it’s easily repeatable when you have to change machines.