Put First Things First
One of the first things I advise my engineering mentees to do is take the time to read The 7 Habits of Highly Effective People by Steven R Covey¹. I usually get an odd look and a healthy dose of skepticism that a pop culture business book published over 30 years ago could be relevant for software engineers. But when I tell them that there is an audiobook available, they usually relent and give it a try. And, more often than not, they begrudgingly admit to finding it helpful².
I suspect I will be able to mine a couple of good articles out of Covey’s book, but the one I want to focus on today is Habit 3: Put first things first. Mastery of this tool is critical for every software engineer.
It is extremely common to hear new senior software engineers complain that they are “always busy but never get anything done.” Earlier in their career, it was reasonably straightforward to understand their impact. They could count the number of lines of code written, the number of bugs fixed, or the number of hours on-call. But senior engineers need to work with and through other people to succeed, and thus a more sophisticated time management system is required.
Covey’s system uses the Eisenhower method to organize tasks based on importance and urgency. The name of this time management method came from Dwight D. Eisenhower, who was quoted as saying, "I have two kinds of problems, the urgent and the important. The urgent are not important, and the important are never urgent." The four quadrants on the graph are as follows:
If we don’t intentionally plan how we will spend our time, we will naturally spend all of it on items in Q1 and Q3 (or even Q4 if we aren’t careful). We will find ourselves busy fixing high-pri bugs, dealing with customer escalations, and rushing to meet each deadline instead of refactoring problematic code, designing proper quality gates, and adequately planning development sprints. In other words, we will always be busy fighting fires but not getting the strategic things done.
Covey suggests the best way to avoid this is to take the time to identify and explicitly set aside time for Q2 tasks during the week. I find it is best to block time out on my calendar, and personally, I find it best to schedule these blocks earlier in the mornings when I have the most energy. By being intentional with how we spend our time, we can be more effective at our jobs.
One of Covey’s other key insights is that we often have multiple distinct roles in our jobs. This is especially true for senior software engineers that may be the tech lead for one project, the domain expert for another, and still trying to turn out lots of code. Covey suggests taking the time to track tasks in a planner by role. I use a simple Google doc for this, with columns for Role, Task, Quadrant, Expected, and Actual time spent on key tasks. I also keep a set of ‘long term goals’ at the bottom of the page that I can slot in when I have lighter weeks.
Recommended by LinkedIn
Each Monday morning, I fill in the planner and keep rough track of my weekly hours (inserting in any Q1 tasks that come up). At the end of the week, I take a few minutes to analyze and reflect on where I spent time and add Q2 tasks to the backlog. Finally, I send a copy of the planner to myself and my manager (which comes in really handy at review time).
The whole system sounds like a lot of work – and frankly, it is. But I have found it is time well invested. Half an hour at the beginning of the week intentionally planning and scheduling time for Q2 work and a few minutes each day to update a work log can help engineers gain powerful insights into how they spend their time and work more effectively. Give it a try – what do you have to lose?
Be Happy!
Like this post? Please check out my other articles, and subscribe to my weekly Flegg’s Follies newsletter for more articles on software engineering and careers in tech.
Footnotes:
Please note that the opinions stated here are my own, not those of my company.