Writing software is hard. It is not trivial and there will be no magic formula anytime soon that would create great software with just a click of a button.
One needs to realize that when writing software, bugs are always a part of the package. There just cannot be a chunk of software that is written that would be totally bug free. I am not saying that one should ship with bugs. NO!
What is important is the management of these bugs.
If developers and indeed the quality folks can find, manage and then fix those bugs, the end result will be great software exceeding expectations of everyone involved.
Managing the bugs involves first acknowledging that there will be bugs. Most developers refuse to believe that their software can ever have bugs. Let that go. Every piece of code ever written has bugs. Accept it.
Then there needs to be concerted effort to find those bugs. First at the developer level, what some would say unit testing. But going beyond that, what stops the developer from running full blown test cases that apply to her code? Run them, and the unit tests and whatever other tests you can run. Don’t leave that to the QA guys. After all you are proud of your code, you do not want them to think your code is a piece of junk. Give them your best and save yourself the blushes later on.
Then of course you fix those bugs. That is obvious.
But what is not obvious is that you have to test all over again. Assuming that you have fixed everything and it will run fine after you have fixed a bug is hazardous. You are just undoing all the hard work that you have put in.
Once you ship to QA, don’t disown the code. Be in touch with them and find out what is going on with the testing, in particular your own stuff, but also with the entire software that your code is integrating into. You can catch things they will not catch.
Ask the testing folks to break your code. Then take pride in the fact that they were not able to.
Another aspect of bug management is tracking your bugs. Make sure you understand the bugs that are assigned to you, you fix them, understand the fix and then track them right back to the QA guys so that you know what is going on with your bug.
Last, but not the least important is something that is really always overlooked. Expectation management. Managing expectations of the quality team, and the user. If you can tell them before hand that there is a certain issue with the software, there is a lot of time, energy and heartbreak that you can save.
Telling the QA folks that there is a certain or to expect a non conforming behavior is a sure shot way of making friends out of your sworn enemies. They will be eternally grateful to you for not wasting their time.
Telling your customers up front about the issues will delight them. Not antagonize them. Be brave, honest and up front.
Know that you cannot kill all your bugs. Manage them well and you can sleep well.