Most Projects overrun both in time and funding due to many reasons. Among these reasons is the not my job mindset. The concept of an employee not welling to break the chain of his knowledge that is tying him down from seeing the big picture. This phenomena leaves developers apart from engineers and engineers apart from managers.
If an Engineer gives a developer a set of requirements to develop a simple tool, the developer will simply slam down the requirements one after the other as code. Lets take an example.
* Create a tool that will allow the user to select a Transformer and display the customers being fed from this transformer in a pop-up form.
The developer will simply do the simplest logic possible and show the customers he will show all the customer information (SELECT * FROM CUSTOMERS). He doesn't care if the engineer need all or one of those fields.
If in this case the developer tries to put his shoes in the engineer (i.e. acting like an engineer) the results will be different.
The developer will say, if I am an engineer, what I want to see in the customers form? I need to see each customer address but most important I need to see how much each customer is consuming from that transformer in terms of percentage. Perhaps I should show that information on the map and make it more sexy by adding some color coding, red are high usage customers, green light usage customers.
Now some of you will say, developers hardly have the time to code what they have, they won't find the time to think like this and waste time. I say exactly the opposite, impersonating the client actually speeds up the development process. The reason is there will be less fixing and iterations and ping ponging between the client and the developer. Moreover, it will increase the quality of the application and promote your developers in seeing the pig picture instead of their own narrow space of sight.
This process is called Empathy. Try going to an acting class, I took Dan Pink's Advice and did go, I am really am improving in seeing