The Complete Software Engineer

The Complete Software Engineer
Photo by Ben Sweet / Unsplash

All people are unique. They have varying personalities, skills, likes, dislikes, habits, and more. One way of working or thinking isn’t the way to go. However, in our ever increasingly competitive environment, it is evident you need to have an extra…oomph.

The idea that a great Software Engineer is one that can pump out code quickly, is very technical, and/or can get every story assigned to them completed is in my opinion too 1-dimensional. It is still a great trait to have, but let me introduce what I call “the complete engineer”. I’ve mentioned this term when I was leading an engineering team and defining my vision for the type of team I wanted to be a part of. This stemmed from working in a fast-paced environment and learning from my mistakes or mistakes we made as a team and also by speaking with members of Engineering, Design, Quality, and Product.

A complete engineer in my opinion is someone who can do all or most of the following very well:

  • Understand a requirement from multiple perspectives; user, designer, PM, other engineers, directors, support, etc.
  • Asks the right questions to extract as much information as possible to make an informed decision about the solution. This means thinking of different flows and coming up with what-if questions.
  • Provide a reasonable estimate as to the complexity and effort required to complete the task.
  • Understands the balance between a perfect solution and a ‘good enough’ solution.
  • Knows how to test; unit, integration, manual. By extension, tests their code before moving on to the next task.
  • Can debug a problem effectively and propose solutions while explaining the pros and cons.
  • Can work well within a team, motivating and challenging others to get the best of their peers and the team.
  • Understands the technical stack and architecture end-to-end (not always possible, but at least at a high level). This means if you work on the front-end, you should have a good understanding of the back-end and vice versa.

Reiterating the first paragraph, not every engineer has to or can fit in this idea. It is perfectly fine to have a wide array of skills and viewpoints. In fact, you need that for a well balanced team. Sometimes you need a work-horse who can pump out code and move on as quickly as possible.

Everyone is different, but in today’s world where technology is moving very quickly and writing code and deploying it has become much easier, the expectations from engineers has gone up tremendously. Couple this with the rise of Agile in many organizations, it’s expected any employee is able to pick up any story. Having the qualities above is essential not just for the individual, but for the entire team as well.