Free trial

What Makes For Great Software Engineers? Technical Skills Are Just The Start

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?

Rasta: Good software engineers starting at profiq should have learned and have experience with at least one programming or scripting language.  They should also know at least one operating system on an advanced system admin level. They are ideally fluent in working with command line interface under Unix-like systems, but the required skillset really depends on individual project needs and project role. Software engineers at profiq will usually gain experience in Python, shell scripting, Java, Javascript and many more technologies on their projects.  

Question: What kind of ongoing training do you expect engineers to have?

Rasta: A successful software engineer should continue mastering core skills. For example, if they lack a deep understanding and experience with Linux, they should continue to study and experiment with it. If they lack deep knowledge of let say JavaScript and project role requires it, they should study, continuously improve and become experts in it. People who are curious, continuously learn, and can apply what they learn to their projects and/or cross-team activities, become the most successful in their careers and are recognized by upper management and by the customer.  It really depends on their self-motivation, discipline, and drive to continuously be on top of things.

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.


profiq system engineering system testing

Leave a Reply

Related articles


Let’s make LLMs generate JSON!

In this article, we are going to talk about three tools that can, at least in theory, force any local LLM to produce structured output: LM Format Enforcer, Outlines, and Guidance. After a short description of each tool, we will evaluate their performance on a few test cases ranging from book recommendations to extracting information from HTML. And the best for the end, we will show you how forcing LLMs to produce a structured output can be used to solve a very common problem in many businesses: extracting structured records from free-form text.

Notiondipity: What I learned about browser extension development

Me and many of my colleagues at profiq use Notion for note-taking and work organization. Our workspaces contain a lot of knowledge about our work, plans, or the articles or books we read. At some point, a thought came to my mind: couldn’t we use all this knowledge to come up with project ideas suited to our skills and interests?

From ChatGPT to Smart Agents: The Next Frontier in App Integration

It has been over a year since OpenAI introduced ChatGPT and brought the power of AI and large language models (LLMs) to the average consumer. But we could argue that introducing APIs for seamlessly integrating large language models into apps developed by companies and independent hackers all over the world can be the true game changer in the long term. Developers are having heated discussions about how we can utilize this technology to develop truly useful apps that provide real value instead of just copying what OpenAI does. We want to contribute to this discussion by showing you how we think about developing autonomous agents at profiq. But first a bit of background.