Waverley Blog

Mistakes you can avoid when outsourcing software engineering projects

Although outsourced software engineering projects require the use of complex development technologies, these projects rarely stumble due to a failure of technology. Problems with outsourced projects are almost always due to issues with management and communication. These problems can arise due to lack of commitment by either company, by lack of planning before the project, or by lack of attention to people factors during the implementation. Companies that are successful with their outsourcing projects have learned to avoid the common mistakes and we’re passing their experience on to you.

Don’t Throw Your Project “Over the Wall” and Expect Results

Working with a partner demands attention, organization, commitment and skill. It requires all the skills you use to be successful inside your own organization, with the additional complexity of working with another organization. It is surprising then how often we have seen organizations considering the outsourcing option think they will be successful with outsourcing a software engineering project by handing over a project to a new partner and then close their eyes and hope for the best. Throwing a project “over the wall,” as we call it, is not likely to work. Without clear goals, well defined responsibilities, organized engineering process and time and commitment from both sides of the partnership, it is likely to fail. When done right, working with an outsourced partner brings a large number of benefits—these include:

  • Shortening the time to market
  • Reducing costs and improving productivity
  • The ability to kill off bad ideas and work with good ones
  • Learning from the partner’s domain experience and improving internal processes and quality as a result

Lack of Trust Will Kill You

Trust is a critical and overlooked component of any working relationship. In most relationships, trust is most often assumed when two people begin working together. However, we notice that a new outsourcing relationship often lacks trust that is critical to the success of a software engineering or testing project. Staff from either organization may wonder, “are they capable of doing the job,” “how will this effect my career,” “why do they ask so many questions,” or “do I have time to help them.” At every turn, there is a potential for an assumption that will slowly degrade trust. Good partners are honest, open, will tell you the good news and the bad, will communicate as clearly as possible and will make a commitment to being successful at every engineering decision, conference call and line of code written. It’s important to make the assumption that the other person is in fact doing their best and the best thing to do is bring mutual best intentions to the project and to trust each other to make it work for mutual benefit.

Say Everything

An important component of trust is to say everything. There’s no reason to try to hide bad news or not be clear and honest about all parts of a project from the schedule and priorities to the team, deliverables, software quality and documentation. Most people can quickly and accurately tell if the full picture of a project is not accurately presented. Therefore, there is no reason not to be completely honest about all aspects of an outsourced project. Saying how it really is will help correct small issues before they become large ones and contributes to trust which is the currency of success when outsourcing software development services.

Commitment Required From Senior Management on Both Sides

People in organizations take their guidance from their management, both direct and indirect. They are unlikely to take major risks unless they are sure that they have clear support from above. Outsourcing a development project has some inherent risks and so it’s vital for the project that the management from both companies demonstrate in multiple ways that they fully support the outsourcing effort. Management from both companies can begin by developing a shared vision of how the outsourcing initiative will meet the strategic objectives of the buyer’s organization. Part of this shared vision is to state clearly how the two companies will contribute to the success of the partnership. Management can build on the foundation of a shared vision by then developing realistic requirements for the project, measurements of success, and methods for clear communication throughout the project.

Knowledge Transfer is Critical

Knowledge transfer is an initial and critical part of a new software development outsourcing partnership. In this phase the client and service provider work together to define the product and technical requirements of a new project. Lack of a good knowledge transfer phase constitutes one of the major risks of outsourcing. This is the stage where the teams get to know each other and where the project infrastructure is established. Many important activities occur during knowledge transfer for a custom software development project. Risk is analyzed and mitigated to the extent possible, and if necessary, a risk management plan is prepared. Business and technical requirements are collected and disseminated, including an interface requirements specification. High level estimates and project plans are prepared, milestones and contingencies are examined, a software development life cycle (SDLC) is chosen, and procedures for the successful management of a new project are presented and accepted by the team. Subject matter experts from the client are available to help the outsource team learn the customer’s business and goals. The engineering team is assembled and begins the process of creating a detailed project plan and technology stack to be considered for the service or product to be delivered. The knowledge transfer phase of a new outsourcing partnership does not need to be long or cumbersome, but it is critical to a successful project. It’s an important aspect of not “throwing your project over the wall.”

If You’re Not Planning on Working Collaboratively, You Won’t Be Successful

Collaborative partnership in the outsourcing model is the process of bringing different teams with different skills together to maximize results. We believe that establishing great partnerships is one of the major benefits of outsourcing. Partnership is not one-way—rather, it’s a two-way street. Each partner is bringing attributes to the table and the pooling of the teams’ talents result in a whole that is greater than the sum of the parts and benefits both the client and the service provider. An application or service outsourcing partnership’s goal is to create a synergy that results in a great product or service that is beyond what the client’s internal capabilities are capable of producing. We encourage our clients to think like partners. We are bringing a staff of our top talent to work for the client and want to help our clients be as successful as possible and we want our partners to think the same way.

Transparency is Good, Micromanagement is Not

We believe that transparency is a critical element of success in an outsourcing relationship. By transparency, we mean that all the teams members are available to the client. Nothing is hidden and there is no single central point of contact or conduit that the engineering team hides behind. However, roles and management are still critical. On larger projects, it makes sense to have a lead, a project manager, UI design skill, documentation team, even a program manager and product management skills. Different people will interact at different levels to make the partnership a success. We believe that it makes the most sense to leverage Waverley’s considerable skill in engineering project management and let the managers manage. It’s easy to fall into the trap of managing each engineer remotely over a large number of times zones, but this style of engagement is not scalable and tends to cause frustration and slows productivity. Our goal is to be creative, learn the customers business, goals and decision process so we can be effective at making decisions and managing development projects even though we are not physically located in the customers development center.

Expect to Have Some Issues and Work to Resolve Them

Working together on any software engineering project is complex by nature and bound to have some controversy. Accept that this will happen, welcome tough questions when they are asked, ask tough questions that you may have and be willing to work together to address issues as they come up. Working this way builds both trust and confidence.

Understand Your Goals up Front

Understanding your goals is critical to success. Goals drive your overall work on a project towards a vision that has been clearly stated up front. While stating goals such as “high quality,” “on time” or “low cost” are obviously important, it’s important for goals to be more concise goals. For example, if the project is about delivering a backup solution, then perhaps it is crucial to be able to have backups restart in the event of power or network failure and to be certain that a restore will work perfectly. When management states goals clearly, the team will know what to do and how to make the right decisions to make the project successful.

Build Momentum Slowly

A great way to establish a new outsourcing software development services relationship is to start with something small, learn how the organizations fit together and grow to larger and more meaningful projects. We call this “crawl, walk, run.” Momentum can’t be rushed. It takes time to get going on a large project and the time investment is good for future more substantial effort when the partners are in the “run” phase of a relationship. This is when we can read each other’s minds, tell jokes, and create amazing products of high quality that are on budget and that exceed expectations.

Share and Enjoy:
  • Twitter
  • Facebook
  • LinkedIn
  • Technorati
  • Google Bookmarks
  • email
  • Print