Avoiding Train Wrecks (and delivering successful software development engagements).

We get a lot of new client inquiries along the lines of, “I’m totally frustrated by my current software development vendor and want to fire them! Can you guys save me?”
Sometimes we can help, but the question is why do so many software development projects go sideways?
There are a thousand possible reasons (see this Quora post) but like everything in business, success is largely a matter of being smart about risk mitigation. Here are three keys that we've found helpful in structuring a software development engagement for success:
1. Vulcan mind-meld first, then start writing code.
Early in our history at Tivix, we had the experience of getting a few weeks into a project and suddenly realizing the stakeholders aren’t all in alignment. So now when a new client says to us, "Just get going right away because my CEO doesn't have time to meet right now!" we raise the red flag. We actually put into our contracts now that every project begins by carving-out a full day together, in the same room, with a giant whiteboard. It's an investment that will pay handsome dividends down the road, in our experience.
2. Hostage-taking is never a good idea.
Lots of people have horror stories about an outside vendor who refuses to hand over the code. At Tivix we always manage source code in an environment that the client has full access to (usually GitHub). We also typically structure contracts such that a client can fire us any time they're not happy with the quality of work we're producing. Vendors who think they cannot be fired (for one reason or another) are not high-performing vendors. High-performing vendors know they need to earn their clients’ business, every single day.
3. As with any relationship, communication is key.
Whenever someone tells us about a bad experience they’ve had with another development vendor, bad communication is always part of the story. We like to schedule regular weekly (at least) meetings with our clients, even if it's just a phone check-in, to make sure we're on track, remind the client of what information we're waiting on them for, have them remind us of upcoming milestones, etc. We all have busy schedules, but nothing is worse than not having time for check-in meetings and then finding out three weeks later that a 10-minute phone conversation would have saved 100 hours of lost work. We use all the latest in 21st century communication and project management tools (PivotalTracker, HipChat, Basecamp, etc) but sometimes there's just no substitute for picking up the phone.
None of this, of course, is a guarantee. At the end of the day, it's really just all about the quality and commitment of the people on the team. But from what we've learned (and seen), these are some of the key components to a successful software development engagement.