One of my good experiences, from the outsourcing end, may or may not be useful to you:One of the world's larger investment banks hired my then-employer to produce trade reporting software. There was a hard deadline: By Act of Parliament, the software had to be completed by a fixed date, or our customer would be prohibited by the FSA from engaging in a highly profitable line of business. The project went well. We went from nothing to working software in eight and a half months, which is good because that's all the time we had before the government-imposed deadline -- we literally finished less than two days before the deadline. And it all worked properly on the first day of active use -- there was only one minor bug, which we fixed that day, and that bug was due to bad requirements, not bad software (and, because we fixed the bug so quickly, the FSA let the customer re-report the affected reports manually, without penalty). After the project was successfully completed, I asked the customer why they hired us. The customer had outstanding programming teams, who understood trade reporting well, and my team had no background in trade reporting at all. I was told that they hired us because their own people would not have even had a chance of finishing on time -- as it was, they were surprised that we finished on time: They estimated that the work we did in eight and a half months would have required about eighteen months if their own employees had done the work. Because we were not employees of the customer and did not work at any of the customer's offices, we could work more efficiently and productively than the customer's employees.Some things that helped this project succeed:* The people working with us on the customer side were outstandingly competent and very responsive. When we asked their business analysts for requirements clarifications or test data, we typically received a response in less than fifteen minutes during times when our workdays overlapped (see below, on time zone differences). This kept us working steadily -- there was very little "down time" while we were waiting for requirements or data. * We wrote an automated test system for the customer's business analysts. The BAs would place test data in an Excel spreadsheet and drop the spreadsheet in a particular directory. Our system would pick up the test data, run it through, compare the results to expected results and flag errors. Then, if there were any errors, the BAs would just email the spreadsheets to us, and we would have exactly the data we needed to diagnose errors and test our fixes. * We worked around time zone differences. My team was in Bryan, Texas. The customer's business analysts were in London. 9am in London is 3am in Bryan. Thus, our work days only overlapped by about three hours. Through Skype, I set up a local number in London that was forwarded to my cell phone, so the customer's BAs could call me and wake me up at 3am if they ran into a problem that was holding up testing on their end. Towards the end of the project, my entire team started coming in at 3am (It was actually my team's idea -- neither I or the customer proposed it.), so they would be working exactly the same hours as the customer's business analysts. (I did the same thing when we had to work with one of the customer's database specialists in Australia -- I worked Australian hours for a few days, so I could chat with him via secure IM while I worked through some database issues -- it was much easier and less frustrating than sending email and waiting until the next day for an answer.)* My team was very loyal to the people on the customer's side. We knew that it was going to be a stretch to finish the project on time -- the customer even told us that they hadn't given us enough time and should have started the project about six months earlier than they did. However, we were also aware that, if we didn't finish on time, some of the people we were working with on the customer's side would likely be sidelined, demoted or fired. Once the team realized that Steve (not his real name) might lose his job if we didn't finish on time, their rallying cry became, "Let's save Steve's job!". That added bit of motivation helped tremendously as the project dragged on through a long, hot summer. (And, in the end, not only did we save Steve's job, but he received a promotion.)* The customer never once complained that we were chewing through too much money or asked us to cut back on costs, so we didn't have to worry about money issues or cutting corners. They outsourced the project because it was important and because they would lose a tremendous amount of money through lost business opportunity if we didn't complete it on time, so they didn't put any pressure on is to be stingy with our budget. (And, in the end it paid off for everyone: My company was well paid, and the customer recouped their investment very quickly.) If they had outsourced a project that wasn't worth that much or was of little importance, things might have been different in that respect.