Want Better Quality? Fire Your QA Team
blogs.forrester.com
blogs.forrester.com
A good QA analyst / team does much more than point at a problem and say 'there it is'. A good QA analyst can determine why you made an error, and can anticipate other errors you might have made in the same way. A good QA analyst will learn your formulae, learn your equations, understand your workflow and try to find root cause, even if they're not developers.
Having a good QA person with a trained eye for knowing what I'm likely to have overlooked is also FAR more cost effective than your high-paid developers doing the same task. If they know that 'heads will roll' when they get errors, I'm also betting that makes your releases even slower.
Off-topic completely, but I generally prefer non-developer QA analysts, as they generally prove themselves to 'think too much like me' to be effective.
Testing as a whole is not an easy task as it involves testing some really hard things: memory leaks, performance, UX, correctness of parallel and distributed algorithms/programs/systems.
However, Wealthfront engineers probably put this position more into perspective [1]:
We do not have QA team and do not want to have one, the reasoning is that if a human is involved in testing then there is a higher chance of missing things and you simply can't test all the site dozens of times a day.
Granted, Wealthfront uses continuous deployment[2], while still being regulated by the SEC. I really enjoy their lean startup approach to minimize inventory (ie: code not in production), while still keeping an immune system. And investors seem to agree it is really paying off [3].
[1] http://eng.wealthfront.com/2010/04/findbugs-husdon-and-pizza...
[2] http://www.eishay.com/2010/07/continuous-deployment-at-kachi...
[3] http://techcrunch.com/2010/10/19/kaching-gets-100m-under-man...
Shops who set the bar this high and mean it are exceptionally rare (I look for them when I'm on the market). Where I am now, an hour of downtime costs us my salary for weeks, and still we cut corners that don't always sit right with me.
But having generalist engineers create functional and integration test plans? Not only do we tend to cost more, but we have less experience at it than QA specialists. And a dev shouldn't test their own work, because they won't notice any unwarranted assumptions they made in design and coding.
a large fraction of errors that turn up in QA are conceptual errors made by the development team; like the blind spot in the eye, you don't know what you don't know, and there are certain problems that you'll never find yourself.
Phil Crosby would say that management is responsible for quality; management writes the specifications and has the responsibility to hire and fire developers and QA people. The buck stops with management.
Efficient quality requires practices to be work correctly across the organization, but it starts in the specification process. If you don't know where you're going, you're sure as hell never going to get there.
Quoting from wiki (http://en.wikipedia.org/wiki/Christopher_Columbus):
"Amerigo Vespucci's travel journals, published 1502-4, convinced Martin Waldseemüller that the discovered place was not India, as Columbus always believed, but a new continent"
Taken out of context. Twitter wasn't a result of good or bad QA. In fact, it's got nothing to do with that.
Developers should absolutely write and use unit tests. Where QA really shines in the larger scale: validating actual business requirements.
I don't buy the popular opinion that developers can't test their own code like there is some sort of magic that goes on in the mind of QA engineers that causes them to be able to find bugs that developers couldn't find themselves. In fact, I think the opposite is true - developers are better suited to test the features they are writing because they know the code and know the risk areas, where things need to be regression tested, where more attention should be placed, etc.
I do think that it can be helpful for another set of eyes to look at a developed feature and this is where pair programming can be useful. It does not need to be QA doing this.
One caveat is that this approach does not work for all teams. This works for small, agile teams where roles and responsibilities are less defined. If you fire your QA team but your developers can't test their own code because they are set in their ways of writing crap because they expect QA to find the bugs, you may end up firing your dev team too....
Our prior condition was very similar to telling a newspaper writer "DONT WRITE TYPOS". You can scan a page you've written several times carefully and still miss your mistakes, even if you are a conscientious writer. And the newspaper industry isn't the only industry that prevents mistakes through multi-party review processes, either.
I'd much rather hire someone who knows testing and QA well and let my devs focus on writing bug-free product code.
Skillset maybe isn't the right word... mindset maybe better word. Both should be good programmers -- in fact you'll often have more test code than product code. But you likely won't be able to switch your dev team to QA and vice-versa and get the same results.
The usual reaction to the bugs she finds is "what made you think of trying that?"
I don't know that I would go so far as to recommend firing myself to increase quality. I would have to visit with many teams and really gain experience in the way they work. I do think that we could take a step forward by having a standard across the company to have fully automated test suites running continuous builds and tests. That, however, runs facefirst into the problem of Legacy Stuff and ROI. Automation just plain takes time when you are interfacing against external programs. It's not always worth it in the short/medium term.
There's no silver bullet to the software quality problem. But me, I think that continuous integration provides a copper bullet.
Feynman talks about this arrangement in his essay on the shuttle program (http://www.fotuva.org/feynman/challenger-appendix.html). In a nutshell, the core software team is responsible for checking the code. Then there is a totally removed group that is adversarial, i.e., it is measured on its ability to trip up the software team. This is the same a "setting consequences" as this author describes.
Now, the shuttle program is truly life critical. I think a good software team can produce quality results internally.
I don't want to distinguish front-end and back-end programmers. I would like to distinguish front and back-end development.
I do everything currently but I still need put on a conceptual "testing hat", "GUI hat" and "back-end hat". That requires mental effort and costs time. A real Q&A would save that even if I was exactly as skilled as the Q&A person.
It's not really about firing the QA team. Instead, it's about having a QA function that does not entirely relieve the original author of his duty to ensure quality.
Gee, sounds like a wonderful place to work. When can I sign up?
Some of the bugs they report would fall under the automatically testable category, but many don't.
I suspect that dogfooding is more effective at companies where the product itself is useful to developers or is a consumer app. e.g. Basecamp, FogBugz, Facebook, Netflix, Gmail, etc.
I hope all of you reading the blog post realise that this brainfart will cost your organisation $5,500 per copy downloaded.
I believe it's a lot more difficult to see your own errors than somebody else's. I believe QA is a fulltime job. I believe the relationship between developers and QA people is mutually beneficial to both people.
In an organization in which tests are developed for any code committed, and developers are careful not to break a build, soft issues are still caught by the QA team. Things that work but not as expected, minor cross-platform glitches, and permutations you'd never think to check, are all commonplace catches for a professional QA tech working with a well functioning development team.
The author of the article really doesn't sound like he's worked with a decent dev or QA team.
I assume that others have had better experiences.
While it's easy to say that QA isn't important many of the QA teams I've worked with weren't respected or valued, and often saw QA as a stepping stone. If you want to increase the quality of the code, don't fire the QA team, motivate them.