How to advance as Software Engineer. How to be a more Senior Software Engineer

Igor Asomadinov
22 min readApr 9, 2023

--

Many of us are on a journey to grow our skill sets. A lot of us are trying to find ways that we can have more impact on the jobs that we’re doing. I think the problem is often, the path forward is not always clear, and we can’t always just follow some prescribed route to get from point A to point B. There are often many ways to get where we want to go.

I will try to share with you some career advice for programmers. I want to start straight away with a truth that we may not know. We have no idea in our industry what a good programmer looks like, which is a little bit alarming given we’re talking about career and growth, and that presumably involves figuring out what is a good direction to go in as a programmer and how to figure out whether we’re good.

Let’s look at a more modern time, and as everyone knows, certainly in 2013, Google had a very comprehensive hiring process. They have a reputation for hiring the best developers, and many people tried to emulate Google’s hiring process. So does it mean we all should start training to pass Google interviews? Does it mean that after this, you will be the best program in the world?
In 2013, Lazlo Bock, Google’s VP of people operations, said on the hiring side: “We found that brain teasers are a complete waste of time. They don’t predict anything. They serve primarily to make the interviewer feel smart.” Anyone who has ever attended a technical interview knows this is the truth. Many things you get asked in technical interviews make you, the interviewee, feel stupid and make the interviewer who knows the answers feel smart. It doesn’t do a lot in terms of actually evaluating your programming ability.
So conclusion, we are horrible at measuring programming ability.

OK, Now let’s look at a typical job advert for a Senior Java developer position. The requirements for Senior Java Developers don’t change that much from year to year. The names of the technologies might change, but overall you have a bunch of technologies: Java, Spring security, cloud data boot, AWS Kafka, Docker, Kubernetes. And then you have a bunch of other skills that are required, for example, staying up to date with technology, which is nice and vague. It’s up to us to understand and move closer to them and other skills like collaboration. Communication skills. Every job advert for good communication skills.

So communication is from juniors and up to SVP. But hint here we’re not just programmers. We don’t just write code. We have other responsibilities as well. The hardest single part of building a software system is deciding precisely what to make. It is not necessarily writing the code. It is deciding what to write the code for, what problem to solve, and how to solve that problem so.

We have no idea what a good developer looks like. Not just programmers but people who write code. A developer is a more fully formed person with a set of skills that isn’t just about writing code that talks to the computer. We don’t know how to evaluate good programmers. We know even less about how to evaluate more well-rounded developers with these fluffy skills like collaboration and communication. That means figuring out who to reward in a particular job is difficult. It’s difficult to figure out who to give a pay rise to, who to give bonuses to, and who to promote.

So means then that the person responsible for those decisions understands the code. But most of the time, we don’t look at People’s Code to figure out how much money they should get paid. And figuring out who to figure out who to hire is even more difficult because this person doesn’t even work for us yet. We have to understand from a one-hour face-to-face interview whether this person will be good at this complicated job called being a senior developer.

At this point, this is the most important thing that I want to say. Being good at your job is not the same as looking good at your job, for better or for worse. This means that if you are good at your job, You might not be doing the things to make you look good at your job. Your job is also to make yourself look good.

How to be good at your job?

How to be good at your job? All you have to do is you need research skills, AKA Googling. Every now and again, Twitter goes mad about how real developers don’t Google, and that’s absolute nonsense. The whole point about Google is that the Internet lives out there and not in your brain, right? Why would you load everything into your brain? But it is a skill to be able to search for that information. And even now, it has become easier with all the AI support we have.

Next: Asking questions is absolutely fundamental to doing a good job. Do you need to be able to ask the business what you want? Why do you want it? Why do you think this is the right thing to do? You need to be able to ask your teammates. What’s the architecture like? Should it go here? Why does this work like that? Asking questions is absolutely fundamental. What’s even more important is listening to the answers and learning from those answers, and moving on from that.

Learning is a fundamental key. You should be Learning MACHINE. It’s an essential part of what we do in our job. You need to be learning all the time. If you don’t love learning, you are doomed in this industry. It is so many languages, plus you have all the different versions of the frameworks. So many tools to learn: Git and Docker and Kubernetes, etc. The thing to remember is you don’t need to know everything. There are so many things you’ll never use, and you only need to understand how and when to learn. But learning to love learning is a really important part of what we do in our job.

