This post covers two different issues, management responsbility and programmer involvement.
Management is responsible for resource assignment and scheduling. It is a management decision as to when to include programmers in a project. That is why it is correct, if not self-evident, that management is responsible for failures, though this is usually just given lip service and not truly believed, especially by management.
Involving programmers early is an effective way to improve communictions. Having inside knowledge of what a system trylu needs to do beats trying to mine the knowledge out of a Functional Requirements Document or a System Design Document. This involvement, however, also requires change by the programmers. Programmers need to learn how to elicit information and listen to the answer. Programmers need to learn the users' language, accept ambiguity and contradiction, not quibble about definitions, and not present immediate solutions. This is really a new, but valuable, skill set for programmers to learn.
Yes, programmers should be involved early in the project lifecycle, but this requires new skills of the programmer and a commitment by management.