SRE
Best Practice

What do quality engineers do?

Quality engineering as a role and function is gaining traction in engineering organizations. But is QE just rebranded QA? Or is there more to it? Learn how it’s defined, why it’s important, and why you might consider it for your organization.

By
Cortex
-
March 20, 2024

Quality engineering (QE), or software quality engineering (SQE), is a discipline within software development focused on ensuring the quality, reliability, and performance of software products. 

With an increase in development environment complexity in recent years, the focus has shifted back from detecting defects in later stages, as QA has typically done, to proactively ensuring quality throughout the entire development lifecycle. The quality engineer is the result of separating these responsibilities into a dedicated role, to protect the time of individual developers.

How did quality engineering come to be?

Quality engineering isn’t actually a new title, but it’s certainly having a renaissance. While it’s difficult to pinpoint the origins since it appeared to “begin” in parallel in many places, it did appear to coincide with the first wave of focus on developer productivity back in the 90s. Today’s version mirrors that same original spirit, bringing increased attention back to development lifecycles that are both reliable, and efficient, with special attention to giving individual developers time back in their day.

Quality engineering encompasses a range of activities and processes aimed at automating testing, identifying defects, improving software quality, and meeting customer expectations. The primary goal of quality engineering is to deliver software products that meet or exceed specified requirements, perform reliably in various environments, and provide a positive user experience. By incorporating quality engineering principles and practices early in the development lifecycle, organizations can deliver higher-quality software products more efficiently and effectively.

What do quality engineers do?

Quality engineers generally have a software engineering background, as their role often requires them to write automated tests in code. The work of a quality engineer can vary a lot depending on the engineering practice and maturity of the business, the tools used, and how much of the delivery pipeline happens in the cloud versus on premises. 

In a cloud-based delivery pipeline, quality engineers may need to adapt their testing strategies to accommodate the scalability and dynamic nature of cloud environments with testing tools and services. Conversely, in an on-prem environment, quality engineers may focus more on managing infrastructure, configuring test environments, and ensuring compatibility with specific hardware and software configurations. 

In addition to being responsible for testing, sometimes, in lieu of a build or release engineer, quality engineers are responsible for making sure that dependencies are up to date, and they might even be responsible for the governance policy. We’ll explore more of their responsibilities later.

Is quality engineering different from quality assurance?

While quality engineering and quality assurance (QA) share the common goal of ensuring the quality of software products, they differ in their approach, focus, and scope. They can both operate in parallel to software development, although QA sometimes is concentrated at the end of the development cycle. Quality engineering takes a proactive approach to quality throughout the entire development lifecycle, focusing on defect prevention and integration of quality measures.

The primary focus of quality assurance is on detecting and correcting defects in products or services before they are delivered to customers. QA activities typically occur at the end of the production process or during specific stages to ensure that products meet quality standards. In some cases, QA can be considered part of the quality engineering process. 

The concept of quality engineering in manufacturing and other fields has been around for a while, but the rise of the term in software engineering is more recent. In the past, waterfall development necessitated backloading the testing, sometimes with the negative connotation of “throwing it over the fence” to the quality assurance (QA) team. This type of development can strain collaboration between development and QA teams, creating a disconnect and hindering effective testing within tight deadlines. Quality engineering addresses these issues by incorporating quality from the beginning and breaking down silos between the development and testing processes. 

Aren’t SRE’s in charge of full lifecycle reliability? 

Site reliability engineering (SRE) primarily focuses on ensuring the reliability and availability of software systems in production environments. Although there is some overlap between the responsibilities of SREs and quality engineers, with both roles emphasizing reliability and performance, quality engineers typically have a broader scope encompassing the entire development lifecycle, whereas SREs focus more on operations and infrastructure. For example, SREs may be responsible for setting up the CI/CD pipeline while quality engineers will develop tests and steps to integrate into the pipeline.

Benefits of quality engineering

