Current software trends, such as Microservices, are trending in a very interesting direction: that of collaborating autonomous systems.
This paradigm is very familiar to us from the natural world. Swarms of bees, colonies of ants, schools of fish, even planets in motion “collaborate” through the exchange of information (or forces) while remaining “autonomous” (capable of independent action) in isolation.
One manifestation of this pattern in software is the “containerized Microservices” paradigm that is transforming many large-scale systems. In this paradigm, the individual Microservices are designed to be as autonomous as possible. In particular, each microservice instance should have all the data and other information it requires to continue to work locally in isolation. Even if every other microservice in its system were to crash, an individual microservice instance should be able to continue functioning on its own (though perhaps with data that gets more “stale” over time as it stops receiving updates, for example).
A key concept in coordinating these autonomously operating microservices into a coherent system is that of “choreography”. The word choreography is borrowed, oddly enough for a software concept, from the world of dance. When dancers perform, there is no person, no director, who tells them what to do. Instead, each dancer learns his or her part in advance. The individual dancers then perform their part as learned, coordinating their actions by the exchange of non-verbal cues with other dancers and from the music. Microservices systems are similar, but in this case the “cues” and information sharing are propagated through the system as broadcast, published events.
This type of choreography has a lot in common with physical systems like a swarm of bees, or an ant colony. While each insect is capable of independent actions, they co-ordinate among themselves through an exchange of signals—chemical, behavioral and even dance. Our information systems are headed in this direction—because it scales, and it works. What we are beginning to see is this same programming paradigm emerging at a “macro” scale in the physical world, due to connected devices.
More and more information handling capability is available at the “edge” of our connected systems. This trend will continue as the cost of compute power and related resources continues to decline. We can see this effect in our personal mobile devices already: The aggregate processing power of Apple’s iPhone X was comparable to that of Apple’s “Pro” line of laptops when it was launched in 2017 (though used for different purposes). This same “smart” phenomenon is clearly happening to all types of connected devices, including cars, smoke alarms, thermostats, and even light bulbs. There is no doubt, at least in my mind, that the trend of smart edge devices will continue, even as network connectivity grows increasingly capable (as it will).
As the “edges” get smarter, collaboration between them gets more powerful. The more an edge node computes, or senses about its environment, the more it can share. Whether this sharing takes place in the form of peer-to-peer interaction, or through a central mediator such as a network, remains to be seen. But certainly, our smart edges will collaborate with each other one way or another.
Self-driving or “autonomous” cars will certainly be a dramatic manifestation of the phenomena of collaborating autonomous systems, but there are many others such as warehouse robots, home automation systems, and systems of smart devices generally that we are seeing now or will in the near future. By combining autonomous operation with the notion of signaling and “choreography”, we will see the emergence of robust, scalable and powerful systems whose behavior is astonishingly nuanced.
Why am I so confident this will happen? Just take a look at the bees…
 Phillips Hue light bulbs contain a microcontroller; see http://colinoflynn.com/wp-content/uploads/2016/08/us-16-OFlynn-A-Lightbulb-Worm-wp.pdf