5 Major Pitfalls of Outsourced Software Development ... and How to Avoid Them

According to our experience most failures in Outsourced Software Development are caused by 5 major causes. Read on to find out more.

Migeran

11 min read

Our new website is a work in progress, please let us know what more you would like to see.

Today we are going to look at 5 major pitfalls of outsourced software development, and what measures can be taken to avoid them.

Types of Outsourcing

Before we dive into the endless pit of failed projects, first we need to discuss the different types of outsourcing.

Consulting / One-off Projects

A Consulting project usually has a very specific target or desired outcome. Companies use it to get quick access to specific expertise and skills for a fixed amount of time. In such projects both the inputs and the outputs are well defined and understood by the stakeholders and the interaction between the consultant and the client's team is limited.

Product or Component Development

In many cases, a company approaches an outsourcing partner to develop a specific product or a component of a larger offering. This kind of segmentation offers greater autonomy and flexibility for the service provider and also (if executed properly) decreases the administrative burdens on the client.

Team Integration

If a more direct relationship is preferred by the client, it is also possible to integrate members of an outsourced team with the company itself. In such cases the members of the outsourced team use the same communication channels (e.g. Slack), the same development tools and services (e.g. Github or Gitlab) as the core team. In such cases the outsourced team and the core team can communicate directly, without any red tape, and solve any issues quickly and efficiently.

At the same time, integrated teams naturally have more insight into each other's processes, which requires a high level of trust from both the client and the service provider towards each other.

Strategic Partnership

An even greater step in the relationship between a client and the outsourcing provider is the formation of a strategic partnership. This requires a long term commitment and trust on both sides, and in many cases it is viewed as the forerunner of a merger or acquisition.

Avoiding the Pitfalls of Outsourcing

In the previous section we looked through the different types of outsourcing relationships and the level of trust associated with each of them. As we go through each type, we can also view them as stepping stones in a successful business relationship: from an initial consulting job, through the development of a separate product or component, through the phase of working as integrated teams, until a strategic partnership.

But not all outsourced projects are successful, and in such cases both parties (the clients and the service providers alike) look for the reasons in order to avoid making the same mistakes again.

We founded our company, Migeran, in 2007 and have concentrated mainly on outsourced software development ever since.

We went through the journey from consultant to product / component development provider to integrated team multiple times with different clients.

Naturally, we also had some experiences where the project did not go as planned. We think that it is a great opportunity to learn from such cases and to continuously improve our processes to reduce the chances of repeating the same mistakes again.

In this section we will look at 5 Major Pitfalls that we identified and ways to avoid them.

Pitfall #1: Unclear Requirements / Unrealistic Expectations

While unclear requirements and expectations will cause problems for any software projects, when we add outsourcing to the mix, the issue becomes even more critical.

While in many cases the clients are blamed for "not knowing what they want or need", it is actually the job of the outsourcing provider (who should be the expert!) to ask the right questions during the project definition / negotiation phase.

Important questions, like:

  • How many users will the system have?
  • What are the availability requirements? There can be a huge difference in the cost of a system that has 99%, 99.5% or 99.9% availability.
  • Who defines the acceptance criteria including the acceptance test cases?

In most cases the project also includes a fair amount of research, and as such, not all requirements and expected outcomes can be known beforehand. In such cases an iterative / agile project execution model should be chosen, so the costs of changing direction can be reduced based on the results from research performed during the project.

It is important, that the client provides realistic numbers and scaling prospects so the outsourcing provider can select the right technology.

Pitfall #2: Technology Selection & Review

There are 2 extremes in client behavior when it comes to technology selection:

  • Micro-management - where every detail is already specified in the project offer
  • Complete autonomy for the service provider

A very detailed technology specification can be a blessing for the service provider, if this is due to the already established software development processes at the client. For example: if a cloud SaaS company outsources the development of its mobile application.

On the other hand, if the client does not understand the consequences of her technology choices, the developed solution might be suboptimal and cost more than necessary.

Leaving every technology decision to the service provider is not the ideal situation either. Even great outsourcing companies, who try their best to design the best system for their clients might not have the strategic insight into their client's business.

There is also the question of the technical review of the delivered system. In an ideal case, the client should have core personnel (CTO, System Architect), who make the strategic technology decisions of the company and have the abilities to perform a technical review (possibly on the code level) of the solution delivered by the outsourced software provider.

If such personnel is not available at the company, it is possible to hire a consultant as an external CTO, whose job is to interview the leadership at the company, review the strategic plans and create a matching technology strategy and technology selection process for the company. This strategy can then be used by the core personnel or the outsourced provider itself to come up with the system that will be in line with the strategic goals of the company.

