Software Applications as Complex Adaptive Systems
This is a response to Decentralized, Self-Organizing Systems by Fred Wilson.
Complex adaptive systems are comprised of many independent agents competing over resources, where all agents have varying strategies, have the capacity for adaptation, and are subject to naturally selective pressures. These systems are evolutionary, self-organizing, and decentralized. The more fierce the competition, the higher the rate of experimentation and birth and death, and the greater the capacity for mutation and adaptation of the individual agents, the greater the resiliency, anti-fragility, and impact of the overall system. What works well spreads, what doesn’t work well dissolves away.
Perhaps the most notable complex adaptive system we can look to is the evolutionary process in the biosphere on earth. The earliest organic life forms were born and reproduced and died and passed on their genetic material with some random modifications. The modified organisms that were more efficient at making use of their environment and reproducing were the ones that spread and crowded out their predecessors. That has resulted in organisms around the world that have adapted extremely well to their environment. The biosphere went from occupying a very small percentage of the earth to completely transforming it, from the makeup of the atmosphere to the composition of the oceans. And now, with the emergence of sentient organisms, the biosphere has developed the capability to massively change the earth’s surface and spread to other planets.
The evolution of antibiotic resistance in real time in a petri dish: https://www.youtube.com/watch?v=GHI45garS3g
The second example we can look to is capitalism and free market economics. The market can be seen as an evolutionary system with a high level of competition and experimentation. Companies can easily be created and destroyed. They vary greatly in the way in which they consume resources and impact their environment. The most successful entities have the ability to grow and reproduce. The characteristics of the best companies are not spread by the formation of spinoffs but by the institutional knowledge getting carried on by former employees who go on to start new ventures (see the PayPal mafia).
Here are some examples of complex adaptive systems from the Wikipedia entry:
Typical examples of complex adaptive systems include: cities; firms; markets; governments; industries; ecosystems; social networks; power grids; animal swarms; traffic flows; social insect (e.g. ant) colonies; the brain and the immune system; and the cell and the developing embryo. Human social group-based endeavors, such as political parties, communities, geopolitical organizations, war, and terrorist networks are also considered CAS. The internet and cyberspace — composed, collaborated, and managed by a complex mix of human–computer interactions, is also regarded as a complex adaptive system. CAS can be hierarchaical, but more often exhibit aspects of “self-orgnaization.”
One aspect of Ethereum that fascinates me is its ability to form a complex adaptive system. Each of the smart contracts on Ethereum have the ability to consume resources (gas). They are born when they are put in the blockchain, they die when they run out of gas, and they spread when they have a strategy that other contracts are willing to pay for. This could lead to an insanely high level of experimentation and innovation. This can also be incredibly dangerous but I do believe that the risks here can be managed.
What other types of systems can be created that have similar properties to the Ethereum blockchain? How can we enable a high level of experimentation of applications that can “live on their own”, that compete over resources like cash payments and human attention, and that can evolve over time through developer experimentation on open source code and building off of previous successes?
This model represents a new type of application. These applications are not static and “owned” by their creators, but belong to the entire community. In a sense they are not applications at all but application systems, with many different applications using the same protocol. We’ve already seen an early form of this with the many email apps like Gmail and Outlook that all use the same SMTP email protocol. But this reaches an entirely new level when the applications can live on their own in the wild. That requires them to be serverless and able to be served by anyone, to be open source and able to be forked, to share a common resource known as a protocol token.
The evolution of Python and its many forks over time: http://www.michaelogawa.com/research/storylines/
Such applications will be able to grow and adapt much more quickly than their centralized counterparts. The individual “fitness” of the applications, or how they improve the lives of their users, will be unprecedented. The encompassing system will be a hotbed of innovation, turning into a blackhole that sucks users into the system and gives the best possible products at the lowest possible cost.
This is what I envision as the future of application development. The complex adaptive system applied to software may be the key to decentralizing the internet, leading to an innovation renaissance and an explosion in economic opportunity.
Note to the reader: the original version of this article was posted on Medium here.