应该存在质量保证吗?
Should QA Exist

原始链接: https://www.rubick.com/should-qa-exist/

## 工程质量保证的未来 许多工程领导质疑专门的质量保证 (QA) 团队的必要性,提倡“工程负责质量”,以避免因交接和 perceived 的激励不足造成的延误。然而,完全取消 QA 会忽略其价值——熟练的测试是一项独特的专业知识,自动化测试至关重要,并且某些情况*需要*专门的质量监督。 共识倾向于将质量责任*融入*工程团队内部,强调“左移”方法,即 QA 专家充当顾问,改进流程而不是充当把关人。一个关键原则是“测试金字塔”:优先考虑工程师创建的大量快速单元测试,以及较少且较慢的 UI 测试。 新兴的一种潜在演变是“自动化验证工程师”(AVE) 的角色。这侧重于利用人工智能来大幅改进自动化测试,提供更快的反馈并提高整体开发速度。AVE 将专注于测试人工智能生成的代码,识别“幻觉”和错误。 最终,理想的方法取决于组织。虽然从没有 QA 开始通常是最好的,但现有的团队应专注于自动化,将 QA 嵌入到工程工作流程中,并可能重新定义角色,以拥抱自动化验证,并成为战略资产,而不是瓶颈。

## QA 是否应该存在?一则黑客新闻讨论总结 最近一则黑客新闻讨论了专门的质量保证(QA)团队是否仍然必要。 尽管有人认为应该增加自动化,但共识强烈倾向于支持QA。 许多评论员强调,熟练的QA专业人员拥有独特的技能——以用户为中心的视角、一丝不苟的系统测试能力,以及发现功能之间复杂且意想不到的交互的能力。 一位用户强调,QA的价值在于在缺陷到达开发人员*之前*验证和记录缺陷,从而节省大量时间。 虽然有些人提倡优先考虑UI/API测试而非单元测试(建议采用“测试沙漏”模型而非“金字塔”模型),但大多数人认为人工测试仍然至关重要,尤其是在探索性测试和难以经济地自动化的复杂场景中。 核心论点是,质量需要专门的关注,使其成为一个专门的角色,而不是开发人员的次要任务。 讨论反映了一种信念,即虽然开发实践可以涵盖QA的大部分工作,但专门的团队对于发现剩余的关键问题至关重要。
相关文章

原文

Should engineering organizations have quality assurance (QA)? A lot of engineering leaders say they should not. I review the topic, and provide some suggestions for QA leaders, and some nuance on the problems with the way QA and engineering work together. 🌶️ ahead!

Unrelated picture of nighttime landscape

QA should not exist

In some engineering leadership circles, the answer is “of course not”. QA is largely seen as an old fashioned practice: “Engineering should own quality”.

I tend to be skeptical of this type of engineering hubris. But there are some good arguments for this:

  • QA slows things down. There is too much back and forth when you’re passing work in a gated process. QA finds an issue, dev fixes it. Then QA rechecks it and finds other issues. This continues forever, greatly slowing down engineering velocity.
  • Throw it over the wall. There is a moral hazard in having other people responsible for whether your work is correct. You’re creating bad behavior for your engineers by not having them responsible for their quality.
  • Incentives are poor for QA. If your job is to find issues, you’re going to find issues. This automatically slows down engineering, regardless of whether the issues are important or not.

QA is often compared to Operations. Having engineers write code and operators put it in production and care for it has similar problems: handoffs and incentive problems.

In a lot of modern and startup environments, engineering leaders view that as a harmful practice. And they’re often dismissive of the value of QA as a result.

QA should definitely exist

Other leaders are firmly in support of QA.

They argue:

  • Testing is a skill. Looking for issues is a real skill, and having an adversarial approach does result in finding deeper issues. Engineers sometimes exhibit an arrogance that they can do everyone else’s job, but the truth is this is a real skill, and not one that is easy for developers to pick up.
  • Automed tests are valuable. Automated tests, when embedded in your workflows, are incredibly valuable. And they can be done by people who are less expensive than engineers, making their work high leverage.
  • Some situations absolutely require QA. There are some high stakes situations where a skilled expert can be worth their weight in gold. They can save the company from considerable risk and ensure a better product experience.

I find this attitude more often in traditional companies, but I see it in a lot of places.

Perhaps the strongest argument nowadays for QA is that with AI, automated verification is a leverage maximizer.

The testing pyramid

Before I weigh in further, I’d like to make sure you’re familiar with the testing pyramid. The basic ideas is that there is a natural pyramid of value with testing. The base is unit tests, which are fast and deterministic. Then above that you have integration tests, and then above that, slower UI tests. You want to have lots of fast unit tests. And fewer integration tests, and fewer still UI tests.

