Intelligent multitasking requires speed and efficiency.
As discussed in a previous article, the path to a more senior software engineering role is getting into a position where you can drive your work by identifying what needs to be done and then getting it done!
Doing so doesn't require spending more time on the job; it requires improving efficiency. Exploring what needs to be done, followed by breaking it down into its logical components, and then finding the right people to work on those components (hint: they don't all have to be you!), is more work than just picking up tasks that have already been defined. How can you expand to this amount of work if "just picking up tasks" and driving those to completion already fills up your work week?
The answer is efficiency.
This simple ratio describes how much work you get done: on the left-hand side is the total work done, followed by your rate of work -- how much work you get done per hour, and finally, on the right-hand side is how many hours you work.
To increase the total, it's easiest -- in the short-term -- to simply increase the number of hours worked. I mention short-term, though, because this is typically not a sustainable way to get more work done. Working more hours will eventually lead to burnout, so while it's something you can do for spurts, if done consistently, it will backfire. Furthermore, working longer hours will likely DECREASE your efficiency -- I've found that my productivity goes down when I'm tired, which happens when you're working longer hours. The other way to increase the total is to increase the Work/Hour ratio - this ratio represents your work efficiency.
If you can get this ratio up a lot, you might even be able to decrease the number of hours you work and still get more done!
There are many ways; the primary method I'll be focusing on today is one I've been working on for years, which is what I like to call intelligent multitasking.
Multitasking gets a lot of hate because of the notion that it's not possible for the human brain to fully attend to more than a single task at a time. I agree with that sentiment, but I believe many tasks don't require full attention. For example, suppose two tasks need 70% of my attention. I can interleave them together, and while the total time it will take me to do either will go up, I'll have maximized my brain's capacity to get both done by ensuring that the 30% of attention that wasn't going to be needed was used on something else.
I like to compare this to how computers do multithreading. A single CPU core isn't actually capable of doing more than one thing at a time, much like the human brain. The clock speed is so high, though, that a CPU can interleave many different tasks together, switching from one to the other in milliseconds. While I don't claim I can multitask this way, I switch on the order of seconds or minutes, and the concept still applies. As long as you can keep enough information in your working memory and don't have to "swap" from cold storage, to continue the computer analogy, it's possible to work on two things at once.
An example of this is coding while in meetings. While I can't code out something brand new in a big discussion (and participating in that meeting actively, not just listening), I can polish up a pull request based on review comments I've received. Since most of that time is typically waiting for things to build and then validating that the intended change still works as expected, I've found doing this relatively straightforward to interleave with meeting participation.
To be more explicit, when actively participating in a meeting, you're not always talking. I can't talk and code at the same time, but I can listen and code at the same time. So while I'm listening, my hands can be working on something else -- fixing the naming of a variable as commented on a PR and then hitting build -- and then while the build is happening, I can talk and share my perspective in the meeting I'm in.
The intelligent part of intelligent multitasking comes into play here, though. For example, I need my full attention on some meetings and specific sections of meetings. Being able to recognize this, and stop my secondary task while this is happening, is what I believe has been the most significant area of growth I've had in the past couple of years. I used to multitask this way, and I would miss things in meetings and have to ask for someone to repeat themselves, or even worse, participate less than I should've because of missing context. Nowadays, though, I've found myself much more capable of making the right call of when my full attention is needed and when it's not.
Coding and meeting participation is just one example and potentially a tricky one at that. A more straightforward option is to perform administrative tasks, such as filing expense reports or quickly perusing Slack channels in which you're mainly an observer while code is building. Even if your builds only take 15 seconds, using those 15 seconds for something productive can improve your efficiency.
Going back to the original equation I shared, let's say you do 20 builds daily, which is likely a low estimate for a full-time software engineer. If each build takes between 15-60s, that's ~5-20min a day. Over a week, that could equate to an hour, which is 2.5% of a 40-hour work week.
While ~2-3% doesn't sound like much, efficiency is not improved in massive chunks. It is all about tiny gains that add up when taken in aggregate. If you can find just 9 other ways to gain 2% in your efficiency, you've now reclaimed an entire work day per week to either relax and get the same amount of work done or do more in the same amount of time.
Multitasking is not the only way you can be more efficient, but it's one I rely on a lot. There's something to be said about experience also helping your efficiency, but that's a different discussion as I don't believe efficiency just happens via experience alone. Multitasking is also how I can do all the side projects and educational work I do outside of my 9 to 5 because I simply accept slower progress on that work and do it on the couch, watching TV, and taking many breaks to play with my dog, and talk to my wife. By actively choosing to interleave tasks and doing so intelligently, I've gotten much more done than most would expect!
Benjamin is a passionate software engineer with a strong technical background, with ambitions to deliver a delightful experience to as many users as possible. He previously interned at Google, Apple and LinkedIn. He built his first PC at 15, and has recently upgraded to iOS/crypto-currency experiments. Benjamin holds a bachelor's degree in computer science from UCLA and is completing a master’s degree in Software Engineering at Harvard University.