"Yes, there are programming techniques to be learned, and there are tricks to help you keep a large software project on its rails. Unit testing, computational complexity, all these things are very important. But saying that software projects fail for lack of engineering is like saying that the latest Stephen King's novel is boring because he forgot to draw a UML diagram of the book."
http://www.daniel-lemire.com/blog/archives/2007/02/04/why-building-software-is-hard/