Unfortunately, there are recurring problems in the industry. Knowing them up front can save you a lot of time and money.
Bait and Switch: This is where you interview one great engineer, but they actually assign you a different engineer (usually a much more junior engineer). To avoid this, you will need to communicate directly with the engineer (especially in the beginning) and review both code and productivity. If you are getting poorly written code and it is taking longer than you thought it should, you may be a victim of “bait-and-switch.”
Splitting Time: This refers to a situation where you believe you have a full-time, dedicated engineer, but in reality, they are only working 50% or less of the time. Again, you’ll have to monitor code productivity and, if possible, monitor online activity. If you discover that someone you thought was working full-time is only working part-time and you’re being charged for 100%, leave that company as soon as possible.
Over-billing: This occurs when you think you’re paying for 10 people, but in reality, you’re only getting 7. Or even worse, paying for phantom people. This is more common when you have larger teams. I had a team of 50 Engineers with one software Outsourcing firm, and it was always difficult to track who was working and who wasn’t. I was also being charged for multiple Project Managers (they said they needed one project manager for every 10 engineers, which wasn’t true). I didn’t learn about it until we decided to conduct an audit of each headcount and demanded to know what each person did on a daily basis. We discovered that the four additional Project Managers never existed! They fabricated the names and inflated the invoice. Since Project Managers are charged at a higher rate, it was a significant rate increase – about $20K per month in over-billing. The lesson learned was always to know what each person does and ensure that no one can be added without specific duties and responsibilities being spelled out and signed off by management.