You pay for good quality once, you pay for poor quality forever.
I'm not a programmer as such although I have built programs and have a good formal background in programming. What I do is try and interpret requirements from users into a language/specification both the user and the programmer can understand. It is my experience that users and programmers have great difficulty communicating effectively because neither truly speaks the others language as well as they speak their own.
Absolutely true, but when they do work together in a team then "magic" can happen. The best projects that I'd ever worked for consisted of a small group of dedicated programmers (with business knowledge) working together with small group of dedicated, goal-oriented end-users Worst projects I ever worked for had a huge group of miscellaneous (in-house and outsourced) programmers; lead by external project leaders and "controlled" by several management layers with no involvement of the end-users.