The programming task needs to be redefined in a way that makes clear that it is a responsible role, including analysing end user requirements, designing a solution, etc, as well as coding.
This seems to have been a theme that has kept recurring in the history of computing, with different job titles used: Analyst-Programmer, Systems Analyst, Software Engineer, Programmer, Software Developer, Engineer.
The employment "system" seems adept at throwing up roles for someone with no status who nonetheless is expected to do all the difficult technical stuff others can't do, but have low visibility and not make a sound or express any judgement, things more "senior" people want to do.
This "code monkey" requirement is not a reasonable expectation. Programmers should refuse to be boxed in in that way. This person ought to have a lot more responsibility and be able to exercise a lot more judgement. Indeed, one has to ask what the other people are doing, and whether they are really all that useful or necessary.
There have been a lot of attempts to make software development into something deeply hierarchical, with greatly differing levels of seniority, and instructions passing down the levels.
Some sites have Analysts, Designers, Coders. Not infrequently there is a blatant, callous, cynical attempt to give one lot of people high pay and benefits and a particularly light work load, and another, more gifted, lot a hell of overwork and exploitation on low pay.
This approach is always a spectacular failure. Somehow this form of communication becomes a big and ineffective overhead.
There needs to be some documentation of a project, but taking it to the point of more or less programming first in words or diagrams and then getting someone else to translate it all to code just doesn't work.
In fact, it is well known in the industry that to get something done you need one or a very small number of extremely talented and hard-working people.
So the conclusion is that a new breed of responsible programmers is needed (once again!).
Some questions are unreasonable to put in the camp of the end user or the commercial requestor.
- Are tailored standard packages or rapid development 4GL methods called for, or is a fully bespoke solution needed?
- Is a special purpose command language called for, or is it more a case of a skeleton 3GL program which can be extended?
- Is it better to move forward quickly in small steps, without looking at all the issues at the start, or would there be a significant benefit in looking at all the issues together up front?
These are extremely complex technical issues, with deep effects on the whole course of the development. It is the responsible programmer's role to understand these issues, and also the end user's requirement, and to steer the development towards a good solution.