How things grow
How do things–natural as well as man-made–grow? If you double the size of something, what happens to its other properties?
Geoff West and his colleagues have spent a lot of time studying such questions. Their findings are fascinating. Living things grow sub-linearly: doubling the mass of living things only increases their metabolic rate by about 70% (to be more precise, the scaling exponent is about 0.75). Cities, however, have very different growth patterns. The infrastructure required scales sub-linearly with the population of the city, but emergent properties such as innovation and wages grow super-linearly. Double the size of the city, and you will only need about 75% more roads and 70% more gas stations, but you will get 120% more innovation (as measured by the number of patents produced) and wages will grow by about 110%. In other words, the costs per capita go down, but the returns go up. That perfectly sums up the reason for humanities’ mass exodus to urbanization.
In a recent talk, West revealed some prepublication numbers describing the growth of companies–and the outlook was grim. Companies scale sub-linearly. As they grow larger, they extract lesser profit per employee, and have a harder time doing so.
This got me thinking about how another man-made artifact–software–scales. One study suggests that the total amount of software is growing exponentially with time (at least for open source software). That is not really surprising, because “the fastest growing entity today is information”, and software, after all, is part of that. It would be surprising if its growth was not exponential.
But the more interesting question is not how all software grows with time, but how a specific project grows, and whether it can sustain that growth. What happens to its properties as its size grows. If the lines of code are doubled, what happens to its complexity, maintainability etc.?
Some of the earliest studies looked at commercial software, and found that software systems grew linearly or sub-linearly. This is in line with the intuition and experience of most software engineers. We all have seen how systems go through an early growth spurt, and then start tapering off, as complexity makes them unwieldy, and changes become more incremental.
So it came as a big surprise when it was found that Linux has been sustaining super-linear growth for a while. The same held true for many other large, successful open source projects. What’s more, Linux was maintaining a high level of code quality as it went through this growth. However, this finding was contested. Which means that the jury is still out on whether open source software scales fundamentally differently than commercial software, and whether it is able to sustain super-linear growth.