Over my years as a VC, I’ve been involved with a number of software companies that have, for a variety of reasons, chosen to outsource some subset of development. The decision to outsource always made sense at the time, and almost always had to do with ‘time to market’ issues. Looking back now though, in almost all cases the decision was later regretted. The few times it did work effectively, there were some common attributes. First, the outsourced functionality was discrete and not at all contingent on the core development process. Second (and somewhat related), the outsourced code interfaced with the core code through a defined, well documented and very stable set of APIs. And third, the outsourced code did not include any “user interface” or “user experience” code. Because of my experiences, I think I’ve got a pretty good idea of where and when outsourcing can be effective.
I was reminded of my aversion to outsourcing yesterday as I was installing my new Cisco/Linksys E3000 router. This router is part of a new line of routers that Cisco announced earlier this year. I’ve been using Linksys routers for years and am quite familiar with the web-based management console, and it only took a few minutes to configure the router to my specifications.
One of the selling features of this new line of routers is a new user-friendly management console called “Cisco Connect”. Cisco Connect is an application that is installed on a PC and allows you to manage the router through a rich application that hides a lot of the complexity of the web-based console. While I don’t know if the development of this application was outsourced by Cisco, it certainly has all the hallmarks of what goes wrong when you outsource the wrong kinds of development away from your core development team.
I didn’t initially install Cisco Connect as it was positioned as a product for non-technical people and a subset of the functionality that was available in the web-based traditional console I’m familiar with. Well, it turns out there is functionality that is only available through the Cisco Connect application (guest accounts, richer access control functionality). So last night I installed Cisco Connect so I could use this functionality. On attempting to launch the application, it terminated, stating that changes had been made through the web interface and that Cisco Connect could not be used.
So I then reset my router and retried Cisco Connect. This time Cisco Connect did start up, but when I went to make a few very basic changes to the router settings, changes that Cisco Connect defines as ‘Advanced’, the ability to continue to use Cisco Connect is disabled.
Use the traditional web interface and don’t get access to key functionality. Use Cisco Connect, and don’t get access to key functionality. Dont use Cisco Connect, and you have a guest wireless network broadcasting its presence that can’t be turned off. and if you choose to use Cisco Connect, it forces you to make poor security choices such as SSID broadcasting and common passwords across the wireless security and the management console. And crazily enough, there is no password needed to launch Cisco Connect, and while in it, it will offer up to you the management password (and by extension the wireless password as it forces them to both be the same). And in a final affront to security best practices, it stores the security password unencrypted in a plain text file on the computer. That you have to choose between a subset of the router functionality and full security, or some other subset of functionality and poor security is unacceptable in any case, but from Cisco?
Which brings me back to outsourcing development. I don’t know if Cisco Connect was an outsourced project (perhaps it was developed by a recent acquisition?), but it certainly has all the hallmarks of outsourcing gone wrong.