The most common career question I hear from team members is “how do I get to the next level?”
I love this question because it’s an opportunity to help my team member and help the team at the same time.
First I ask
- Where do you want to be in 1, 2 or even 5 years?
- What skills do you need to demonstrate to get there?
In this article I’m going to focus on the most common situation: you are looking to advance from a junior or intermediate developer role towards a senior one.
We will cover common mistakes people make, why they don’t work, and what does work.
What Doesn’t Work
I’ve met many developers in this situation who think the answer is working harder: they put in extra hours and count story points. Sometimes it gets them a little ahead, but then they plateau. They look at senior developers who complete fewer work items in a sprint and wonder why they don’t have that role.
Other developers learn new tools and libraries. They know Kotlin, Python, Rust and Golang. They know four different JSON libraries and what each is good at. They love learning new things and want to try them out at work. However, they are often disappointed to find the rest of the team isn’t as enthusiastic and they can’t get management buy-in. They know more stuff than most of their team members, so why aren’t they getting that promotion?
The answer in both cases is the same: the focus was on doing more stuff rather than on delivering more value.
Think of the first major project you worked on without much guidance after you learned to code: maybe in university or your first co-op term.
How long did it take you?
How well did the first version work?
How long would it take you to do a similar project now?
I’m betting the answer is “a lot faster”. Now think about why.
It probably has nothing to do with your keyboard skills. You could complete that project more quickly today because you can now come up with an excellent design for a project like that, then execute it efficiently.
When people get stuck at junior or intermediate levels, they often don’t realize that they need to do this again. The algorithms, design, and even requirements-gathering skills that got them where they are will not get them to the next level.
How to Level Up: Focus on Value
So, if working harder and learning stuff isn’t enough, how do I get ahead?
You need to work smarter, and learn the right stuff. In other words: you need to focus on value.
Value means getting stuff done that matters to your boss and to your company’s bottom line. That sounds obvious, but really let it sink in for a moment. What do you do each day that is going to help your company to be more profitable?
Take a moment to write it down.
Now, how can you do more of that?
If you take a big-picture view, there are two areas where most developers can improve to deliver more value to their teams:
- Time Management
- Develop Valuable Skills
I could, and probably will, write multiple posts on each of these topics. However, just following the basics will almost certainly make a big impact at your next performance or salary review.
Time Management: What to do
I’m going to talk about time management first because this is an area where most people can start to make real improvement starting immediately.
If you haven’t written down an answer to the question “What do you do each day that is going to help your company to be more profitable?” please take a moment and do it now.
Add items that might not contribute directly to the bottom line, but that you are 100% are very important to your manager. If in doubt, don’t put it on the list yet.
Now, how could you spend more quality, highly-focussed, time on those items?
You’ve already completed the first step: figuring out what work is most valuable.
You can make this even more powerful by coming back to that list at least once each morning and choosing a specific goal for the day. For example “implement new features” might turn into a goal of “Today I need to complete feature Foo, with tests, and get it into review before 3pm”.
Time Management: What not to do
The second step is figuring out what not to spend time on. What do you do every day that doesn’t make the cut and how could you spend less time on it?
If nothing comes to mind, I suggest keeping detailed notes for at least one day, or better, a week about where you spend your time. Here are a couple of common time wasters I’ve seen across multiple different teams:
Is answering slack or email instantly helping the bottom line? If not, there are plenty of articles on how to spend less time on them: mostly by turning off notifications and checking them less often.
Does writing tests help the bottom line? Yes, but only to the extent that the tests help you write and maintain correct code. You probably aren’t getting paid for the tests themselves. Tests aren’t about quantity or even coverage, they are about detecting problems.
How much time are you spending reviewing code or making changes based on review feedback? Like testing, this can be a very valuable activity, but it’s also easy to spend hours on endless revisions over minor details. Requests for changes that are neither bugs nor likely to confuse a future developer have almost no chance of “payback” no matter how small they are. Most people also underestimate the cost of minor revisions: the interruption of two people’s time alone is expensive, the risk of merge conflicts increases, and manual testing often needs to be repeated as well.
That’s time management in a nutshell.
Develop Valuable Skills
This is where the real, long-term growth comes from. If you’re reading this blog, you already know that. However, what can be less obvious is figuring out which skills are going to benefit your career the most.
The best skills to learn are:
- Valued in your current role
- Transferable
- Long-lived
Spend as much of your time as possible learning skills that satisfy at least 2 of the above, and preferably all 3.
Let me give a few examples:
One of my favourite skills to recommend to any developer are the SOLID design principles advocated by the GOF. These principles are useful in almost any non-trivial development situation, have been relevant for years and are likely to remain so for many years to come. Applied masterfully, these skills can help develop clean, elegant, and maintainable solutions to the most complex of design challenges. This satisfies all three requirements.
Being a C++, Java or JavaScript expert are also great skills – if your current company uses them. They are less transferable than design skills, but they are widely used at many organisations and likely to continue to be in widespread use for years to come.
Being an expert in AngularJS was an excellent skill to have – if your company uses it. It’s still in use but it’s reaching EOL and now you need to learn a new framework.
Becoming a master in a niche library, especially one that may not be around in a few years, is like working extra hours: it may give you a short term boost, but it’s only temporary. You want to master the skills that are likely to serve you throughout your career, and get very good at the ones that will likely serve you at this job and the next.
I’m not suggesting you slack off. You will need to learn new libraries and APIs for one-off projects. Throw yourself into it and do a good job. But if you spend all your time learning one-off skills you will quickly find that even if you are successful, your career will plateau as you “start from scratch” with each project.
Spend you personal development time on skills that have the most value to you long term. Here’s a 2-minute exercise to get you started. It will be more effective if you take a moment to write or type your answers.
- Consider the work that you do that brings the most value to your company (the same list from “Time Management”). What skills would help you do these better?
- Which of those skills are likely to be useful on a different team or another company?
- Which of those skills are still likely to be useful 5 or 10 years from now?
Hopefully there are a couple of answers that made it all the way to step 3. These are a great area for you to focus your efforts on. If not, go back and brainstorm some more skills for step 1 or get some input from your team lead or peers.
Ask your Manager
In the sections above I assumed that you know what’s most important about your job and what skills you could develop to do those things better. Some people will find this more difficult than others. Discussing goals with your manager can be a great way to learn more. Tell him or her you want to get better at your job and ask for a meeting. Some questions you can ask are:
- I’m trying to manage my time more effectively and I think the key areas I need to focus on are ____. Do you agree?
- I think that learning ____ might really help me ___ better. Do you agree? Are there any resources you can suggest?
Normally, you should not highlight to your current manager the value of skills to another team or company. You can have an honest and productive conversation without making it sound like you want to jump ship.
Put it into action
Tomorrow
- Focus on completing your top value-delivering goal
- Try pausing slack or email, even for an hour at a time
- Decline, or just don’t do, one thing that isn’t delivering much value
This week
- Continue to focus each day on the portion of your job that delivers the most value
- Spend some time to identify a few specific valuable skills you could learn
- Ask your manager for feedback
- Set a SMART learning goal for yourself, and get to work!
Discuss
Use the comments section below to share your top goal for tomorrow and what you’re going to do to limit distractions and time-wasters. Do you have some great ideas I didn’t mention above?
The forum is moderated and your first post may not appear until it has been manually approved.