Outsourcing Software Development – The Right Way

Summary:

Outsourcing software can save you money and can result in excellent results if done properly. On the other hand, if you are unlucky one caught with some unprofessional company or individuals, results can be far from satisfactory.  The most critical factor in choosing the outsourcing company is determine how professional and knowledgeable their implementation and management team is about your business and software development process,  in general. Trust and open communication are the key elements to success and long relationships. Would you like to deal with a management that has no clue about what computer software is about?  How do you guarantee that your software is delivered on time, meets quality goals, fulfills maintenance objectives and is within the agreed budget?  Can you talk to company’s senior executives in person to resolve any issues?  In this white paper, we present you some helpful checklists how to forge a mutual beneficial relationship with an outsourcing company.

 

Introduction

Other day, a customer came with a code that their previous outsourcing company has developed for them for a mobile phone application that they were planning to launch. They had picked this team using one of the “rent a developer” sites. The team had no previous experience in mobile development and just took the project hoping that they will be able to “learn” along.  Despite spending three months, software wasn’t functional. It wasn’t even properly written to meet the US mobile operator’s requirements how an application should behave. Finally, the customer gave up on the team, and came to us to salvage whatever we can. The whole process delayed customer’s product introduction by six months since salvaging a badly written software, often, is lot harder than just doing the fresh development. The point that I am trying to make it choosing inexperienced individual software developer can appear to save the money, but may cost a lot more than if you had begun with a good solid team.

In yet another case, one company had outsourced their project to a small team in another country. The team was so ignorant of embedded development that they had cut wires of USB cable to monitor the USB communication!  Someone needed to tell them you can monitor all USB port communication without need to cut the wires. Needless to say they could make no progress on the project and we again to salvage the project from ground up.

