Designing and constructing software is a highly complex undertaking, with many pitfalls and potentially much money wasted if not done right. Contrary to many other human endeavors, resolving the problem of making good software is not as easy as hiring a team of people that individually know how to make software, and putting them together in the same room. This is because, for any medium to complex software development undertaking –say anything requiring beyond three or four engineers—the process that is followed to design, produce, test, integrate and manage the code that is contributed by each engineer, becomes as important, if not more important, than each person's individual talent. Let's try an analogy to explain our point: one can go out and hire, at random, several experienced craftsman and a civil engineer to build a cabin in the woods.
Most probably, the cabin will turn out OK. However, one cannot just assemble a team at random, by the mere act of hiring them, and expect them to build a successful –much less a safe—bridge, airport or skyscraper. Specific knowledge and process is required to succeed at complicated software development ventures. This knowledge and this process is not simply created "by the sum of the parts". That is to say, the resources have to be trained and coached in the process and in the domain know-how necessary to deploy complex undertakings. They have to follow a method that allows them to work effectively as a team. They have to follow certain steps to control risk and assure that they are not reinventing the wheel.
The work of tens, maybe even hundreds of people has to be professionally managed according to software development best practices so that deadlines are met. As a software company that has been in the IT solutions business for more than 26 years, it still surprises us to see, say, a retailer –who would never in their life attempt to build their physical retail space by themselves—thinking that building a core retail software platform is as simple as telling HR to "go out and hire some engineers". Software development companies add value in that they provide the know-how and the process to coordinate teams of engineers in a way that produces –if the vendor is good—predictable, reliable results in complex undertakings. IT development companies have spent literally millions of hours perfecting their process, and --if they are good--have spent millions of dollars making sure their infrastructure and know-how supports all stages in the software development life-cycle under world-class standards. The argument from business orthodoxy is similar.
Companies have way too much in their hands to attempt to be good at everything. They should concentrate in their core. Take CISCO, for example, who does not own a single manufacturing facility. Or Apple, who "designs in California, but builds in China". When a company sits and thinks hard, they will realize they exist because they do only a couple of things really well. Those are their capabilities, their core know-how. Arguably, the company does such things better than many of their peers. Therefore, it makes sense to think that if they spend more resources doing what they do well to make it better, they will leverage their comparative (or competitive) advantage. Many business "gurus" insist it makes no sense for companies to spend all their energy improving their weak areas. Yes, some areas do have to be improved to the point that they are not liabilities, but in HR development it has been proven once and once again how best performers distinguish themselves because they learn how to leverage their strengths, rather than learning how to "even" their weaknesses.
This article is continued in Why outsourcing software makes sense (Part 2)