When you start out, writing code is all you can think of doing. You want your little corner of the world in which nobody bothers you and where you can spend your time in an IDE, learning new things and writing code.
Once you are forced to get out of that bubble you see that companies want you to join them, they make you feel good among their people and show you that apart from doing what you love you can also get paid a decent/outrageous amount of money for it.
However, all you really want is to get better at writing code and faster at learning new things. The internet is pushing development faster and faster away from your current level as you need to stay up to date.
Money is important, but is does not solely quench the thirst of a driven developer.
They will try to keep you with promotions after promotions, bigger salaries, various trainings and social events, until they deem you worthy of the title "Senior Software Engineer". That is when you get recognition from your fellow colleagues. You have reached a status where the air is crisp.
Congratulations!!!
But do you really deserve that title? Does it say more about the company than about your skills?
In case you want to check if you deserve it, here's a list of what it actually means:
- A Senior Software Engineer doesn't need perfect specifications. You may be given a problem that is ill formed, or abstractly stated, and instead of complaining about the requirements, you go out and try to understand deeply what the problem really is, and if you need to negotiate and clarify the requirements, you do so. You look at solving the real problem, not just what was stated.
- A Senior Software Engineer doesn't pretend to know everything or to always have the best judgment. At this level, you are expected to be able to take on any problem, but also be capable of and willing to collaborate with other folks who may know more, or have different perspectives than you.
- A Senior Software Engineer doesn't deliver buggy code. You take pride in what you do, and feel both deeply appreciative and embarrassed if someone else finds a problem in it. When someone finds a problem, you thank them.
- A Senior Software Engineer thinks about the future. You write code that is well structured and clear. You comment portions of the code that are not obvious, and your comments help provide perspective on 'why' a piece of code exists and is written the way it is. You want others to see your work and you actively encourage feedback from your peers.
- A Senior Software Engineer is available to others in the company (Support, Sales, Services) to help them better understand and use the product you are developing.
- A Senior Software Engineer doesn't shy away from working with customers and does so with a professionalism that represents the company well.
- A Senior Software Engineer cares about the customer. You are constantly thinking about the effect of your work on the product and ultimately on the customers. For example, if a requirement suggests you display a warning popup when a user does something, don't just do it. Think about whether a user who is intending to do that thing might get annoyed after the 100th time the warning appears. Figure out ways to accommodate both first time users who might need the warning and those who would curse at the product.
- A Senior Software Engineer understands that his or her environment is fundamentally a collaborative one, and maintains positive and constructive relationships with others. This means seeing, understanding and appreciating the contributions of all those around you. Your goal is to improve things, and that includes the spirit of the workplace.
Don't think that just by reading one or more articles, you've learned all there is to know about being a good senior software engineer. Honestly, we're still learning too.
I hope that we'll get the chance to learn together!