When and how to outsource software development projects
This article was originally posted in 475 Cumulus blog
Taking on a software development project can be a challenge. It involves considering things like: designing user experience, managing resources and budgets, assembling a technology stack, understanding and managing the product’s requirements, schedule and more. One of the ways companies can simplify and make the process more efficient is to outsource the project or parts of it.
Small startups as well as large enterprises often choose to outsource some of their software development projects to another entity to reach a Minimum Viable Product as quickly as possible and within budget.
There are several important issues to take into account when considering to outsource your next software development project.
In this post, we will review the pros and cons for outsourcing software development projects and answer some key questions concerning when and how to do it.
We will begin by discussing 4 key factors in the decision to outsource your project:
- Domain expertise
- Core technology and core business
1. Do I have the man power?
Companies that are already employing software developers occasionally outsource some of their projects for two simple reasons:
Their teams are not able to take on more work, they are tied up with other ongoing projects and shifting focus may hurt their original goals
Hiring additional man power is not possible due to budgetary reasons, internal regulations and hiring procedures.
If that is the case, then bringing in consultants or hiring a development agency may solve the product manager’s problem without relying on existing company resources. This makes even more sense if the project was budgeted aside from the company's ongoing expenses.
2. Do I have the domain expertise?
Even if your company employs software developers who are available, the project may not lie within their domain expertise. In other words, they may not have the necessary skillset, mindset, or experience to design and develop the project.Here are some examples:
- A group of web developers may not be the most suitable for taking on a scientific computation project, such as signal processing or machine vision
- A group of enterprise-software developers who lack any knowledge and experience developing mobile apps.
In such cases, it would make sense to bring in consultants or to outsource the entire project to a development agency whose core expertise are in-line with the project’s technology and development requirements.
3. Do I have the budget?
Some development agencies offer work in reduced rates than what your company pays its own engineers. Therefore, low-budget projects are the first candidates for consideration for outsourcing. This could seem appealing but can also prove to be a fatal mistake. Lower rates may not necessarily mean good quality, even though that is also true for higher rates as well.
I would like to argue that budget alone cannot be your only reason for outsourcing a software development project, especially if you have no prior experience with the consulting agency you want to hire.
Often companies employ whole development teams in other parts of the country or other parts of the world where operating expenses are lower. This can work out very well, long term, when a serious investment into work flows is done and management resources are allocated.
For a single project, budget alone should not be the only reason to outsource.
4. Is the project involved with the core technology or core business of your company?
There are many kind of product companies. Some rely on their core technology and expertise to grow their business. Others rely on marketing, sales, business development and operations to provide the necessary edge for growth and success. Often, it is all of the above.
When considering a software development project, it is important to consider the business impact the project will have on your company and whether your company can sustain such an effort.
A short-term engagement with a consulting agency to develop a product which the company needs to rely on for the coming years may prove problematic, especially when the need to retain the knowledge within the company is paramount.
However, developing a proof-of-concept and even a MVP with a consulting agency is a good strategy to move forward quickly without committing too many resources or growing the company's personnel.
We have covered some key factors when considering to outsource a software development project.
Next we will focus on what to keep in mind when outsourcing becomes the viable option.
I have decided to outsource my development project. Now what?
First, congratulations. You've taken a serious step forward. The next step would be to locate and hire an individual developer or a development agency. Before doing so, it is important to set your own expectations and to understand what an outsource will and will not do for you.
Please note that the following list provides a guideline and not an exact recipe. It may change depending on the nature of the project.
You can expect the outsource will:
Understand your requirements in great detail - You must expect and demand that your outsource understands your requirements, ask questions, suggest ideas based on their past experience and even challenge you in some cases. Communication is crucial. You should plan on spending a significant effort in communicating your requirements and making sure they are well understood.
Build a technology stack suitable for your project - The old proverbial saying "There is more than one way to skin a cat" is very true when it comes to choosing a technology stack for your project. However, be aware of the Hammer and Nail principal. If your outsource technological experience and knowledge is narrow, their recommendations may be biased or restricted to their limited perspective. You would like to be able to trust your outsource to bring to the table a broad knowledge base that enables them to fit the solution to your needs and not vice versa.
Propose a development plan with budget and timeline estimations - Getting from a requirement document to a working product is hard. It is even harder when requirements change along the way and become a moving target. Such is the nature of software development projects. Most consulting agencies will try to avoid providing you with a fixed target date and a fixed budget. Instead they would rather work on a retainer, an hourly rate or payments based on incremental milestones. The longer the project, the more it makes sense to break it down to steps and milestones. You can definitely expect your outsource to budget and provide timeline estimations for each step, which you can compare to the actuality of the step or milestone once it is achieved.
Write quality code - This one is may seem obvious, but may not necessarily be easy to measure. For most outsource projects, it is the customer, you, who retains the intellectual property, that is the source code when the project is done. You should expect and demand that the code is delivered:
- Well written
- Includes unit tests and integration tests with high code coverage
Perform quality assurance testing- Code needs to be tested, manually as well as automatically. Depending on what you hire your outsource to do, QA testing will have to fall into theirs or your responsibility. If you hire a development agency most likely they will also offer QA services. Make sure that both you and the outsource understand each one's responsibilities regarding QA. In addition, it is expected that the outsource will provide, free of charge, a grace period. Once the project is completed and fully delivered, you can expect the outsource to continue fixing bugs that you or your clients discover. Make sure this period is stated in your contract. Depending on the project, 3 months usually is a good average
Adhere to deadlines - You should absolutely expect your outsource to adhere to the project's deadlines. While this sounds obvious, it may not be easy to do. Reasonable and achievable deadlines result in careful planning, which you and your outsource must do together. Once a commitment has been made you should hold the outsource accountable. However, if during the work the target has shifted, requirements changed, additions were made, these will not only impact the cost of the project but also the timeline. Sometimes things take more time than originally estimated. That happens all the time. Expect your outsource to inform you when there are delays, well in advance, so you can make informed decisions based on the incurred delays.
Stick around - Projects usually don't end after one development cycle. Unless it was your company's decision to scrap the project, most likely you'll need on-going work. At this point your outsource knows more about your project's technical infrastructure, architecture and code than anyone else. Therefore, continuous service is paramount. If your outsource will not continue to support you for future requirements its best to arrange a proper handoff to someone else.
Maintain confidentiality - When you outsource a project, in most cases you will expose your company's business decisions, plans and strategy to your outsource in a way which you wouldn't otherwise do with anyone. This will often be done in great detail as a consequence of working together. You must expect and demand that your outsource maintains confidentiality with regards to your project. It is recommended to sign a non-disclosure agreement (NDA) prior to exposure of any business details. Also, your contract should include a none-compete clause.
Do NOT expect the outsource to:
List your product requirements - Nobody knows your plans and ambitions better than you. Do not expect your outsource to do product definition and product development for you, unless that's exactly what you hired them to do.
Understand legal implications - If your project includes the usage of data, public or proprietary, graphic assets and even open source libraries, it is your responsibility to understand the legal implications and to make sure they are inline with your company's regulations.
Work outside the scope of what was agreed upon - Software projects are dynamic. Unless your project is very small, it is likely that by the time its done you've realised several things along the way you didn't think about when you first set out to do it. Don't expect your outsource to perform more work that was initially agreed upon, without extending your initial contract.
Pay for software licenses or operational costs - Your project's technology stack may include enterprise products which involve licensing fees. You should expect your outsource to communicate this to you in advance, but not to pay the licensing cost. Any operational costs that involve deploying and running the product in production should be agreed upon in advance. If you intend for the outsource to deploy and maintain your product, that should be part of the contract.
Do I need a single developer or a development agency?
There is a wide range of businesses offering outsource services. From Individual freelancers to large enterprises with massive man power.
Selecting the type of outsource depends on several factors like: expertise, work capacity and range of services. If your software development project is rather small, then hiring an independent consultant may be cheaper than going through an agency which has management overheads. It may also be less time consuming. However, if your project requires a team effort or requires multiple skill-sets, then working with a cohesive team, who has experience working with each other, will most likely yield better results, even with the premium overhead. Some development agencies offer turn-key solutions and their staff may include:
- User experience designers
- Visual designers (graphics artists)
- Front-end developers
- Backend developers
- Data scientists
- QA engineers
- DevOps engineers
- SEO engineers
Based on your project's requirements you need to understand what you and your company bring into the table, and what you want to outsource. Based on these understandings an informed decision can be made regarding the kind of outsource fitted for the project.
Time is also a factor. A single developer or small team may be able to produce less results in parallel than a large team, but are easier to engage and bring up to speed. As so states by Brooks's law, putting more man power on a project doesn't mean it will be developed quicker.
Your company's ability to manage the technical details of the project is another key factor. If your company does not have a competent CTO who can oversee the development phase, then working with an agency, who employs people of various skill levels, may be a better choice than working with an individual freelancer.
A development agency is more likely better equipped to handle long-term projects and are likely to better sustain long-term relationships and on-going support after product launch. Once the product requirements are understood in detail, it is easier to gauge the kind of relationship you will need with your outsource and determine, based on the outsource's capacity, if they fit the bill.
Offshoring Vs. Near-shoring
Starting to look for a development agency or an individual developer begins with two major options:
Near-shoring refers to agencies or individuals who are geographically close to where your company is located. There's no exact definition regarding distance or border lines. Near-shoring may or may not include physical meetings and/or onsite work.
Offshoring refers to agencies or individuals located anywhere in the world, particularly in locations remotely to yours, where physical meetings are not possible or not worth the expense.
Both options have advantages and disadvantages:
Reasons for offshoring:
- The biggest advantage of offshoring is a much larger pool of talent. Even if your company is located in one of the largest technological hubs of the world, it can not be compared to a world-wide pool of talent.
- Offshoring to agencies or individuals in Asia and Eastern Europe is considered to be cheaper as labor costs are lower. Some countries have a continuously growing number of developers and engineers and they can provide excellent engineering alternatives to your local talent.
Reasons for near-shoring:
- Proximity is probably the biggest reason for near-shoring. Not only it provides you with a workforce who's working at the same timezone as you, there are most likely less differences when it comes to language and culture. Consider this story as a good example.
- Face-to-face meetings are not an absolutely necessity but they are very useful. This becomes very effective when the project is complex and requires project managers from both sides to discuss progress on a regular basis.
- In some cases the outsource performs work which needs to integrate with other projects your company is doing. If so, then the integration is easier when people are geographically close by and response time to one another is easier and quicker.
- Your budget restrictions require you to hire local people
How to prepare a project for outsourcing
Details, details, details. Let me say that one more time ... details !
As the saying goes "the devil is in the details" couldn't be more accurate when it comes to preparing a software development project, and is even more true when the project is outsourced.
As the project lead, it is absolutely paramount that you know exactly what you want and are able to communicate it and articulate it really well.
The method of doing so depends on the nature of the project, on yourself and your resources. It also depends on what you're hiring the outsource to do.
The following lists things which will make sense to prepare before handing over a project:
The project must be well described from the user's perspective. This is a non-technical detailed specification of the project, its scope, its list of features and capabilities, and target audience. How it is done is entirely up to you. It may include documents, layouts, wireframes and illustrations.
If the outsource is doing development work only then the UI and UX designs must be handed over in their final state. It doesn't mean that changes can't be made, but a general concept of the UI is definitely not enough. Therefore the project needs to include at least a complete set of wireframes of all screens. Better results will be achieved with a complete visual design, with all graphics included, so the developers can turn in into an actual working product.
Use cases and scenarios should be described, targeting different personas using the product and detailing the way they use it. This will reduce the number of gotchas you will encounter along the way. For example, people of different age groups, business customers vs private individuals, and most of all the different motivations users have for using your product.
What to look for and how to select an outsource?
Skills, experience and capacity must be taken into consideration when selecting an outsource suitable to take on your project.
Every software project is based on a technology stack. The stack is a suite of software technologies, products and packages, which collectively are the foundation your project is built on. Software products are rarely developed from scratch and almost always rely on 3rd party libraries, frameworks and services. A Technology stack can be built on commercial products, open source packages and services. Building a suitable technology stack is one of the most important things for a software project.
When selecting an outsource, it is import to either:
Make sure they can work with your existing technology stack
Make sure they have the skills and experience to provide a suitable technology stack
If the latter is the choice then you must make sure the outsource has enough skills to suggest and assemble a suitable technology stack rather than fit your project into the only technology stack they know.
Relevant experience is essential. You cannot outsource a project in the domain of certain field, such as web or mobile development, to someone who's never done it before. Good intentions are never enough. Ask your outsource to show you their previous relevant work. Allow them to speak about it in detail and gauge their experience. If possible, ask for past references.
If your project is rather large it is important to make sure the outsource has the man power and capacity to handle it. The outsource should be able to gauge, from first impression a rough timeline for the project's first iteration and to demonstrate that they have the capacity to handle it.
How to set expectations and manage your outsource
It is unrealistic to set out to do a software development project and not monitor its progress. This is true whether you're outsourcing or developing in-house. Whether you're using agile methodologies or a more traditional project management approach, it is essential that you continuously maintain control over the process and monitor progress. Check its pulse, so to speak. In reality it would make sense for you to communicate with your outsource on a weekly basis at the very least, to learn about the progress they're making and to tackle the issues that arise during the development phase.
In addition it would make sense to advance using short-term goals which are achievable in a short period of time (a few weeks at most). Short development cycles can focus the entire team and keep things clearer and simpler. This will also give you a chance to observe your outsource's work and mostly to make adjustments and course corrections.
Furthermore, if you're paying your outsource based on deliverables it would make sense to follow a process like so:
- The outsource will provide you with a work plan for an agreed and short period of time, for example two weeks. This work plan must include measured deliverables.
- During the set work cycle you will receive continuous updates and maintain communication to handle issues that rise up.
- At the end of the work cycle the outsource should be able to demonstrate the product of their labor. If the progress does not match the expectations (which is not uncommon) then this needs to be discussed and new expectations must be set.
There are countless articles online which discuss managing software development projects. In recent years agile methodologies have proved to be not only popular but also very useful.
Should I hire a contractor for each skillset or should I go for a turn-key solution?
Software projects are rarely the same. Each project requires its unique careful planning. If your project requires different skill sets then, regardless of size and required manpower you may need to hire multiple individuals with multiple skill sets.
Considering a typical web/mobile application project, multiple different skill sets are required. These may include the following:
- Front end developers
- Backend developers
- Mobile developers
- Software architect
- UX designers
- Visual designers
Often, the force that binds all these together is the project manager.
Some development agencies provide turn-key solutions, meaning they employ people with a range of skill sets and can take on the project in its whole. Other contractors, especially individual freelancers can bring in additional people with whom they've worked with in the past. A design and branding agency can recommend developers they've worked with in the past, and vice versa.
There is no one truth to this question and it greatly depends on your style of work and your level of confidence with your outsource.
How to assess the outsource's work and accept deliveries?
As stated earlier, you should not wait for the development to finish before you assess the outsource's work. However, in order to ascertain that the work you're paying for is completed, it is recommended to write down the acceptance criteria and deliverables as part of your contract with the outsource. This is something which both sides will benefit from and will help to make sure that the project ends in a predictable manner.
Managing a software development project is no small feat, which requires some key decision making which will influence its success. In this post we covered the key considerations for when to outsource software development projects and how to go about doing so.