As a programmer running a software company I didn’t realize this at first:
“A software companies job is to distribute the cost of making the software over many customers”
It is a disservice to your customers to not acquire enough customers to cover the cost of making the software. If after you have spent your investors money to make the software, and you get too few customers to continue operations and repay the investors eventually you will go out of business. Going out of business is not what your customers want from your company, they purchased your software (over choosing open source or shareware) so that it would have company support. They have an expectancy of continual upgrades, and some form of product support.
In other words, if you can’t acquire enough customers to distribute the cost of the software you don’t have a software company, you have an open source project. Though open source is many things, it can also be thought of as a software product whose potential sales will not cover the development of the software. We see a lot of software start as open source, and when the controllers of the project find that they have a mass of customer they transition the software to a commercial product. Some of them successfully, some of them not successfully, depending on how many customers they offend. Notice that this transition has nothing to do with technology – it has to do with customers.
If you have one customer (or one big customer and a couple of others) you are a service company, not a software company. The customer has hired you to build their software, and they plan to pay all the costs of making that software.
A software company is all about customers, and has very little to do with technology or technology people. A software company could outsource all the technology and as long as the expenses (and some profit) could be divided amongst all the customer sales, they would have a viable company. Hiring good programmers and program managers is a great way to keep your costs down, since outsourcing is expensive. However, the act of making software is not as strategic to the software company as technology people might think.
Software companies usually make money hand over fist, they have huge profit margins and high price/earnings ratios. Which really means they is plenty of money for outsourcing, I would content that if you software company couldn’t afford to outsource you should have a lower P/E ratio then comparable software companies. Don’t get me wrong hiring in house reduces your expense, and that is always good.
Business people will find the above statements blandly obvious, it boils down to “If you don’t have customers you don’t have a company”. However it is surprising how many technologist, programmers and program managers will answer the question “What is a software company?” with “A company that makes software”. From their technology perspective it is the technology that drives the company, not the sales.