In 2004 I started working as a freelance software developer doing mostly outsourcing work for foreign clients. More than 17 years later I'm the founder of a software development company called Primal Skill with my partner having a dedicated team doing software outsourcing.
Only now I just realized that I haven't addressed software outsourcing in a blog post, specifically what blockers our clients had when we first started working together.
In this article, I will talk about what software outsourcing means, what types of outsourcing strategies are most common and what are the pros and cons of each.
In part 2, I will dispel some of the myths and shed light on some of the truths of software development outsourcing I learned along the way.
First, let's define what is software development outsourcing and let's look at the various forms of it.
What Is Software Outsourcing?
Simply put, software development outsourcing means the client delegates some or all software development processes to an outside party instead of keeping it in-house.
It's up to the business to decide how much to keep in-house and how much, if not all, to outsource to various parties. A business can choose to outsource software development only, keeping design, maintenance, and system administration in-house.
The primary purpose of outsourcing for most businesses is cutting down costs, which is somewhat a myth and we will see why is that later in part 2 of the article.
Other reasons a business can choose to outsource are getting access to a larger and diversified pool of talent, scaling up the business, and/or covering other geographical locations.
There are differences between outsourcing strategies mainly considering the outsourced work's location:
- Off-shore outsourcing means that the outsourced work is being executed in a different country, in a different time zone. For example, a US business outsources to a European company.
- Near-shore outsourcing means that outsourcing happens usually in a neighboring or close proximity country where the timezone is the same or a couple of hours different and the spoken language is usually the same. For example, a US business outsources work to Canada.
- On-shore outsourcing is when the outsourced work remains within the borders of the country, timezone and language are the same as the clients. For example, a US business with HQ in Los Angeles outsources work to San Francisco or New York.
Red: On-shore, yellow: near-shore, blue: off-shore
Types of Software Outsourcing
There are countless ways of dissecting an outsourcing process by either the business or the development agency that does the outsourcing for the business.
The most common are as follows.
Outsourcing to Freelancers
A business decides to outsource software development to one or more freelancers located in other countries and timezones. A freelancer is a sole developer who doesn't work for an agency nor has a team of experts.
This approach is the most cost-effective and easy to set up as there is a lot of supply of freelancers across the Globe.
This strategy is beneficial if the client only wants part of his business outsourced, for example having one or more freelancers for developing the software and a couple of freelancers for maintaining the server architecture where the codebase will be hosted.
A business can also employ a freelancer for highly specific work that needs to be developed and there are no in-house experts to tackle the problem.
The downside of this strategy is that the client will have to manage the individual freelancers and play the part of the project manager or even an engineering lead which can be time-consuming.
Many freelancers work with an hourly rate pricing model, and they are usually working on many different projects.
If the outsourced work is not continuous hiring a freelancer can be the most optimal way of doing work, with a minimum dedicated hours agreement with the freelancer which the client can either fulfill or not.
This pricing model is beneficial for both parties because the freelancer will have a continuous stream of revenue even if work is not filled out for that week or month, and also beneficial for the business that they can retain the same freelancer on a week-to-week or month-to-month basis.
Working With a Software Development Company
This is the most popular form of doing software outsourcing and it is not limited to development. In this strategy the client contracts a software development agency, usually found in another part of the World, for developing and maintaining the software.
How work is executed, is usually, dictated by the outsourcing company, which can decide to employ freelancers, set up a specific team of engineers, or even outsource the whole work to another company.
What the outsourcing company can and can't do is stipulated in the contract and in non-disclosure agreements (NDAs) as well as national and international laws such as GDPR in Europe.
Depending on how the work is set up, the outsourcing company can still decide to rotate individual team members in-house to better optimize their costs and the workflow without input from the client.
The client, in many cases, only communicates with a member from the outsourcing company, who in most cases is a project manager or an engineering team lead and is usually responsible for multiple projects that the outsourcing agency does.
Depending on the outsourcing company services the processes a client can outsource can vary. Some outsourcing companies offer full-service solutions from project alignment to server maintenance while others only a limited but well-defined solutions.
In some cases, the client hires managers who are more aligned with the business and report directly to the client and outsource the rest.
Software development companies have flexible pricing models, ranging from hourly rates to fixed prices models.
For smaller projects, a fixed price model is more beneficial as it can optimize the costs upfront for the entire project or forecast the costs for a project phase.
For larger projects, an hourly rate pricing model is better because it's harder to estimate the whole project scope upfront therefore the client pays for the work that's finished.
Outsourcing to an Agency With a Dedicated Team
This approach is similar to outsourcing to a development company, the only difference is that the client is guaranteed a dedicated team assembled for the duration of the project.
This team is solely responsible for developing the client's project and their time is carved out and locked down for that single project.
The outsourcing agency, in this case too, can decide to rotate team members in-house, or have a contractual agreement that locks down the individual team members for the project.
The client can directly communicate with individual team members, or have a dedicated project manager and/or engineering team lead.
Depending on which parts of the project the client is outsourcing, this strategy usually offers a turnkey solution for the software project, including development, maintenance, platform administration, and on-call support team. It makes sense to the business to outsource all of it.
The pricing model is similar to other strategies, having an hourly rate for the scoped out project phases, both parties can optimize work being done on their ends.
The time-to-market with a dedicated team is also logically faster since the project phases are decided upon by the team and team members are not pulled away on other projects.
Outsourcing Team for Hire
This method got more popular in recent years, where a client outsources the bulk of the development to a dedicated outsourcing team but hires the managers and tech lead (C-level managers) directly and keeps these people in-house.
The client has a contract with the outsourcing company but retains and works with the team directly through the in-house managers. The development company essentially leases out the team or a couple of engineers to the client.
In this scenario, the managers hired by the client and the outsourcing engineers form the project team. The engineers report to the managers and the managers to the client and the development company handles the rest such as offering a space for the engineers, handling administrative costs, and so on. The engineers are still employed by the development company.
This strategy is beneficial for the client because the development team can handle the administrative costs, local taxes, and engineer salaries, while the development company has a constant revenue stream without the headache of managing the team.
It makes sense for large projects to use this method where the client wants to get a closer grip on the outsourced development process.
The pricing model can vary, the parties can set up an hourly rate paid directly to the development company, a fixed rate for a specific project phase, or a hybrid model for various outsourced departments, e.g. development having hourly rate, devops team having fixed price.
Having One or More Outsourced Teams Directly Hired by the Client
This approach entails that the client directly hires a team in a different country to cut down on costs, have a larger pool of talent with experts who are not available in the clients' country.
This team is not employed by an outsourcing company, but by the client directly.
This is the most expensive solution out of all the outsourcing strategies above because the client needs to factor in administrative costs, local taxes as well as team costs, but this solution offers the greatest control and flexibility to the software project that's being outsourced.
The dedicated team can also be located in different countries, in different time zones, and speaking different languages which makes the logistics of this strategy more complex.
This strategy is usually chosen by a business that either wants to offer their software to a specific market at a specific geographic location and has a dedicated team at that location to offer support for the software or wants to scale up the business more rapidly by having access to a greater pool of engineers.
The approach is optimized for large, complex projects with a development run-down measured in years, where continuous development is being done and released to the public.
Decentralized Teams Hired by the Client
This strategy is similar to hiring teams directly by the client one exception being that these teams are spread across the Globe while a single dedicated team (like the previous strategy above) is present in a single location be it off-shore or near-shore.
These teams can be composed of a variety of people freelance designers, devops engineers, managers, etc.
This approach makes sense if the client has an ongoing, long-term project built directly for the end-users or there are multiple variations of the software (e.g. different versions for different locations) or support is necessary on location across the World.
Managers can be located on-shore (e.g. C-level managers), while other teams in mixed off-shore, near-shore or on-shore locations.
The various teams can and should communicate directly with other teams to streamline the whole development workflow.
Some of the teams can even be a 3rd party outsourcing company offering development support or dedicated freelancers hired to do a specific task that needs comprehensive expertise in that field (e.g. AI experts or data scientists).
Which Outsourcing Strategy Is More Optimal for Your Project?
To find out which outsourcing strategy is most beneficial for your project or if outsourcing is good for the project at all, first, you need to create a profile on the project.
1. Are You Technologically Proficient?
A software project is wildly different from other non-technical projects. You need to understand the various parts and phases of a software project.
We had clients who were great business strategists and project managers but lacked technological literacy. They tried to develop their project with freelancers at first but failed then approached a software development company (Us), understood the different strategies employed in a software project, and could create a better strategy for their business.
If you have a software project but lack a deep insight into the development process it's better to outsource the whole project to a development company that will also manage the project for you.
2. Size of the Project
If you have a small project and can't guarantee continuous work for a team, then your best bet will be freelancers.
If the project size will increase over time, it can be passed to a team at a development company that offers proper management for the project offloading this work from your shoulders.
Having an already developed project it will be harder to pass the whole project to a development team. In this case, the best strategy is to either hire freelancers to expand the development team or hire a dedicated team that can be onboarded to the project by your tech leads.
3. Supported Costs
Failing to optimize costs can make or break a software project. Not realizing the true cost of development can result in chaos making a project deadline unmanageable.
Having a good team who can break down the project phases and estimate them with somewhat good accuracy is essential. Remember an estimate is not a guarantee, therefore supporting overrun project costs needs to also be factored in.
Having a dedicated team employed by you comes with additional administrative costs and/or local taxes (e.g. opening a company in the country, hiring company administrators, hiring accountants, etc).
To quickly scale up your business the best strategy is to either hire freelancers in the short- to mid-term or outsource directly to a development company that has the necessary capacity to do this.
4. Team Availability
The nature of the software project will dictate the urgency of development for it. A project where a future event needs to be met such as a web app created for an online conference going live on a fixed date is different from a project that implements new features without a strictly fixed deadline.
Outsourcing teams can run behind a client's time by hours, availability is also determined if a team is dedicated to a project or not. If a team works on multiple outsourcing projects they need to factor in development time for your project's tasks.
These tasks are not implemented immediately, but days or weeks after scoping it out.
If emergency work has to be done on the project, like a serious bug fix or responding to market demand quickly, a freelancer or even an outsourcing team is not usually available at the exact moment.
5. Support and Maintenance
Every software project will need support and maintenance at some point, the question is at which stage of the project's life cycle.
These tasks can be outsourced further to a separate dedicated team that can offer support for customers either on-site or through a support call center.
Development maintenance is usually done by the team who develops the project, but the on-call support and disaster recovery can be outsourced to a separate team that can guarantee 24/7 availability.
All these variables need to be factored in before you decide to outsource the software project.
Hope you liked part 1 of this article. In part 2 I will tackle the myths and truths of software outsourcing.
Stay tuned and if you liked this post, please share it and comment on it below.