@duncan

Developing a software career

Software development is an iterative process of determining a problem to solve, doing some typing, somehow verifying that the typing you did solves the problem, and then repeating as necessary.

The shorter the iteration cycle, the better.

Developing a software career, on the other hand, is a much longer process that takes place over a span of years, organizations, and employers. Confusingly, the way in which various organizations describe career development is tied to a seemingly arbitrary set of numbers and titles that somehow represent where someone is in their career.

Worse, even if they make sense inside a single organization, none of the levels and titles in common use are an industry standard. For example, terms like Senior, Staff, and Principal don’t necessarily mean the same thing in any two organizations.

To really make sense of it all, especially over the course of a career that spans decades, you need to zoom out and think about what phase of career you are in and where you are on your own personal journey. Then, you can map it to the local nomenclature and have reasonable conversations about it with your colleagues and management. Once you do that, you can then sort out what you need to do next to move forward in your career.

Walking in the door

When you take your first job as as software developer, you know your way around a text editor and maybe a compiler. Maybe you even have some solid computer science fundamentals in your toolbox. In any case, you probably haven’t worked on a team before outside of an academic setting, but you are eager to start building something serious.

Your job at this point is twofold: prove that you’ve got the ability to be entrusted with work and learn how to do that work in the scope of the team around you. To do that, you’ll need to learn how to deliver value, do it in a way that shows you can be accountable, and to know how to ask for help when you need it.

Being accountable can be tricky to understand. It doesn’t mean that you’re the designated person to blame when something goes wrong. Instead, it means that you can show what you are working on at any time, describe what’s going well or not so well, and raise warnings when needed.

You’ll build your independence over time, relying on the help of others around you. At first, you’ll be full of questions and you should ask all of them. Over time, and with a little experience, you’ll learn how to focus on better questions. Paradoxically, finding your independence means learning how to work well with others, pairing with people that you can use as mentors.

At Microsoft—where I’m currently an engineering manager—and many other companies, the title that comes with this phase is Software Engineer.

How long should this phase last? Two to three years, give or take, is a good benchmark. Think of it as an extended probation period. If you’re competent and can get stuff done, you should be moving along in short order. If you’re not, then you should be having the conversations with your manager to find out why.

Dependable individual contributor

When you’ve proven that you can be counted on to take the work assigned to you to completion, you’ve entered the phase of being a dependable individual contributor. You’re on the right path and are primed to stretch yourself in all sorts of good ways.

During this period, you’ll build up your technical skills. You’ll learn to see the patterns in both code and development practices that help you get your job done. You’ll also learn how to sort out the work that should be done now versus the work that should be deferred. The questions you ask should become the ones that focus discussion. You’ll pair with people not just to learn from them, but to accelerate your work.

This is the point where titles at various companies get confusing. Some organizations like Google use give the title Senior Software Engineer to people in this phase. Others, like Microsoft, simply append number to the title and use Software Engineer II.

Some engineers see the “senior” in a title as a gold star they are entitled to once they’ve become dependable individual contributors. Be careful. You need to know how your organization uses the term before you grow attached to the idea of having it in your own title.

You can spend quite a bit of time in this phase. Three to five years is totally normal. But, this isn’t a place to become too comfortable. At some point, you’ll be expected to move forward and you’ll need a serious shift in mindset in order to it.

Metamorphosis

As your career progresses, not only will it be expected that you can independently complete and be accountable for work you take on, but that you become a force multiplier for your team. Your presence and insight don’t just help get things done, they help get things done better and more quickly.

There are many ways you can do it. Leading a project team or otherwise taking a role that influences others is a great way. You can also, more rarely, do it through making incredibly deep technical contributions and becoming a subject matter expert from whom your peers seek advice.

No matter how you do it, you’ll need to think deeply about the work and how to help other people do their work better. You’ll also need to develop the ability to recognize problems or gaps in requirements and work to redefine them in a way that makes them achievable.

“The biggest problem to solve in technology is to get people to stop making things harder than they have to be. Try to look at every hard problem and ask how could it actually be simple? If there’s no answer, then ask how is this a collection of simple problems?” —Chad Fowler

