Outsourced Or In-House Developers?

So, you have a workload of software projects, a veritable plethora of projects to get off your plate. Or, maybe you are considering an expansion of your capabilities. Your current team is tapped out… hopefully not overworked and tired; you don’t want to break their backs.

WARNING: I will be using the word “outsourcee” to refer to any entity not in-house performing work on behalf of your company. There’s nothing wrong with the word itself, although it’s full of negative connotations of lost jobs, cheap labor and evil executives. But, if you are a die-hard isolationist or a nationalist, you will be unable to read further. You have been warned. :)

You’re looking at various reasons and wondering if you should hire more in-house developers, or farm out. Here’s the top-level factors I look at to help me decide when to farm the work out. Of course, this is all from an SMB point-of-view; larger companies have a completely different perspective and set of tests to check against.

  • Niche/Esoteric Skills: If the project involves some fringe technology, or unique skill set that will not see much re-use in-house, then farm it out. Note that this could be an emerging technology, or an old one that would bore your in-house team to tears. Usually, hiring in-house for this is a big challenge anyways…
  • Time-To-Market Pressure: If the project involves the need to get something out before competitors claim the territory, farm it out. You should seek an outsourcing shop that will properly staff up so as to get your project out in the time frame you set for it. You’ll pay through the nose, but that may be the difference between sick or swim…
  • Overwhelming Workload: Obviously, one reason to consider farming out is if you have a large spike in the overall short-term workload. This is quite common in small businesses. Instead of slowing down and stretching thin, just bring in short-term, contract-based workers to shore up your team(s).
  • One-off or Short-Term Project: If the project is a side-bar to a core project, or some “throw-away” task where ongoing maintenance is not going to be an issue, consider farming it out and don’t bog down your core, in-house team(s) with it.
  • Experience Gain: You may want to consider randomly outsourcing the “easy, non-critical ones” just to gain experience with outsourcing options in your local area, or the broader market, simply so that you then know a little bit more about who to go to when it really counts.

There are undoubtedly more reasons, but I think these are the main, big ones. The more these reasons exist in any one project, the more you should consider farming out the work. Otherwise, don’t. It is better, and less costly, to go in-house. No really!

First, less face it, every dollar you spend creates/elevates talent in some individual, and it is generally best to keep that talent close to your vest rather than see it go to another company, especially a competitor.

Second, there’s more to developers than churning out code, even the so-called “boilerplate” stuff. Being able to effectively understand and translate requirements and interact with business users comes, in large part, from close familiarity with the people and the processes, a.k.a. the “ramp-up” or “learning curve”, and the short feedback cycle that comes from being in-house. These two have had a larger, empirical, hard-to-measure impact on any team’s performance than anything else. It doesn’t help the “super-awesome outsourced guru” if he has to wait two days for an email reply on a process issue from some department because they are swamped with some monthly peak of work. Every time you farm out, you’ll hit this over and over again. In-house is undoubtedly both a short-term and long-term investment. Treat it as such.

Lastly, contrary to the typical assumption I hear, farming out is usually not cheaper. A good, in-house team will simply cost less than an equivalent, good outsourced team, even if you consider all indirect costs. My off-the-cuff, empirical, “from-the-SMB” conversion factor is that outsourced is 2-4x more than in-house. One main problem is that because the outsourcing market, even post-dotcom bubble, has an incredibly high markup on IT work. Unfortunately, the perception that outsourcing is cheaper is because the comparison is usually between a bad, in-house team and a good outsourced consultancy.

If you are going to farm it out, the next question typically becomes who to farm out to. There are four general categories:

  • Freelancers: These are the “unincorporated” outsourcees that cost on the low-end of my conversion factor. They usually don’t have much overhead to worry about because the job isn’t their primary source of income. Lots of developers from large, status-quo-loving companies want to expand their skills and so pick up work on the side. Or, out-of-work, between-job developers will take on short-term contracts to fill the income gap. The main and dominant problem is the lack of accountability on multiple levels, from the personal involvement to the legal ramifications if they drop out on you. If you don’t know any freelancers, consider shopping on websites like Rent-A-Coder.
  • Local Outsourcee: The local outsourcee is a local, incorporated shop, usually with a smallish team or teams, that makes a living providing recurrent, happy IT service. They are usually not cheap, because of their business overhead. However, as a manager, if I can’t keep the capital in the house, I sure try to keep it in the neighborhood, because it eventually comes back to us. I’m not talking about “paying it forward” (although if that does happen, then great!), just that a vibrant local economy is indirectly good for my business. On a selfish level, it also helps me build out my local personal and corporate network of contacts.
  • Remote Outsourcee: There are all sorts of levels of outsourcing here, ranging from neighboring states, to neighboring countries to full use of sweatshops in Central Nepal. If you are an SMB, you should really not go to this option, unless you have a direct reference to an active shop used actively by another SMB you know and trust. I have heard too many horror stories of SMBs burned by this kind of outsourcing. The problem is that lots of these big offshore consultancies are driven by big customers and you’ll simply get lost in the mix. The smaller, satellite consultancies that emerge in such areas are usually unable to serve you properly because the big shops drain the area of real talent. The former is exorbitantly expensive, the latter is expensive in terms of direct cost due to the inevitable mess-ups. You’d be surprised how not cheap offshore work in places like India has become.
  • Internship: Don’t forget to consider using variants of the idea of internship. The concept is that you get some raw talent and let him/her beat his head on a project in exchange for a low wage and a great reference. Like farming out locally, there’s a lot of goodwill generated in this route. You may find your next hire in an intern; you certainly may find out who not to hire too. Each individual will hopefully go on to speak highly of you to other students or junior co-workers, generating potential future hiring opportunities. But, if you want to do this right, don’t hire just to stick a kid in the corner cube, and leave him or her to sink-or-swim. What you save in hard dollars will have to be spent in your own or senior developer’s hand-holding time.