Good communication skills. Cliché but necessary. Communication skills are about talking to humans, and humans are complicated, and it’s about talking to different types of humans in different spheres. And it’s about using different media like writing is different if you write an email. Or chat. Or if you’re writing documentation, those are entirely different communication skills.
On top of that, you’ve got things like meetings and present presentations and lots of different ways to communicate. Also, it would be helpful for us to recognize that communication skills fall into a sort of matrix and subset of skills. And if we can figure out what we’re good at and what we like to do, that can help steer our career a little more.

It’s super important for us to be adaptable in our jobs. As I said, the technology industry is always changing. The landscape changes all the time. We need to be able to adapt and change. But it’s not just about that. It’s about when we come into a team. We need to adapt to the team and for the team to adapt to us. We’re all humans. We’re all people. If you feel strongly about the tabs versus spaces argument, and you’re in the whole team, not a spaces person. Then you can’t reformat your whole code base into tabs cause only you like tabs. The rest of the team is using spaces. Suck it. There are certain things that we’re specific battles that aren’t worth fighting. It’s much better to fight kind of battles in the direction the whole team is going in instead of pulling in multiple different directions.

Scientific method. In computer science is quite a lot of scientific stuff. We make a hypothesis, and we do it like, which is an automated test. We implement something, experiment with code, and then draw conclusions. Did it work? Did it not work? This works very well for things like debugging or finding performance problems. Of course, you should have a hypothesis tested and make changes and draw conclusions. But it also works for things like implementing new features. One of the things that we don’t see often enough in the industry is concluding. When we’ve implemented something, we’ll push out a new feature and be like a right tick that’s done instead of figuring out, OK, the hypothesis was this new feature will bring new users, or it will enhance the current user’s experience. Maybe we need to iterate over that as well. So this idea is like setting our expectations and creating an experiment. Which may be a test or perhaps making some changes to the code and releasing something and then drawing conclusions and figuring out whether our hypothesis was correct or not and closing that circle.

Prioritization and time management, particularly if we end up being more independent, when we’re junior, work in teams, or work in large organizations, things tend to be fairly structured. We tend to be given work to do, and we do it to the best of our ability. As we become more senior and or as we become more independent from a team or an organization, we will find that there’s significantly more work to do than we will ever have time to do. We need to learn how to prioritize that. We need to come to grips with the fact that 50% of the stuff people want you to do is not going to get done. There is always more work that needs to be done.

Understanding English, particularly reading it, is crucial for your technical skills. If you were born in an English-speaking country, you could already consider yourself lucky as so many people spend part of their life, time, and money practicing it. And here, English knowledge is vital for computer languages written in English and a lot of documentation, Stack overflow, presentations, etc. A lot of literature is in English, and to improve your skills, you need to have a good enough grasp of English to understand what other people are saying, writing or verbally. With remote work, English has become a requirement for you as a developer. You need to be able to speak English with other people in the organization now. You don’t have to be excellent at it. You need to be able to be understood, you need to be able to read it, and you need to be able to be understood by other people.

And then you should probably have some technical skills. You know, it’s kind of what we do, but I haven’t put it at the top of this partly because I think technology skills are easier to learn. There is plenty of material. The Internet is full of tutorials and courses, and books.

Look good at your job

Now let’s talk a bit about how to look good because we talked about how that was all the stuff about how to, which is only half of the story.

To look good, you do need to know the right words. The right words are shortcuts during the talk with people about what you’re trying to describe.

Have opinions. Having opinions makes you look smart. Feel free to express your opinion because it makes you look like you’ve thought about these things, even if you are mistaken. In the correct environment, nobody will laugh at your opinion.

Displaying confidence. Now, there is a difference between being confident and displaying confidence. Most people feel like they don’t have as much confidence in themselves as they would like now when you’re going for jobs. Or going for pay raises or going for bonuses. You do need to display confidence in yourself. Think about how you are on your best day doing the stuff you are best at, and try and channel that energy when you’re going to interviews or talking to people about things you might want to do or projects you might want to work on.

