The software development world is quite diverse and when I started out as a developer I would have loved to have someone telling me what the real expectations are for professionals. Sometimes those are very different from what is written in a job description.
In this article series I already covered the Junior Software Engineer as well as the Professional Software Engineer. In this article I want to continue with the Senior Software Engineer and will explain my point of view as a Staff Engineer of what is expected of people in this role and what you should do to be good!
What is expected of you
The main scope of your work is your team. However, more and more you will cross borders to other teams as you build features that interact with them. Not only will you break down features into smaller units of work. You will be responsible to go deep into the unknown to figure out the complexity of epics. You will create Proof Of Concepts (PoCs) to identify the best technology or tool for the task. In other words, people expect you to take ownership of the entire vertical of a big feature if necessary.
Your main focus is still delivery as you are a Software Engineer. However, you will be dragged into more meetings, alignments with other teams, etc. Additionally, as you are a person with considerable amount of experience under your belt other people rely on your assessment. All this will reduce the time you spend with coding.
What you should aim for to be good
I cannot stress this point often enough. For me the number one and two on the list of characteristics of a Senior Software Engineer are proactiveness and drive. You are the one that points out deficiencies when others overlook them and you are the one that, given a goal, will drive that initiative until completion. For example, you might identify a point of repetition that everyone in the team is doing over and over again. You could be the one recognising the potential for the whole team to save time and you could put that topic of automation of the task on the table.
The Senior role is not solely restricted to technology. It also covers team workflows and general collaboration in- and outside the team. You understanding business flows of the company and the role you and your team play in the whole picture will help with that a lot.
An understanding that develops over time is the one of pragmatism and the balance of speed of delivery and quality. By now you should have learned that you often don't have the time to make everything "neat". You should have learned that often "good enough" is what is important and you developed a gut feeling of what that means.
Finally, mentoring is an often used term by hiring managers. When they hire a multiplier they enable a team to grow with less external help and guidance. This is a huge cost and time saver. As a Senior you are a reliable source of experience and knowledge. You will teach more unexperienced people. They will also look at you as a role model cause they want to be in your shoes in the future. That means that your actions (in code and in person) will have more weight than before.
How you can learn
I know Senior engineers that at the latest now start to look beyond their own nose (i.e., what they feel comfortable with). This usually is computers and software. They start looking into psychology, team building and team management topics.
The workings of individuals and teams is a whole different level of complexity. My feeling is that at some point working with machines is just not complicated/challenging enough anymore. And engineers like to go about challenges.
On the other hand, it is also fine to keep digging deeper into technology. It's not like there is nothing new popping up anymore to explore!
Do you have other input about what to look out for when you start a career in Software Engineering? Let me know! I would be glad to listen to it and learn from your experiences. Let's get in touch via Twitter, LinkedIn or good old Email.