My experience in Software Engineering has shown me that a certain breed of bugs keeps re-occurring. The following is my list of the biggest (needless) causes of bugs:
1. Uninitialized variables.
2. Poorly named variables and functions.
3. Multiple function exit points (i.e. multiple returns).
4. Not checking return codes.
5. Not checking before de-referencing.
6. Not verifying target buffer lengths before using them.
I’ve been involved in numerous discussions about what should be included in a Code Standards Checklist, and in my opinion, this list is pretty much all you need. Anything more and people ignore it anyway.