4 min read

Stack Rank

Your time and focus are your greatest assets. Experienced engineers spend these precious resources on high-leverage activities.
Stack Rank

Senior engineering series: 2

The Senior Engineer Series is a multipart blog post describing the best practices and lessons I employ as an experienced software engineer.

Your time and focus are your greatest assets. Experienced engineers spend these precious resources on high-leverage activities. Keeping a public stack rank of priorities is an effective mechanism for calibrating your sense of what constitutes an effective use of your time.

There are two key benefits for maintaining an accurate public stack rank. First you ensure alignment with your manager. I meet with my manager weekly and the first thing on my agenda is my stack rank. I ask my manager to look at my list and let me know if he disagrees with how I've prioritized my tasks. Typically we are in agreement, but when we are not, boy that's important feedback to get.

The other way the stack rank can be helpful is when you are fielding incoming requests from teammates and other colleagues across the company. You can ask yourself where you think this new request fits into your stack rank. From there you can give an honest estimate about when you will be able to help. It might be right now if it is a fire, but it might be next week because you already have a fire and two other important items at the top of your stack. If you aren't sure, ask the person where they think their request should fit into your stack rank. Competent people do not blindly take on work.

Mechanics

A public stack rank is a list of tasks. The task size should be small. I should be able to accomplish at least one task per day.

I use a Google sheet to hold my stack rank. It meets my needs of being easy to edit, easy to read, and easy to share.

Each task in my stack rank has a few fields. First, the title of the item, which is how I know what the item refers to. For example, "Set up alerting for feature X." Next I have a category tag. In my case I have three categories.

Project work: Related to my active projects.
Kaizen: "Keep the lights on" work.
Career: Related to my career, such as preparing my self evaluation and completing required trainings.

Kaizen is a Japanese term that translates to "continuous improvement."

Each task has a status and each status is prefixed with a number for grouping and sorting.

0. In progress: The work represented in the literal tabs open in my browser and files open in my IDE.
1. On deck: What I will do when my in progress work is complete.
2. Blocked: I haven't use this yet, but it's a useful status.
3. Not started
4. Complete
5. Archived: Deprioritized tasks that are no longer important.

I also add a size and priority level to my tasks. Sizes are rough guesses.

XS: A few minutes
S: A hour or two
M: A day
L: More than a day

I have almost no L tasks on my stack rank. When they are at the top of the stack rank I'll break them into S tasks.

Tasks also have creation dates and target completion dates. Target completion dates can be blank if there isn't an immediate due date that I want to hold myself to. Most "Not started" work will not have a target completion date, whereas in progress and on deck work will have target completion dates.

Tasks also have links which could be Jira tickets, documents, etc.

Why not Jira, Trello, <task management tool du jour>? The practice of maintaining a public stack rank is not dependent on a particular substrate. The criteria for evaluating the suitability are edibility, readability, and shareability. If Jira brings you joy, go with Jira. Make a beautiful kanban board.

Routines

At the end of the week I look at my stack rank. I move items I plan to work on the following week to on deck status. I often block out my calendar for these items during this review.

At the start of each day I look at my stack rank. I make adjustments - changing status labels as needed.

As new work arises throughout the week, I have my stack rank open. I can proceed status by status (in progress to on deck to not started) and decide where this new task should fit. You'd be surprised how rarely any asker objects to "I can work on this next week."

Ultimately, a public stack rank is more than just a list of tasks. It is a tool that separates the prioritization of tasks from the accomplishment of tasks. These two operations require different mental resources. When the time comes to accomplish your tasks, you can cook because you have done the prioritization in advance.

Furthermore the added transparency of a stack rank leads to tighter alignment with your manager and teammates. It builds your credibility with other colleagues by giving them a clear understanding of your time and priorities.

Subscribe to Very Normal and follow the Senior engineer series for more insights and strategies to thrive in your software engineering career.