The Rising Tide and Economies of Scale
As a thought experiment, think back 20 years to a time when the internet was still a DARPA project and the web was but a glimmer in Tim Berners-Lee's eyes. At that time, someone who could create software or build computers was pretty special. In fact, unless you worked for a software vendor or attended class in a computer science department, programming was pretty much a black art understood by an elite few. There were some computer users, but computer hobbyists weren't exactly mainstream.
What has changed since then?
If you guessed that there are lots more people now who understand at least a thing or two about computers, you would be right. Today, more people know how to use computers, program computers, and network a group of computers than ever before. What has made this possible? The internet, of course.
It's actually quite simple. With the advent of the internet came the increased usefulness of owning a computer. With more computer owners came a deeper understanding by a broader group of people of how the things worked. Of those who understood computers, a certain number became savvy users. A smaller number became computer programmers. With an ever expanding internet, all of these numbers have increased over time. From the United States to Europe to developing countries in Africa and South America, more people understand computing than ever. The collective knowledge of computer users around the world dwarfs by orders of magnitude the entire such knowledge base of 20 years ago. That has serious ramifications in terms of how software is produced.
For one thing, software knowledge comes more cheaply than ever. As with any currency or commodity, when there is a seemingly endless supply, the price goes down.
I will focus on two commodities: software knowledge in the form of a programmer and the amount of software available for use. For the first, unless a programmer has a specialized bit of knowledge in an area of high demand, chances are that the ability to command a high salary is less than it was a few years ago. There is a plentiful supply of people who have at least some programming knowledge. Granted, especially talented programmers are always needed and can demand extraordinary compensation. However, focusing on the general case, the price of a programmer commodity has declined over the years, thanks in large part to the internet.
The spread of the internet has had a direct impact on the spread of programming knowledge. The bar to entry for a budding programmer is lower than ever, thanks to the readily available supply of tutorials and other documentation geared toward those who wish to design software. This shared collaborative medium allows programmers to instantly post new material, thus raising the collective programming IQ of internet denizens. Consequently, not only is the breadth of developers more extensive than ever, but the amount of knowledge per developer has also increased. At the moment, the internet has made programming knowledge a boundless resource with unlimited growth potential.
As for the software itself, there is more of it than ever before, much of it general-use desktop or server software for a PC. Software developers are no longer masters of a black art, and software is no longer black magic. It is an abundant commodity with an expanding breadth and complexity. A new feature for a software project posted on the internet increases the overall complexity of the project. Just as programming knowledge expands both vertically and horizontally, pieces of software wind their way to more places than ever, with the complexity of these pieces also increasing over time. A rising tide floats all boats. In this case, it's the tide of the collective knowledge base, fueled by the internet, and the boats are software developers and software projects. It is now easier than ever for a programming neophyte to search the internet, find a programming tutorial to his liking, and start building software.
This continuously evolving collective knowledge base carries another consequence: speed of innovation. Because of the speed with which users, developers, and companies can post documentation, patches, or new software projects, the product life cycle has shortened considerably. Software vendors must work harder than ever to stay ahead of the floating software boats. This constant drive for innovation means that products released just yesterday lose value more quickly than before, due to future products already filling the software pipeline.
What are the implications for software developers? The obvious manifestation of a lower bar to entry coupled with an increasing number of programmers is that it is getting awfully hard for a developer to charge for software. (Quick, tell me the last time you paid for a bare-bones email client.) It used to be that a developer could hack up some small utility, pass it around as shareware, and ask nicely for people to send money. While shareware still exists, the trends are not in its favor. More recently, people who hack together a simple utility simply give it away. They don't ask for payment, because they recognize that it's generally a fruitless endeavor. It's not that they give away the software because they think it's a nice thing to do; they give it away because it's the only way anyone will actually notice.
The general case of a broad, horizontal software market has now arrived to the point where a healthy open source ecosystem is possible. The price of software is asymptotic to zero, there is an abundance of users and developers, and there is a vast collective knowledge base that empowers users to harness the power of available software and produce their own. In this situation, it is impossible to create general-use software for which you may charge a premium price.
With prices approaching zero, software developers have two choices when trying to win over users: (1) add features not available elsewhere, and (2) release the source code. There is no other currency of value that developers can extend to users. In fact, these two options are actually interrelated. A software developer trying to accomplish option 1 on his own will face a daunting task, whereas a developer who releases source code, assuming the project is viable, will have a ready supply of suggestions for improving the software and adding features. She will also have a cheap and fast means of distributing the software complexity around the world, with the implied deepening of the collective software knowledge base. This collective software knowledge base will pay dividends in the form of knowledgeable users and contributors.