Today I was asked by a client to give them some reasons why they should outsource to reinteractive instead of hiring an in house team. They needed to convince their Board the pros and cons of setting up an internal software development team from scratch versus using reinteractive. The project under discussion was the implementation a bunch of key features for their platform as well as a partial rewrite of key aspects.
Unsurprisingly, I've been asked this question several times by our clients, and my response has almost always been the same; do both.
Before I explain that answer however, I should first qualify the type of project we are talking about here. This is the sort of project that, once it is developed, will require continual upgrades to keep the application working and up to date with the changing needs of it's users. It is a Software as a Service application that has very specific and changing user needs over time.
As an aside, if you are building a software application for a well-defined process, that will not change greatly into the future, then hiring a dedicated internal team will not be financially sound. Using an outsourced development group to build it and then a service like Ruby on Rails CodeCare, for keeping the application code bug free and doing software version upgrades, will be much more cost effective.
But this client is building a SaaS product and so my answer of doing both applies.
What do I mean by both?
Well, first get an outsourced team to dive in and build out the features of the application intensively and fast, and then - towards the end of the project - establish a smaller team internally to continue to complete the application, building on top of the stable framework the outsourced team has built.
Reasons to In House
Usually the main concerns with using an outsourced team versus an in-house team revolve around three points; A) Control of the Intellectual Property, B) Long term maintainability and C) Cost
I don't know about other development agencies but, at reinteractive, we address these with the following:
A) Control of the Intellectual Property
B) Long Term Maintainability
At reinteractive, every bit of code we write is reviewed by another developer for completeness and coverage, and is verified with automated tests. This is a rule that has helped us develop some amazing platforms. Many times, we have built an application and handed it over towards the end of the build to an newly hired internal team who have said "This is the best Ruby on Rails application code I've ever experienced".
We also offer our CodeCare service and OpsCare service for ongoing maintenance and support if required by our clients, so it is in the best interests of our developers to make the application as maintainable as possible as they may well end up supporting it in the future!
This is a very important factor. Outsourced development definitely costs more, usually at least double the salary and on costs of an in-house team. However, the time spent building up an in-house team and getting them rolling could mean you lose a lot of time in getting to market, which could have a significant impact in terms of lost revenue.
Also, you must commit to the number of developers when hiring whereas, with an outsourced team, you can scale up and down as needed depending on the development load and priorities.
Reasons to Outsource
So with all of the above, why do we recommend outsourcing to these sorts of clients? Well, obviously, we talk from a vested interest, as we sell outsourcing services. But with that in mind, here are some reasons why I think this is the best way to go:
1) Time to market
Getting a competent outsourced team working on your project can be done in a couple of weeks. You can go from nothing to a team of 2-4 people very, very quickly. This would include a project manager, any UX and visual design needed as well as the developers to build out the application. Going to hire these could take months of finding the right person, getting them signed up, setting up the work spaces and so on.
2) Get the Best Now
Using an outsourced team means you can take the best and use them for the "hard stuff" of architecting and building out your application so it is stable and scalable. This means instead of waiting to find that right developer to handle the architecture in a silo, the outsourced team can draw on the knowledge of dozens of co-workers who have handled similar problems in the past and know how to handle it.
3) Experienced Project Management
Getting an outsourced team should mean you will be allocated a project manager who has "seen it all before" and knows how to keep a software project on track. Hiring in-house means you will need to find this project manager, and if they have not been working in a consultancy in a prior job, may have only seen a few projects and not have the depth of experience needed to get the job done.
4) Reduced Pain
Once you build the project and it moves into a maintenance, general improvement stage, you might not need 2-3 highly skilled developers on the project, firing or retrenching good people is hard.
5) Easier Hiring
Once you have built a project with a highly skilled team, you can hire a more mid-level or junior developer during the project to work with your outsourced team. They will be trained up and contribute to the development of your project, and be in a great position to continue building the project once the outsourced team are complete.
Also, finding mid and junior level developers is a LOT easier in this market than asking for a couple of senior developers.
6) Best Practices
An outsourced team generally is made up of Developers that work on many different code bases and applications, they are more likely to know of solutions (and pitfalls!) that developers working on only a couple of applications might not have been exposed to. This saves a lot of time in debugging. A good team should make liberal use of automated tests and have a strong coding style and peer review process to make your code as beautiful and bug-free as possible.
You are paying a premium for outsourced developers and, because of this, it will encourage you to keep them very, very focused on the task to hand, building your project. An outsourced team is much less likely to be ordered off of the project and onto the "latest bug this week" from someone in your organisation.
When hiring developers, you need to hire them and then commit to that amount of expenditure for a long time. Also, it is hard to "scale up" to more developers and even harder to "scale down" to fewer. Using an outsourced team means you can add and remove developers much more easily and are more able to respond to slows in the development of the application.
9) Contingency Planning
Having an external team who understands your code base and how to work with you is also very valuable in the future when you have finished your project and might need to rapidly develop some new feature that your internal team does not have the capacity to handle.
10) Freeing Internal Resources
When you outsource a software project, your chosen agency should provide you with skilled project management as well as the developers, which frees up any internal resources that would otherwise have to handle this project.
So Why Both?
As I said above, many clients of ours have built a project with us and then hired a more junior, mid level developer (or two!) to take over the project towards the end. These new developers generally spent a month or so at least working with our team and phasing over to them handling all the tickets and support calls.
When coupled with our CodeCare service and OpsCare service, you really can get the best of both worlds by proceeding in this manner. A high quality application, where you own the IP and an ongoing in-house development team that is starting with a great base.