Even after the technology industry moved to use primarily Agile methodologies for software development, the culture of delaying testing or QA until later in the development process still persists for some teams and organizations. This can present several drawbacks; for example, delaying testing until later stages increases the risk of defects accumulating unnoticed. This can potentially lead to critical issues discovered late in the development lifecycle, necessitating costly rework and delays. It also limits the feedback loop between developers and testers, resulting in longer feedback cycles and hindering the ability to respond quickly to changing requirements. 

Quality engineering addresses these issues by including quality checks from the beginning and involving developers in the process along the way. Moreover, with the rising adoption of DevOps culture, where development and operations teams collaborate closely to deliver software rapidly and reliably, the need for quality engineering has become even more pronounced. Hiring a quality engineer, or integrating more quality engineering practices into your organization, can benefit your engineering teams and organization in many ways, including the following:

Reduced risk of defects

By integrating quality engineering practices throughout the development lifecycle, defects and issues can be identified and addressed proactively. Quality engineers work closely with development teams to establish quality standards, conduct code reviews, and implement automated testing, reducing the likelihood of defects accumulating unnoticed. Having quality engineers focused on reducing bugs and quality issues in your development lowers metrics like defect rate and increases metrics like uptime and availability as a result.

Shortened feedback loop

Quality engineering promotes continuous testing and validation of software functionality throughout the development process. Quality engineers collaborate closely with developers to implement automated testing frameworks, conduct unit testing, and provide real-time feedback on code quality. This shortens the feedback loop between development and testing and ensures that software is validated incrementally, enabling rapid identification and resolution of defects, as well as iteration based on feedback.

Increased collaboration

Quality engineering fosters collaboration and communication between development, DevOps, and QA teams. Quality engineers work alongside developers throughout the development lifecycle, participating in requirements gathering, design discussions, and code reviews. This close collaboration ensures alignment on quality standards and priorities, and establishes quality improvements as part of everyone’s responsibility.

Increased efficiency and productivity

Through automation and process improvements, quality engineers help streamline development workflows, resulting in faster time-to-market and improved engineering productivity. Their work helps foster a culture of continuous improvement by collecting and analyzing quality metrics, identifying areas for enhancement, and implementing corrective actions to drive ongoing quality improvements. As a business result, this contributes to delivering a high quality and intuitive user experience, ultimately increasing customer satisfaction and loyalty.  

What do quality engineers do?

Quality engineers may have a range of responsibilities, which depends a lot on the organization. In organizations without dedicated quality engineers, these responsibilities may fall to developers, SREs, product managers, or engineering leaders, if they get covered at all. Below is some of the work quality engineers can do, although it’s certainly not exhaustive.

Test automation 

Quality engineering emphasizes the automation of testing processes to improve efficiency, consistency, and coverage. Test automation involves using tools and frameworks to automate the execution of test cases, reduce manual effort, and accelerate the testing cycle. Automated tests, which can include unit tests, integration tests, and regression tests help to identify defects early in the development process and streamline the release process. Test automation frameworks such as Selenium, Appium, and Jest are commonly used to write and execute these automated tests.

Much of the test automation involves setting up and maintaining tests and stages in an organization’s continuous integration and continuous deployment (CI/CD) pipeline. These tests serve to validate the software's functionality and identify any regressions that may occur during the development process. By integrating automated tests into the CI pipeline, developers receive rapid feedback on the quality of the software, enabling them to catch bugs early in the development process and maintain the overall reliability and integrity of the software product. This setup ensures that any code changes are thoroughly tested before being deployed, contributing to a more efficient and reliable software delivery process. 

Scalability testing 

Quality engineers may also be responsible for scalability testing, a type of performance testing that evaluates a system's ability to handle growing amounts of workload or users while maintaining acceptable performance levels. The goal of scalability testing is to identify the system's breaking point, determine its capacity limits, and understand how it behaves under different levels of load. During scalability testing, various performance metrics are measured and analyzed to assess the system's scalability, including response time, throughput, resource utilization, and system latency. The testing process typically involves gradually increasing the workload or user load on the system until performance metrics reach predefined thresholds or the system exhibits signs of degradation, such as increased response times or decreased throughput. Establishing a highly available and durable system could fall under the responsibilities of SREs, or it could be a joint effort between SREs and quality engineers. 