One essential measure in this process is that you spend more time thinking in terms of we rather than me. Until you get this critical change in mindset, you won’t be able to effectively move on. Full stop. On the other hand, once you’ve fully internalized it, you’re ready for the next phase in your career, and the promotion that comes with it.

Leader and catalyst

Your work now sets the direction for the team in some way. You are given the hard tasks. The ones that others may not know how to solve. Often, you are given design responsibilities. You look beyond just the features you are working on to see how they influence the product.

Every single day, you are expected to come in, look at both your work and the work that others are doing around you, and help make sense of it all. You can spot when development of a feature is going in the wrong direction and convince others to take action. You’re expected to figure out the unknowns, come up with solutions, and be accountable for them, even if you don’t implement them by yourself.

You can work independently when needed but even when doing so, you make the team around you better in some significant and consistent way. Even though you are expected to leave the code you touch better, coding skills no longer differentiate you. Effort isn’t what matters anymore. Instead, it’s all about the results you deliver.

It’s your encouragement skills and influence that will make a difference. You pair with people not only to help get your own work done, but to help them with theirs. You’re a mentor to others and are especially helpful in helping others through their own metamorphosis.

“A highly paid expert shouldn’t be highly paid just because she’s an expert. She should be highly paid because she is helping other people become experts.” — Ron Jeffries, The Nature of Software Development

At Microsoft, this phase comes with the title of Senior Software Engineer. At Google, the equivalent title is Staff Engineer. This is also the phase at which you are probably ready to manage people, if that’s a direction you want to go in.

Even if you don’t manage people, however you can successfully complete an entire career at this phase of development, leading teams, scoring good raises all along the way and making an impact. In fact, after this point, there’s no longer a guarantee of promotion for doing well. To move beyond this point requires a combination of what your company needs as well as your own ambition.

You’ve arrived. Enjoy it.

Your manager’s role

Your manager’s role in the process is to make sure that you grow from an entry level hire into a dependable individual contributor and then into a leader that has a consistent and positive influence on the entire team. In many ways, whether they expected to be or not, they’re your coach.

They’re there to help you identify what you need to do to get to the next level. They’re also there to critique what might be hindering your progress. They see your contributions from an outside perspective and look at how they work with—or maybe don’t work with—the contributions of others on your team.

With my own manager’s hat on, I see the process of developing somebody from an entry-level to a solid contributor as a fairly linear one. Building up experience and skills is the name of the game. Helping somebody shift their world view from singular to plural and make the jump from individual contributor to leader, however, is definitely non-linear.

That said, you own your career and its development. You are responsible for your success. And if you aren’t getting what you need to develop, you are the one that should take initiative to get it. Your team is full of people that you can learn from.

Furthermore, you need to make sure that your manager and other people on your team can see your impact and can evaluate it. Don’t let your work remains a mystery to all. Take the initiative and make sure that people know you’re generating value for the team. When you get a promotion, it should be obvious to everyone why you’re getting it.

Bonus levels

Of course, many organizations have levels beyond the ones I’ve described so far. Microsoft has Principal Engineer, Partner Engineer, and on up to Techical Fellow. Google has Principal Engineer, Distinguished Engineer, Google Fellow, and even Senior Google Fellow.

I call these “bonus levels” not only because they usually come with extra compensation and perks—often increasingly so as you move up the ladder—but because to simply get promoted to them represents a remarkable achievement. It’s like reaching the bonus levels in a video game where the reward—as well as the responsibility—is helping to guide the overall organization, even if you aren’t in management.

How do you get to these levels? Unfortunately, if the jump from individual contributor to leader is non-linear, the process of getting to higher levels is even more so. It usually requires the combination of doing something remarkable and significant for the organization as a whole combined with a certain measure of political aptitude. You’ll need to find the right balance of deep technical contribution and breadth of impact across teams in your organization. You’ll also need to stop thinking of other parts of your organization as them and internalize the realization that there is only us.

In the end, however, the best advice I know of remains the same that is true throughout the development of a career: Do great work, aspire to have a bigger impact, and continuously develop skills to work well with others. The rest can and should take care of itself.

 

Thanks to Danny Amirault, Chad Fowler, Donovan Lange, and Chris Lang for reviewing this article and providing awesome feedback and suggestions.