How to Outsource Software Development
When we set out to build the most 'badass fertility charting app for iPhone, we decided to use outsource developers. We started the process in March of this year (2012) and the experience has been awesome for us: We have a great product that keeps getting better with every release.
This is not my first run at outsourcing software development, and to be honest my other experiences were more or less disasters. But we got it right this time, here's how:
Step 1: realize that WHO you choose to do your outsourced development is the most important part of the whole process. If you get this right everything that follows will be SO much easier. If you get it wrong, god help you.
Like in dating, don't settle, and remember to hire slowly and fire quickly. Treat this like hiring a key employee. Obviously your product is the most important part of your business, and so who you pick to create it is key key key. Make sure you find the best: developers who are in the top 1% of outsourced developers in terms of cost-quality-speed on the planet. Otherwise you are entering a world of pain. I think it's important to realize that (just like when hiring) you are searching for the needle in the haystack here. So before you do anything, make peace with the fact that the search could be long and annoying.
Step 2: Know exactly who you want. It's super important to decide on your criteria for your outsourced team. The criteria we used for Kindara were:
- A track record of high quality, highly rated apps in the App Store. We used this criteria to immediately knock out any development shops that didn't already have multiple 4 and 5 star rated apps in the App Store. Success breeds success and looking at what a outsourcer has actually done communicates much more than what they say they will do.
- Good communication skills in English. A functional outsource relationship relies on a lotof communication and we didn't want to be struggling to understand or be understood. We looked for excellent written and spoken communication.
- Affordable price. We were (and are) under a budget constraint, so the lower the price, the further we could get on our budget. A startup is a race between traction and running out of money, so this was a very important input to our equation. We looked at shops in India who quoted us $11/hour for iOS development, shops in the US that quoted us $175/hour, and everything in between. Had we chosen the bottom of the market, I'm certain we would have produced a poor quality product. Had we chosen the top of the market, we would have run out of money long ago. The maxim "You get what you pay for" is true in general, but in every market there are deals to be had, and I think we did a great job of searching high and low to find a shop that offers a grade-A product at a price that allows us lots of runway to implement our vision. Matching price and quality is a big part of why this is a search for a needle in a haystack.
- Right size and ability to grow with us. I think this is often overlooked, but there is an optimal size to an outsourced partner. In our hunt we talked to companies with over 1,000 (!!) programmers on one end of the scale, and single practitioners on the other end of the scale. The company we finally went with has about 20 iOS developers, and 40 employees in total, so they will always be big enough for us, but aren't so big that our project gets lost in the shuffle. This is important. If you go too big you become a tiny fish in a huge pond, so when something goes wrong, or you need immediate attention, you have no leverage. A horrible place to be as a startup. On the other end of the spectrum, hiring a single practitioner, or small group of practitioners puts you at risk in a different way. You become a big fish in a tiny pond and the risk is that the pond will dry up! Developers get sick, they change jobs, they have other projects, or they might not be good at managing their time. Relying on one person as an outsourcer doesn't make sense to me. We wanted a company that would commit to us as much as we committed to them, and this is why size is important. Aim to be a medium fish in a medium pond.
- A good "gut feeling". Essentially this is admitting that my brain is only so good at making decisions. I'm a very analytical person and tend to go with what my head is telling me. However, I've noticed that every time I go against my gut feeling I get burned. So I baked my gut feeling into our criteria. I had to feel good "in my bones" about who we were hiring to do our app. I'm happy I listened to my gut and I'll continue to do so in the future.
- Good references. This is the final check. Practically anyone can find someone to say something nice about them, so checking references is really just a way to get a feel for what your working relationship might be like. Be sure to ask specific questions and to get as much info out of them as possible. But again by this stage you've probably already made your decision.
Step 3: Start looking. Once you have your criteria written down, your job is to find The 1 Shop that fits the bill. It's important to realize that you are looking for one shop. Look high and low and disqualify anyone who doesn't fit your criteria. Good places to look are: oDesk, Elance, references from friends, mentors, and advisors, search online, go to meetups and ask around, etc. There are thousands and thousands of developers out there and the name of the game is to find the ONE that's the right shop for you. It's a lot like dating. Don't settle.
Step 4: Shortlist a couple shops and have them all quote on a clearly defined spec for 1 or 2 weeks of work. The shops that make it through your process should be given the opportunity to quote on the same clearly defined spec so you can get a feel for how they operate. Make sure you know EXACTLY WHAT YOU WANT and have it all written down in a specification document that clearly shows each screen and feature, and describes each piece of functionality in detail. The point of this exercise is not to rigidly adhere to the spec once development starts, but rather to get a feel for how well your potential outsourcers can promise, plan and deliver on a discrete unit of software. Use the quoting process to get a better feel for each of the partners you're considering.
Step 5: Get started. Just like dating, even after the most rigorous vetting process, you won't know what it's like to partner with someone until you try it. I recommend using the spec they quoted and giving the top prospect a shot at delivering the first 1 or 2 week iteration. Make sure source code management is in place, and proceed with confidence hoping for the best.
Step 6: Hire Slowly, Fire Quickly. Treat the first week or two as a test. If your top prospect, doesn't pass the test with flying colors. I recommend firing them immediately and continuing the search. A good outsourcer relationship is a joy, while a bad outsourcer relationship is hell. I've had both. Don't settle. Don't settle. Don't settle. The longer you work with someone the harder it gets to fire them, and so just like dating, don't accept anything but the best. You're worth it.
Step 7: Manage them like an employee. At this point the hardest work (finding the right developer) is done, and so you can pat yourself on the back. From here on in, it's important to keep constant tabs on the development process and make sure everyone knows the next deliverable. Chatting twice per week is a minimum requirement and I find it works better to chat almost every day on Skype or IM, to make sure questions are answered as quickly as possible. Our developers tell us the number one reason projects fail is bad communication on the part of the client. I find being obsessively available and communicative is the path to success. You want your developers to feel like you're sitting there in their office.
Step 8: Establish a flow. Find a way of working together that is mutually beneficial. If you can do this the relationship will be sustainable and produce great things. If you can't, problems loom on the horizon. We have been using mostly 2 week iterations with frequent builds that we can test and provide feedback on. And we're starting on a more formal Scrum process this week.
And that's how we've established a smoothly running outsource relationship over the last 9 months. One thing to notice is that most of the work is upfront in finding the right partner. Focus most of your energy on this and good things will happen.