31 August 2020
COVID-19 changed the world. It has started a Pandemic Depression.
I’m fortunate to have a job, one I can do from home. I’ve made changes to work remotely until 2022:
I build infrastructure and pipelines to do computational biology, mostly single-cell genomics. It’s messy, so constant communication is key to getting anything done.
I work in a great team. Communication is the critical skill. Covid-19 has scrambled the foundation of my job, working with colleagues.
Remote engineering is a difficult endeavor, requiring careful skills and clever dynamics.
As a result, I’ve made changes to the way I work. I make a conscious effort to connect with colleagues. I talk about more than work during video meetings. I remember that we are all in this together.
Building new habits is critical. Little rituals can become touchstones. A daily email check-in. Video scrum. Virtual happy hour. Silly Hat Day. Many of us are creatures of habits; new routines will persist.
Different tools solve different problems. I choose tools to suit the problem at hand.
My job is to solve problems. Though I’m balancing different issues every day, I can solve only one problem at a time. I have to focus.
I have synthesized different approaches into my own method for getting things done…
…and repeat
Process is important. Software engineering is a craft. I learn by doing, & am only as good as my tools and technique. My tools are a keyboard, a screen, a terminal window, a text editor, and web browser. One tool, however solves most problems:
Last week I was speeding up some slow genome annotation code. It was analyzing 14K cells, with each cell expressing potentially 33K+ genes. The code processed cells one by one, with each cell taking 5 seconds. That’s a 19 hour runtime.
The code needed to be faster. That’s the simplest version of the problem. I wrote down a few ideas for solving it. I checked my personal knowledgebase for useful notes.
Then I did performance profiling:
Looks like set intersection is the bottleneck. I optimized that bit of the code:
This reduced the runtime to .89s per cell (3.5 hours total). Next, I added parallelism:
With 8 threads, the runtime dropped to 27 minutes, a 42X speedup. With 32 threads, the runtime dropped to 17 minutes, a 67X speedup. I’m content with that.
I usually solve problems alone. When the covid-19 lockdowns started, I didn’t appreciate its full impact. I could theoretically do everything at home.
The first challenge: I am a creature of habit. I was flailing during the first few WFH weeks, building a new routine.
After weeks of experimenting, I identified a good routine, to build new habits. Changing my environment, rather than relying on willpower, is key.
My new routine:
I try to avoid counterproductive behaviors:
One key decision was picking working hours and transition behaviors. I have a morning routine to get oriented for work: tea, deep breathing, and writing down my plan for the workday.
At the end of the day, I go for a walk, and do nothing but breathe, and absorb sunlight. I’m mentally ‘put away’ my thoughts about work.
Bad boundaries between work and personal time is a foolproof way to ruin your quality of life. When I do have bad boundaries, I can’t focus on my work, my partner, my hobbies, or anything else. It causes problems.
Software engineering is a physical, human process. Nothing we do is ephemeral.
I’ve replicated aspects of work at home. Let’s start with the physical.
It’s unhealthy to sit for long periods. If you must do this, body mechanics are crucial.
I have effective technology tricks:
As I’m writing this, I’m reminded of a common machine learning error: overfitting. By tuning my actions to specific circumstances, I am not prepared for the unexpected. That’s a thought for another day.
The title of this post should have been “First World Optimizations”, not “Working From Home”.
I am very aware that I’m lucky, and privileged, to be in this position. Several months into the Pandemic Depression, and I still have a stable job. I can do my job from home, and have the space to do it. I can be physically distant. I can afford to go into shared indoor spaces (grocery stores) for <20 minutes a week. My community and local government take reasonable covid-19 precautions (masks, social distancing). My neighborhood has a low rate of spread.
I am in this place in part because of privileges I didn’t earn. I grew up in a neighborhood with good schools teachers. My home life was stable enough for me to focus on my education. My childhood interest happens to align with a lucrative career. I have inherent privileges because of my gender. So, all that I’ve written about doesn’t amount to much, because it’s not about our civil society.
My next post is about supporting one another. Until then, I hope you, your friends, family, and community, are surviving and coping. We live in trying times, and we are all connected.