Prioritization Skills for Senior and Staff Software Engineers

A new calendar invitation arrives. Ellen looks into the event's details, and she is not sure if she should accept it or not. It is conflicting with her plans. She actually wanted to finish the task from two days ago. She goes to Slack and talks with her boss, who sent the invitation, and they reschedule it, but this time, it conflicts with another meeting. Sigh. Ellen gives up and says to her boss, "Let's do it the first time you asked for." Ellen looks into the calendar to find another timeslot to finish the open task. It seems like it won't be possible before next week. While missing the simple old days before she became a staff engineer, she leaves the task open on the To-Do list hoping that she will find time to finish it in between meetings.

When you grow into more senior roles like Ellen, your responsibilities change. They grow, and dependencies increases over time, calendar overflows, to-do lists become endless. One of the misconceptions of senior roles is thinking of this situation as normal. It's not. It can't be. These symptoms all show the lack of prioritization.

In this article, I will help you to identify what's changing when you grow and how you can make minor adjustments in your workflow to prioritize your work better.

Prioritization Struggle of Growing Engineers

When you are a junior, you get tasked with smaller work. The boss or seniors ask you to "work on task X" or "fix a bug" or "implement a new feature." The expectations from you are finishing the task on time and learn from it. During this time, you get support from senior engineers and managers. They will help you grow not only on the technical skills but also on other skills such as prioritization, stakeholder management, and breaking down the work into smaller chunks.

With becoming senior, you start working on stories and epics, and later on, projects. The expectations grow, and you become more autonomous; without needing someone else, you can break down and complete a new project end-to-end while helping others. Your freedom and power increase, and you need to learn how to control them.

Until becoming staff or principal engineer, you worked in your team. Now, you work at the side of your team. You will have one-one-ones with engineers and negotiations with other engineering teams and get their buy-ins and feedback in projects covering multiple teams such as engineering initiatives, major refactorings, or implementing new tools in all departments. The impact of the engineer increases and spreads through the organization.

However, the chances of failure get higher because you have less context now when you compare with earlier roles. You won't know every detail in one system but have a broad knowledge of what's going on. In junior positions, your risks are low because the task is small and the context is more specific. In staff and principal roles, you have less context about a particular system. You don't know every single line of every project that you might have an impact on.

The small details might affect the success of the bigger initiatives. On top of the career ladder, the work often happens in researching and generating new ideas that have a higher chance of failure due to unknown knowns or unknown unknowns. The person on top of the ladder cannot know all the details about how the new project will impact every system. That's why the staff and principal engineers have to spend some time to prioritize tasks and decrease the risks.

How to Get Better at Prioritization

Since you will become the team representative in senior and staff roles, you have to learn stakeholder management to bring more clarity to work. Understanding which stakeholder should have the higher priority in a project is critical for alignment in all other projects. The one strategy that works every single time is clearly communicating with them. But first, you have to have an overview of what's going on and identify the stakeholders. Use RACI Matrix to determine the role of each dependency for each project or task. It brings clarity, and you can eliminate unnecessary communication. Ask questions to dependencies to figure out the expectations and time limitations. Then, choose the most critical project that will help the company move forward.

☝️ Ask yourself, "What does move us forward the most?" and think about it deeply.

If you don't think about what moves you forward, you most probably won't find the correct answer. Block time on your calendar to think about topics that require deep thinking. During that thinking session, you don't have to just sit and think. I prefer thinking through writing, but some people like having deep walks: thinking during a walk (preferably in nature) without music or any distraction. Choose whatever works for you but have a slot on your calendar so that other people won't be able to book a meeting with you at that time. This strategy will help you to say "No" to other projects or tasks that may distract you from your goal.

Saying "No" is often not easy. You may need to back it up with a valid reason and (sometimes) data. Having clarity will help you to form the basis.

There are models and frameworks to help you find valid reasons and make a better decision on which projects you will work on. Use MoSCoW analysis technique: identify if the task is a "Must," "Should," "Could," or "Won't." Think about the mission and find out where you place it. If it is a "must-do" task, then you have to put a high priority on it.

MoSCoW priority analysis chart. MoSCoW is an acronym. M stands for "Must". S stands for "Should" (tasks that should be done if possible). C stands for "Could" (tasks that are desirable but not necessary). W stands for "Won't".

On the other hand, when you grow into more senior roles, your knowledge in one system will decay. You won't have comprehensive knowledge about the details in one project. That's okay. Don't push to have a more profound understanding of the details of every system. If you do, you will affect your impact, limit your freedom and even block some projects. You don't have to know every single line of code, and to be honest; you can't. Accept it and focus on the big picture.

Overall, these are the strategies you can follow to prioritize your work better when you grow into more staff and principal roles. Here are the action items you can take.

  • Block time in your calendar to think about topics that require deep thinking. You can also think through writing or have deep walks. Choose whatever works for you. The only requirement is setting aside some time to think.
  • Visualize your priorities to get an overview (write down to make it real). Use MoSCoW analysis, RACI matrix, or other frameworks or models. An outside person (a mentor) can help you with this. They can push you into a direction that you don't even see.
  • Clarify your work, requirements, and expectations. Ask your peers, boss, and stakeholders about the projects and clarify as much as you can.
  • Keep your focus and identify distractions. Whenever someone asks you to help them on another project, answer with "Until when you need this job to be done?" to understand how you can prioritize within your workflow.

As a result, you learn how to plan and structure your day. You learn how to create chunks for your tasks in your calendar. You will not let other people design your time.

🎯 Say "No" to good things to be able to say "YES" to great things!

If you would like to know more about prioritization, you can listen to the Software World episode where Dennis and I talked about Prioritization for Senior and Staff Software Engineers.

If you want to move on to the decision part, check out my other post about how you can decide on what you should focus on next.

Medium Length Last Updated: Jan 26, 2022