Showcase portfolio. The idea of a portfolio is to make you look good at what you are good at. The things you want to do more of a portfolio are things like, for example, GitHub or blogs or activities on Twitter.
More on this is below.

Know where you are in the system to hack

There is a system, and you can hack the system. But to hack the system, you must know what that system is, and you must know your place in that system. Otherwise, you won’t be doing the right activities or applying the right leverage in the right places.

Let’s make the analogy with Middle Ages. There were three levels to the Craftsman, and there was an apprentice, usually a young boy learning the trade. There was a journeyman who was an apprentice who had graduated. They were primarily responsible for training the apprentices but also did most of the work. And then, at the top of the pyramid, a very few Craftsmen whose job it might be to train some of the journeymen. And to advance the craft forward.

We would translate this analogy to apprentice, professional, and expert in the modern world.

The Apprentice, of course, has no idea what they’re doing. This is a junior developer. In modern trades, apprentices should do around 8000 to 10,000 hours, which sounds quite a lot like the magical 10,000 hours to achieve, you know, expertise in something. So you’ll be an apprentice for about, let’s say, five years and these first five years. This is when you’re building up your skills, and you’re. Experience and figuring out who you are, what you do, what you’re good at, and what you don’t like.

Then Next up, the professional level. Means: “I’m good at what I do. I can do the job. I can be given a set of tools. I am still growing. I’m still learning. I’m still progressing, progressing. But I can work independently and get the job done.” In the old trade model, an apprentice journeyman wasn’t necessarily promoted to Craftsman. In the end, journeymen might stay journeymen forever.
And similarly, in our industry, a professional might be a professional forever. Only some people will want to be on top of the pile. They might just want to continue expanding their skills or working on the same things they know they’re good at and enjoy.

And then the third level is sort of expert. I like to think of this as a whole industry that depends on the person.

Steering Your Career

We must be comfortable knowing that we don’t know the answers, and sometimes we must break the rules. So let’s talk a bit about how you steer your career. Like anything else, and like I’ve mentioned already, we iterate over this. It’s the same as some agile cycles. We are going to find our requirements for our career, we will perform some implementation exercises, and then we will test if this has worked.

Requirements. Maybe it won’t surprise you, but this isn't easy. We have to think about what our core values are as an individual. And this is not necessarily about work. This is about us as people. What is fulfilling for us? What do we want? What do we want out of life? We’re going to be doing this job for a long time. It will provide us with lots of work, hopefully, money, and maybe some satisfaction. So what? What holes need filling for that? So your values might be like, I want lots of money, a yacht, or many holidays. Or it might be you want to provide for your family, or you want to spend time with your family, or you want to be free to devote more time to the people around you, or work 12 hours with amazing coworkers. It might be that you want to make changes to the world. You might want to write applications to unite families in your war-torn countries or something like that.

Technology is wonderful, so once you have an idea of your level and values, you can start thinking about your goals in your current job or if you are looking for a new role. So career-wise, what are your career goals?

For an apprentice, your broad goals are to be employable, you don’t know anything, have no experience, and there are thousands of other people like you. Your CV looks the same as everyone else’s CV. So what you want to do is you want to go on a Pokemon search. You want to catch them all, get many skills on your CV, and contact names from companies you want to work for you.
As an apprentice, you want to learn as many skills as possible. Say to measure this, you can think this: “If you haven’t put a new skill on your CV in six months, it means time to move on from that role.
Ideally, you will move around in those first five years to get a feel for what you’re good at and what you like. What the industry looks like, which direction you want to take, and get as much stuff on your CV or resume as possible to level up the next steps.

Professionals aim to be more open to doing what they want. Now you have a better idea of what you’re good at, what you like doing, what you don’t like doing, who you like working for, and which sorts of teams you work best in. And this gives you much more control over steering your career. It gives you much more freedom to say, “I want that job. I don’t want that job.” Or “I do want to work for this company.” It will be less “I need to get more skills on my CV.” and more around “I’d like to work in a team that does pair programming because I know that I learn so much faster when I do pair programming.”