Pitfall #3: Lack of Continued Support / Maintenance

It is an old saying that software is never complete, it is just not updated anymore. While this might not be true for every case, for most business applications it certainly is true, even if no new features are developed or bugs are fixed.

For Example:

  • Mobile apps need constant updates to keep using the latest APIs. In extreme cases not updated apps will be removed from the App Stores.
  • Bundled library dependencies have to be kept up-to-date to avoid security issues (like the log4j bug a while back).
  • New types of security attacks may be discovered, which require modification or recompilation of the application.

This is by no means an exhaustive list, and in most cases there will be new feature requests and bugs that need to be fixed.

For these reasons every outsourcing client should have a plan for continued support and maintenance of any software. In some cases, the client's internal development team can take over the maintenance and support tasks. Otherwise a long term support contract with appropriate SLAs can be arranged with the outsourcing provider.

At the very least, the outsourcing provider has to provide the full source code of the developed software with instructions on how to build it, modify it and create a new release of it. The testing of these procedures by the client should always be one of the acceptance test cases.

Ideally a person with sufficient technical knowledge should also perform a technical review (including code review) of the delivered software. This person could be a core team member of the client, or a hired independent consultant.

Pitfall #4: Insufficient Skills of the Outsourcing Provider

"When there is an Elephant in the room, introduce him…"

Every potential outsourcing client has already heard the horror stories of unskilled, lazy or even malicious outsourcing providers. Let's take a look at how to approach this problem from both sides.

On the client side, outsourcing partner selection is key. Looking at past projects and references can help, but the quality of the actual team who will work on the project can vary even inside well established outsourcing companies.

One good way to assess the selected outsourcing team's capabilities is to do a small, less critical, paid test project with the exact team, who will work on the larger project.

Another good option to reduce risks is to use an iterative / agile process with short, 1 - 2 week iterations. This way deliveries are most frequent, and both sides get to practice with the execution of the agreed acceptance testing procedure. If there is a problem with the deliveries, the client will get an early warning and not only after possible months of delays.

On the service provider's side the key strategy is to only accept projects if the required experience is available in house: either through earlier customer projects or internal projects.

For Example our team has considerable experience in developing mobile applications. We developed native apps for iOS and Android, and also cross platform apps: We created Migeran for iOS: a product for developers to write iOS apps in Java - thus enabled the reuse of Android code on iOS. This product was acquired by Intel in 2015 and later released as the Multi-OS Engine. This project has been open-source since 2016, with Migeran as the project lead. We also have experience in developing React Native apps - targeting Android, iOS and the web.

But, we don't have experience with Flutter, so we will not accept projects where a Flutter app is a requirement, unless we acquire the necessary skills beforehand.

Pitfall #5: Incompatible Project Execution Method

In most cases the client has a high level understanding of the desired outcomes of a software project, and also a desired deadline for the completion. For the client, based on this understanding, it is tempting to execute the project with a waterfall methodology and fixed budget.

According to our experience in many such cases the project is actually underspecified, and many requirements are only properly defined over the course of the project, which leads to changes in project scope and / or project deadlines. In a waterfall / fixed price project setup any such change results in a contract renegotiation and amendment, which usually causes even more delays. Our experience is that unless the scope and specification of the outsourced project is very well specified, including acceptance tests and the used CI / CD system the waterfall / fixed price method is not the right fit. The alternative is to implement an iterative, agile process (e.g. Scrum), which allows the continuous refinement of the project goals.

Conclusion

While outsourcing software development is not without challenges, it provides companies with opportunities to reduce costs, expand the capabilities of their core team and to shorten the time to market.

Based on our 15 years of experience in outsourced software development we identified 5 major pitfalls and proposed ways to avoid them.

If you are interested in starting an outsourced software development project, contact us, we would love to discuss it with you.

Sign up for our newsletter  to be the first to know about updates on this topic or any other insights that we share.

About Migeran

Migeran is a full-service software engineering company. In the past 15 years, we have been delivering software projects for our clients in a large variety of markets using a broad set of technologies, including:

  • AR / VR solutions based on Godot Engine and Unreal Engine
  • Native and cross-platform mobile apps built in Java / Kotlin, Swift / Objective-C and JavaScript / TypeScript with React Native.
  • Business applications based on Web and Mobile frontends and Java, Python, Ruby and PHP backend

Our first own product, Migeran for iOS was acquired by Intel in 2015 and released as the Multi-OS Engine.

We are available for new projects, you may contact us if you would like to learn more or have a project that you would like to discuss with us.

Share this post on Twitter.