I realize that this discussion is primarily aimed at "for-hire" tasks, but we use a similar process for all projects in-house to prevent "hey, this sounds like a good idea" from becoming an impact to existing revenue work.
In our processes, the sales team presents the customer request / product idea to the product management team. That team then decides the feasibility of the feature/product and generates a specification that is submitted to me and our engineering lead. We examine the spec and then bring in the proper software or hardware team member to say yes / maybe / no.
If we get a yes (usually a feature request for an existing product), we then compare the spec to engineering reality. If the two are "close", we move forward to provide an estimate of the time taking into account any issues that can result from dependence on our metal bender, internal talent, the abilities of the various software tools available, and other project schedules. If we get a maybe or the spec is lacking, we meet with the sales person and validate what they asked versus what they "think" they asked to better flesh out the spec. If they have a true idea of what the customer asked, the maybe becomes a yes, other wise it becomes a no and we move on.
Usually, this all occurs within a 2 hour window to keep things "agile" (something we've been doing since the 80s that didn't have a fancy catch-phrase name back then).
What is interesting is that in 3 out of 5 software requests, the feature already exists and either
- The customer has not properly perused our documentation <_<
- The contact sales person doesn't understand what the customer is asking x_x
- The engineers didn't provide proper info to the tech writer so that the operation/feature WAS documented >_<
Usually the first or second, but I have had to "chat" with the engineer responsible on a few occasions.