And for an expert. I think the good thing about being an expert, on top of your craft, is that you can pick your goal. And I do think the one thing that’s the most important thing for an expert is that you should be teaching others. That’s kind of your responsibility at that point. You are the expert. You know what’s going on. Your responsibility is to help the professionals and the apprentices along the way to come up with you. And the best way to be a 10X programmer is to teach nine other developers to do what you do. You don’t have to be the best developer. You need to be best at leveling up other developers.

Next, look at the implementation.

The 1st situation is if you’re looking for a new job.
The 2nd situation will be if you plan to stay in your job and want to progress inside your organization.

So when you’re finding a job, the system is relatively standard. It depends a little bit on your industry, city, and culture around what you do. But mostly, it’s things like job referrals through friends or LinkedIn and job specifications.

It is an additional humongous topic we can talk her. But shortly, your CV has two goals. The first goal is to get past the machines when you upload your CV to total jobs. So you want to have keywords on the types of things you want to be doing, the kinds of technologies you have experienced, and the things you want to be doing. So if, for example, you haven’t done, let’s say, TDD, but you decide that you want to work on a team, that’s. That’s doing TDD. You need to make sure you mention TDD somewhere in your CV. Hopefully, this link will help here.

And the other goal is it needs to appeal to human beings. Ultimately, humans will read your resume and decide whether or not to call you in for an interview. So you don’t want all of those search terms on the front page of your CV because it’s just so boring for a technical reviewer to read those things and go, I don’t care about these things. I care about you. Who are you? What do you want? I recommend doing a short personal profile at the top to say what you’re looking for. But again, it depends a little bit on the types of jobs you’re doing and if you’ve got a cover note and so far, so on and so forth. So do all the interviews you can and practice. And if you don’t want the job, that’s even better because that will help you to relax, it will help you to get used to it, and it will help you to be better at interviews in the future. And you will be rejected through the interview process. And that’s normal. It is a numbers game. You’ve just got to keep going. And finding a new job is all about looking good. It’s not necessarily about being good at your job. It’s too difficult for them to determine whether you’re good. So all those skills about looking good are the skills you need to display when looking for a new job.

Finding a job is all about Looking Good

And it comes down to making a good portfolio if you have a portfolio that showcases what you’re good at. You have to do all of these probably like one or two of the things that suit you best. The idea of a portfolio is to show what you’re good at and enjoy. The easiest way to be visible is to work for high profile project or company.

You should have a good way of showing something besides your CV and skills. Examples of GitHub profiles. You don’t have to have a perfect portfolio on GitHub. You don’t have to have amazing projects done with, like you know, crafted perfectly with TDD and all the rest. Just have some code there. If coding is something that you like doing, write some code, and shove it up there. And if you’ve got like 15 pet projects on there, they’re all slightly messy. But you know, someone comes along, looks at it, and goes: “This person’s got a few unit tests. That’s great. We want people who are writing unit tests”, and so that works well for your portfolio.

You can write a blog. People still write blogs these days. You could present at conferences, you can present to user groups, and you could write books. But It’s a lot of work.

To look good, you need to use the right words and learn how to use them.

Every program should know the skill to pass the interview. It is different from the skills to do the job. You have to be your best; you put the best forward. No, it’s not lying. It’s not over-promising. It’s just the best for you.

And, if someone should offer you a job, you have to decide whether you will say Yes. And the way you figure out whether you’re going to say yes or not does it meet your requirements. Does it meet your goals? Does it get you closer to your goals? Does it scratch the itch of your values? And if you made the mistake of saying yes to jobs because you made a list of pros and cons, and the pros were much longer because the pros are things like money and having a job. But if it feels a bit weird like you are unsure if you want to work there, and it turns out the con of it feels weird, and you are not sure - I want to work here. There is a screaming red flag, and don’t take the job. Look at something else because your gut can tell you stuff, which is very helpful. And say no. It’s important to be able to say No.

At the same time, don’t burn any bridges from your previous job. You better leave on good terms. You never know what can happen if a new position won’t work for me. You can return to places you’ve worked before, usually for significantly more money. Also, your last place can provide good references. Or imagine 5 years later, your previous coworker asks you to join your dream team.

Looking Good to advance your career in your current job

