How to Succeed with Outsourcing Software Development
You’ve been landed with the holy grail of project management: an initiative that will take your organization in an exciting direction
The good news: it’s exciting and new. There’s a whole range of possibilities ahead, and you can’t wait to get stuck in.
The bad news: it’s exciting and new. There’s no real template to follow, and you’re not sure you have the time and talent in-house to deliver.
Sound familiar? It’s a common enough dilemma in the software world, particularly for companies that are only just realizing the potential that engaging customers digitally can offer.
You’ll be happy to hear, then, that there is a solution to this issue:
Tempting as it is though, to find the snazziest-looking agency out there and let them get on with it, you’ll need to think hard about what sort of outsourcing you want, how much involvement you’d like and how best to manage the relationship.
That’s why we’ve put together this guide. We’ll cover:
- Why you should outsource software development
- The different types of software outsourcing available
- How to find the right team for your needs
- How to communicate well with development companies
But first, just for clarity:
What is outsourcing?
Outsourcing is, in a nutshell, contracting out business functions to external suppliers rather than fulfilling them internally.
There are many areas that companies can outsource. Common ones include:
- PR and advertising
- Customer support
…and yes, software design and development.
Why should you outsource?
On a purely practical level, you should consider outsourcing if you don’t have what you need to do the job in-house already.
Of course, you could start from scratch and hire an entirely new team, if you think that software development will be a key strategic area for you in the near future. This does, however, require a large injection of cash upfront and anywhere between three months and 1 year extra time, whilst you recruit the best people for the job.
This throws up particular issues for smaller companies, whose ability to compete is based around speed and agility. Hiring is expensive and time-consuming, and many software projects require a level of expertise that a single developer (or two) can’t cover.
What outsourcing can do for you
If there’s one thing that outsourcing gets you access to, it’s expertise.
Top development agencies attract the very best talent around. These people eat, sleep and breathe software development, keeping up with all the latest industry developments and best practices.
They’ll have worked on projects for a range of clients and be able to draw on this experience to develop the best possible software for your company, anticipating common roadblocks and offering advice on points that you might not be sure of.
It is difficult, time-consuming and expensive to develop this kind of expertise in-house. Particularly if you operate in countries with a skills shortage, top developers don’t come cheap, and competition for them is fierce.
If you’re a small company, finding this sort of expertise in any reasonable timeframe, at a price point you can sustain long-term, will be a serious uphill struggle. Outsourcing doesn’t always come cheap, but it’s a reliable way of obtaining the experience you need without a months-long search for development talent.
Outsourcing when you already have the expertise
It’s not as weird an idea as you might think.
If you’re a tech company with an entire team of developers whose entire job it is to create, maintain and update your products, outsourcing probably isn’t where your mind would immediately go to.
However, it’s not uncommon for companies with an established in-house team to outsource, particularly if deadlines are particularly tight, the required technology or design expertise doesn’t exist in-house or there are other dev projects taking up their time. It also bypasses the HR headaches and risk of making full-time hires.
Good development agencies can offer a mix of full-stack technology experts, UX/UI designers and product managers. Meaning you can augment your team as you need with these various roles on a flexible basis.
The more detailed picture you can paint, the more accurately you can assess how workable it is with your existing team. From there you can work out whether:
- You’d like to hire extra permanent staff (a good option if you think that your engineering demands are going to increase permanently).
- You’d like to hire some contractors to work on the project – potentially a good compromise, as you can always keep them on or offer full-time positions if demand increases permanently.
- You’d like to outsource – if this is a particularly busy period for you and/or you want a speedy delivery or team flexibility.
What different types of outsourcing are available?
If you want to outsource your software development, you’ll need to understand the various different methods and models you can use to do this.
Let’s start with where you want to outsource to. There are three options here:
- Onshoring (outsourcing to a company in the same country as you).
- Nearshoring (outsourcing to a company in a nearby country).
- Offshoring (outsourcing to a company based in a country further away).
Each has its own pros and cons, and the best option really depends on the expertise your project needs, how your company works with its suppliers, and your budget.
As a general rule, offshoring is the cheapest of the three options if your company is based in the US or Western Europe. It also widens the talent pool available, which is particularly handy if your region has a skills shortage in the area you’re looking for.
On the other hand, it’s far easier to communicate with a development company if you’re based in the same geographic area.
Meetings and catch up phone calls will be easier to arrange, and you won’t be emailing across a massive eight-hour time difference. Onshoring or nearshoring is faster, more flexible and much more workable if face-to-face time with your outsourcing company is important to you.
Which outsourcing model is right for me?
Deciding on the location of your development company is just the beginning. You’ll also need to work out how to structure your contracts with these suppliers.
This will depend, to a large extent, on what you’re outsourcing and why.
If you want to outsource a specific project (rather than just all software development in general), you should consider:
- Fixed price contracts: the simplest option to go for. But also tricky to get right. You agree on a flat fee for the contract, with a specified date of delivery. This option takes a fair amount of planning upfront but is easier to budget for. On the other hand, your contractors may be tempted to employ a ‘by whatever means necessary’ approach to hitting the deadline, as they know they won’t get paid for labor outside of that.
- Time and materials (T&M) contracts: you pay your contractors for the materials they use, and a fixed fee per period of time spent on the project (most commonly per-day or per-hour). These contracts can much more susceptible to scope creep. However, this model is more flexible and allows your contractors to dedicate the time your project needs without being left out of pocket.
Fixed-price contracts work best for smaller projects that you’ve mapped out in detail before the involvement of any developers. Longer-term, complex projects with dynamic requirements generally work best under time and materials contracts for the flexibility they offer – which is absolutely essential if you’re aware that the scope of the project might change.
As a rule-of-thumb, agile projects work best under T&M, as the nature of these contracts allow projects to be run in a truly agile way. Fixed-price contracts don’t suit the iterative nature of agile, and are better suited to projects using the waterfall methodology.
If you’re looking to outsource software development on an ongoing basis, consider a dedicated development resource contract. In this case, the contractor will assign you an ongoing support team, often with a dedicated account manager, in exchange for a monthly retainer. This is a great option for:
- Companies with no software development capability and no real idea of where to start – as well as outsourcing the development itself, you can request a dedicated development team, with UX designers, testers, QA engineers and project managers.
- Companies that don’t have the resources to build an in-house software development team – or operate in a country with significant skills shortages.
How to find the right contractor for your software development needs
Finding the right partner can make or break your outsourcing efforts.
Get it right, and you’ll have a dedicated team of experts with years of experience in software development. They’ll understand your vision, keep you updated on both progress and any setbacks, and importantly – make you look like you’re very good at your job.
Get it wrong, and you may end up paying lots of money to exchange passive-aggressive emails about what exactly they agreed to deliver when and why your project is behind schedule. It happens, and isn’t even necessarily anyone’s fault – it’s just that some companies don’t work particularly well together.
To find a software development contractor that you can work well with, it’s important to ask as many questions as you can when they pitch for the work. These should include at least some of the following:
- Can we see some references from clients similar to us?
- What projects have you worked on recently, and can you show us the end result?
- Do you specialize in helping clients from a particular industry, or of a particular size?
- How does your team prefer to communicate? And via which mediums?
- What project management tools and methodologies do you prefer?
- We plan to complete this project in x number of weeks. Would that be a workable timescale for you with (or without) a detailed project plan?
How to communicate your software development needs with outsourcing companies
Communication is key to any successful working relationship. Outsourcing software development is no exception.
Regardless of project or contract type, make sure you arrange regular catch up calls with the company you’re outsourcing to. For ongoing contract types, you’ll likely have an account or project manager whose job it is to keep you in the loop.
These should be scheduled monthly at a minimum. Fortnightly is better, and you might even want to do weekly calls depending on how much work you’re outsourcing and how complex it is.
This gives you a chance to talk through any concerns, avoids misunderstandings and offers an opportunity to see what progress has been made – you don’t want to be surprised after weeks of no contact with something that doesn’t look like what you had envisioned at all!
This leads us conveniently onto…
How to brief your software development outsourcers well
A good project brief keeps you and your contractors on the same page and will result in a finished product that’s in line with what you wanted.
A bad brief can lead to confusion, misunderstandings, scope creep, budget overruns and, potentially, an end product that you don’t like and doesn’t meet your requirements.
We’re not exaggerating – it is that important to get the brief right.
One way to make sure you and your outsourcing company are on the same page is to write a very thorough product requirements document for each project you want them to work on.
This is a process in itself (and you can read our complete guide to it here), but briefly, this should include:
- The purpose of the release
- Which features need to be built
- The user base this will serve
- How these users will benefit from it
For each feature you list, make sure to include user stories, as well as:
- Any dependencies (do you need your app to pull directions off Google Maps, for example)?
- Systems requirements (do you want this to run on iOS? Android? Windows? All three?)
- Usability requirements (does it need to be voice-activated? Operated with a single hand?)
The more detail you can go into, the faster your outsourcing company will be able to create what you have in mind. Sure, if you miss something, they can create it for you later – but this can add unwelcome extra time to the project.
You might want your contractors to figure this out themselves as part of the outsourcing arrangement. Many teams have dedicated processes to help you validate what you should be building, and how to best build it.
But, you should be able to articulate the ‘why’ of the project. Why does your organization need to build this product, and why now? At the very least spend time mapping out the business case for a project, and what features you need to support this.
Because even though you think you might want to let your outsourcing company deal with it all, you probably do have some assumptions about what it will end up looking like. Even if this is as simple as ‘these are the general features we need’, ‘the app needs to be branded per our brand guidelines’ or ‘our customers have an average age of 65, so could you make sure the text is readable for those with slight vision impairments?’
Every detail helps you and your outsourced team build a better product.