What's most important is that engineers have contact directly with users or their representatives and get a grasp of how and why their code is used in real life.
The more this gets filtered through layers of communication and management, the worse the software will be to use.
Making the programmers understand the subject area on their own also has a benefit, but it seems a far more costly way.
I couldn't agree more. As someone who develops internal applications in a non-tech company I consider it essential to have a different, non-developer perspective on the subject as well as direct, frequent communication with the the actual users of the product, which includes me. Potential problems and room for improvements are easily discoverable that way.
Ah, okay. Took that to mean customer support or similar. Customers sometimes describe what they want, not what they need, what they would pay for, what might change things entirely, etc. There is some amount of product direction that is made without existing customer input.
I don't like to fix first line problems but I really like to watch how users are actually using what I have built. Some eye opening moments come from that.
The more this gets filtered through layers of communication and management, the worse the software will be to use.
Making the programmers understand the subject area on their own also has a benefit, but it seems a far more costly way.