Everyone agrees that the engineers should be responsible for unit tests and integration tests. And the UI tests are up for debate. In a lot of organizations, that’s where the split is: QA owns end to end UI testing, and is testing it from the end user perspective. Other organizations share ownership of the end to end tests.

My (slightly) more nuanced take?

I polled my engineering leadership peers, and 100% of a sample of 10 people said, “You mostly should not have QA on software teams, with some edge cases and exceptions.”

I mostly agree with that, but I do have some nuance I’d like to add, and some ideas on ways that QA might be made more high leverage. And I have some advice for QA leaders to make sure they’re as valuable as possible in their companies.

Don’t start with QA

If I am building out an organization from scratch, I wouldn’t start out with QA on a team. Everyone on the team would know that engineering owns quality. Engineering would do unit, integration, and UI tests as a regular part of their work. CI/CD and test automation would be built in from the beginning. Most teams should not start with QA unless they have some very specific reason for doing so.

Don’t have a handoff

I agree that structurally, you don’t want to have a handoff between QA and engineering, if you have QA. It’s much better to have QA “shift left” and be a part of the team itself, doing the work more continually with the engineering team. So my first suggestion is that if you have QA, you embed them on a team and aim to get their work into the same cadence as the engineering team.

Have engineering own quality

If you do have QA, I believe it’s best to still have engineering “own” quality. Metaphorically, I like to treat QA as the quality experts, similar to SREs who are reliability experts. SREs should not be doing all the reliability work, just like QA should not be doing all the quality work. They are experts who can help the team be better at quality, and make sure the team is doing quality work.

Require automation

You almost always want to focus on automated testing. Any manual testing should be for highly unusual situations. I’ve seen it be useful for brittle architectures, or for basically probing for quality issues by a highly experienced QA person.

So if I was building a team from the ground up, and evolving it over time, I’d lean hard on automation and the team being customer focused, and try to solve those problems before reaching for QA.

When would I reach for QA?

There are a few times where QA is high leverage. I’ve seen brittle architectures that are hard to test in an automated way. (Again, I would try to automate first, but this could be a backup plan while we fix the architecture).

I’ve also seen very skilled QA people be deployed as a strategic roaming asset within the company, to focus on the most sensitive projects. I remember working with a couple of people in the past who were just amazing at making sure projects were successful and were shipping with quality. Having roaming QA can be a good pattern, because it can only operate within a larger engineering culture of engineering being responsible for the quality of their own work.

I also think there is a lot of untapped potential with QA. The space is changing rapidly with new AI based tools, and I’ll talk below about some potential ways you might tap QA for high leverage benefits.

What about when there is already a QA team?

I often join teams that have an existing QA team. What do I do when I join a situation like that?

Sometimes it’s not the top priority

First of all, it’s often not my top priority. If there are other higher priorities, I’ll focus on them first. But I can usually improve things a bit with just a few nudges, that don’t require a lot of extensive work. I’ll often meet with the Head of QA and talk these over as goals:

Shift QA left

  • Get rid of handoff between dev and QA.
  • Have QA members embedded on the team and attend meetings.
  • Try to get the workflows of the QA people onto pull requests (PRs) rather than later in the process.
  • Emphasize that engineering owns quality, but QA are quality experts. Engineers can do QA tasks as well. Often QA can help with test plans that engineers can be involved in doing. Engineers can also write test plans and have QA review. Less process gates and more working together.
  • Share concept of testing pyramid, and make sure engineers are writing unit tests, and that PR review requires unit tests. Ironically, I find that most companies that have had QA for a while also don’t have a good unit test suite. I’m not sure why that is, but I think it’s because engineering thinks QA is there as a safety net.
  • One challenge is with QA teams in different time zones, or where they are offsite and the team is on-site.

Focus on automated testing

  • Emphasize that testing needs to be automated. Ask the leader to recommend training or replacing team members to move us to mostly automated tests.
  • Make sure the test suite is fast. Make sure we have statistics on how quickly it runs, report on it frequently. Get the QA team to make it faster. Often this means separating parts of the test suite by criticality so that a portion of it can run fast enough, and other parts can run later.
  • Make sure the tests are a part of the developer workflow, not only seen by QA.

Metrics

  • Unit test coverage
  • Unit and UI test run times.

Evaluate the situation

Once the burning fires are put out, improving the way QA operates rises towards the top of the list. But it depends on the company. I’ve seen companies where the problem was so egregious the best solution was to let go of QA. I’ve seen situations where it was working fine, or fine enough that I didn’t care to intervene because I had other priorities.

So my actions at this point depend a lot on the situation. I might invest less in QA. I might pare down QA gradually. I might let QA go completely. Or I might explore ways to make QA more high leverage. I think the last point is the most interesting, because at least in my circles, I haven’t heard people talk about it much. So let’s talk about that.