Defining, establishing, and ensuring quality standards 

Quality engineers play a crucial role in collaborating with stakeholders to define and document quality standards and best practices that align with the organization's goals and industry benchmarks. They work closely with cross-functional teams to develop meaningful quality metrics and engineering key performance indicators (KPIs) that provide a quantitative measure of software quality. These metrics and KPIs help track progress, identify areas for improvement, and ensure that the software meets the desired quality standards. Additionally, quality engineers establish a robust quality assurance framework and processes that adhere to industry standards and best practices.

Quality metrics collection and reporting

Quality engineers are often responsible for communicating the state of quality in an organization and making it visible. They collect and analyze quality metrics to assess the effectiveness of quality assurance processes, and they may generate regular quality reports and dashboards to provide visibility into the software's quality status. These reports typically include key quality metrics, trends over time, and comparisons against established benchmarks or targets. Quality reports and dashboards help stakeholders, including project managers, development teams, and senior leadership, understand the current state of software quality and track progress toward quality goals.

Keeping up with governance and legal policies

The laws that govern technology concerns, like data privacy and AI, continue to change and update as these technologies evolve, particularly in the case of AI. Interpreting the recent AI regulation, like the EU AI Act in Europe and President Joe Biden’s executive order on AI in the United States, may be part of a quality engineer’s responsibilities. 

Some newer methods of testing and validation, as well as updates on existing ones, use AI to create faster and more thorough testing methods. For example, teams are using AI models to improve scanning and threat detection with software fuzzing, a technique used to discover vulnerabilities and defects in software applications by subjecting them to invalid, unexpected, or random inputs. The goal of fuzzing is to identify potential security vulnerabilities, memory leaks, crashes, or other unexpected behavior in software programs. Fuzzing works by generating a large volume of input data, often using automated tools called "fuzzers," and feeding this data into the target software application. With new AI legislation, quality engineers will have to confirm that training data and ways AI models are used in software fuzzing and other techniques conform to the guidelines.

Challenges in quality engineering

Quality engineers may encounter a number of challenges that make their job difficult and that prove why their role is so important. Some of these challenges can include:

Scattered standards and processes

One of the significant challenges in quality engineering is the lack of standardized processes and practices across development teams and organizations. Different teams may follow different standards and methodologies, making it difficult to ensure consistency and alignment in quality engineering efforts. 

Inconsistent data reporting

Similarly, another challenge is the inconsistency in how data is reported and tracked throughout the development process. Different teams or individuals may use disparate tools, metrics, or methodologies for reporting quality-related data, making it difficult to aggregate and analyze information effectively. This lack of standardized reporting practices hampers the ability to gain insights into overall quality performance and identify areas for improvement.

Complexity of software systems

Modern software systems are becoming increasingly complex, with intricate architectures, integrations, and dependencies. Managing and testing such complex systems poses challenges in identifying potential defects, understanding system behavior, and ensuring comprehensive test coverage.

Changing requirements and environments

Software projects often face changing requirements, environments, and user expectations. Quality engineers need to adapt quickly to these changes, reevaluate testing strategies, and ensure that quality standards are maintained even in dynamic and evolving scenarios.

Measuring and demonstrating value

It can be challenging to demonstrate the value of quality engineering initiatives in terms of improved software quality, reduced defects, enhanced user experience, and business outcomes. Quality engineers need to establish clear metrics, benchmarks, and reporting mechanisms to measure and communicate the impact of their efforts effectively.

Adopt or improve quality engineering with Cortex

To address some of the challenges in quality engineering, consider using an internal developer portal (IDP) like Cortex. Cortex, and other IDPs that offer always-on or live Scorecarding, now make it possible to up-level the production readiness checklist and make it much more dynamic, responsive, and automated. Scorecards and Eng Intelligence can help your team gain insights into quality metrics like code coverage and service uptime to help find initial areas for quality improvement. Schedule a demo today to learn more about how Cortex can unlock quality engineering in your organization.

SRE
Best Practice
By
Cortex
What's driving urgency for IDPs?