Software outsourcing management

How to Manage Outsourcing Challenges

Startup outsourcing problems and how to manage them effectively

Rakesh Kumar
StackMyBiz
Published in
5 min readDec 7, 2020

--

Most of the companies outsource their project in one or the other form. Outsourcing is mainly driven by mid-size companies. Some of the startups also choose this route mainly to get some advantages. Some of the well-known companies (Slack, github, Skype etc) have used it during their startup phase. They chose it for any combination of reasons as mentioned below:

  1. Founders with no technical backgrounds
  2. Lack of enough resources and skillsets
  3. Want to reduce burn rate and time to market

Outsourcing challenges

Outsourcing does solve some of the problems, but it is not a silver bullet and can cause issues if it is not managed correctly. Generally, startups run into such problems because they do not have experience in managing it.

Waterfall Development Cycle

Most of the outsourcing companies follow waterfall development cycle. I know it is a pre-historic age model but trust me they do follow this model even in the current time. They need all the requirements upfront. They estimate the development time and cost based on this but most of the startups do not have a well-defined product. It takes a couple of iteration before they could sense the final product. So any estimates of timelines get thrown out of the window. Startups want faster iterations but the waterfall development model comes in their way. Outsourcing companies do not follow a continuous delivery model. In most of the cases, they do not even have CI/CD. They generally deliver by end of the development cycle and hence they miss out continuous feedback cycle that is really important for a living product.

Two teams

Onsite and offshore teams are treated as two different teams. There a single person, mostly the program manager or account manager, is responsible for taking care of communication. This causes unnecessary communication overhead and also introduces bottlenecks in the process. Not to mention, an extra hop in the communication line causes message attenuation which further aggravates the problem.
Two team model causes unnecessary boundaries reducing the overall productivity of the team. The offshore teams also do not feel very confident in taking more ownership and most of the time they are hesitant to make any decision which eventually slows them down.

Development black box

Most of the time development process is a complete black box for the onsite team. The only document shared between onsite and offsite teams is the requirements document. But engineering process requires a ton of other living documents that are barely shared (architecture document, test plan document, production readiness document, etc). This becomes a significant problem when they want to move the development to in-house or to a different outsourcing team. This makes the existing project hard to maintain and causes unnecessary burdens. If they have used any proprietory technology, the problem gets compounded.

Solutions

These problems are not hard problems and can be managed easily with the right mindset and experience. Here are some of the tips.

One Team

Treat the outsourcing team as an extension of your team. Involve them in the decision process. Let them own the product. It makes them equally vested in the product and its success. This is a two-way street, both outsourcing and client companies should be equally committed to the success of the project.

Constant Feedback Loop

The primary cause of such project failure is due to communication gaps. Generally, the root cause is not setting the right expectation and missing the feedback loop. The focus should be to improve synchronous and asynchronous communication. Document almost everything in the engineering process (Requirements document, tech spec, test plan, production readiness, dashboards, runbooks, etc). This provides different avenues where both the parties can sync on the expectations and get aligned. This also reduces the bus factor, makes ramp ups easy and productive.
Regular short sync up calls go a long way and provide constant feedback to stay aligned. This provides an opportunity for the team to ask questions and get clarifications. Weekly demos show the current progress and clients also get an opportunity to see how the final product would look like. This is helpful particularly in the case where the client is following an iterative model for developing the product. This is suitable for those products which were not well defined at the beginning of the project.

Automated Testing & Better Test Coverage

If you really want to iterate fast on the product, it is better to have 95% test coverage. So you would know immediately if something breaks. The bugs become costlier if they get detected in a later phase in the development process. So it is imperative to have better test coverage. This saves a great deal of time and increases development speed 10x. This ensures code quality too. Also, you want to automate all the testing and you don’t want to waste engineering resources on testing. The automation tests should also be well integrated into CI/CD.

Automate everything & invest in observability

Automate almost everything, this increases the productivity of the team. Sometimes the client company doesn’t realize that it is an upfront investment that can give dividends throughout the project life cycle and also decreases the product iteration cycle. For example, you want engineers to quickly merge their Pull Requests (PRs) and deploy them in production. This not only shortens the overall development time but also saves huge on bills.

Collaboration tools

Collaboration tools and building one team go hand-in-hand. So it is very important to invest in the right collaboration tools. This makes the team more productive and reduces communication overhead. Here are a bunch of tools that can make your life easier

Slack

This is a great tool for synchronous and asynchronous communication. It obviates email. Most software developers love this tool and many other development tools are also well integrated with this.

Confluence

This is a great way of sharing documents with the team. This is well integrated with Jira which is used for the project management/bug tracking system.

Jira

Jira has become a defacto standard for tracking software bugs and managing projects. This is well integrated with other development tools. Major companies and open source communities have been using this tool actively and have good things to say.

Cloud Based Version Control

You definitely need a version control system (such as github, gitlab, or bitbucket) to track the code changes. Having a cloud-based solution helps a lot and provides other functionality which is generally integrated with other development tools. They are also easy to integrate with CI/CD platform. Such tools are great for having implementation discussions and a tight feedback loop.

Sketch/Figma

Generally, you need a way to share the design with the development team. Sketch or Figma makes this job much easier. All the specifications are built in the design so developers do not have to constantly ask the designer for the specification and color scheme. Everything is in one place and it makes the development and collaboration much simpler. Additionally, it creates all the assets which can be directly imported to any Android or iOS directly. This saves a ton of time and avoids the communication gap.

Summary

There are challenges as well as benefits of partnering with an outsourcing company. Using the right tools and process can eliminate the challenges and makes the partnership fruitful.

--

--

Rakesh Kumar
StackMyBiz

Hi, I am an engineer with extensive experience in highly distributed & scalable systems.