It has come to pass: software has eaten the world.
In 2011, Marc Andreessen used this imagery to describe his personal vision of what was then still to come: “My own theory is that we are in the middle of a dramatic and broad technological and economic shift in which software companies are poised to take over large swathes of the economy.” Today, this is accepted lore and is not limited to Silicon Valley:
[T]he digital economy is worth US $11.5 trillion globally, equivalent to 15.5 percent of global GDP and that has grown two and a half times faster than global GDP over the past 15 years.
The world has woken up to the increasing importance of software, and the question now for businesses everywhere is not whether to embark on a digital transformation of their business, but how to transform successfully — and as soon as possible. For new businesses, digital is not a question but a given.
Software Needs to Evolve
But digital transformation is not an end point; it is just a beginning. By going digital, your organization is only entering the game. To actually play and win, it is not sufficient to build a great digital product or service just once. Rather, it is imperative to continuously evolve your digital solutions to keep meeting the needs of your users and your market. After successful transformation, you need to master software evolution.
Starting in 1974, Professor Manny Lehman and his colleagues famously sought to capture important insights regarding software evolution by formulating a series of Laws of Software Evolution. Though these laws predate the dawn of our digital economy by several decades, let’s review three of them for clues they hold to help us evolve our digital assets:
First law: law of continuing change. This law states that any software system in an organizational context “must be continually adapted, else it becomes progressively less satisfactory in use.” In other words, software that is in actual use has the peculiar characteristic of being indefinitely unfinished. Once a software component has been created and first released, it becomes the subject of a stream of subsequent changes: bug fixes, updates, enhancements. Software that does not evolve at the right speed and in the right direction quickly falls out of use.
Second law: law of increasing complexity. This law states that “as a [software system] is changed its complexity increases and becomes more difficult to evolve unless work is done to maintain or reduce the complexity.” Thus, with each evolutionary step, the code tends to become messier and the architecture more entangled, making it harder and harder to apply further changes. Software that evolves becomes difficult to evolve. An explicit effort is needed to counteract this tendency.
Fifth law: law of conservation of familiarity. This law states that “the incremental growth (growth rate trend) of [software] systems is constrained by the need to maintain familiarity.” In other words, the speed by which an organization can enhance and grow its software systems is limited by its collective intellectual capacity to understand the structure and behavior of these systems. Knowledge dissipation and software growth conspire to kill software development productivity.
While these laws tell us that evolution is necessary (first law), potentially self-defeating (second law), and knowledge-bound (fifth law), they do not identify the actual sources of evolutionary pressure. How is it, exactly, that software “becomes progressively less satisfactory in use” as time passes?
As in biology, changes in the environment fuel evolution. For business software, the environment is the marketplace. As Figure 1 illustrates, we can readily identify five types of market forces:
Innovation. Businesses compete by bringing new or improved products and services to the market. Software supports the production of products and the delivery of services. Sometimes, software is an integral part of the product. Other times, software is the product. Business innovation drives software change.
Cost reduction. Services and products that were once innovative lose their differentiating power when competitors start offering the same for less. In markets where similar products or services compete on price, the operational costs of the software systems that support them become a critical factor. Reduction of operational costs drives software change.
Growth. A successful software business attracts new users and retains existing ones. This leads to a growth in interactions and in the volume of data processed, stored, and served. Unless storage, algorithms, and interfaces are optimized, the system performance will degrade and hurt usability. Growth drives software change.
Regulation. Governments are constantly at work to change laws and regulations, be it for the betterment of society or for propping up the financial system. Such changes in the rules require modifications not only to the governmental software systems that enforce the rules, but also to the software systems of banks, airlines, and other businesses that must comply with these rules. Laws and regulations drive software change.
Coevolution. Each software system is dependent on others. For example, a Web store depends on a payment system, a database system, an Internet browser, several operating systems, and so on. Apart from those execution-time dependencies, software systems have development-time dependencies on libraries, frameworks, and development tools. All those systems and components are likewise under evolutionary pressure. Changes in any of these induce the need for updates in the system that depends on them. Thus, changes in one system drive changes in other systems by propagating through the network of dependencies among them.
While these environmental factors fuel software evolution directly, they also have a significant indirect effect. Each change inevitably introduces bugs. As a result, the initial change indirectly leads to the need for further changes (bug fixes) down the line.
These (direct and indirect) evolutionary pressures from the marketplace explain Lehman’s first law of software evolution (continuing change). But, according to laws two (increasing complexity) and five (conservation of familiarity), such evolution rapidly runs into problems if the size and complexity of the system are allowed to increase unchecked.
Survival of the Fittest
These problems are not imaginary. When seemingly small feature requests take ages to complete, when stability problems appear impossible to stamp out, when developers are afraid to break the system when making a change — these are the symptoms that your digital asset has evolved into a liability.
Unable to relentlessly keep evolving your software portfolio, your business will lose competitive power and will fall behind. Your team will waste its time and focus on software that does not make a competitive difference. The experience of your users will become unremarkable, and you’ll find yourself making excuses rather than delivering on your promise.
Only the fittest survive in a world that is being eaten by software. Those that do not evolve at the right pace in the right direction will see their software eaten by the world.
[For more on this topic from the author, see “The World Is Eating Your Software.”]
Is Software Eating the World?
The rise of software represents the biggest single hurdle and opportunity to business. This Cutter Business Technology Journal issue explores the potential that software can unleash and the inevitable disruption that will be required to seize this potential. Cutter members, read the issue. Not a client? Purchase the issue.