I consider the prime cause of software defects to be programmers.
Not saying that just to be funny, but because one of the big problems I've observed at my job is poor requirements gathering, coupled with poor understanding of the problem domain, causing major defects and usability issues in the project.
Part of that comes from not being willing to learn/understand the terminology of the end user, causing misunderstandings.
Part of that comes from talking tech too early in the process to people who don't have a clue what you are talking about or why it matters.
Best example of that was when I overheard one of the programmers trying to figure out how long the questions/answers were going to be in characters... I knew he was trying to figure out what size field to use in the database, but the department requesting this hadn't the foggiest why that mattered - or that spaces counted. To us that seems obvious, but to them it was a real revelation.