The path to being a great engineer

Jonathan RauschBehind the Build, Culture

Every time I look at the job descriptions on Salary.com , I get frustrated by the lack of understanding of what truly makes a higher-level Software Engineer. I also worry about what new engineers coming into the field think will help them advance. Let’s look at a couple of these job descriptions.

Software Developer I

“The Software Developer I performs coding, debugging, testing and troubleshooting throughout the application development process. Designs and develops software applications. Being a Software Developer I typically reports to a manager. Requires a bachelor’s degree. Being a Software Developer I works on projects/matters of limited complexity in a support role. Work is closely managed. Working as a Software Developer I typically requires 0-2 years of related experience.”

Software Developer IV, Software Engineer – Project Lead

“Software Engineer IV designs and develops software applications. Performs coding, debugging, testing and troubleshooting throughout the application development process. Being a Software Engineer IV requires a bachelor’s degree. Typically reports to a manager. Software Engineer IV is a specialist on complex technical and business matters. Work is highly independent. May assume a team lead role for the work group. To be a Software Engineer IV typically requires 7+ years of related experience.”

As a new engineer starting your career, what’s the takeaway from these job descriptions on how you can advance my career? When I read these descriptions from the perspective of a new engineer, I see several takeaways: 

  • I need to be very strong technically
  • Years of experience may also grant me higher levels automatically
  • I need to be able to work completely independently

It’s correct that you need to be stronger technically to progress in your career. However, if you know a lot and then the tech changes, do you get demoted? Tech changes fast.  It’s not about what you know but how fast you can learn. You can’t know everything. Technical skills are only a part of the job. The “highest” level engineers understand the business and that their job is to improve the business; tech is just a tool at their disposal. They genuinely care about the customer.

The job descriptions both try to back off the years of experience by saying “technically requires.” In my mind, years of experience are not nearly as important as the skill sets you possess. There are plenty of engineers out there with decades of experience who are terrified to change jobs and learn something new because they never developed the skills to adapt and learn quickly. These engineers should not be rewarded for years of experience.

The takeaway that really bothers me is the concept of working independently. This takeaway creates a mindset that you should be slow to ask for help. After all, asking for help means “I have failed because I cannot work independently.” It also creates a mindset: “I don’t understand something because I’m not good enough. I should know how to do this!”

The danger in working independently is that it isolates you and doesn’t allow knowledge transfer. You lose the advantage of learning from your peers. It also often creates an overly competitive environment. The company takes on a huge risk since when a single point of failure leaves, everyone else is left scrambling, trying to figure out how all the pieces fit together. Employees who hoard knowledge are toxic. No one wants to work with them, and the company is constantly trying to figure out how to get rid of them.

The truth is, the more experienced you are, the more collaboratively you can work. A lot of experience will make you very good at many things. It will make you very fast at those things, and you will be able to work more independently based purely on the fact that you have “been there, done that.” 

A better measure of growth as an engineer is a good understanding of 1) what you do know, 2) what you do not know, and 3) how long it takes you to ask for help. An experienced engineer knows the cost of their time. What is better for the company: one person spending two days struggling to figure something out or two people spending an hour figuring it out together?

In my experience, growth as an engineer really comes in three stages:

Beginning their career:

  • Feels a need to prove they belong
  • Tries to work independently to prove themselves
  • Slow to ask for help
  • Doesn’t seek feedback because they may not like the answers they get
  • Wants to be told what to do

What most people would call a Senior Engineer:

  • Very competent and skilled
  • Can solve most issues
  • Probably a little cocky because they have been there and proven they can do it
  • May try to force their opinion on other engineers to prove how senior they are
  • Sees other engineers as competition
  • Takes feedback but doesn’t seek it; may try to argue how the feedback is invalid
  • Not super aware of their gaps
  • Still slow to ask for help at times
  • Doesn’t truly understand the cost of their time and where they should be spending it
  • Wants to work on what’s cool not what’s most valuable
  • Rewrites code as soon as they are responsible for it; believes their code is better
  • Probably still being told what to do 

The next level:

  • Knows their strengths
  • Knows peers’ strengths as well and utilizes them
  • Knows what they cannot solve in a timely manner
  • Seeks feedback and growth opportunities
  • Works to grow others
  • Works with others to find the best solution for everyone
  • Doesn’t see others as competition; we can all grow together
  • Very quick to ask for help
  • Knows the cost of their time and always works on what’s most valuable
  • Doesn’t believe their code is better or worse than others
  • Knows what’s valuable to the company and works on that
  • Doesn’t need to be told what to do

Many engineers I’ve met haven’t gotten past the “senior engineer” level. I label it senior engineer, but I’ve known plenty of architects, principal engineers, engineering managers, directors of engineers, etc., who never made it out of this level. A great engineer realizes it’s a team sport and works hard to be a good teammate, which ironically has nothing to do with being an engineer.

Technical skills are very important if you want to advance in your career – just as important is being a great teammate. As someone who has hired many people in my career, I will always take the solid engineer who is a great teammate and someone I want to work with every day over the 10x engineer that no one wants to be around.

Be a great teammate. Seek feedback constantly. Make others around you better every day. Ask for help quickly. Be humble. It’s possible to be a good senior engineer without these skills. However, reaching that next level in your career requires committing to these skill sets.