As a Staff Engineer, you need to have a broader impact than your Senior Engineer counterparts.
You don't merely produce features, you enable teams.
Whether that's achieved by writing code, making decisions, presenting system designs, or sharing vital memes, it's crucial that you work on the right tasks in order to maximize results over the long-term1.
If you spend all of your time working on a task with little long-term payoff at the expense of not performing tasks which do, you're hurting your business—and you're hurting your chances of a promotion.
This was a painful lesson for me to learn because, like many engineers, I've got a wee, little, tiny perfectionist streak going on.
You know how it goes: you can't start the next feature until you've finished the one you're already working on.
I mean: really finished it—every possible loose end.
If you're a developer, you've done the same thing at some point. We all do.
The question to ask yourself in such situations is this: is it really the most important work to be done?
Usually, it's better to meet the requirements and move on to the next job. There's always going to be something else which you need to do.
By using the YAGNI principle as a heuristic, it's possible to check whether it really makes sense to handle that specific edge-casei.
If it's not in the brief, don't do it.
“But,” you may ask, “isn't it good to cover edge-cases? Shouldn't we be making sure our functions are perfect, free of bugs?”
Now, I'm not advocating that we should let bugs ship—the less bugs the better, obviously—but not every edge-case deserves our immediate attention.
We need to consider a wider context if we're going to address this topic properly.
Why Should you Manage Attention Instead of Time?
We engineers do love our efficiency. It's what we do.
How many coding interviews are designed to test your knowledge of algorithms? It seems that writing efficient code is the basis of what it takes to write software.
Being efficient means maximizing how we use time and this is important.
But we can easily get caught-up in perfecting a task when we've already solved it to the point of being good enough2.
You need to consider the system as a whole—there's no point in caring about the efficiency of an individual part if it doesn't affect the bigger picture3.
In order to maximize our impact, bring about the greatest possible change, and ensure that the value of our work is recognized, it's essential that we work on high value tasks.
Because, at the end of the day, one hour spent solving the right problem is more valuable to your employer than a week solving the wrong one.
And when you get to a point where you're producing that degree of impact, you'll be in an incomparably better position from which to negotiate.
I often ran into situations where my manager wanted me to take-on a given task or responsibility but I couldn't work on it because I wasn't willing to leave good enough alone and finish my existing task.
I had to learn how to focus on what matters most so that I could demonstrate I was worth the promotion.
An Approach to Attention Management
It should be clear at this point that managing your attention is worthwhile but how do we go about doing it?
We hear about time management all the time, isn't that the same thing?
With time management the focus is on getting the most out of your time—being efficient—but this isn't the same thing as making sure that the work you're doing matters, and that's the key difference.
Managing your attention means that you're working on the right things, regardless of how efficiently you go about doing so.
You need three things to get it right:
- A clear big picture vision.
- A system for prioritizing your time.
- A means of course-correcting when you go off-track.
If you can get these three elements working together, you'll find yourself wasting a lot less time and energy.
Defining a Clear Personal Vision
We software engineers can be… skeptical when it comes to corporate jargon.
A company mission statement is just a PR exercise; corporate values are nothing more than hot air.
But, whether Management's vision is mere empty words or not, having a clear purpose can have a profound impact.
And, just as any self-respecting company has a mission statement these days, you as an individual, need a vision too.
This is important.
Having a vision is a core component of leadership and sets you apart from colleagues focused on just getting a paycheck.
To borrow an idea from Thoreau, we each need to march to the beat of a different—our own—drummerii.
You won't distinguish yourself if you're borrowing someone else's vision.
Your professional vision should be derived from a combination of your own personal values and the team's vision or goals. Doing so will allow you to produce distinctive work whilst still effectively fulfilling the team's needs.
How you define your vision depends on your personal style and situation.
In my case, I leaned heavily into the company OKR process. I'd define a small number of objectives each quarter and set key results which I could measure each day4.
I'd make a goal aligned with my team's objectives, one that aligned with my own interests, and one that would see me create value for my team beyond my basic responsibilities.
In this way, I was able to serve my own needs and the needs of the team whilst also making a difference in a way that was noteworthy to the organization.
Systemizing your Attention Management through Planning
Having a vision to give you a sense of direction is important but it's not enough on its own.
If you're not actively working towards your vision then it's nothing more than a mirage in the desert. Make sure that each step you take brings you closer to your destination.
You could try re-prioritizing each time you need something new to do but that's, well… that's terrible time management.
We want to minimize the time we spend prioritizing so that we maximize the value it produces for us.
The key, in the words of Ray Dalio, is to “systemize your decision making”iii.
At the lowest level, that just means to schedule a regular planning session for yourself.
Do it once every week so that you keep a fresh perspective.
It shouldn't take much time and there's no need to over-complicate things but make it a regular feature of your week.
This is exactly what I started doing.
I'd identify tasks I needed to perform in pursuit of my goals and I'd schedule time to do them5.
I was able to avoid the trap of simply hyper-focusing on whichever Jira ticket was assigned to me that day.
I could easily understand which tasks I didn't have the time to work on6.
And I kept working towards all of my objectives in a balanced, consistent fashion.
Course Correcting through Self-Reflection
Sometimes we get so caught-up in what we're doing that we overlook the fact that we've gone off-track.
Even if we've carefully crafted our vision, it's possible that we're missing important facts.
And even if not, something's going to go wrong because, as the great Forest Gump once said: “shit happens”
We need to be able to adjust if the situation calls for it and we need to know when something's off if we're to have a hope of doing so.
We need to reflect—which is where reviews come in.
A review can be as simple or complex as you want. At its core though, you want to know the answer to one question: “What changes should I make in the future?”
Think about what went well, why it went well, and how you can ensure that thing happens again or even to improve upon it. Then think about what went wrong, why it went wrong, and how you can minimize or avoid a repeat of it the next time around.
It's also wise to ask your colleagues for their thoughts on your work — it never hurts to get additional perspective.
Feed the answers you find in this process into your planning sessions.
Use them to readjust your approach.
Repeat ad-nauseum and watch your effectiveness improve over time.
I set myself a key result to produce a PR at least once per day.
Through reviewing my progress each week, I noticed a habit which was undermining my effectiveness.
It turns-out that I was stacking a backlog of interdependent PRs for review and then having to waste a bunch of time rebasing them.
It was a completely redundant use of my time.
By subsequently adjusting my approach, I freed-up that time to put to better use.
When you've Mastered your Attention, Results Will Flow
You'll probably notice a striking similarity in my approach to some elements of Agile methodology and that's not a mistake.
At its heart, Agile provides teams with a mechanism to keep themselves collectively focused on what's important.
In order to become a Staff Software Engineer, it's essential to do the same on an individual basis.
You'll never be capable of generating impact across a broader team if you're not consistently putting your energy into the right areas.
A systematic approach to goal-setting and prioritization processes alongside iterative improvement locks cumulative growth in over time.
By doing so, the system itself sees progressive improvement and you get better at both defining and realizing your priorities.
While this approach will serve you well throughout your career, it'll also make one notable difference in the short-term: your manager will see you independently taking ownership of your productivity.
They'll see you performing high-impact work and, if they're good, they'll recognize your value as a team member who makes a difference.
When I applied this system in my job, it became possible for me to juggle competing priorities more effectively.
And, for my manager, it showed.
Ultimately, my ability to manage my attention became one of the key elements which fuelled my elevation to Staff Engineer.
How should you go about applying this approach? Simple:
Go and put it into practice.
Don't try to do it perfectly, just start doing it.
Iterate on your first, flawed attempts and grow.
Do this and maybe you'll be able to follow in my footsteps in your own engineering career.