Productivity by delegation vs. productivity by outsourcing
In Open Lab we just adopted a StackExchange instance as support for Q&A’s for our Teamwork product (here), and another one for generic jQuery support (here). Now, the speed with which you put up one of the highest quality services available on the web is such that it ridicules any attempt to build such a service in-house – a mistake that we actually pursued. This has led me to the following thoughts.
Many developers and managers live in a omnipotence dream. The apparent power of a Turing-complete tool, that in principle can perform any kind of computation, feeds the illusion that having developers in-house means that any software task can be solved by simply developing the application from scratch. If this seems obviously false to you, just take a look around and you’ll find more examples that you’d ever imagine.
So, we need a support forum for our product? Let’s just develop one. We need a bug tracking system? Let’s just develop one. We need to build a web site with database? Lets develop it internally.
Taking the opposite attitude, that is, developing from scratch only what is strictly related to your core business, can be a way to becoming more productive. I’ll call this the software delegation principle.
Ok, assuming this principle looks easy enough; but… there are several mistakes that can be taken in sweeping generalizations of the principle above. The worst one is confusing delegation of secondary services with outsourcing the core productivity of your company. There is a semantic difference between “delegating” and “outsourcing”, and it is connected to where you put your company’s worth.
If you put it in designers, developers and their skills, you can delegate everything but their activity, you will have to struggle to keep their focus on our main development, without making them develop say a support forum when it has nothing to do with their core issues.
If you are a software house, renting a coder is probably a bad idea – see Jeff Atwood’s Can You Really Rent a Coder? . For similar reasons, though many developers and bloggers don’t get it, it is just as well a bad idea to rent a designer. Your people’s skills are the core of your value. Like, our core competencies are development, design and marketing our web applications. Anything that distracts us from our goal, should be removed if possible.
If you are a traditional custom-development based software house, what I am saying here applies in a different interpretation, simply because the value of the company is in the customers, not in production (in the case of a software house, this means the developers). Quality is concentrated in making deals with the managers, not in providing good solutions. That is why often such companies really outsource everything but marketing.(I personally don’t like much such business model, but that is another matter).
Made the necessary distinctions, if you overcome the temptation to build everything in-house, here are some examples of services that you can delegate if you are developing online services:
– writing code -> get the best IDEs, working stations, monitors, keyboards, that money can buy (see CodingHorror for many advices)
– integrating third-party technologies in your software: -> rely on available APIs
– designing mock ups ->use Balsamiq Mockups
Testing and support:
– testing your application – use http://www.usertesting.com or similar services
– collect feedback from your users – use an online service like UserVoice or GetSatisfaction
– support questions and FAQ – use StackExchange
These are just some examples that I am using or exploring.
Using the best tools for development, like using the best IDEs (see The Joel Test: 12 Steps to Better Code), goes in the same direction: you delegate syntactic work to your development environment, and you focus on solving the business model problems and, most importantly, on usability.
Productivity by delegation can also be a great source of new products and services ideas; we in Open Lab are just now developing two new products exactly for this end, one for delegating collection errors and user feedback online (BugsVoice), the other for making your web sites dynamic without using a CMS (Patapage). Time will show whether I’m right…