Developing software is an excellent career. Software has touched almost every aspect of our world, and its impact is always expanding. Many new things have become possible because of software, things that couldn’t have been dreamed of even ten years ago. The industry is continuing to expand. Tools are getting better. New opportunities are appearing everywhere… So why haven’t you gotten a promotion in ten years?

In the early days of my career, I got new responsibilities, promotions, and raises fairly regularly. It took a bit of luck, a lot of hard work, and a few years (but not very many years), to work my way up to a senior developer position. Senior means different things at different places, but eventually I got to a place where there was no easy next step, and I had a good number of peers in exactly the same position.

I can now proudly tell you that I have broken past the wall. About a year ago I achieved my goal and got promoted to the role of system architect. The following are the things that made the difference for me.

Choose the career path you want

There seems to be three distinct paths forward from senior developer:

  • people and project management
  • technical leadership
  • focused technical expert

The focused technical expert path only exists in companies that need experts focused in very specific areas such as hardware manufacturers or OS / platform companies. If you are at the top of one of these specialties, you probably already work for the company where you’ll be getting promoted, and this post won’t really apply to you.

Both management and technical leadership are fine choices, but you should decide which is right for you. Here are some important differences to help you make your choice:

  • Technical leadership positions are harder to get. There aren’t as many of them, and it seems they are more sought after.
  • Management positions will eventually strangle out all time for development. At some point you may not be able to go back.
  • Technical leadership positions require making harder technical choices based on research and experimentation.
  • Management positions require making harder business decisions based on company and customer priorities.

Either way, they are both big changes from full-time development. You will be leaning heavily on your soft skills, spending more of your time in meetings and writing a lot of documents. You will typically have less control over the things you focus on, and your success will depend more heavily on the work of others.

If all this sounds awful to you, it is entirely fine to stay where you are. You can spice things up by changing projects or companies. You may want to scale up your impact some day, but until then, do what you love. The only unfortunate consequence is that you will likely be stuck in your current salary range.

Develop your hard skills and your technical breadth

Both leadership and management positions will favour generalists because you’ll typically have responsibility for far more parts of your system. If you’re after a management position, a basic understanding of different problem areas will be enough. If you want to be a technical leader, make sure you have some success stories in a few areas. If you’ve only ever worked in the back end, for example, see if you can get some time working in the front of the house.

Technical leaders are going to need to be up to date on all the latest technologies and be able to discuss them intelligently. If learning and working with new things isn’t possible where you work, it may be time to consider changing companies. Contracting helped me expand my portfolio dramatically in just a few years, but it’s not a path I’d necessarily recommend to anyone.

Find the right company and manager to help you advance

It’s always important to have a good relationship with your manager, but this is especially true if you want to advance your career. Make sure your manager knows what your goal is, and make sure they are supportive. A good manager will tell you what areas you need to improve, represent you when the right opportunity appears internally, or vouch for you if you find one outside.

Make sure your company has the role you want. Very small companies will probably not need a software architect, and may not have many openings for new managers. If you’re growing quickly it may appear in the future, but ask your manager. If you’re valued enough, they might even create the position for you when it makes sense.

If you’re in a place where advancing isn’t possible, or you aren’t getting the support you need, you may have to make the difficult choice and move on. When considering new roles, think about how they can help you work toward your goal. It’s also totally fine, maybe even advantageous, to tell a potential employer what you’re working toward, and ask if it’s possible with them.

Develop your soft skills

In your new role you’re going to need to juggle more priorities, build consensus with more people, and convince everyone that it’s all under control. You won’t need to be amazing at this on your first day, but you won’t get the job if they don’t think you can do it.

Here are some things to work on:

  • Find your own personal organization system and get comfortable with it.
  • Study development process and team management. There are lots of great books, blogs, videos, and classes.
  • Give more presentations, and put effort into improving them.
  • If you aren’t already, see if you can become someone’s manager.
  • Try coaching / mentoring someone who is struggling.
  • Run a study group or a book club.

Develop your personal brand

I think a lot of us developers lack awareness of our personal brand, but it’s an important part of your career, and it’s importance increases the higher up you go. Make sure people want to work with you, and try to get some high-profile successes under your belt. These will all help you earn a promotion, and give you essential credibility once you get it.