I recently started mentoring someone that works at another company. Their goal is to become a “tech lead”: at their company, this is a person that others look for technical advice, and that can influence teams’ technical decisions. Because this person does not work where I do, I was forced to think generically about the matter of growth, rather than jumping to specific advice I would be able to provide a coworker.
In general, you might want to grow in your software engineering career, but:
- what does growth mean?
- how can you achieve it?
- who decides if you are ready to grow?
- where do you start?
Years ago I read a phrase in this article that made many things click for me:
The biggest decisions about your career are often made when you’re not in the room
For example, when I was working at a consulting company I did not decide which projects I was involved in. It depended on the contracts we closed, customers’ budget and other’s allocations.
Whenever I’m thinking about career growth I keep that in mind. It helped me put together a mental model for professional growth. This blog post shares my growth model and how you can use it to carve your career growth path.
Let’s introduce some terms first:
- Growth: access to more challenging and/or new opportunities. Growth is multidimensional.
- Opportunity: a possibility for improving and/or displaying your skills. They might be accompanied by financial rewards, recognition, etc.
- Skills: what you can do, including knowledge required to do it
From those three definitions a couple of questions arise:
- Who are you displaying your skills to?
- Who gets you access to opportunities?
To answer those questions and complete the model we need to define Sponsors:
- Sponsors: People that are aware of available opportunities and can grant them to you.
Applying systems thinking to the model we come up with this diagram:
- Your opportunities increase as new opportunities are granted to you. This rate depends on your sponsors.
- Your skills improve depending on how fast you learn from your opportunities.
- You get more sponsors the more people have a positive perception of your skills. These displays depend on your skills, e.g.: when you are given the opportunity to present you are displaying your presentation skills. If you are good at presenting, sponsors will perceive that.
Our growth definition means you want to maximize your opportunities. The most important takeaway is:
Skill alone doesn’t matter. If no one but yourself knows about your skills, you won’t get any opportunities.
What you want is to:
- Maximize Available Opportunities
- Maximize Sponsors
To keep the model simple and the post short I am not including “Your energy” as a stock. Modeling energy is complex: When you take new opportunities your energy decreases. When you run out of energy you burnout. When you do things you enjoy doing or rest (take fewer opportunities) your energy replenishes. Your energy levels affect your skill learning/improvement rate. And there are many ways in which your energy levels change that are not part of the system model I propose but impact the system nevertheless…
You can easily see how this would make the model more complex. However, just because it is harder to model it doesn’t mean you shouldn’t consider energy as part of your approach to growth.
Opportunities come in different flavors, not all of them are “being tasked to do something”. All of these are opportunities:
- Changing teams to work on a different problem set
- Being picked to technically lead an initiative larger than you have ever lead before
- Speaking at a conference
- Attending a workshop
- Frequently being mentored by a more senior person
If there are few Available Opportunities, it doesn’t matter how good you are, it is very unlikely you will be granted new ones. Available Opportunities are also contextual: they depend on your seniority, team, company’s financial situation, etc. You are also not interested in ANY opportunity. There are specific things that you’ll be interested in doing and/or learning.
With those things in mind, these are some tips for maximizing Available Opportunities.
- Pick opportunities based on your growth goals: If you want to grow as a distributed systems engineer, opportunities related to building mobile applications are likely to help you less than opportunities related to building databases. I recommend avoiding short term goals related to “titles” and instead prioritized improving your skills over time.
Goals don’t necessarily need to be getting a better title/promoted. A goal in your career can just be “maximizing learning”, which means you need to “maximize learning opportunities” and your “improve rate”.
This article by Will Larson does a great job of explaining how to plan for a long term career. This article by Marianne Belloti talks about some drawbacks of making career decisions based on just looking for higher titles and admiration
Determine how to best get those opportunities, ideally minimizing “investment” required to get them:
If you can get the opportunities you are interested in by staying in your current team, that’s great. If that’s not the case: are there other teams in the engineering organization doing what you want? Are there teams in other departments in the organization doing it? If not, then it might be time to change companies.
The same applies to conference speaking. If there are two similar conferences on the same date, and one of them requires you to fly 14 hours and the other one only 2 hours, you probably want to pick the latter.
Large companies that have a strict process for granting opportunities based on just “years at the company” are reducing the amount of Available Opportunities, regardless of your skills. This is why high growth startups are sometimes so popular for people that want to grow, there are plenty of opportunities.
Create your opportunities: Proactively propose opportunities to sponsors, adding them to the Available Opportunities stock.
Want to get better at automated testing? Do some research to explain how more testing would help the team/company, explain that to the right sponsor (more on that later), and pitch to work on a project related to that next quarter. Simultaneously, reach out to someone in your organization that you believe is great at automated testing and ask them to mentor you.
Reorganizations might change the Available Opportunities a lot, especially at Senior Engineer (or higher) roles. Depending on the reorganization type and size you might get a heads up and be asked for feedback on options regarding where you will land. During those conversations consider the future Available Opportunities to decide what to do.
Having determined the kind of opportunity you want, the next thing is to get the sponsors for those opportunities to think of your skills as a good fit for them. This involves:
- Finding the right sponsor
- Make your skills visible to them
When you begin your career as a developer, your team’s Manager or Tech Lead is likely your main sponsor. They are aware of opportunities for tasks/work inside the team and they are the ones assigning work.
As you grow the situation changes, but you always need sponsors. Senior Engineer role (or higher) related opportunities might be discussed at a cross-team level, maybe in a forum involving multiple Managers and/or Directors. Principal level engineers might also have a say in nudging decisions about critical initiatives. People’s titles stop being a good indicator of “sponsorship ability”. In essence, you need to understand the informal organization and how it relates to the opportunities you are interested in.
If you are lost, ask someone you trust and is influential for help. This person doesn’t necessarily need to be a coworker. They should be able to provide guidance.
After identifying the right sponsor(s) you need to make your skills (and interest) visible to them (“skill displays”). Remember: this is not about “lying” or “faking it”. This is about generating awareness.
You can do this in different ways:
- 1:1s: if you can get a 1:1 with the sponsor to chat about opportunities, do it. In general, when you reach out to people asking them to help you grow and learn, their reactions will be helpful and positive. In these situations, it helps to be self-aware.
- Generate content: internal or external content (conference talks, blog posts) allows you to share your skills. If you want more opportunities to work with Kafka maybe doing a Kafka brown bag and inviting the infrastructure tech leads can help.
- Share accomplishments: The parallel to: “If a tree falls in a forest and no one is around to hear it, does it make a sound?” is “If you reduce AWS expenses by 25% but no one knows about it, did it happen?“. Make sure the right sponsors know what you have achieved. Whenever you do this, make sure you give credit where credit is due.
The more senior your sponsor the more things they have on their mind. It is hard for them to pay attention and keep in mind the skills and goals of multiple people.
Make sure you provide visibility in an easy to consume format. There are some specific approaches that you can use to provide visibility about your work: Brag documents by Julia Evans Career narratives by Will Larson
Periodically remind sponsors of your skills and goals. Following up with your sponsors and repeating yourself once in a while is fine.
Some potential sponsors might be biased. If they are negatively biased towards you, you will need a much higher “skill display rate” than a person they aren’t biased against would need to get them to be YOUR sponsor. There might even be cases when they will never become sponsors, no matter how high your “skill display rate”.
Lara Hogan has a great blog post on this topic.
Consider sponsor bias whenever you are looking to decide if a person is “the right sponsor” for you.
Sharing your skills in public sites (LinkedIn, Twitter, conference talks, blogs, etc.) creates visibility for sponsors you don’t even know to exist. Sometimes it is hard to say exactly what opportunities this might bring as the Available Opportunities stock in these situations is too large to reason about, but this is helpful.
Whenever you are going through this your perception of your skills (“self-awareness”) is important.
- If you are trying to get someone to sponsor you for a job they don’t think you are ready for, their perception of your self-awareness skill will lower.
- If you think you can do more than you actually can you will easily get frustrated as you will not get the opportunities you want.
Retrospect often. Be open to feedback. Camille Fournier has a great blog post on asking for advice that can help.
For example, instead of asking someone “can you recommend me for X job?” ask “what skills do I need to improve on to be ready to do job X?“. The latter makes it clear to the other person that you are open to feedback and it makes it easier for them to say “no”. If they think you are ready for it, they will tell you as well.
The easiest way of getting an opportunity granted to you to sponsor yourself! This sounds weird, but this is essentially what you are doing whenever you use your time to learn a new technology or buy + read an industry-related book.
Being your sponsor allows you to take charge of your skill improvement without waiting for opportunities from others. While this requires spending your time on it (which is variably available to people depending on their context), this is a common predecessor to getting others to grant you opportunities related to that same skill.
Luck is what happens when preparation meets opportunity