I think this is the biggest problem in modern industry. Every project I have been involved in asked the developers to cut corners in internal design robustness, simply to add features. The business people making these decisions always say "fine, get the features in, and then we will fix the internals", but by the time the first round of features are in, they want to start on the second round of features, rather than fixing the internals. And in the end, the cost is much higher, because eventually you have a very large mess to fix.
I as a freelance developer, have been placed on the hot spot between the contracting company and the end user so many times that I refuse any more projects, unless there will be some serious
planned time spent on specifications. By this I mean the end user/customer has to be willing to take the time to explain exactly what they want and why, rather than hope you will disappear into a cave, and magically emerge with exactly what they want. (telepathy, anyone?) Generally the approach to software is to ask someone to hack something together quickly, then complain when it doesn't work quite right, then force the developers to squeeze a few bug fixes in, and a few new features, and try it again, and so on... So the project never gets started right, and in the end, becomes very stressful to the developer, as he/she struggles to correct serious design deficiencies without rewriting the software (What!?! You're doing this part again!?! That's double billing... robbery!!!).
Also, I think this problem comes from a lack of true education in IT professionals. There is an attitude in the IT industry that all you need to know are "products", and that "theory", or "concepts" are a waste of time, best left to the university researchers. A more eloquent explanation of this is found at one of my favorite websites:
(now, the author uses his point to also push a somewhat anti-capitalist stance, which I don't fully agree with, but the point about the failure of modern education is well-made). So, instead of businesses looking for people with strong conceptual skills, and ability to look beyond their narrow range of experience, you see companies looking to hire a Cisco person, or an Oracle person, or a InterDev developer. Knowledge/certification in specific vendor product are the main requirements, rather than overall competence and understanding of their field. Just look at current job listings in the IT industry.
And no one wants to take existing stuff and make it better. They all want new, new, new... It's not cool to say you are fixing your software so it runs better, since your users already have more features than they need, and would rather just have something that doesn't crash. No, that's too boring. We have to "rework" our software every year, so the users have to learn new features, and deal with new bugs, rather than just a better version of what they already have. -------------------------------------------
"Now, this might cause some discomfort..."
(