Ask HN: Do you have a dedicated QA team?
At my current company they recently got rid of our QA resources. They were contractors and reassigned to do assist in other projects. However, the company now believes developers don't need QA since they can do their own testing. Devs should write code, do all their unit, int, system testings, run their code reviews, save testing artifacts, and work with key stakeholders across the company to close requirements gaps etc. We're basically the entire sdlc minus devops.
This is great for small features, but it gives me pause for mid or large features. Are we the only ones doing this?
83 comments
[ 3.0 ms ] story [ 80.3 ms ] threadBy putting all those responsibilities on the devs, they have essentially turned a parallel development system into a serial one, which is inefficient and, frankly, dumb.
One of the biggest challenges with it for me is that a dev who is a dev is a very different personality who a dev who manages the entire SDLC.
The former placed in the latter environment is going to be lost and annoyed at all the moving parts. They signed up to write code and to trust that the process would deliver good requirements.
The latter in the former environment is going to be frustrated by all the process. They signed up to really own the product and realize that they really just own a block of a process.
I suspect either can work if you have people suited for each. Switching people between them sounds like a recipe for attrition though.
In my team, they are fully integrated into the decision making process and roadmaps, they are CCd to almost all the team's internal emails, and a format version isn't released without their authorization.
Now, there are some problems with being a QA, personal stuff like having a low self-esteem since "you're not smart enough to be a dev", and enmity between devs, PMs and QA due to feelings that QA hold up the teams. As a former QA myself I'm fully aware of them. In our particular team these issues are negligible (well, at least I hope they are). I personally fully respect the QA team and stop whatever I'm doing to help them with whatever they need or ask. I see them as my first line of defense against bugs, especially the kind of UX bugs that are difficult to test for.
Engineers here used to be the ones testing out the code, verifying their changes on pre-production environments, and keep an eye on the deployed code in production to make sure it's working well.
Now I get a sense that engineers do the work up to the point of where QA steps in, and throwing it over to them and moving on. The QA team is new, and so not very well versed in the product, and rely on the engineers a great deal on how to test things, which I get the feeling also ends with the QA team not going out of their way to test things the engineers didn't explicitly say to test. I think it may be playing out in a way where our quality assurance could get worse, and our engineers will end up being less well-versed in the product, and feel less responsibility for delivering quality, while also requiring another team to manage, and spreading work over different people. As a disclaimer I think we may just have a not great setup more-so than saying all QA is bad.
This is the exact reason why QA team should have sufficient autonomy to design test cases on their own. If QA team is dev-driven, they will hardly bring any value, but they surely bring a lot of overhead.
1. QA teams come up with new ways to break software in the way humans use it. Automated tests etc confirm the software works as designed.
2. Because the org making this choice isn't stupid, they measure bug frequency and impact and find that "only X users have Y impact where Y is ranked as low" per each bug. No one bug is ever worth fixing. But, user X aren't seeing that one bug, they get hit by tens or hundreds of these on a regular basis. As a result, their perceived experience with a given product is poor and it feels buggy.
This idea that you can measure bugs in isolation and deliver perceived product quality is faulty. A user experiences a product as a whole, and if you can't evaluate that as well, you will be seen as delivering a poor product.
I've worked with various types of QA teams over the years (all in SaaS). Based on my experience, from MOST effective to LEAST effective:
1. QA team works on test harnesses, automation, and works alongside developers to improve how we do testing. This was by far the most effective.
2. No QA team. Developers own every aspect of quality. This worked, but was not as effective as #1.
3. All releases are thrown over the wall to QA who stamp them and do the deploys. This shifted the responsibility for quality to people who weren't as familiar with the code and weren't equipped to fix it. Outages abound. It also slowed releases to a crawl.
4. QAs are non-technical. They mostly write and manage test cases. It's up to the developers to implement tests, but some tests are done manually by QA. I never saw any benefits from tracking test cases outside of the code that validates them. Properly prioritized tickets were fine for defect follow-up. Manual testing might be ok if you're a new startup, but it quickly becomes untenable as you grow.
- QA is from a problem domain background
- Dev is from a CS/math background
In that case, you can have:
- QA/Dev riff off each other, and collaborate
- The few individuals in the org that have both become the co-ordinators
I can't count the number of times I've tested something 5 times, convinced myself that the code handled tons of error cases, shipped it, and in 10 minutes a customer types "five" into a field expecting an integer which causes the next step to use "0" for processing.
This doesn't work for all companies; if you're building a system for children to learn how to type, you can't really hire a bunch of children to learn how to type... but I think for most companies, this can and does work.
I will say however that I think you do generally still need a team (or individual at smaller shops) dedicated to tooling for automated testing to make the process of writing tests efficient for all those who are writing tests.
If they weren’t there - engineers would spend at least 1/4th of their time performing QA duties with likely worse results and at significantly higher cost to the company, since their compensation is higher.
So it makes sense to do that only as a cost saving measure in hard times - you are picking losing which employees will be less detrimental in the long term, even if you expect that those that remain will be less productive.
The good thing about not having a QA team is that QA becomes a much more active part of the process where something must be tested by the developers before it's completed. You also don't have a single bottleneck if the QA team is overwhelmed. The drawbacks are that developers aren't always very thorough and that their testing time takes away from their development time.
"smartphone doesn't boot reliably when the ambient temperature is below 40 degrees fahrenheit" (temperature lowers the battery voltage + high power usage during startup = voltage drops below FCC-mandated minimums for the antennas -> automated SoC shutdown)
"bluetooth controllers won't pair reliably in building 17" (too much interference to pair if there are more than ~100 other bluetooth devices nearby)
The combinatorial explosion of external factors in this kind of bug is insane - you just won't have a good time without dedicated folks whose focus is chasing these down (and I'll take a good QA over a good engineer for this sort of investigation, any day).
There should be a adversarial, yet respectful, relationship between dev and QA where dev tries to get their software released and QA is finding reasons why it shouldn't be released.
If there's only developers who test their own code then they're not incentivized for finding the ways their code breaks. They'll downplay the faults or even be blind to them because they're too close to the implementation and aren't "thinking like a user".
It seems odd to me when those in charge ignore the problems of disbanding QA. But I assume it's because the management may not be incentivized to promote quality software. Instead the incentives are to crank out features.
That said, maybe the market for the software doesn't punish the software makers for having buggy software. In such a case, ignoring QA work is a rational decision.
>That said, maybe the market for the software doesn't punish the software makers for having buggy software. In such a case, ignoring QA work is a rational decision.
I think there are a lot of things that promote cost cutting in software quality:
It totally depends. In many cases it will come back to the original developer if their code breaks in production. That is a lot of incentive to test as thoroughly as possible before releasing.
It is easy to see the increased traction due to building new features. It is difficult to understand the slow, grinding attrition that happens due to bad quality.
The mutual respect aspect is key. If the dynamic isn't right, people end up feeling attacked and it can create a contentious environment. Same goes for code review work.
A developer's job is to make QA's jobs boring. A QA's job is to catch developers making themselves look stupid. As a developer, I'm happy that QA is better at the job than the developers.
Playing this game in a way that all can laugh over lunch is good for the culture as well as the business.
Then fire all your QA people, because they just keep getting in the way, and the developers can do all of their own QA anyway.
Then don't be surprised when they fire all the developers because they've got this new "no code" thing. But then who is left to implement the "no code"?
Developers write all sorts of tests(TDD + pair programming helps), and when we need an extra pair of eyes, we ask the product team to have a look at it.
But that's about it. QA's are involved more in the creative side of things post releases or have an independent path to see where the things could go wrong, more like doing monkey testing.
On the other hand, with devs writing tests is there is learning curve and most devs have not written tests or think of it as a chore. They also don't have end-user perspectives and have biases towards things working.
Ideally in my opinion testing should be shared responsibility, where devs test feature they implemented and the QA team add checks from an end-user perspective.
P.S.- I'm co-founder of startup https://crusher.dev making QA easy by using a low-code approach.
I recommend having an English first person proof read through your site.
I can deploy a prod EKS/CI/CD setup with Terraform scripts, and be deploying code to the public in a morning now.
Like other service jobs, IT is going to contract sooner than later. NoCode infrastructure is where k8s was in 2014.
IT workers thinking in IT patterns as usual is a huge blocker to progress. Elder workers domain knowledge is stored in DBs and source control everywhere. It’s trivial to parse and transform into another syntax.
Congrats; you trained your Copilot replacements without even knowing it.
Before I joined my team, it didn't have a dedicated QA member. The quality of the software was fine, but there were other compromises. The team didn't have a good test strategy - every developer made adhoc decisions on how their code was tested. Our E2E tests ran slowly and had tonnes of duplicates, since nobody had gone through the entire list and cleaned it up. A dedicated QA member has the time and the responsibility to solve problems with quality that most devs are likely to treat as secondary to developing features. And the improvements are substantial - our E2E tests now run 18x (!) faster.
For the most part, I see my role as being an enabler - I help devs build quality into their work and hold them accountable to it. I don't see it as an adverserial division of responsibility, but more as a collaborative effort, with the dev and QA coming from a different focal point.
The problem with strict division of labour and adverserial QA is that it leads to
1) Organizational / team silos
2) Local optimization (software development and QA is intricately interwoven, so it doesn't lend itself well to this strict division)
3) Information overhead and loss
A good QA engineer, IMO, requires better coordination and communication skills than a developer because they liaise with multiple developers and inspire them to make quality a priority in their work. Further, QA is involved from the definition of a feature (in sprint refinements) right up to when code is deployed and runs well in production. Therefore, at certain points, the boundaries between QA and the Dev team or QA and the PO blur and disappear entirely.
I found this to be a great read that summarizes my thoughts on the topic: https://www.thoughtworks.com/en-de/insights/blog/qa-dead
If it's a collective "we learned from this", that's good.
If it's seriously and organizationally adversarial, that's bad.
It's now possible to test pretty much anything via automation, although front-end testing is still harder than most and there are some intangible UX issues that can only be experienced by human users.
But for testing APIs? It is normally possible to cover 100% of what is needed via a combination of unit tests and integration tests. This is especially true now that tooling exists that can bring up ephemeral test environments with dependencies such as databases etc.