Writing software is hard. Writing a quality piece of software is even harder. Add to that the fact that people just don’t seem to care anymore and it becomes virtually impossible.

But quality isn’t just a software problem…

It’s an Epidemic

As I’ve said before, I bought a house recently. What I was hoping was that when they said the house was “done”, that the house would really be done. I don’t mean livable done, I mean the kind of done where you go over everything with a fine tooth comb and don’t find a single problem. Well, that didn’t happen. Instead for the past two months I’ve had crews coming in and out to fix this thing or that, and it has been a real pain in the ass.

Okay, so it’s a house and there are a lot of things that could go wrong, and it’s a really crappy example. But let me tell you, there are quality problems all over the place. Here are just a few issues I’ve had with quality over the last few months (this is by no means an exhaustive list).

In the case of my dinner, I blame it on the waitress bringing me my food for getting it wrong. She either wrote it down wrong, or the kitchen screwed it up… regardless she is on the hook for it in my mind. And as for the hardwood floors… I mean, come on people. Couldn’t you flip on a light switch and see for yourselves that you had the wrong flooring? It was immediately apparent to me.

Like I said, there are problems with quality everywhere.

What Can We Do About It?

In general here are a few things I feel that everybody can be doing in their day to day lives:

As for quality in development there are some more targeted things we can do.

Understand the Requirements

You absolutely must have a thorough understanding of the requirements before you begin developing. If you don’t know what it is that needs to be done then there is virtually no chance you’ll get it right.

Those of you agile practitioners out there, you aren’t exactly off the hook for this either. You still need to at least understand the requirements as they pertain to the sprint you’re currently working on.

Test, Constantly

You need to be constantly testing what you are working on. If you have unit tests, get yourself a test runner like NCrunch so your tests are always running in the background so you get immediate feedback when a change you make breaks something else.

If you don’t have unit tests, that’s okay. It isn’t however an excuse not to test. If you’ve got an automated testing tool you use, make sure what you’re working on is covered by one or more automated tests. If it isn’t covered, create a test that does cover it. If you don’t have an automated testing tool, write up some test cases so you can execute those tests, and then repeat them later.


Above all else you should care about the product you are producing. Most likely you aren’t developing this piece of software for your own personal use. If you are the only user, then screw it up as much as you want, I don’t care, but if your product is going to be used by someone else, then be respectful enough of your intended user base to make sure the software works.

Make sure you provide the functionality that your users need, no more, no less. I’m an Evernote user and since the latest update to the product I can’t expand the toolbar down far enough to let me insert check boxes into a note. That kind of crap doesn’t work for me as a user, and makes me want to run off and find an alternative. Do you want your users feeling that way about your product? You are probably not the only product out there with the functionality your users are looking for, and you don’t want to give them a reason to switch to using one of your competitors products.