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).
- I went to a Red Lobster for dinner and ordered a linguini and crab alfredo. The waitress ended up bringing me the wrong dish.
- I had a problem with the hardwood floors in my new place and they ended up having to fix a section. When they did so they replaced the boards in that section with boards that didn’t match the rest of the floor.
- I like cottage cheese (I know, I’m weird), and I’ve been buying the Daisy brand. Well, I’d say that 1 in every 10 or so containers are so watery and runny that I have to throw them out. I’ve tried different brands in the past and had the same problem.
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:
- Stop thinking that just because everybody else is doing it that it is acceptable for you to be doing it.
- Put some quality checks in place.
- Care about the product or service you are offering.
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.
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.