I’ve been writing a series of posts on management based on my experiences. If you’re starting with this one, you may want to have a look at: https://www.jlgoodwin.com/words-pictures/2020/9/17/management-the-job-of-a-manager
Introduction
Amazing, talented, hard-working, accomplished folks who’ve reported to me over the years have asked: “What do I need to do to get to the next level?” In most cases, because I needed them, I have to admit I have sometimes stopped short of complete candor. If I could have, I would have said: “Find the job you want to have at another company and then quit this one.” There is also the version of: “Find the job you want at this company and then transfer to that one.” I’ve never stood in the way of anyone leaving my team and getting their next job, and I’ve always helped in any way I could to make it happen. So, my career advice is “Be a quitter.” There are some dimensions to that reductionist statement…
Are you getting what you want?
My very first programming job was when I was sixteen years old, when I worked for a company creating educational games for the TRS-80, Apple II, Atari, and IBM PCs. When I had worked for them for about three years and was heading to college, they were still paying me eight dollars an hour. I was as good or better than their older programmers so I asked them for a raise to fifteen dollars an hour. They had recently started to become more of a “business” and had hired a biz school grad to manage their operations. He wouldn’t go for it. I quit and took a job cooking in a restaurant that happened to be on the ground floor of my girlfriend’s dorm building for fifteen dollars an hour. I got some good cooking experience and a few months later I got another software job with a company that did portfolio accounting for big Wall Street firms. They paid me a lot more than fifteen dollars an hour, and I later dropped out of college to work for them full time.
Right from the start of your career I recommend that you pay attention to what engages you about your job and what turns you off. Make pro/con lists at some regular intervals, perhaps at quarterly review time. Are you getting enough of the pros from your job vs. the cons? Are there opportunities to shift the balance in your current role? Are there things you could add that would be pros that you’re not doing at all? Are there things that you’ve only done once in that last quarter that you really enjoyed? Try to do that again. Don’t pay that much attention to what you “should” do, pay attention to what you want to do.
If money is on your list, find out what you’re worth by spending some time getting some other offers. Don’t try to coerce your manager into paying you more by dropping offer letters in front of them. Instead, just talk to them about what you think you should be making in your current role and why.
If you really don’t see a way to pursue the things that motivate you via your current role, then this is a signal to start looking inside and outside the company for your next role.
Ask for responsibility
I was a principal software engineer on a large team writing business productivity software. I wanted to be a software architect. I had been working fairly autonomously on a feature that touched every damn thing in the product. So you could say I was already doing software architecture work. But, because I was young they were reluctant to promote me. I saw another team that was fucking up wildly and they desperately needed architectural guidance. So I talked to my boss and asked to help them out. It was a huge mess to unravel but I managed to create a good architecture out of it and rewrite a lot of it. I also got the team members contributing better as well. After that, when I asked for a promotion they gave it to me. Partly because they acknowledged that I was qualified, and partly because I owned two large feature areas and they couldn’t afford to lose me.
If you want to get to the next level, ask for next level responsibilities when there is an opportunity. A new project, a new sub-team, a crisis that needs to be sorted out, etc.--any of these are places where you can volunteer to take on more scope. Essentially that is what “career growth” is: getting more scope of influence. This kind of informal tryout is good for you and for your boss. It lets you figure out if these are really the things that motivate you and whether you are any good at them. It lets your boss see you as the next level without committing to a promotion. Of course some bosses are assholes and (even if you do well) will just try to use you again in this role without a promotion. I would say that risk is worth it to get the tryout and if you have an asshole boss you should (you guessed it) quit.
Be great at your current job
I can’t tell you the number of people who have pursued me for promotions who weren’t good at their current job. I’m sure that works with incompetent managers who want to just pass their problems along to other folks while failing up themselves, but I’m not talking about them. You’ll know you’re great at your current job when the 360 feedback from peers, supervisors, and stakeholders confirms this--that’s when you should try to get the next job. A real challenge in this is that sometimes you’re good at something that you don’t like all that much. You are left with a choice: Pursue the thing you’re strong at or perhaps go for something that makes you happy that you’re just okay at. I don’t know the right answer; you have to choose.
Work for people you can learn from
After some years at a Very Large Multinational Technology Company I had reached a point where I was flying back and forth across the United States with PowerPoint decks telling “stories” to partner companies. I wasn’t learning anything except how to get the most frequent flyer points. I was not happy. I went looking for a company that was smaller, more focused, and where I could be an individual contributor again. I found a little place doing cool work that I was interested in. They were a small tight knit group of really talented folks. The interview was really hard. I learned a lot about truly collaborating on a project, taking feedback, and using asynchronous communication effectively. I got deep into Linux, Python, test automation, Windows distributed security, and about a thousand other things. I started coding for fun again during that job and haven’t really stopped since. There was a lot of blunt feedback, but in response to that, I got even better than I thought I was going in.
The worst place to learn anything is a place where you are the smartest person in the room. When you’re interviewing companies (or other teams), one of your goals should be to see if you are going to learn anything from them. That education is worth more than money. Learning is what gives drive and interest to your career. If you’re not learning, you’re sliding backwards. This is why chasing easy money, and hopping from money-wasting startup to money-wasting startup, is not a good way to develop a strong career. It isn’t always easy to be learning on the job, and it comes with stress and sometimes uncomfortable feedback, but I think it is worth it in the long run.
It’s okay to plateau
I was leading a scrum team at a small e-commerce company and as part of a project we were doing, someone had to write some deployment scripts. This involved writing some shell script and a little work in Lua on Nginx. When the task came up during planning, the task wasn’t claimed so I assigned it to one of the more senior engineers. The next several stand up meetings this engineer was in a very bad mood with me. I finally had a talk with them and they informed me that they were a “Java Engineer” and that they didn’t appreciate being given tasks that weren’t Java. I told them that their job title was “Software Engineer,” and that they would use whatever software tool was required to build the systems we needed. Needless to say, this conversation didn’t help them in their quest for advancement. I can only imagine what has happened to this person since then, with the rise of JavaScript on the backend and the long dragged out death of Java.
It is okay to get to a certain point and just stay there because you’re happy, challenged, and still learning. A key thing to be wary of in these contexts is to not let the market leave you behind. Don’t be a Java engineer or a Python engineer: be a Software Engineer. Be comfortable in multiple environments and idioms. In the software field, languages and tools and operating systems go out of style. It isn’t that there is really something better, it is just that people tend to herd towards new things periodically. You should pay attention and update your skills, put the new tech into your current job (or get a new job with new tech). I’ve had to lay folks off in the past and there is nothing sadder than “senior” folks, whose skills are a decade out of date, trying to attain the same level in a market that has moved on. You become at best an entry level person with commensurate lower salary expectations.
Don’t become a manager if you don’t like managing
Don’t take a management role if you don’t like it and/or you don’t have any aptitude for it. There are plenty of ways to figure this out before taking a management role. Being a great engineer is not an important qualification for being a great manager. Many companies make this stupid assumption because they were founded by engineers, and they typically have a lot of crappy managers (who are former engineers) who really don’t like managing people. You are much better off solving your money problems or level problems inside the engineering track than switching over to the management track. Also, the employees that would have to suffer under you will appreciate you staying in the engineering track.
Take a pay cut if it is the right role
In the long run, it is better to have the right role than to always have a steadily increasing salary. Of course, this assumes that you have your finances in order and can afford to do this. I would say that being able to have this option is very useful in career progression. I’ve done it more than once, because as a great employee, companies tried to lock me in with an above-market salary. I didn’t want to be locked in anywhere, so I took jobs for sometimes $50k to $100k less because they were the right jobs for my goals. The money always came back in about a year, and I had the role that I wanted and was learning the things I wanted to learn. Sometimes if you’re trying to change your role and you don’t have the most extensive experience in the new role, it helps your new employer take that risk more easily.
A note on entitlement
It is usually about here that someone says: “This is easy for you to say; as a white male, the system is built for you to succeed and get opportunities.” Yes, I agree and I think there are systemic biases against women, people of color, LGBTQ--basically anyone who isn’t a white male in the software industry. I worked hard to be an ally during my career and to hire, mentor, promote, and empower folks that weren’t white males. But, I’m just one person in a sea of shitheads who don’t acknowledge their bias, or worse, who actively revel in it. That being said, having watched the careers of several talented women and people of color over the years, I would say that my advice is not entirely bullshit for them either. The difference is the timeline, the amount of resistance, and the level of care they needed to take in choosing companies, groups, and roles. I always encourage folks who are not like me to find a successful mentor who is like them to talk to and to run ideas past. When you’re networking, ask about allies and see if you can work for them.
Don’t quit too often
Look for companies where you think you can spend at least four years, and try to stick to that. I’ve had stints from thirteen years to nine months, but the average is probably around four or five years. And even at the longer tenure jobs, I had a new role about every three or four years in a very large organization. As a reader of hundreds of resumes, I can tell you that (unfair or not) I don’t like ones with a series of two-year jobs. I know that a lot of startups don’t last more than two years. I think startups suck as a place to learn anything, as most of them fail, which means you’re learning to fail. I prefer a going concern four- or five-years old with a money-making business, because they are succeeding and you want to learn success. The concern I have when I see a two-year pattern in resumes is that the person talks a good game, and it takes twenty-four months for the organization they’re working for to detect that they are lazy or incompetent and get rid of them. I’ve made the mistake of hiring people like that based on a glittering interview performance, so I learned to pass on those. I suspect other managers do too. It is also important to show folks that you’ve been through a long arc of a software product or service’s lifecycle, not just the launch.
But, what about my team?
Don’t flatter yourself. Your team will be fine when you move on. You’ll be creating opportunities for other folks to step up to replace you. If they’re in a crappy situation, your departure might push them past their inertia to upgrade their jobs too. You don’t owe the company anything, they paid you for your efforts and (at least in the USA) they could drop you in a hot minute if they wanted to. Besides, as I mentioned above, you gave good value for money because you were great at your job. Nobody (sane) will be offended, as quitting is part of business.
Finally
You are responsible for your career. If you don’t engage in planning it and driving it, nobody will. Your employers are much more likely to use you up in one role and replace you, than to encourage you to grow and progress. Be proactive on your own behalf.