I'm not saying this is the OP's case, but when I worked for a small dev shop, almost all my co-workers would grumble and complain whenever a client asked us to do more work for them. I'm not talking about scope creep or unpaid additions. I'm not talking about requests that were impossible or incoherent or outside our expertise. Clients would ask us to give an estimate for adding feature X, and everyone would complain! I've noticed the same thing in other developers many times since then, so I've tried to practice saying instead, "We'd be happy to do that for you! It'll be $X." (or more realistically, "I'll get you an estimate by tomorrow/Friday/next week.")
My other favorite technique is to put a price tag on things that are technically hard or "impossible." I like to say that nothing is impossible, but some things are expensive. I think edw gives a similar response to client inquiries.
Your points are all good tips on how to run a 'proper' dev shop.
I was more cynically referring to big consultancies that intentionally complicate/delay a mission critical project in such a way that every time the new budget runs out just enough progress has been made to make the business decide to throw another couple million at it hoping to finally get a product delivered.
My other favorite technique is to put a price tag on things that are technically hard or "impossible." I like to say that nothing is impossible, but some things are expensive. I think edw gives a similar response to client inquiries.