views:

120

answers:

3

From your experience, of those industries that develop custom software for internal use such as financial services companies, which ones produce higher quality software measured in defect rates and, more qualitatively, ease of maintenance over the long term?

What contributes the most to this achievement of higher quality? Is it due to better software development practices such as greater emphasis on testing or specification? Developers who better understand the tools or who are strong problem solvers? Better communication between team members?

On the flip-side, which industries do you think produce the lowest quality software? Why?

+4  A: 

I've always liked "They Write the Right Stuff" which details the software development process for NASA contractors.

Shuttle software is definitely one of the last places you'd like to see your bug persist!

On the flip-side, which industries do you think produce the lowest quality software? Why?

I would say the web. Mostly because it's extremely easy to deploy, many updates/fixes can be done without customer notification (or input). There seems to be a much more relaxed mentality than compared to, say, boxed software.

Matt
+1  A: 

This is a really complex question. While NASA certainly delivers high-quality code for life-critical systems, or robotic systems that must operate at great distances (think of the recent software fix on Voyager 2, thirteen light-hours out from Earth), NASA's quality doesn't come cheap, or quickly. Line for line, it's probably the most expensive software in the industry.

Your basic reporting application in a business doesn't need that kind of quality. Nor is it cost-effective. There are many ways to improve quality, and they vary in cost from simple and cheap (coding standards) to resource-intensive, difficult, and immensely time-consuming (written, formal mathematical proof of correctness on every method).

Project management tools such as risk assessment, project post-mortems, and continuous improvement can help an organization arrive at a suitable suite of quality practices.

Without pointing a finger at a specific industry, I will say that the most destructive practice, in terms of quality, is time pressure. Nothing induces a programmer to write sloppy code as much as tight, artificial deadlines.

What are the requirements for better quality?

Communication is crucial. Every developer on the team should know what every other developer is working on, at least in broad scope.

Second, an understanding that quality begins the day the project is accepted. Requirements need to be understood and validated. Key factors include making sure that the requirements identify the problem to be solved, rather than using a proposed solution to avoid problem definition; making sure requirements are measurable and specific enough that both developer and customer will be able to recognize that a solution meets the requirements; making sure that requirements are communicated clearly to all consumers of requirements, including developers, testers, tech writers, support personnel, and managers. Quality is best measured against clearly stated requirements; if your requirements are poorly defined, then quality is at best hap-hazard.

Reviews are crucial. Not just code reviews, but requirements analysis, designs, and perhaps most importantly, test plans. The role of testing is to verify that requirements have been met. You can't test bad or non-existent requirements.

And that leads to understanding the role of testing. You can't test quality into a product. Testing can verify quality. Testing can find defects and verify that they've been fixed. But if quality practices haven't been followed up to the point that testing begins, testing can't fix that.

While I'm not a fan of the waterfall development model, I think that agile development can take things too far to the other extreme, and can easily be abused in ways that hurt quality. I think that scrum helps alleviate some of the problems of agile; scrum promotes communication within the team, and it recognizes that estimates are nothing more than educated guesses that can be refined as knowledge improves.

Cylon Cat
I completely agree with your comment about the negative impact that time pressure places on software quality.
Derek Mahar
"You can't test bad or non-existent requirements." In many environments, written software requirements seem to be considered at best a luxury, and at worst, a waste of time.
Derek Mahar
"...estimates are nothing more than educated guesses that can be refined as knowledge improves." Concur.
Derek Mahar
+2  A: 

Going to have to go ahead and say banks write the worst code - they need all sorts of custom solutions, but writing code isn't their primary focus, so they tend to go with "make it work somehow". Combine that with treating code like a widget you can have made by shipping it off to the lowest bidder, the stuff that comes out can be truly cringe-worthy.

This of course varies from bank to bank and organization to organization within said banks, but on the whole, I don't see a lot of quality code coming out. As someone who's worked with banks for 10 years, I consider myself an expert on crappy bank software :)

related questions