Cut-price code cutters on Elance, oDesk and other outsourcing marketplaces can be an attractive prospect to any business owner, especially so if you're a bootstrapped entrepreneur. Unfortunately many people shopping around on these sites are blissfully unaware of the high costs hidden behind the low price tag.
In the last month alone, I've helped rescue two projects which were on the verge of disaster. One had the developer vanish off the face of the earth overnight with 20% of the project unfinished, the other was simply a result of lack of skill and integrity of craft. Looking at the last year, the total body count is closer to eight.
Outsourcing isn't all bad - in the right hands for the right tasks it is a powerful tool - but we'll get to that bit later. First a case study on the garden-variety outsourcing disaster, the same one I've seen unfold many times before.
The Perfect Storm - An Outsourcing Disaster
Our business is about to undertake an ambitious software project and a project manager is being appointed. Nobody knows a business like the people on the inside, so the best man for the job must be an employee. Unfortunately no one on staff is an experienced developer - but that's a moot point; it's why we're outsourcing. They'll take care of that for us. Proposals are vetted, calls are made and meetings are scheduled.
The applicants look good. They have nice people with glowing quotes plastered on their home page. Their portfolio looks good, they have all of the right answers, they're confident they can deliver and they fit the budget. Contracts are signed.
As the project commences things power along. The marketing machine goes into overdrive and the company shouts news of their up-and-coming software from the rooftops. The mailing list laps it up, eagerly awaiting the launch of the product.
Meanwhile, behind closed doors, things aren't so rosy. Version one lands and it's not quite right. Internal errors aren't being handled and users are seeing ugly error pages covered in obscure technical references, some "obvious" things are apparently not so obvious, in extreme cases functionality is simply broken. Change requests are lodged and lists are made. First one deadline is missed, then another. Meetings are rescheduled, assurances are made. Terms are renegotiated. The project grinds on.
Launch day approaches. Two weeks out, the to-do lists are a mile long and spread out across dozens of Excel spreadsheets bearing names like "TODO-Fixes v2 final Copy - 3.xlsx." Changes that should be straightforward are taking hours, or even days to implement. Bugs are popping up faster than they can be squashed. The project manager is tearing his hair out, the outsourced developers are more interested in dodging blame than fixing problems and the rest of the parties involved are shaking their heads, wondering how the project ever got into this mess.
This is usually where I get called in.
The Software Problem
The reason so many outsourced software projects fail is a simple one. Software is opaque to the non-technical user. Sometimes a user may catch a glimpse of the messy internals via a poorly-handled error which may dump the ugly guts of a program to the screen, but for the most part users only see what goes on on the surface, with no idea of what lurks beneath. A faulty system built on shaky foundations can look perfectly fine, or even desirable to the casual observer - as long as a pretty user interface has been slapped on top.
In projects like these the foundation is invariably a rickety jumble of code, held together with the digital equivalent of duct tape and chewing gum, threatening to fall apart at the lightest touch. An undocumented, unpredictable pile of crap which takes even an experienced software engineer days to sift through and comprehend.
Occasionally there's even code copied and pasted from tutorial websites, with the references to said sites intact.
Software development is one of the few industries in which it is easy to polish a turd.
Using cheap labour for your software project is not viable if you can't audit the work produced by your team. If you can't hold your developer accountable from a position of knowledge you're on track for disaster.
The High Price of Cheap
By the time a client has engaged my services, typically their outsourcing team has been hard at work for weeks, or even months. They have produced a system that may look acceptable from the outside, but internally requires a massive investment of time to get to a maintainable, stable, secure state.
A change that may have taken an hour in a professionally architected application can take up to ten times as long in a system riddled with half-baked shortcuts and copy-paste code.
If changes are expensive - and they are - the cost of maintaining the product over its lifetime is an order of magnitude higher. New features developed in the future cost many times what they should, simply because of the overhead involved in testing such a system thoroughly to ensure nothing critical has failed.
A small saving up-front leads to massive expense down the track.
It's not viable for every business owner to learn to sling code, so we're left with the obvious dilemma - how does a non-technical business owner outsource effectively?
If you have a friend who is an established developer, engaging them to vet outsourcers is the ideal solution. Even better if they can check in throughout the whole project to ensure things are still on track.
If that's not an option I have developed a set of software project checklists for evaluating your prospective freelancer or outsourcing agency before your project gets off the ground, after takeoff and when your shiny new software lands in your inbox upon completion.
Software Project Preflight Checklist
ALWAYS perform these checks before TAKEOFF and when reviewing an OUTSOURCING PROPOSAL.
- Are there clearly-defined deliverables and delivery deadlines specified in the proposal?
It's a well-known phenomenon in the industry that software projects expand to fill available time, so fixed deadlines are essential.
- Will you have access to a staging or preview environment at all times to monitor the progress of the project as it is developed?
In the case of desktop applications, are there dates scheduled for live demonstrations or delivery of preliminary versions of the software?
Pre-recorded screencasts or scripted demos are not acceptable. Insist on being permitted to use the application yourself.
- Are the services being provided clearly and specifically defined?
Beware of fluff words such as "optimisation," "clean-up" and "feature development." These are often used as catch-all billable items when a project has fallen far behind schedule and costs need to be recovered.
- Are there terms permitting you to terminate the contract in the event of missed deliverables/deadlines or unresponsiveness in communication on the part of the agency or freelancer?
It is unfortunately common for emails to languish for days or weeks, or even for developers to completely vanish at the hardest, most important stage of a project.
- Is the agency or freelancer actively trying to learn about your business and your requirements?
If they aren't asking questions up-front you should be prepared for a lot of back-and-forth later in the project lifecycle.
Software Project In-Flight Checklist
Perform these checks REGULARLY during NORMAL FLIGHT and IMMEDIATELY upon encountering UNEXPECTED TURBULENCE.
- Is the project on-track to meet its next deliverable/deadline?
This is hard to judge as a non-technical person, but trust your gut. If screens are missing, or errors are appearing which aren't being fixed, say something. In web projects especially, if there's no visible progress for a few days you should be concerned.
- Are your questions being answered to your satisfaction?
Look out for non-answers, or stonewalling by agencies. A common answer is "I'm waiting to hear from Steve who knows more about your project." If you hear this and do not get to email Steve directly chances are your outsourcer is also outsourcing your work, which is a big red flag. Vague answers should also make you wary - demand specifics and don't tolerate fluff.
- Is there attention to detail in the user-facing parts of the application?
Obscure error messages dumped to the screen, designs that don't look exactly like what were provided, inconsistent typography and web pages that are not responsive or take a long time to load - all of these things are indicative of a team lacking attention to detail. If flaws are visible externally the internals are most likely ten times worse.
Software Project Landing Checklist
ALWAYS perform these checks BEFORE FINAL APPROACH and when TAKING DELIVERY of your software.
- Is the final production software installed on a server you control?
Many agencies or freelancers offer cheap hosting or simply don't bother to install the software on an independent server. This results in an uncomfortable conversation (and the occasional lawsuit) in the event that client and developer decide to part ways in the future. Always insist that the software be installed on a third party's system, or your own dedicated server.
- Do you have an editable version of the software (the source code)?
Always ensure that your developer provides you with the source code for your software. That gives you the flexibility to enlist other developers in the future. Additionally, if your freelancer disappears, you can get someone else to pick up where they left off.
- Have all agreed-upon deliverables and outstanding tasks been completed?
Do not pay the balance on your project until you have received all deliverables as per the previous points - feet drag to an incredible degree after money has been received.
Following these checklists will not guarantee a pain-free outsourcing experience, but it will dramatically improve your odds of success. Ultimately what decides the fate of your project is your judgement in selecting a developer or agency to work with. If your business runs on software it is an investment, not a cost. Treat it like one and do not compromise on quality.