At my company, we have heard so many such stories of projects gone wrong that we decided to write this white paper on how to choose an outsourcing vendor.  Here are our simple bullets for choosing software services vendors for outsourced software development.

  1. Know the background of management team: Do these people have the software development background and necessary educational background to develop software. In India these days, everyone from a construction company owner to a former restaurant owner has started a software company. You should definitely avoid these companies whose owners or executive teams have no direct software development or technology background. Why would you trust a company whose management is not qualified in the area? So, read carefully the background of the management team. Have they worked on applications similar to yours. Don’t trust the posted bio (which is often fake, exaggerated and misleading) – instead demand to speak with the management team members. Avoid unprofessional people and companies.
  2. Verify Knowledge of English: Can developers speak English and are available in your time to talk to you is very important. A lot of things can be done by emails, but there are times only a phone conversation is needed to clarify. How would you communicate if other side cannot speak fluent English.  Dealing with developers in Eastern Europe or China is particularly hard due to lack of English skills and even when some developers can speak English – it is often hard to understand due to heavy local accent.  So, unless your project manager can speak the language of developers, it is going to be hard task to synchronise.
  3. Know Project Management Process:  Understand who manages the projects in the company and if things fail, who you can deal with to get the situation corrected. It is so important as standard for project management in the US and other western countries are very different than in developing countries. For instance in India, unless timeliness is enforced from the US, it is hard to get anyone to commit to a given time. So, insist on US based project managers. This factor alone can make and break your project. Insist that your project be managed by a person based in the US so that you can deal with a real person rather than someone sitting ten thousand miles.
  4. Understand Legal Jurisdictions of Any Contract: If you are signing a contract with a foreign entity with no US operation, you have no legal recourse to anything. Legal systems in most developing countries, including India, are broken. In India, it takes 20 years to get a simple case to go through legal process, if you are lucky. So, insist on US based staff, and the registered company entity, and US legal jurisdiction.  If a company has no legal standing in the US, do you have resources to deal with foreign legal system if things go wrong? Can you even chase a freelancer who is today in city A and tomorrow in city B. Freelancers can provide good services for small tasks but for big projects, you need an established legal entity.
  5. References – are They Even Worth it: Many people like to see sample jobs and ask for customer references. But these are like job references. Do you think anyone will give you name of a customer who is not going to give them a favorable response? Therefore, I suggest speak directly with the management team member of the company, ask good exploring questions, and you will learn a lot more about a company’s operation than just by references alone.
  6. Get A Professional Development Plan: Insist on a clear development methodology and project plan. Don’t leave things vague as in software – unless agreed well defined in advance – a feature means two different things to two people. So, be clear and insist on regular updates. Most importantly, insist on well written requirements and design documents. This alone will ensure that you know what is being developed and how this is being developed.
  7. Large Company or Small Company:  A project can be done equally well by both small company as well as big company depending upon professional make up of the company. A big company is generally more expensive to deal with and they won’t value much a small contract, even if they agree to take it. Most big outsourcing vendors with turnover in Billions don’t assign much value to a project less than $1 million, and you are unlikely to have access to their executives for small business. A small outsourcing company on the other hand will treat you like a royal even for a fraction of that business since they only have a few projects going on at a given time and can spend more time with a customer.
  8. Understanding Communication Mechanism:  Understand how you and your development team will communicate with each other during the development phase. International communication can be expensive, so can you have developers available via skype or ym or similar communication tools.  Also, if you are in differing time zones – can you work with some one that is available in your time zone to speak with you.  It is important to understand project reporting structure and tools so that you can monitor the progress of the project daily.
  9. Price, Quality and Speed: As often said that you can only get two out of three. Lowest price my save you some money, you have to sacrifice one from other two. Don’t choose a vendor based on price alone, instead value on the quality of (past) work, professionalism of the team and their technical strength.  Carefully, review past projects – talk to their engineers and managers on how they executed those projects, what were the barriers, how bugs were handled etc. Does company have expertise in running acceptance tests on large systems? Do they even understand how your network or servers work? Can they help you host your applications on servers or move them from one data center to another, if need be? You get what you pay for.
  10. Negotiate the Ownership of the Work:  For any type of outsourced project, make sure that you are clear about who owns the resulting work product and any important components of that product. Make sure the service provider understands how you intend to use the deliverables that they are agreeing to provide. For example, the development of a custom software application for your personal use would be substantially different from the development an application that you intend to package and re-sell. At Rapidsoft Systems, we assign ownership rights to you for all software.
  11.  Don’t Expect Miracle:  Anyone doing software development will tell you that software development is a tricky business. Things go wrong all the time; requirements change often and seemingly simple tasks can take more to accomplish then planned.   When you get your first or second iterations, don’t be discouraged if they aren’t up to par. That is the whole point of getting the early versions – so they can be worked out and you can have a great final product!Software will have bugs and things may not work first time. The important thing is to work with your project manager and help them clean up the project. I have so often when a customer wants to have hands-off approach even when the requirements aren’t so well defend. This can create confusion and waste time even for the best development team. At Rapidsoft Systems, we insist that a customer’s project manager talks to our engineering team manager every week so that we can catch any differences earl
  12. Be Friendly At All Times:  Remember, no matter how precisely we define schedules and break tasks into small sub-tasks, there is always some uncertainty in a software task specially when we have very tight deadlines.  Life as a developer can be tough. Sitting in front of a computer all day with a deadline breathing down your neck – is not easy.  When someone is spending 12-18 hours debugging a piece of software, the last thing developers want to hear was someone telling him or her that they were doing something wrong and to hurry it up.At my company, our project managers are trained to deal with emergencies and we do our best to meet promised deadlines.  So, as you’re talking directly to developers and notifying them of the mistakes and bugs you found – don’t be rude about it, be friendly! It really does make a difference. They will do far more than promised after all every developer wants to show case his skills.
  13. Don’t Forget Need for Long Term Support: For technology projects, it’s a good idea to specify a warranty or support clause so that you are assured of some amount of continuing support from the vendor after the project is complete. It’s much easier to negotiate a support clause before the service provider begins work, rather than after the completion of the project. Even creative or business services can benefit from a support clause. Suppose you need some changes to a business plan based on feedback that you get from potential investors. Or maybe you find that you need that snazzy new logo delivered in a new type of file format. Specifying some amount of free support or negotiating discounted prices for future modifications can save you time, money and headaches later on.
  14. Putting Every Thing on Paper: Most serious company will have a Master Software agreement (MSA) that will define the terms of the service contract. You should read it carefully and negotiate or modify to suit to your project. At Rapidsoft Systems, we  do all our work under a professionally drafted MSA that safeguards interest of our customers, and defines scope of services and deliverables. During the course of a service engagement, the scope of the project, deliverables or even the agreed upon price may change. Make sure that you clearly communicate any schedule, scope or payment changes to your service provider and get confirmation from them – in writing – that they understand and agree to the changes.

Conclusions

By following the above common sense approach to software outsourcing, you can truly benefit from the lower cost of offshore outsourcing. The main points are using only professionally run companies that demonstrate a level of professionalism and are willing to provide access to their engineering teams. Besides, your ability to openly communicate can make or break a project therefore having a local project manager for your project with whom you can deal with on daily or weekly basis is very important.

Leave a Reply