"Have a crystal clear idea of what you want built."
Rarely have I ever worked for a company that knows this. The last company where I worked would change their mind mid-stream every couple of weeks and it added almost a year of extra time onto the final release date.
It's usually not this bad, but if more companies followed this (not even just with outsourcing), there wouldn't be as many failed projects.
It isn't bad to change requirements depending on user feedback. You can have the best implementation in the world, done after the best specifications in the world; but it's all for nothing if customers don't want it.
This is where you need to take small deliverables from what they say so that they actually get something usable at each step. It's almost impossible to have a consistent and useful goal that's years away. Expecting otherwise will just lead to disappointment.
Rarely have I ever worked for a company that knows this. The last company where I worked would change their mind mid-stream every couple of weeks and it added almost a year of extra time onto the final release date.
It's usually not this bad, but if more companies followed this (not even just with outsourcing), there wouldn't be as many failed projects.