Crack things before you’re feeling ready.
It has been a while since I wanted to write down how I do my work, both to share and reflect on my own to seek opportunities for improvement.
I’m the kind of person that almost always need to designate a purpose to justify the existence of every software I installed, every service I subscribed, and every hardware I bought.
As a simple example, I have both GoLand and Visual Studio Code installed on my macOS for working with Go, but I follow my rules when comes to which one to use at what circumstances. If you ever curious about how, here they are:
- I use GoLand for all serious coding for established projects.
- I use VSCode for any quick edits, or coding for temporary projects.
If either of them can do both, only one of them will survive on my machine.
The point is, I have strong symptoms of OCD in terms of my setup, my workflow, and of course, my work.
It reminds me to go through and triage the entire list of tasks for today:
- Some tasks are dependent on real world circumstances, I often tentatively put a date and check again on that date. If today is still not good time to tackle, I would tentatively pick another date again.
- Postpone tasks that I definitely will not have time to get done to some later dates. It is always OK to temporarily overload later dates, because there is no perfect plan anyway. Won’t borther making it in the first place, just focus on what’s the most important.
That’s it. It is not a complex process, the key is to be honest with myself, I’m not superman.
Make a cup of coffee.
I’m not an expert in terms of drinking coffee, actually my girlfriend even makes fun of me for drinking beverages instead of real coffoe, because I’m a big fan of Nescafé 3 in 1 Instant Coffee Sticks.
I then process following items to warm up my brain, let me explain each of them:
- Slack DMs: Direct messages have the highest priority in my daily processing queue because generally they are about something very urgent, personal and/or important.
- Slack Threads: Discussions I’m following and/or have been mentioned are more likely needing my attention, input, feedback and/or followup ASAP.
- GitHub PRs with review requested: As a software engineer, I know the feeling of being blocked or waiting for feedback, espcially when teammates are across different timezones, a single feedback roundtrip could take up to 24 hours. It is better to share my feedback early because not everyone (in fact no one) ends a day at the same time as I do.
- Slack starred channels: Triage unread messages in all starred channels to make sure I respond to simple things ASAP that could unblock my teammates, or add tasks that needs more thinking to my task queue for the day (i.e. open a browser tab for it). Starred channels are the ones most relevant to my day-to-day work, which needs me to constantly keep an eye on.
- Slack reminders: Triage reminders to make a decision for each of them:
- Add to my task queue, i.e. open a browser tab for it
- Postpone to later today, often because I feel my task queue is risking to reach my capacity
- Postpone to a later date, either because:
- I definitely will not have time today
- Not a good time to tackle depending on circumstances
- Emails: As part of the brain warm up, I only take care of emails that need to be postponed to later dates. Other emails simply become part of my task queue, prioritized by the time of arrival to my inbox (earliest arrival has the highest priority).
Upon finishing the brain warm up, I will have a bunch of open browser tabs, as one of three forms of my task queue, the other two forms are:
- Planned tasks in my TickTick
- Email inbox
I’ve learned my lesson that it is not always possible to be able to get everything done in my task queue, and it is still OK to end my day to avoid creating a stressful mindset without a good reason.
I notice people often have anxiety from notifications, and push notifications could drive me crazy, too. Therefore, I aggressively configured notifications in the way that would minimize the number of push notifications, and relying on the long-polling mode for consuming notifications.
The general principle for my sane setup of notifications is to turn them off, which means no push notifications nor app badges (i.e. red dots), including all desktop or mobile apps (Yes, emails, messages, everything). Why? Because this ensures I only pull notifications when I’m ready to pull, not because they’re coming.
Exceptions are rare, only Slack and WeChat DMs (I mute every group chat in WeChat), even then, I don’t allow any red dot to appear on my screen, it’s just that I get notified when a DM is coming, temporarily.
I wish there is an option to allow push notifications only for DM, but I can live with it for now.
For normal messages, I have set up four categories for my Slack channels:
- Starred: As previously mentioned, these are the channels that I would constantly check for new messages.
- Priority: Channels that are not directly related to my day-to-day work, but I have interests on following updates, including
- Unmuted: When I get bored, I go check new messages in these channels. 🙂
- Muted: I do not follow what’s going on these channels, but often times I need to post messages (because Slack requires join a channel in order to post a message), including
I only receive emails for threads I’m participating, and other notifications will reside on the web. I have also completely disabled notifications from GitHub Actions until I’m able to configure it on the per-repo basis.
Notifications sitting on the web are not ignored, I triage every single one of them. Yes, there are thousands of them every month.
One important thing is that I route work-related notifications to my work email, not to my personal email.
Gmail filters help me highlight, prioritize, and delete emails.
It is super often that I encounter a message but I do not have time to think or act on it, and I do not like the feeling of I missed something, nor trying to remember countless things in my brain.
I make extensive use of Slack reminders, this is one of my favorite features of Slack (the other one is Threads).
If the message happens to be an email, I snooze it.
You may get frustrated like I was wanting to customize the time on this drop down, read How to Find and Change the Times for Your Gmail Snooze Settings.
I have a dedicated Chrome profile as the virtual workplace for work-related communications, which means:
- I run Slack in the browser
- I do not have Slack or work email installed/connected on my laptop nor my phone
Why not the Slack desktop app? Because it does not allow me to isolate my work workspace from other communicate workspaces, which is really really really 👇
Another major benefit of running Slack in the browser is that I can take advantage of Chrome tab groups for organizing work (by opening multiple tabs for different Slack messages/threads).
I also practice (kind of) Tomato timer, using a dead simple, beautiful, and free app for macOS named Flow. By no means as a proof of my work (we at Sourcegraph evaluate results not number of hours), but a way to track my time spent to measure my own sense of productivity.
I believe interruption is the biggest killer for productivity in software engineering, and why does asynchronous communication help? I recommend reading Maker’s Schedule, Manager’s Schedule.
There are many other benefits of asynchronous communication, read more on Asynchronous communication at Sourcegraph.
Software engineering is a creative type of work, and the human brain is the most complex and sophisticated instrument in the world. Working longer hours does not guarantee to be more creative, every mechanician knows parts need to be checked and maintained periodically.
Can you ever imagine your airline company tells you that the aircraft is going to fly faster because it hasn’t been checked and maintained for a very long time?
Sourcegraph is very generous on Paid time off (PTO) to help everyone be energized, motivated, and productive.