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
- Todoist Productivity method quiz - to explore various productivity methods that might fit your style.
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
- Use focus mode on Android or iOS
- Slack dnd (You can type
/dnd
in any chat to start) - no hello - to respect colleagues attention
- YouTube Rabbit Hole
Always be Learning
- Newsletters for different technologies and communities
- https://cooperpress.com/publications/
- The Morning Brew - for .Net
- The Morning Dew - for .Net and web if you like drinking from the firehose
- Pocket - for saving articles to read later
- If you have lots of internal presentations or meeting recordings to watch, import them into a podcast app
- PocketCasts - my favorite podcast app
- change playback speed, remember play position, listen to audio while folding laundry
- https://kill-the-newsletter.com/ - to consume newsletters as an rss feed
- Youtube Premium
- totally worth it IMHO
- No ads!
- Offline downloads and background listening on mobile
- Creators get paid for your views
- Inoreader - my favorite rss reader
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 pickeralt+a
mute in zoom (change setting to make this global)alt+tab
orcommand+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.
- autohotkey or Microsoft powertoys (windows)
- Karabiner-elements (mac)
Some I use:
- remap
capslock
key- a lot of people map it to
ctrl
but I personally doesc
- 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
- a lot of people map it to
- remap
alt+f4
tocapslock+q
capslock+n
is backspace since I was getting RSI from reaching for backspace button so frequentlycapslock
+h
,j
,k
,orl
remapped to←
,↓
,↑
,→
to mimic simple vim key bindingscapslock+{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
- zoomwin+w
- browser windowswin+c
- code editorwin+backtick
- terminalwin+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:
- macOS has built-in basic text replacement functionality
- TextExpander is by far the most popular solution
- PhraseExpress is free for personal use
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
- log files with
.log
extension will have nice syntax highlighting when opened in vscode - vscode terminal will open file paths in editor
- learn how to create a file with a . dot prefix in Windows Explorer
- make use of shell/git and aliases
- powershell tools
- posh-git - nice git integration
- z-location - jump to frequently used directories
- PSFzf - powershell wrapper around fzf (fuzzy file finder)
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.
- Ninite quick and easy GUI app for installing some common apps
- Chocolatey or winget (windows) or homebrew (mac)
- Create a do nothing script to document any tasks that can’t be automated yet
- sync your config files or scripts with git or Syncthing