A White Paper by Jack Olson
Outsourcing software development can be used to reduce costs, reduce time to market, and to improve quality of products. Projects can be done successfully time after time if managed the right way. If you do not use outsourcing, your competitors probably do and will gain an advantage over you.
To be successful you need to dive in and be committed to making it work.
Offshore Outsourcing of Software Development has turned into a major industry for under-developed countries and has become a normal business model for software development companies and IT shops in developed countries. However, there still persist doubts about whether this is a good practice or not. Companies contemplating using offshore talent continue to challenge the wisdom of offshore outsourcing.
Outsourcing software development has become popular because the demand for programmers in developed countries has out-stripped the supply. The universities are just graduating too few programmers. As a result, software development shops in these countries have found costs to sky-rocket and productivity decline.
Outsourcing necessarily adds management complexity and costs to the outsourcing organization. There is no compelling reason to outsource if you can get the job done at home for the same cost, in the same time frame and with the same quality of work. Any outsourcing plan MUST include significant cost savings, an assurance of equal or better productivity and an expectation of equal or better quality. All three of these characteristics are necessary to make the effort worthwhile.
Some outsourcing projects fail. Stories of these failures are spread around and persist to create reluctance for new candidate companies to pursue outsourcing. These same people tend to ignore the fact that many at home projects fail as well. When you analyze the cause of failures for outsourced projects, the end result is most always mismanagement of the process. Managing outsourcing requires all the same management practices for managing at home plus additional management processes that are dictated by the far-remote nature of the activity. Many companies fail to recognize this needed additional layer. If they succeed then they are just plain lucky.
You can divide all of the countries in the world into three categories:
A - countries that educate FEWER programmers than jobs being generated
B - countries that educate MORE programmers than they have jobs for
C - countries that NEITHER EDUCATE programmers NOR GENERATE programmer jobs
The United States is the poster child for the A-class countries. They generate the most IT jobs, have the largest gap between jobs available and programmers at home and do the most offshore outsourcing. The trends that are prevalent in the USA can be found in other countries in this group as well. This includes Canada, UK, France, Germany, Australia and others who are always looking for programmers.
The trends are persistent and have been operating for more than 20 years. The trends are graphically depicted in Figure 1.
The most important trend line is the number of programmers graduating from US universities each year with a degree in computer science. This number has declined every year for the last 20 years. For some reason American high school students are shunning this field. In fact they are avoiding all technology fields. The percent of all technology majors in US universities is slightly above 25% having dropped from more than 40% 20 years ago. This is in stark contrast to Eastern European countries, India and China where today the number exceeds 50%.
The drop in CompSci students is more apparent in women than men. The number of women entering programmer careers has been dropping at a much faster rate than that for men. No one seems to know the reason for this.
It appears that American youth covet jobs in business management, law, and marketing more than in technology.
The second trend is the raging increase in programmer jobs created in the US. This number continues to rise. The total number of jobs created has been significantly higher than new programmers graduated for the last several years. This means that the gap continues to get larger. Every year you hear cries for raising H1B Visa quotas so that more and more programmers can be brought in to stem the trend. Every year the gap gets larger.
There are two great consumers of programmers in the US: IT shops and software product development companies.
The US has the IT centers for the largest global companies. Although Eastern Europe hosts many large ones as well, the gross number in the US is huge. They have consistently been the target of offshore companies selling consulting services backed by offshore development centers. Chief among these are India based companies that began this trend 30 years ago through the efforts of GE, the pioneer in using offshore teams.
As for software product development companies, the US is by and far the home to the most and the largest. This includes Microsoft, IBM, Oracle, Google, Apple, and many others. Thousands of new startups emerge every year in the US developing every sort of application you can think of. While most fail, a fair number survive only to be scooped up by the big guys when they show promise. This process of company incubation, growth to maturity, and eventual acquisition requires armies of programmers.
The US is the undeniable capital of the world in technology startups. The reasons have little to do with technology. They are the result of the US being the most suited country on the planet for starting a company. A stable government, stable currency, favorable laws for employment and business activities, low payroll taxes, and a host of other factors makes it stand out as the single most favorable place to start and grow a new company. It also has an absence of government corruption which makes it easier and less costly to manage a company. It is amazing how so few countries have learned the lesson that capitalism as practiced in the US will generate such a tsunami of business activity while smothering government taxes, regulations and corruption will prevent such activity from occurring.
To summarize this section, the US has the jobs for programmers but not enough programmers. In order to keep this economic engine moving forward the US companies must find programmers elsewhere and either bring them here (on H1B visas) or employ them remotely.
Note. During several recent years, it was merely impossible to bring the exact person you need to the US on H-1B. This visa program has been turned into a lottery, with a given individual's chances to win being less than 50%. The quota still provides mechanically a certain number of new people, but it makes staffing quite ridiculous.
A similar pattern exists in other countries in Western Europe, Canada and Australia, although not as much.
The consequences of these trends are many. One is the high cost of a programmer in A level countries. Simple supply and demand has pushed up the salaries significantly. CompSci is always the highest or second highest undergraduate starting salary for US graduates. Another consequence is higher turnover. There is always this game of switching companies to get a pay boost. Another consequence is less higher education. Why would a US CompSci graduate stay beyond undergraduate school when the starting salaries are so high and jobs so plentiful (notwithstanding the high cost of education is the US). The percentage of programmers with post graduate degrees is significantly higher in B level countries.
A common reason quoted for outsourcing is the lack of skills in the US. Believe me, the programmers that do exist have the skills needed. The best programmers are here. However, due to the overall shortage of programmers, it may be impossible to find a programmer that is available to be hired and has the skills needed. If you do find someone the cost will be high. If you try to steal someone from another company the cost will be even higher.
When you combine these factors along with a lower motivation for top performance, you get lower productivity from A level country programmers than from B level country programmers.
This then is the basic argument for offshore outsourcing software development. You get all the programmers you need for much lower cost, higher productivity, and with less turnover. This should result in higher quality software delivered to your customers sooner. Hard to pass up this business proposition.
In case you’re concerned about shipping US jobs overseas at the expense of jobs at home, don’t be. For programming the concern does not hold. Every qualified programmer in the US can get a job if they want one. These is no shortage of companies willing to bid for their services. In fact, it is being more American to outsource to fill the needs since getting more product to market earlier with higher quality will result in more American jobs being created. They will just not be programmer jobs (although that is true also). The bulk of the additional jobs will come from sale support engineers, sales reps, marketing people and expanded administration as your company grows faster. When you consider that a mature product technology company spends less than 20% of its revenue on development and support, you can see how many more jobs are created at home for each programmer job exported.
Countries with companies providing software development outsourcing services are dominated by India, Russia, Ukraine and China. Each of these countries has excellent universities providing a large number of qualified programmers to the market. They absorb some of these programmers in local IT shops and a small number of local software product development shops. The software development is almost always constrained to products for consumption by local users and not global markets.
All of these countries are notoriously bad for hosting startup technology companies. They have over-the-top regulations, government interference, high taxes and way too much government corruption. Companies need to devote much time and expense to pandering to corrupt officials, filing unnecessary reports to government agencies, and working with obsolete and often conflicting accounting systems. There will never be a significant technology startup sector in any of these companies as long as these conditions exist.
For some reason they make it easy for outsourcing companies to emerge and operate. They still have some hassle in dealing with local laws but in general they are not as burdensome as they would be for a full blown software product development company. Many of them have special laws that encourage and support offshore software development.
The universities in these countries are exemplary with many of them being regularly ranked with the best from the west. Examples are Beijing University, Moscow State University, St. Petersburg University and Kiev Polytechnic Institute. Many of the top developers in India are educated in US universities.
Most of the jobs are found in the countries listed above. However, quality outsourcing teams can be found in other countries as well. Some of them are Romania, Slovakia, Estonia, Latvia, Costa Rica, Mexico, Brazil, Bangladesh, the Philippines and Vietnam. Although there are some quality teams in these countries, in general they have a much smaller supply of programmers available than the major countries.
Some of these countries are used for “back-door” outsourcing. This means that a company in India, for example, may send some of its work on a project to Vietnam or Bangladesh.
There are many countries that just do not participate in either seeking outsource teams or providing them. Most African countries, many south American countries, all Arab countries fall into this list.
There are many factors that need to be considered in picking a country to outsource into. See the chart below for some of these factors:
For example, China is often considered a large risk due to political differences and a disregard for intellectual property protections. On the other hand they are often chosen for firmware development since they have special experience in that area. India, Russia, and Ukraine are good for English speaking staff while China, Philippines, and Brazil are not. If your staff has people versed in other languages then that may be an added consideration.
Ukraine is particularly good since it has good English language speakers, a large pool of programmers, is very much aligned politically with the West and does not require visas for travel from the US.
It is important to understand why outsourcing software development has a strong advantage over outsourcing other types of activities. These are arguments that get rid of the fear of long distance, varying cultures.
Even though most of the countries do not have English, German, or French as a native language, all of the programmers have a working knowledge of English. This is because programming languages are always taught and practiced in English. There is no Russian language version of JAVA. The decision to keep all system level functions in English-only was made by IBM years ago and persists to this day. In order to study CompSci at the university level, students are generally required in all of these countries to be minimally conversant with English. For example, Russian universities require 4 years of English at the high school level and continued study of English while at the university. Also, some of the countries lacking solid universities send their best young people to other countries, often the USA or UK, to study CompSci.
Although most programmers can read English and understand spoken English, they are hesitant to speak English. Each outsourcing team should have, and usually does, one person who has excellent English skills.
The amazing Internet makes outsourcing software development possible and practical. Services such as file transfer, email, WIKI sites, and Skype make it possible to communicate instantly with remote teams. Face to face meetings can be held on a regular basis. All activity can be monitored all the time. Interestingly, most B-Level countries have better Internet support than you find in the USA. The Internet is usually free or very cheap to use.
The emergence of software development tools that are Internet enabled make it possible to keep in sync with development activities at all times. This includes source code control systems that support multiple nodes with repetition and automatic synchronization. Problem Tracking systems that allow for all development activity to be tracked and monitored from afar are invaluable.
Some of the reluctance toward outsourcing to other countries is based on concerns over IP protection. There is a fear that the outsourcers will steal code and sell products elsewhere or use parts of products in products for other clients. These are valid concerns. It should be noted that they are concerns for programming teams at home as well.
The basic problem is a belief that you cannot get legal relief from these countries if a theft occurs. In general this is true. Imagine a US company trying to sue a Russian company or individual programmer in the Moscow courts.
The basic protection is not a legal one at all. It is the simple fact that if a company or individual violated IP rights then they will lose their job (or contract) immediately and will most likely never get another outsourcing job again. They will likely lose existing clients as well. None of these outsourcing companies want that to happen. They will lose their livelihood since their home country cannot provide the jobs they could switch to.
Another protection is that although it is impractical to sue someone in their home country, you can always sue any entity that is in your country or another country where you can reasonably seek a legal remedy. For example, if the outsourcing company has operations in the US, they can all be shut down over an IP violation suit. If a company ends up with your code, either a full product or just a component of it, and they try to sell their product in the US, you can sue that company in the US courts and get compensation.
If they end up selling your product in their home country, it probably does not interfere with your sales since it is rare that a company using an outsourcer would be selling in that country anyway.
Having said that, there are a number of business practices that you can, and should do, to help mitigate this issue. For example, you can build some critical component at home or through a different outsourcer so no outsourcer sees a complete product.
I have seen more IP violations committed by programmers in the US than I have from outsourcing teams. It is just not to their advantage to do so.
Read more: Intellectual Property Protection
Just knowing that outsourcing can yield big gains does not automatically make it happen. There are a number of actions that can be used to improve your odds of success.
When your CFO sees a number that outsourced programmers get $20,000 a year or less while he is paying local programmers $100,000 or more, he expects to get a cost reduction of 80%. This expectation ignores many other factors that make it impossible to approach that number. There are costs of outsourcing and there is a need to pay the overhead portion of the outsourcing company. The reality is that you will probably see a cost reduction of 40% to 50% when all is said and done. Although that is a significant reduction, the CFO will feel like it failed to meet his goals. If he is educated beforehand this will not happen.
Since there is a number of built in overhead costs for both sides of the contract, small projects usually yield no value. Outsourcing a project of less than 5 person years is probably not worth doing. The only reason to do a small project is if it were one of many projects given to the same outsourcer thus spreading the overhead costs.
Another expectation is to not assume that the first project will run smoothly and yield huge productivity and quality gains. Picking an outsourcer who has lots of experience helps but, even then, building a smooth running operation takes time and effort. It is generally wise to start with a new outsourcer with a small piece of a project to establish working relationships, processes, and expectations before committing to a large effort. This only makes sense.
Outsourcing has been going on for many years (2-3 decades). There are plenty of companies with deep experience and good references. They may cost more but using them reduces risk. Avoid hiring a company recently created by a bunch of guys who have no history of outsourcing.
This can work against you as some large outsourcing companies keep their best programmers for select, long term clients. They may drag superior people in front of you in the contracting period only to have them disappear after the project starts. They may also have superior people involved in more than one project for more than one clients. This unethical behavior can be guarded against through contract terms that prohibit it.
The view of setting up offshore development is to establish a development resource that you will use for years over multiple projects. The longer you use an outsourcer, the more efficient the relationship works. The more you use them the more they are willing to negotiate good terms for you. The more time they work with you the better their communication skills improve.
Negotiate a contract that contains generic terms and then attach an addendum to that contract for each unit of work sent to them. This avoids doing repetitive contract negotiations.
One of the biggest mistakes is to treat the outsourcer as 100% of your development team. You should retain one or more top techies on your own staff to provide direction, control, and approval of the outsourcers work. The top Geek should be on your staff, not theirs. This should also apply to quality assurance. The top QA lead should be on your team, not the outsourcer’s team. The outsourcer can be used to perform 90% of the QA function but the leadership, direction, control, and approval should be retained locally. You should be able to build and test the software with local staff.
If you decide to split the work on a project between multiple development groups (you plus the outsourcer, or multiple outsourcers) then you must have very strong technical leadership locally.
Splitting a project can be done by way of code development or between code development and quality assurance. It is not a bad idea to have quality assurance done by a separate group, possibly in another location.
Travel to the outsourcers development lab and meet the primary people you will be working with. The more you personalize the relationship the better it will work. The development site should be visited by your technical leaders, your VP of development or CIO and, for startup companies, by your CEO. They love it when this happens.
I also recommend regular personal onsite visits both from you to the outsourcer as well as having outsourcer key people visit you. This costs money but pays off big in the end. Having them visit you helps in many ways. They get to meet the people they will be dealing with every day but who would not normally travel to the outsourcer site. They get to improve their English. They feel more appreciated.
Many Outsourcing companies have a business office in their client countries for two reasons: business and technical.
For business reasons they can do on site sales and marketing activities. They also handle the contracting. If you have a long term relationship then the constant contract changes and additions are handled much more timely and smoothly.
Another factor is making payments. By having a local company, you can pay them in your own currency through their local bank and avoid all the hassle of international payments. This can be a huge benefit.
For Technical reasons, having a local company usually means they have technical staff in your country that can provide onsite assistance in many ways. They can attend all conference calls thus eliminating language problems. They can sit down with your technical staff and understand new work to be done or problems that have come up and convey the decisions to the technical team back home.
Some companies try to completely shield the backend teams from the client by having a strong technical staff locally to the client. They become the only interface for the outsourcing team to the client. Although this may prove to be efficient, it also significantly increases costs to the client.
A process model that allows the client to control source code, monitor progress, and have quick and effective communications is necessary. Use a model that fits you. The outsourcer may want to force a model on you that your team is not familiar with. Make them work with a process and tools that are best for your team.
This model must be sufficient to protect IP. Source code updates should be mirrored automatically to a local server every night.
In conjunction with this, make sure your local team is performing control functions on a daily basis.
Outsourcing software development can be used to reduce costs, reduce timeto market, and to improve qualityof products. Projects can be done successfully time after time if managedthe right way. If you do not use outsourcing, your competitorsprobably do and will gain an advantage over you.
For startupcompanies it can be a huge benefit. It gets you through the development phase and into the project faster. The cost savings can either mean than you need to raise less capital upfront or that you can use your capital for building other parts of the business.
To be successful you need to dive inand be committedto making it work.