Introducing the Automated Verification Engineer (AVE)

If I were a QA leader, here’s how I would see the world:

  1. I’m in a role that is sometimes treated as old-fashioned.
  2. AI is rapidly increasing the leverage of automated verification. Why? If you can improve a coding agent’s ability to detect failures automatically by 50%¹, you’re speeding up the company something like 2x, because a much larger percentage of its changes will be able to be accepted. Automated verification means your work is speeding up the company AND improving quality, instead of slowing it down.
  3. Automated verification is something my team can help with.
  4. I’m going to need to market this differently than QA. I would probably create a new term like “Automated Verification Engineer” (AVE) and a new set of responsibilities. That way I can redefine expectations of the work my team does.

Then, I’d embark on a somewhat experimental approach to redefine how we work together. Here’s an example of how it might look, an Automated Verification Engineer.

¹ (This number is just a guestimate, not a real mathematical calculation. I think the value actually would increase nonlinearly as you got more automation, because of the increased confidence you haven’t broken something.)

What is an Automated Verification Engineer?

  • I’d view the role as a sort of cross between a Developer Experience Engineer and Quality Assurance.
  • The AVE would be focused on making sure the developer pipeline gets great feedback early on to customer problems introduced by code.
  • The AVE’s tests are mostly for AI agents. The aim is to help the agents realize when their hallucinations and bad changes aren’t valid.
  • All tests are automated, deterministic, non-flaky, and as fast as possible.

Metrics for an AVE:

  1. The goal is fast feedback for the engineering team. So I’d use “time to feedback” as one of the most important metrics for success.
  2. You could instrument your test suite, and report on the number of tests that fail in an automated testing situation. Each one of those tests was highly valuable (with some caveats).

What is the role of an AVE Leader?

  1. Part of your job is to help engineers understand they’re responsible for quality. But also help the organization understand how automated verification engineers work, and how it’s different than QA.

  2. I think you need firsthand understanding of how coding tools work. So I’d encourage you to play with them every week.

  3. You also need to level up your skills in the testing and deployment lifecycle. I’d partner with the engineering teams responsible for it, study how it works, and volunteer to pair and do work there. You should be able to change the set of things being testing in each PR, or move the tests to run in paralllel.

  4. In the age of AI agent development, I believe you should probably be doing a lot more experimentation. Evaluating different tools, looking for things that change the way you do your work.

  5. One idea, that I’m not sure is a good idea or terrible idea, is to get more involved in the signals coming back on quality. For example, an AVE Leader could be involved in the bug triage, and work with support on issues on things that have been released. This would give good signals on what is missing from the quality process. Move from being transactional (reviewing work), to try and make the quality better.

  6. Another idea is to work with design, to get a sense of what types of design issues can be automatically tested for. Usability and quality are linked.

  7. Every month, try to make your tests faster, employing patterns like 1) testing only what has changed, 2) testing locally as you work, 3) breaking tests in parallel, 4) automatically disabling or deleting or ticketing or breaking the build for flaky tests. You should always have projects in flight to be testing out various schemes of speeding up tests.

  8. The company should have a “testing pyramid” approach, with unit tests at the bottom as a foundation, then integration and UI tests above that. There are other tests to consider as well, but generally you want more unit tests than UI tests.

Some of these responsibilities might already be covered well in your organization, and this is just a sketch of how it could work, not a job description. So modify it for your company.

Automated Verification Engineer is experimental

I’ll add that this is all experimental. It might even be a bad idea. But if I were a quality leader, I’d be doing some sort of experiments along these lines.

Disrespecting QA?

I’m more nervous about this post than most, because I think it risks making people feel like their role isn’t important. I’d like to emphasize that it isn’t about the people themselves, but the role that is the problem. In the same way that Operations was a problematic role in many organizations, I believe QA is not often set up well. I think a combination of respect for the people involved, and some experimentation in the role might yield some big results in the age of agent based AI development. But the bottom line is that working more continuously, more within the same workstreams, typically yields much better results than passing things on in a transactional, assembly line process.

It would be a lot easier to say “no, just don’t do QA”, and honestly for a lot of places that makes sense. Or to say, “yes, let’s just keep QA the way it is”. But a lot of the challenge is to experiment with the workflows, and see if you can make QA a high leverage point for the company. If you do manage to make automated verification exceptional, you’re taking your role from a cost center to a point of differentiation for the company.

If you have any feedback on this post, let me know. I imagine my thinking will evolve, and I’d like to hear your perspective.

Also, if you do end up experimenting with these ideas, let me know. I’d like to see what worked and what didn’t!

Thank you

Bruce Vaughn reviewed the post and provided feedback.

Image by John from Pixabay

联系我们 contact @ memedata.com