November 23rd, 2009
Quality Assurance – Fox Watching the Hen House
No Comments, Engineering Practices, by Chris.
In many young software companies, there isn’t an individual role for for software quality assurance. The assumption is that between the development resources and the product stakeholder the software can be sufficiently tested to get you past the initial profitability hurdle, and through your first BETA and initial release. In the very early days, this suffices. It will get you to a point where the software is sufficiently stable that it can be used for the limited functionality contained in the first early releases. That said, it is imperative that quality assurance becomes a stand alone role within the organization relatively shortly after the early stage releases of the software product.
Quality assurance is yet another area that is easy for executives outside of the development organization to write off as merely a “cost center” that doesn’t directly contribute to incoming revenue streams. They couldn’t be more wrong. It is rare for an organization to take the time to do an accurate assessment of exactly how much money bugs cost them. I won’t go into the long litany of the costs associated with software defects, they can range from losing money on orders placed to losing customers due to software that doesn’t perform as specified. Yet this doesn’t answer the question of why developers are poorly suited to acting in this role.
Unless you have a particularly small software organization, developers will have relatively specialized expertise in their niche of the software platform. As the software platform evolves, this becomes more and more true. And this is a good thing. Noone can be an expert at everything (a topic for a post later this week). You want your developers to become experts in their area, and not have to worry about being experts in other parts of the software platform – this produces the highest quality software product because people can focus on what they know and develop the best solution within that area. The downside to this specialization is that developers may not have full knowledge of how changes in their area affect other parts of the application. Beyond that, as developers are tasked with producing results, it’s not rare for developers to develop tunnel vision. A development team member may be told that within the problem domain x, f(x) should result in y. Then they try to produce this result given known or sane values within x. And this is great, until a reasonable but unanticipated x value is given. As the software complexity grows, these problems increase exponentially.
This is why the role of quality assurance engineer is absolutely crucial. Their focus is on the consumer of the software, the customer. They can look at the problem outside of the niche domain, and they can produce a better subset of test cases as a result – test cases that are likely to far exceed the scope of the test cases that the software developers would conceive of. Further, they provide a valuable feedback loop into the development process that can take the software platform in new directions. Software Quality Assurance is not a cost center, it is a cost saver.
So, your business is growing, and your IT and development departments are screaming that the infrastructure won’t keep up with the increasing load being placed on both your human resources and your server infrastructure. So, what do you do?
So, your software company has been in business for a few years, you have a relatively reliable revenue stream, and you can bring in new clients with relative ease. Your software platform is stable enough that you can implement client projects relatively rapidly, but as technology changes and evolves, and as the business needs change, of course it leaves a few things to be desired. Over enough time, it leaves quite a lot to be desired and may be on the verge of being unsustainable. And here is where the conflict arises. Sales is constantly selling new revenue generating projects that require development resources to implement. Software engineering resources tell you that there simply isn’t enough time in the day to intelligently grow the software platform while at the same time managing the implementation of revenue generating projects that sales has sold. So what do you do?
r use within military organizations, to ensure that in particularly chaotic and dangerous environments there is cohesion and a unitary vision, among a group of less educated team members, is particularly ill suited to managing a team of highly skilled, professional engineers, working in an office without the threat to life and limb. In this type of environment, command and control is 1) devastating to morale, 2) inefficient to the extreme, and 3) is a self fulfilling prophecy for failure. Yet time and again, I see this style of management employed within software development organizations, and this leads me to wonder why?

