May 24, 2012
Outsourcing Software Engineering: 10 Mistakes to Avoid
Software engineering projects require the use of complex development technologies. However, when they fail, the technology is definitely not one of the most wide-spread reasons. At Waverley we’ve learned that problems with outsourced projects are almost always caused by the management or communication issues. These are for example a lack of commitment from either side, lack of pre-planning, lack of attention to “human factor”. Companies happy with their outsourcing experience have learned how to avoid common mistakes. Without further ado, here they are:
№1: Never Throw Your Project “Over the Wall”, Expecting Good Results
Working with an outsourcing partner demands attention, organization, commitment and skill. It goes without saying that you need to have a healthy company on the inside first. When another company appears, you are already supposed to know how to manage work correctly. No one will do it instead of you.
It’s surprising how often companies think they’ll be successful with outsourcing a software engineering project by just fully entrusting the project to a partner. Throwing a project “over the wall,” as we call it, is not likely to work at all.
Without clear goals, well-defined responsibilities, organized engineering process and time and commitment from both partnering sides, what you will achieve is nothing else but trouble. However, when done right, working with an outsourced partner brings considerable benefits—these include:
- Shortening the time to market
- Reducing costs and improving productivity
- The ability to cut bad ideas and work with good ones
- Learning from the partner’s domain experience and improving internal processes and quality as a result
№2: Lack of Trust Will Kill Any Relationship
Trust is a critical component of any working relationship. Unfortunately, it is too often hugely underestimated. In practice, when two people begin working together, trust is politely “assumed”. However, to have the real trust, you need to gain it first. On the early stages it’s normal for staff from either organization to wonder:
- are they capable of doing the job?
- how will this effect my career?
- why do they ask so many questions?
- do I have time to help them?
Every new turn, new milestone can either enhance the mutual trust, or destroy it little by little. Good partners are honest, open, will tell you the news whatever they are. They will get in touch as soon as possible and will always be clear in what they say or do. A commitment to success is a mutual demand. It is visible in every engineering decision, conference call and line of written code. When in doubt, it’s sometimes helpful to rely on each other, assuming that the other person is doing his or her best.
№3: Be Honest
An important component of trust is a full disclosure. There’s no reason to conceal bad news because both parties need to be interested in success. Outsourcing partners especially need clarity and honesty when it comes to any part of a project like working schedule, team priorities, deliverables, software quality, documentation, etc.
Most people can tell at once if the project picture presented is accurate or something is missing. So there’s every reason to be completely honest about all aspects of an outsourced project. Saying how it really is will help to correct small issues before they grow into large ones.Every side should contribute to building the trust which is a basis of success in any relationship.
№4: Commitment is Required From Senior Management on Both Sides
People in organizations take their guidance, both direct and indirect, from their management. They’re unlikely to take major risks unless they’re sure they have clear support from above. Outsourcing a development project carries inherent risks so it’s vital that management from both companies demonstrates full support.
This can begin by developing a shared vision of how the outsourcing initiative will meet the client’s strategic objectives. Part of this shared vision is to state clearly how two companies will contribute to the mutual success. Management can then develop realistic requirements for the project, success metrics and clear communication methods throughout the project.
№5: Knowledge Transfer is Critical
Any new software development outsourcing partnership needs to establish the knowledge transfer procedure. The client and service provider work together to define the product and the technical requirements of a new project. Incomplete knowledge transfer is one of the major outsourcing problems. It needs to be established when team members are getting to know each other. Right from the start you should:
- establish the project infrastructure
- analyze and mitigate risks together
- collect and disseminate both business and technical objectives
- prepare high-level estimates and project plans,
- examine milestones and contingencies
- choose a software development life cycle (SDLC)
- debate management procedures and discuss them with a team
- learn each other’s goals and expectations
- create a detailed project plan and technology stack 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’s critical. In addition, keep in mind: you don’t just share these things once and then you never come back to them. It just doesn’t work like that. Both sides need to constantly be in the loop.
№6: Outsourcing is All About Collaboration
Collaborative partnership in the outsourcing model is the process of bringing different teams with different skills together to maximize results. At Waverley we believe that great partnerships are synonymous with success. And partnership (as both a requirement and a benefit) is a two-way street.
Each partner brings his talent and energy to the table and this yields synergy. This synergy results in a product or service that is beyond what the client could have produced on his own. We encourage our clients to think like partners, bringing our top talent to help them reach success.
№7: Transparency is Good, Micromanagement is Not
At Waverley we believe in outsourcing transparency. By transparency we mean that all team members are available to the client. Nothing is concealed, everything is discussed up front and in detail. However, roles and management are crucial. On larger projects, it makes sense to have a Team Lead, a Client Manager, UI designers, and a documentation team.
We try to leverage our considerable skill in engineering project management. It’s easy to fall into the trap of managing each engineer remotely over a large number of times zones. However, this style of engagement is not scalable, tends to cause frustration and slows down productivity.
№8: Be Prepared to Solve Issues
Working together on any creative or technical effort is complex by nature and bound to hit snags and stir controversy. Accept that this will happen, encourage tough questions, ask anything you need and be willing to work together to address issues as they arise. Working this way builds both trust and confidence.
№9: Understand Your Goals Up Front
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,” “fast time” or “low cost” is obviously important, devide them into smaller and more specific ones. For example, if the project is about delivering a backup solution, then it may be crucial to have backups restart in the event of power or network failure. It may be essential for a restore to work perfectly. When management states goals clearly, the team will know what to do to make the project successful.
№10: Build Momentum Slowly
One way to establish a new outsourcing software development relationship is to start with something small. This allows everyone to learn how both parties fit together before moving to larger, more meaningful projects. We call this “crawl, walk, run.” Like trust, momentum can’t be rushed. The up-front time investment is good for future more substantial efforts when the partners are in the active phase of a relationship. This is when we can read each other’s minds, tell jokes, and create amazing high-quality products on budget.
It is crucial to embrace the fact that outsourcing is based on people. Outsourcing is not a process, not a method, it is a relationship. We hope you will find our experience useful and outsourcing your software engineering projects will be a positive experience for you.