Implementation. The system is much more fluffy when you’re trying to advance your career in your current job. The system is going to change. A place to place depends upon the company, the people in the company, how big it is, how structured it is, and how they do their formal evaluations. You do need to find out what the system is. Otherwise, you’re not going to be able to get ahead.

On top of that, let’s say they have a formal system with engineering levels and a matrix of skills and all those things, which are great because you can hack those systems. But you also need to know who is responsible for making those decisions because those people, at some point, will sit around the table. And say, does this person deserve to be promoted? And if the people around that table don’t know who you are, you will not get promoted. So you need to understand who is responsible for the system and who makes these decisions, and you need to be able to make yourself visible to those people. You know how to do your job. You do it every day. You know, do the given tasks, ask questions, learn, play nicely with others, and all the rest. To look good in your job, you have to meet objectives.

If you have formal objectives - perform to the metrics. Because otherwise, it will be very difficult to say, “Yes, I deserve a pay raise, bonus, promotion, etc.” If you set objectives last year to build this thing and did something completely different instead, it will be very difficult to justify why you should be rewarded for doing something you weren’t told to do.

Find sponsors. This is particularly important for women and members of other underrepresented groups, as a sponsor is different from a mentor. A mentor will teach, help, and guide you as a sponsor assumes that you already know what you’re doing and will push you forward. A sponsor will put you forward for events. A sponsor will sit at that promotion table and argue on your behalf. A sponsor will represent you out there.

To look good at your job, you must be visible. Nobody knows who you are, so nobody can see that you’re doing a good job, and probably nobody even cares. Sadly, you have to go out there and tell people you’re doing a good job. If you’re working on a high-visibility project, that’s kind of that’s easy. You can do things like introduce a new process or technology. You can do things like “Lunch and Learns.” You can write documentation — a nice path to get into developer advocacy. Make changes internally, and do in-house extracurricular activities.
It is also quite important to go to the meet-ups and mix with people, and that’s how people get to know who you are. Especially when you’re young, getting to know people socially is easy.

So to hack the system. You need to understand what the plan is, and you do need to hack the system. Don’t try everything but something small, and be consistent. Try to blog posts, try conference speaking, try stuff on Twitter, or teach people how to use the company product. So if you want to get promoted, you need to do what makes you look good.
This much code, close this many JIRA Tickets, won’t help you to get a high promotion — you will get a review as expected performance.

Note: Be aware that if you’re doing non-code activities well, you might get promoted, promoted, or moved away from the code. So if you’ve excellent interpersonal skills and communication with the business, you might become a business analyst. You might become a project manager if you’re organized and time management is excellent. If that’s what you want, that’s fine. But what you don’t want to do is to find yourself moved into that role without intentionally choosing it. Be aware that can happen. You do have to be your own champion. By being your own champion, you will be much more likely to get the things you want.

Finally, we’ve gone through this process of identifying our requirements, making changes, and now we have to test whether those changes have met our needs. So we have to decide, for example, do we move on from our current role? It doesn’t have to be a moving job, necessarily. You might want to be looking for another project to work on, or we might want to move sideways into a slightly different team. And the way we make that decision is once again figuring out or remembering what our values are and what our goals are.

And iterate. Keep going over this again and again and again. There’s no such thing as having too many jobs or moving too often. And what’s the worst that could happen?

So, in summary.

  • We have no idea what a good developer looks like, so it’s very difficult to figure out how to.
  • It’s very difficult for us to figure out whether a developer is any good or not.
  • It’s not good enough to be good. You have to look good at what you do and what you want to do.
  • Coding is actually not your most important skill, or certainly not your only skill.
  • You do need to know what level you’re at. Otherwise, you can’t work out where you are in the system and how to hack the system.
  • You need to know what your values are and what your goals are to figure out which direction you’re going in.
  • You manage your career. No one else is going to look out for you. Sadly, this is the world we live in. We don’t have a job for life. We don’t have managers who necessarily have your best interest at heart.
  • You are the one who manages your career and the best person who does know what you want. You can analyze what your values are. You do know your thoughts and feelings.
  • It’s all about the people. It’s all about the people you speak to, the things you’ve learned, the sponsors who can push you forward, and the mentors you can learn. Culturing and nurturing relationships is much more important than picking up the next set of technical skills.

--

--