How to avoid being cheated by software development outsourcing vendors
What are the pitfalls and how to overcome them?
Outsourcing pitfalls explained
In economic literature there is a research area called Principal Agent Theory. It is occupied with an economic problem that is common in all sorts of relations in which a customer's profit or payoff depends on the behavior of a contractor. The principal is limited in his ability to monitor and judge the contractor's input and output. This leads to mistrust and can only be avoided under high monitoring costs. The problem is especially acute in software development outsourcing due to missing metrics and measures for programmers' productivity.
Principal Agent Theory, which emerged in the 1970s from a number of economists and theorists, is based on several assumptions, but we'll focus on two:
- The agent has an advantage due to incomplete and asymmetric information and monitoring costs. The smaller the ability to control the agent's activity (i.e., the bigger the information asymmetry), the bigger is the principal's uncertainty.
- There is a divergence of interests i.e. the agent shows opportunistic behavior to maximize their own expected profit instead of acting in line with the goals of the principal. The three types of opportunistic behavior are hidden characteristics (the abilities and skills of the agent are not "common knowledge"), hidden intention (agent has goals and interests not known by the principal) and hidden action (principal cannot fully control the principal's actions).
There are two groups of problems arising due to the above assumptions. First is before the start of the interaction (ex ante), Second is Ex post, i.e. after having selected a contractor and having signed a contract,
In software development outsourcing the vendor is the agent and the client is the principal.
Before the start of the interaction (ex ante), the client cannot fully judge:
- The vendor's "quality" (hidden characteristics) indicated by historical productivity, quality of people, retention rate.
- The plans of the vendor (hidden intentions) if and how to maximize their own profit through overemployment, double booking, bait and switch, land and expand, leech, vendor lock-in.
After having selected a vendor and having signed a contract )ex post), the client cannot control:
- The activities undertaken by the vendor (hidden action). The vendor has an opportunity to utilize its information advantage and to maximize his profit e.g. through working less than expected, unnecessarily high budgets.
The end result for the client is low productivity of software development.
How to overcome the pitfalls?
On the diagram below we have the problem of low productivity outlined. How can we solve this problem?
Common trait to all six undesirable effects is that they are instances of underutilized human potential. Thus, the underutilized human potential can be used as an indicator of all undesirable effects.
- Lack of managerial oversight
- Low productivity
In general, to mitigate against all of the undesirable effects the client needs to decrease the information gap, the information asymmetry. Benchmarking is an important tool to ensure performance over the course of an IT outsourcing deal. And while benchmarking clauses remain standard in most outsourcing contracts, few customers have been invoking their rights to compare their service provider's performance to industry averages.
Quality of people
"I'm going to let you in on a little secret: You can write absolutely anything you want on your resume." ~ Anonymous Software developer
Today, due to the promotion of IT education in many countries, the availability of novice programmers is several times that of experienced software engineers. Some of the outsourcing companies hire employees with little to no experience and charge them off as experienced developers. Many of these programmers do not have a basic foundation in software engineering. The attractive job market in the IT industry draws them from different backgrounds to join short term programming courses. Many firms hire such people due to their low cost availability. Although they may be capable and intelligent, they cannot be allowed to handle your projects immediately, as their approach to the problem may be different from qualified programmers. They may take longer to solve problems and may not follow the development process strictly. There have been many disasters in outsourcing relationships due to this factor. Many companies still continue to do this and have not learnt from their failures.
It is essential that you confirm the quality of people who would be working on your projects. You need to take a look at their resumes and earlier project work. It is also important that you have them interviewed by your technical person. It may also be useful if you talk to references where the programmers have worked directly with customers, and get their feedback.
It is important that you do not outsource your work to an amateur team. You need to find out the years of experience of the vendor's development team. Ensure that the average years of experience of the development staff works out to at least 3 years.
It is important that you find out if the vendor has enough resources to work on your project, matching the technology requirement you need resources in.
It is also important that you find out the capability of the vendor to source skill sets with short notice.
Retaining good people must always be a top priority for any firm. This is especially true in the IT industry where there has been a high turnover of people because of heavy competition and better opportunities. Any good offshore development firm has to keep looking for innovative ideas to attract and retain their best people.
The higher the retention rate, the better the company environment. You could expect better productivity from a firm that retains the best talent i.e. maintains its capability. Find out the retention rate of the company and ensure that it is high.
Bait and switch
Some vendors present a senior developer to the client for evaluation. After they win the job they have juniors who might be recent graduates with some technical certifications but no practical experience. They help the senior out although the senior could be doing the most difficult parts of the work. The juniors make more mistakes. That means there are more defects to be fixed.
Land and expand
Thevendor manages to get a senior developer or a senior team into the client company. They gai trust by doing a great job on some projects. Now they are in a position to influence the decision making process at the client company. So next time a new project is planned the vendor can say we have another star team ready to work for the client. The new team happens to be staffed with junior developers as in bait and switch.
A vendor has the incentive to make it as costly as possible to be replaced. They do that by not sharing the knowledge they acquired while working for the client. One way is to have as little documentation as possible. Then the technologies and tools used need to be novel and difficult to find developers for them. That decreases the talent pool that can replace the vendor. If the vendor is really smart they would sell to the client a tool or technology the vendor developed inhouse. That means the vendor is the only one who can and is allowed to use that software tool.
Working less than expected
“People are great at interviews, excel during the trial, then their output plummets.” ~ Anonymous Project Manager
A developer can win a job by performing a solid interview. After that their performance does not reflect what they showed during the interview. There can be several reasons for that.
One reason might be that some people frankly optimize for working 3-4 hours/day. That is possible if the developer is not at the client's office but works remotely. It really stings how some local cultures and remote work ethic don't mix. The developer could do that to be able to have more leisure or to start on overemployment.
“Some people took a second job on the side… I never expected this.” ~ Anonymous Engineering Manager
Some developers do two jobs at the same time because they can pull it off, and make double the money. This is called "dual employment", "overemployment" or simply "OE". That is equally possible when people work at the office or remote and applies both for developers and managers alike. OE for the management roles are easy because managers delegate most of their work. they can work their first job on-site and the second job remotely.
One needs to get the first job down to 20 hours a week to allow room for a second job. The strategy is to create slack but look busy. The ways to create slack are: delegation, automation, over-communication, insistence of asynchronous communication, and setting your ego aside to meet the minimum performance requirements instead of being a rising star.
What happens when both of the jobs decide to schedule a recurring meeting at the same time? Yes, meetings clash, but it's easy to get meetings rescheduled if one just asks. The developer can handle two calls at the same time if they know it's a call where they're mainly going to be listening. If needed the developer can always claim "bad internet" and drop out of one to answer questions in another.
Double booking refers to the practice of an outsourcing vendor to sell one developer to more than one client. This is like overemployment, but organized by the vendor. Regrettably there are outsourcing vendors who actually mandate their employees to work for two or more clients at the same time. Such an approach is only successful if the client lacks the managerial oversight needed. The result is that the vendor's human potential is underutilized.
Unnecessarily high budgets
Changes, new services and projects in outsourcing agreements are usually priced on either a time-and-materials model or a fixed-price model.
Time-and-materials is used when the parties know there will be a need for a particular service but cannot easily predict the volumes required. In the time-and-materials model, on the other hand, the customer is billed for the actual developers hours spent on the project. The hourly prices for the developers are agreed during the negotiation of the agreement and are set out in rate cards in the outsourcing agreement's pricing schedules. The parties may agree rates based on overall educational levels, skills and experience, or they can agree to a blended rate. This pricing model allows for great flexibility and scalability, as the customer will be able to decide where and how developers are to be allocated.
The pitfall of time-and-materials contracts is that the vendor has no incentive to increase productivity and thus bill less hours. Instead, the vendor is incentivized if possible to sell additional hours or more developers. Thus, if the managerial oversight from the client is non-existent, and everyone is forgiving for under performance that could encourage the vendor to increase hours billed in two ways. First is to claim the current resources are not sufficient and more developers are needed. Second, to ask some of its developers to work for another client at the same time. Both approaches will result in the vendor's human potential to be underutilized.
A fixed-price model is used when the customer's requirements are predictable, making it possible to quantify them and agree on a fixed price. The benefits of a fixed-price model are that the customer can achieve a high amount of predictability in relation to what his costs and savings will be. During the contract, payment is made in accordance with agreed milestones. This incentivises the vendor to allocate sufficient resources to ensure the agreed deadlines are met.
The pitfall of a fixed-price contract is that the vendor will add a premium for the potential risks of the project going over-time and over-budget. Unfortunately these premiums can go as high as 100% on top of the estimated time-and-material budget. If the contracted budget is higher than the actual need the vendor just doesn't have enough work for all contracted developers. In this case, the vendor may ask some of the project's developers to work for another client at the same time. That will again result in the vendor's human potential to be underutilized.
After the vendor is inside the client company they may want to recruit some of the top talent by paying them a bit better. This will ensure that the client is locked-in because part of the client's knowledge is now with the vendor.
If the vendor is extra devious they can sell the top talent back to the clent at a premium.
Not enough work for all developers
The client at some point may have not enough work for all contracted developers, especially if some of them are very specialized. Now the human potential is underutilized because of this lack of managerial oversight. Developers from the vendor might get a bit worried since if they have nothing to do there wouldn't be a reason to keep them. So they could update their supervisor at the vendor company. The advice could be to stay put because as far as they were concerned, everything is fine as his time is being billed and paid for. The vendor may ask some of its developers to work for another client at the same time. On the other hand, if the developesr don't tell the supervisor they could start on overemployment. The result is an unnecessarily high budget for the client.
3. OE Methods
4. Jorgensen, S., & Kort, P. M. (2002). Autonomous and induced learning: An optimal control approach. International Journal of Technology Management, 23(7–8), 655–674. https://doi.org/10.1504/IJTM.2002.003032
5. DeMarco, T. (2002). Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency (Reprint edition). Currency.