More than a great coder?
A few days ago, a software engineer asked on Quora what his boss meant when he said "You're not at a senior level". I wrote an answer with some thoughts from my years in the industry which seems to have resonated with many folks. However, on reflection, it isn't really a definition of a senior software engineer, it's a statement about the traits we all should be fostering and goals for our personal growth in the industry. So for what it's worth, here's the list for your perusal and reflection.
- A great 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 great software engineer doesn't pretend to know everything or always have the best judgment. At this level, you are expected to be able to take on any problem, but also capable of and willing to collaborate with other folks who may know more, or have different perspectives than you.
- A great 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 great 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 great 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 great software engineer doesn't shy away from working with Customers and does so with a professionalism that represents the company well.
- A great software engineer cares about the customer, and is constantly thinking about the effect of his or her 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 heads down 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 great 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.
I'm sure there are more, but do these things, and people will really value you. And that's really the bottom line. If you are an asset to the organization, your boss and your peers, they will consider you senior and rather indispensable. On the other hand, if you require constant hand holding, or worse, go completely rogue and don't work with others and produce things without the benefit of the collective wisdom of your organisation, you'll be considered dispensable.
Great post!
We were always lucky at Serena - at least in the Dimensions group with the quality of our SW eng staff - we had a great base of people to start from. Worked with other groups now that make me want to cringe.
I would say a senior software engineer is someone who must have some or all of the following... i) common sense ii) comfortable working with non-developers - including customers, sales people, consultants, PMs and POs iii) experienced in different environments and languages and can apply the concepts from those to where necessary iv) able to apply logical thinking to a problem and is good at conceptualising issues. The first key to solving a problem is understanding the problem! v) understands good coding practices and is able to apply them. A lot of engineers I've worked with in the past, say they understand practices, but never apply them which makes that understanding pointless vi) can apply some project management/team management when needed vii) can work as more than just a coder viii) understand why optimisation is necessary ix) can design solutions to complete issues If they can do the above, then I'd happily work with them as a senior SW eng!
great read Tom. completely agree
very informative