Software Engineering Careers

2020/08/03

Recently, I have been thinking about software engineering careers. For any software engineer, there will be a point at which they will need to think about their future growth and sustainability within the profession. This post is meant to help someone new in their career help navigate this path by outlining basic standard constructs in place today in the software industry relating to software careers.

Why talk of Software Engineering careers?

The field of software engineering has exploded, there are many companies trying to build software in different domains and each individual company usually has their own framework on how they want to organize their engineers and identify software boundaries around business needs. Usually there are infra teams, developer productivity teams, platform teams, feature teams, etc. The VP of engineering (or equivalents) are usually responsible for identifying these boundaries and keeping cohesion high and coupling low between teams. There may be many different paths that an engineer may take and so it is important to understand what to expect in a few years based on the decisions that one might make today.

My Background

I have had multiple successful stints at companies ranging from as small as 2 individual contributors, to a mid sized company with several hundred developers, and more recently at a modern day tech giant. My success criteria is being able to ship a non trivial project at each of the software jobs I have held. The projects I have delivered usually involve multiple stakeholders (including but not limited to internal product owners, service owners and even external partners), multiple services, and is usually longer than 6 months. I also hold a Software Engineering Masters from Carnegie Mellon. Given my experience, I think my opinion on software careers should hold some value to any reader.

Birth of a Software Engineer

A software engineer comes in many shapes and sizes. They may or may not have formal training in computer science. A degree in CS can give you a head start in the industry but is by no means the only way to get into building software. I personally studied an esoteric field of instrumentation and control engineering in my 4 year bachelors but eventually ended up learning how to code on the side. At some point investing time and resources in learning fundamental CS is going to be useful - specially if you aim to work at top tier software company. That being said like any other field determination and curiosity is all it takes to excel in software. It helps to be curious about how things work too ;-)

Career Ladders

Let’s jump directly into the weeds. If a company is large enough (>100 developers), generally there exists a career ladder. The ladder sometimes may not be codified in a document, but if visible and accessible to every engineer - it is a sign that the company is mature and is willing to invest in an engineers growth. The career ladder outlines expected competencies at each level. It also should outline how to get to the next level. There is a caveat though, as as much any management would like to convince you, the impact of a good developer can’t be quantified and thus promotions at any company have the potential to be biased. If the leaders of a company are competent they will ensure that the bias is minimized and promotions are calibrated across the company correctly. Promotions are a sign that a manager is able to grow an engineer so it usually should be reviewed by someone who does not have anything to gain from the promotion of the individual.

Approaching Next Level

In order to grow - there is no substitute for creating value. However creating value may come in many forms - be it in terms of delivering high value projects, developing IP for the company, developing speciality scope, etc. The larger the company is the broader the playing field is in terms of ways to create value. I talk about creating value in detail since that is the primary way to get yourself promoted. It is not guaranteed that creating value will grant you a promotion but it will certainly put you in a position for management to vouch for you. Reaching next level requires that you’re already creating value at that level.

The Ceiling

In an Individual Contributor role, it becomes hard to keep growing the value you create at a company. After spending 10+ years reading and writing code, even though you’ve become specialized at what you do, you’re bound to hit a ceiling in terms of the value you can create. In order to increase the value that you create even further one path forward is to switch to management. Management, however, is a uniquely different career path than being an individual contributor. The switch decision needs to be made by the individual consciously, and sometimes a software professional will go back and forth between management and individual contributor several times in their career. Good companies will make these transitions approachable. However, many individuals will not enjoy management, but all hope is not lost. Software engineers who have spent years reading and writing code are highly valued. They bring soft skills and the delivery mindset to a team that can transform how a team delivers software (someday I will make a post about a highly effective team), thus exponentially increasing the value they create at a company. Building software involves learning something new everyday and this quest for constant learning combined with years of experience is often prized in the industry. In addition, there is a constant need for new engineers to be trained and taught how to build software. They need to be taught how to design software, communicate with stakeholders, do code reviews, etc. Many companies will thus have career level positions for individual contributors, i.e. there is no expectation of being promoted to the next level. Remember, there are always going to be jobs for individuals who can create value, so even if you feel stagnant at a position you should be able to find your next gig without much effort. So in effect you should be able to hold your position as long as you like (given the company can continue brining in revenue based on the work you do).

Are there other options?

Jobs exist because a company can pay for an individual to deliver value on their behalf. The value you create is always going to be limited by the potential of the company - even if you are a Director, VP or above. One way to think about creating additional value is by going outside the scope of your job. Starting a side business is an example. You have limited time however, so choosing the area of your interest is of importance. Software engineers due to the nature of their jobs are highly competent at producing tangible products. Use that skillset to achieve dreams of your choice.

Closing thoughts

If you are new into your career, congratulate yourself. You’ve started on the right track. However things have only started, you’ll need to find your interests, the code you want to work with, the people you want to work with, etc. Hopefully this writeup helps you understand better what is in store for you in the future and how you can shape yourself for success.