How to be a more productive Engineer 1: Manage your tasks
As Software Engineers, we are not measured by how much we know about computer science, data structures and algorithms, at least not after we pass the interview. At the job the story is completely different, we can be the best programmers in the company, we can know our way around the languages we work on and write code with the eyes closed but, none of that matters if we produce no value.
We add value in two different fronts: for our individual work, we add value by writing robust software, designing efficient architectures, this requires a high level of deep focus, which means the quality of our individual work is constrained by the amount of uninterrupted focus time we can get. On the other hand, we also add value in meetings and other forms of collaborative work, such as code reviews, brainstorming and bringing engineering insight on apparently non-technical matters.
Ideally, we need to maximize the amount of high impact work we do as engineers, this usually has to do with the tasks that require a higher level of focus, but we can’t neglect the other kinds of work we need to do as well. To do this, we need to maximize the amount of uninterrupted time we have during our working hours.
Here are seven practices that have worked for me, hopefully they will work for you too. Let’s get it on:
Have a daily prioritized list
This looks like a no-brainer, right? and yet, a lot of people seems to fail in using them. I love lists, I make lists for almost everything: my daily work, my personal projects, what I need when I go to the supermarket…
I keep a daily TODO list and I manage priorities with colors:
- Red: for high impact or urgent work, things that need to be done ASAP or things that, when done, will have a high impact on the projects I’m maintaining
- Yellow: for things that will have impact, but not as much and can wait a bit to get some attention, for example, looking into an error that pops out from time to time in the logs or reading about some technology I will need to use some time in the future. It’s good to tackle them before they become red.
- Blue: for things with low to no impact but would be fun or nice to do.
I usually mark in bold the ones that require deep focus to be done, these visual conventions help me navigate my list easier than P1, P0 and P2 or a numeric approach to set priorities.
I don’t finish my TODO list every day, to be honest, there are always a lot of things to tackle and it’s impossible to get everything done in one day, plus, every day something new comes up, someone has a new request, someone writes a new RFC I need to read and comment, so, I keep adding tasks to the list as they come up and prioritize them later unless they’re explicitly urgent. Whatever I can’t finish today gets spilled for tomorrow’s list.
I also do my lists in advance, I prepare tomorrow’s list today by end of day, that way I don’t have to do it tomorrow and I can just review it, and get to it after I have my coffee in the morning.
This system helps me keep focused and by creating a new page every day, I can look back and keep track of everything I’ve worked on and when while also making sure I focus only on unfinished tasks and remove the noise of finished tasks from my view.
Learn your tools
This might seem an obvious one, but It’s incredible the number of people I know who just know the basics of everything they use. I spend most of my time… well… writing, so, my text editor is where I spend most of my productive time. It doesn’t matter what editor you use, whether it’s vim or Emacs, vs-code or an IDE, learn how to use the advanced features. I use vim for most of the things that has to do with text: coding, writing docs in markdown, notes, etc. I’m constantly improving my vim config so that I can write code faster and navigate projects more efficiently. For larger codebases I’m not very familiar with, I do use an IDE, we have an IntelliJ license through BCG, so, that’s the IDE I use until I’m familiar with the project so that I can navigate my way through the code, it’s convenient to learn the key shortcuts to do things faster.
The other thing I spend most of my time now is the office chat, we use Slack, so, it’s also worth learning how to use it properly, all the key shortcuts as well as learning to use the search, it’s very powerful and you can find almost anything you can by using the search box instead of navigating through the chats.
By becoming a power user of all the things you use, you can then create systems to help you become more productive by reducing the time it takes to make 2 or 3 mouse clocks to a few milliseconds by stroking a keyboard shortcut instead. Take the tools you use on your day to day tasks and become a power user.