What Makes For Great Software Engineers? Technical Skills Are Just The Start
Posted 6 years ago by Anke Corbin
Rastislav (Rasta) Kanócz, the CTO and Co-Founder of profiq, has extensive experience in hiring and training many types of software engineers involved in QA, R&D, and the newly emerging discipline, DevOps. The software engineers he hires and trains at profiq are then allocated to projects for profiq’s customers.
Rasta recently shared his thoughts on the critical characteristics that a great software engineer should have.
Question: What is the difference between software engineers, QA engineers, and software developers?
Rasta: ‘Software Engineer’ is a general term that covers multiple disciplines: DevOps Engineers, Test/QA Engineers, Support Engineers or Sustaining Engineers, and also Software Developers – all are Software Engineers. They are all using their software engineering skills to achieve different objectives. At profiq we have software engineers primarily for software testing & QA and software development projects.
Software engineers in Software Testing and QA teams at profiq are technical geeks who are usually very interested in different kind of technologies and are curious to explore them. At profiq we prefer breadth of technical knowledge to depth of technical knowledge from software engineers. Not that we wouldn’t appreciate depth. We do. But being “one-dimensional” (focused on one technology) impacts the adaptability of the engineer. We need people who are adaptable.
Our software engineers are comfortable working with operating systems, mobile platforms, and middleware products, and have a knowledge of programming and/or scripting languages to help in building and automating software tests, builds and test environments. They work at the system level, they install, configure and test the whole system, knowing and using concepts and approaches to software engineering. They usually have hands-on experience, depending on projects they are assigned to, with technologies from various platforms, app servers, web servers, and scripting and programming languages. Because they have broad knowledge, they are able to assess how a unique change in one part of a system can affect the whole system. They are able to troubleshoot complex issues and identify root causes and workarounds for those issues.
Software engineers who are part of software development teams (aka. software developers) at profiq usually focus on developing complete software products, product components, individual features or customizations. They know all of a product’s or component’s interfaces, have product insights, and are aware of any weak areas.
Software developers at profiq are able to architect and technically design products. They are able to develop high quality implementations, they know the intricacies of the programming language to come up with solutions that are not only functional, but also highly performing and secure. They are capable of debugging the code, implementing and testing their code, and then integrating and building all the software pieces together.
While software engineers in QA have breadth of knowledge, software developers generally have a deep knowledge of the product areas they are focused on, languages they are developing with and technologies that products are built with.
Software engineers in QA build automated systems and frameworks to automatically deploy, test, and identify critical defects of the products, software engineers as part of software development teams develop and build those software products and fix issues that pop up. Both groups of software engineers, in tight collaboration, continuously work on improving the overall quality of products they own or contribute to.
Question: What are the characteristics of a good Software Engineer?
Rasta: In our view, soft skills are just as important for a good software engineer as the technical skills I already described. The most important of those soft skills that we look for early in the interview phase are:
Motivation- They need to be interested in doing software engineering and should not be afraid to tackle complex or difficult SW issues. Being curious, pro-active and flexible is a good sign of a motivated individual.
Adaptability- The nature of the job calls for someone with the ability to adopt new technologies and tackle new software engineering challenges as they come from various project assignments or technical issues they need to solve.
Broad range of technology knowledge- When there is a complex system, task or issues that come out, a software engineer needs to have enough technical knowledge to be able to assess the issue, understand how to attack the problem, where to look, and ultimately identify where the problem lies and what could be the solution for it. They need to be able to connect various technologies to help come up with new ideas of testing, developing and exploring to quickly understand what’s going on.
Persistence with a can-do attitude- This is especially important during troubleshooting. In complex systems, issues can come from anywhere – the operating system, security libraries, application servers or the application itself – and a good software engineer needs to be able to go in and dig around to find the root cause. Being hesitant and afraid to dig in and break things is not a good sign.
Good communication skills- Besides having effective ways to identify issues, good SW engineers are not afraid to communicate with peers or project and product management. They are able to provide relevant information about the state of development and quality of the product or escalate to management when issues arise. They can effectively share status, regular updates on how things are going, what has been accomplished, and where blocker issues exist preventing them from effectively continuing or issues posing critical risks for release delivery.
Question: What is the minimum set of learned skills a software engineer should have?
Question: What kind of ongoing training do you expect engineers to have?
In summary, a great software engineer is a mix of soft skills and technical skills. It’s important to learn the technologies, approaches, and processes for any given project as quickly as possible. Technology-wise, it is good to continue to study and follow trends as technology evolves rapidly. It’s not enough, however, to be technically skilled. Developing excellent soft skills can often be even more challenging to master and just like technical skills, will require a lifetime of continuous learning.
profiq provides many opportunities for its employees to gain knowledge and training and works with its people to help them identify what skills they would like to build and then gives them the support to do so. These well-trained individuals are then allocated to customer projects where they provide excellent value to software development, software testing & QA teams.