Why systems and software development projects go bad
Inferior Developers

Lack of experience / lack of contact;
Programmers are not usually in a position that allows them to deal directly
with the clients / end users and have only programming, but not business experience.
First, a great amount of systems work is not done directly by the company that is hired to do the job in the first place, but rather by sub-contractors in twice or even thrice removed positions. This, of course, causes a severe communications breakdown that results in what the client really wants and needs and what they ultimately get being two entirely different things.
Second, the division of labor between system consulting and design on the one hand, and the actual programming and implementation on the other, does more harm than good.The result is that there are very few programmers who are coding a system while understanding the special necessities and details of the project as a whole.
System design is carried out by engineers who either can't or don't program
Quite often, the engineer in charge of system design is a person who 'used to' program, but is now an 'engineer' who leaves the actual coding up to another group of people. This type of engineer gets most of his current knowledge from the latest bleeding-edge articles that he's read, but he hasn't tried to put into practice what he's selling the client. In other words, the system design has been carried out by a person who lacks the skill and knowledge to foresee the very real problems and issues that arise during actual system development.
Developers who have years of experience, but have had no real opportunity for growth...
In this field, many engineers go from one project to the next without ever taking the time or having the opportunity to see the results of their work, and can't actually tell whether the result was a success as a whole or not. Their only standard of project completion is 'It's done', which doesn't involve a chance to see the system in use and how it works for the end user. This leads to a false sense of 'a job well done' and has many developers and designers believing that they've produced 'good work' just because a given project's over. In other words, there is an abundance of developers and designers who have put in many years who go around thinking that their skills and techniques are up to par just because there's more work to be done.