This pretty much sums up how I consider outsourcing, short of a lengthier novella on the subject.

One last warning: Be open with the work and get your team’s opinion on farming out any work. Don’t let them hear about it indirectly and give them the opportunity to step up if they want and can deliver. Psychologically, from a morale point-of-view, keeping your team out of the loop is a big no-no.

What are your experiences? Do they match up with the above?

About these ads

9 responses to “Outsourced Or In-House Developers?

  1. Paul, great article.

    I know you say you factor in all the indirect costs when formulating your expenses of inhouse vs outsource, does that include the value of the added work during the time that your inhouse team is free to accomplish their other goals?

    When I meet with potential clients that are over booked, I try to showcase that by outsourcing work, they add the value of keeping their inhouse team focused on clearing the tasks they have on hand out of the queue, rather than pushing work back.

    At the end of a 3 month project, not only do you have a finished project ( hopefully ) but you have 3 months of other value adding work done by your in-house team. Whereas, by not outsourcing, at the end of 3 months, you only have that project complete.

    Just another aspect to showcase there is no right answer for all situations.

    Enjoy the blog, and look forward to reading it regularly.

  2. Thanks for commenting, David.

    Obviously from the post, I will agree there is inherent value in outsourcing, especially if a client is overworked and important projects are still waiting on the back-burner.

    To answer your specific question, no, I would not add “freed time” to the evaluation. If I have a dollar to spend on a project, and I spend it outside the company, that means I still have to find another dollar for the in-house, core project. That would be taking an ROI too far, IMO.

  3. The “overwhelming workload” scenario is a great case for looking to outsource, but be careful that local resources are not so saturated that outsourcees are left to work with no feedback or direction.

  4. @David: Good observation. An often forgotten “cost” of outsourcing is that local resources, both developers and stakeholders, will have to be available to some degree to the outsourcees. If they are truly far over-worked, outsourcing is not a solution. In fact, you should likely be trying to hire more in-house developers before they leave!

    If they aren’t available, either because they are over-worked or because proper mechanisms/governance aren’t in place to, this will introduce “amplified delays” as the outsourcees wait on feedback. There are many techniques to mitigate this.

    Thanks for adding to the article.

  5. Mathew Duafala

    In my experience, outsourcing doesn’t really gain a whole lot. In all the cases where the companies I’ve worked for have tried to outsource some part of the project, it ended up coming back way over schedule (and hence over the original budget), or didn’t fully meet the requirements that were laid out. You touch on this in the post, but don’t realloy go further.

    There is also the other side of the coin, in that the code that was written outside the company will have to be extended and maintained by people who aren’t familiar with the code etc. This can breed resentment in the team, as they see it as a burden being imposed by the outsource team.

    In your experience, is outsourcing really worth it?

  6. @Matthew: I don’t think I could make the same generalized statement as you, but I agree with it in part. In my own experience, and those of some colleagues, outsourcing can work, but only in the scenarios above, and even then with caution. You have to be realistic about your expectations and you have to work with a quality outsourcee.

    It all depends on your definition of “success”.

    If it is to achieve a cost savings, then you are likely on the “fail” side of the equation. The only reports I’ve ever seen that speak of a major savings in cost are those put out by outsourcees. Normally, I’d estimate you can get maybe 5-15% savings under good-to-great circumstances. So, that is why I do not mention “cost savings” as a viable reason to outsource!

    Likewise, if it is to achieve better delivery time at a similar cost to doing the work in-house, you are again likelier to be surprised than happy. Even with great governance and solid processes, outsourcing (especially to another state or country instead of locally) introduces an extra overhead that you simply don’t have with an in-house team.

    However, if cost isn’t an issue but time-to-market is, then the right outsourcee can easily put the right amount of staff on the project to get it out as fast as reasonably possible when maybe your company isn’t positioned to do so itself. So success was achieved, but the criteria is totally different. It probably cost more, but it was one of those “dam-the-torpedoes-full-speed-ahead” projects and success is measured as being on-time.

    Furthermore, to play Devil’s Advocate, whereas many outsourced projects “fail”, so do many in-house projects. We have to tease apart the outsourced projects that fail from the projects that failed for reasons other than the “outsourced vs in-house” dimension. Rarely have I seen an IT group hit all marks in-house, but fail every outsourced project.

    As to your second point on maintenance, I totally agree there. In some cases, namely the “one-off” project, ongoing maintenance is not an issue, so those types of project are great to outsource and why I put it as one of my criteria. The “esoteric skill project” works similarly, as ongoing maintenance is not going to be in-house, but for different reasons.

    Where I should have worked your point in is in relation to my warning at the end, which typically applies to farming out work that could have been done in-house, a.k.a. the “overwhelmed test”. The “pre-condition” to outsourcing that kind of project is to allow the team to weigh in on if the project needs to go out. This makes them participatory in the strategy, which is good for morale.

    The “post-condition” is to have them involved in selection of the outsourcee and have some monitoring rights into the progression of the project so that it meets in-house standards. I once outsourced a web site design and, not thinking about staying involved because “hey, it’s simple”, I ended up with a website using some technology that I was unfamiliar with and with a site that was SEO-unfriendly. I couldn’t maintain it as it would be a time sink. We used it as-is for a while and eventually farmed out a “v2.0″ but stayed plugged in. That project was a success.

    Thanks for your input!

  7. Well I run an outsourcing company that has delivered successful development projects and also saved people money on generic IT Support Outsourcing.

    The latter is easy to justify cost savings on – get rid of the full time IT guy at £24-30k and contract us at £12-15k – less money, better service, holiday cover etc. etc.

    However I digress…

    With regard to software development, I would agree with the whole concept of outsourcing overseas or out of the local area. I’ve got links into other companies in the area to help smooth out the usual peaks and troughs of projects, and I’d much rather use either a freelancer or a local IT shop that I can go back to in a years time to ask what the hell that piece of code was meant to do! It also means you can build up a trust relationship with those people which can only help.

    With regard to cost, in house staff will always be cheaper on a day rate (as outsourced staff will be paid similar wages PLUS a markup), however depending on the project size and your internal team size there may be cost benefits (for instance if you are developing something that needs a certain test harness it might cost you a lot to buy that test harness – whereas an outsourced testing company might already have it – we’ve hit this obstacle with our current project). This makes the project cost cheaper.

    Also outsourced staff are like a tap – don’t need them, don’t pay them. In-house staff are a continuous cost – you can’t tell them to take three months off!

    Most of my customers don’t have an in-house team so we have nothing to compete with (or I’m up against big-5 consultancy firms and suffice to day my day rates are a little lower!). However it would be interesting to compare costs with an in-house team.

    One advantage with outsourcing is that you can tie payment into delivery – which motivates the outsourcer far more than in house teams (who get their salary regardless) – this can help with project success. Plus you can sue an outsourcer for a failed project and recoup money, you can only fire internal teams! (Bit negative I know, but it’s worth bearing in mind!).

    Just a few more thoughts!

    Russell.

  8. @Mathew, your point is why the biggest issue in my perspective in the IT outsourcing world is lack of competent Project Managers. Or, said in another way, the traditional PM role in IT projects, often a non-technical person with supreme authority, is not as good as some of the management ideas that exist in most agile methodologies today.

    I make those comments above to simply showcase how VALUABLE a project manager is when you have a good one… they are the difference between overrun, and on-time.

    Any project whether in house or outsourced can fail if your PMs really aren’t owning that project, and buy into it’s success. In house project succeed at higher percentages I believe because the people actually doing the work don’t have to rely on a PM to get them the information they need, they can walk over to another department. Outsourced projects rely on a PM to facilitate every integration point, and it’s those projects you see what value you have in a PM.

  9. @Russell:
    “get rid of the full time IT guy at £24-30k and contract us at £12-15k”

    I’m not sure how that same guy would cost 50% less because you hired him rather than me. If you are talking about local, in-shop guy vs. Russian/Indian guy telecommuting into my infrastructure, then maybe, but then there are other issues with that.

    “One advantage with outsourcing is that you can tie payment into delivery – which motivates the outsourcer far more than in house teams (who get their salary regardless)”

    Not in my shop! :)

    “Also outsourced staff are like a tap…”

    Very true. This is one useful way to look at outsourcing…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s