Trends in Software-Intensive Systems

André Karpištšenko
7 min readJun 25, 2015

--

After moving on from my active role at Planet OS, I’ve been visiting different companies, conferences and seminars to exchange ideas and see the state of the art. This post briefly summarizes some of the ongoing trends, and what I think is the impact of these changes on building large-scale systems, perhaps as a precursor for a more detailed post.

These are fun times for anyone in software engineering. The systems are becoming intelligent, boundaries between fields are blurring and the pace of development is increasing. Finding better ways for reasoning about systems is crucial if we aim to develop systems that are even more useful. I think there are ways to improve how we reason about the systems by taking inspiration from other networked organizations. I will first give an overview of important trends and then talk about ways to improve structuring and reasoning about systems.

A Wave of Intelligent Systems

Objects are becoming connected and capable of sensing, computing and acting. It means that the Internet of Things is becoming a reality. At the same time, connected machines are generating more and more data about their operations and the environment, creating Big Data. Algorithms are developed and generated to find patterns out of these data feeds and act on the findings, for example with Machine Learning methods. The intelligence of the systems is advancing from optimizing individual machines and systems to optimizing networks of systems, the so-called Systems of Systems.

Pushing System Functionality to the Edge

The major waves of technological advancements are all rising at the same time with underlying computing, storage and networking technologies paving the way for new applications. For example, the communication infrastructure is advancing towards open, programmable environment operating at 1GBit/s with ms latencies, what is known as 5G networks. Computing and storage infrastructure is commoditized and available for development of highly robust services, using the so-called Cloud Computing. Devices are becoming open and extensible platforms that are capable of complex tasks independently from central control, the so-called Fog and Mist Computing. Think, for example, of the smart city use cases for parking, lighting and waste management.

In parallel, the mobility of devices is creating new use cases in major industries like energy[1], logistics[2] and agriculture[3], for example by using the Unmanned Vehicles. Battery technologies, low-power chips, micro-scale solar cells and wind generators are enabling new embedded systems that were unthinkable a decade ago.

All these changes in technologies are creating new challenges for people developing and maintaining systems.

Accelerating Involvement of People

Consumer Internet and Industrial Internet are both undergoing major transformations in services and business models. Service design, usability, and natural interfaces are creating new ways of interacting with smart systems, for example, Augmented Reality holds promise to transform every aspect of user interaction in logistics[4] and healthcare[5] to name a few. Overall, software-intensive systems are ubiquitous across industries.

The software is developed using highly iterative, agile methodologies capable of delivering new versions of products continuously. At the same time, hardware and machinery are also getting modularized and capable of continuous change. For example, connected cars are becoming fully integrated apps where every aspect of the car can be optimized, e.g. Ford Developer Program[6]. As a result, the pace of change is increasing in every aspect of modern life.

This creates pressure on policy makers and society to educate every age group continuously to adapt to the changes. Industry leaders have recognized the importance of education and are leading the change with initiatives like massive online course environments. Access to the knowledge of top thought leaders and experts via the Internet is giving the best possible skills to people regardless of their geographical location. As a result, high-performing specialized teams are popping up across the world.

Connected machines and people are pushing the society towards greater automation and emergent behavior. That is the direct result of systems of systems getting interconnected more and more. Human intelligence augmentation will improve maintaining an overview of the systems as a whole. Intelligence platforms like Quid[7] will become increasingly prevalent in companies both small and large. A better way to reason about large-scale systems is required if people are to maintain the edge in development and not lose the ability to control the behavior of these systems.

Reasoning About Interconnected Systems

Cisco predicts over 50 billion devices will be connected to the Internet by 2020

Extracting patterns from the data streams requires coordination of computations. Combining computations into a dynamic network of data processing can become a complex task of managing clusters of devices. Parallelization and scaling of computation within a single machine are limited, e.g. the amount of processors, GPUs, and RAM. Thus, new ways of expressing computation are developed by abstracting the hardware layer into programmable concepts, which can be combined into computational process flows. An example is the data center operating system Mesosphere[8].

The development of modern systems use layers of abstraction and the traditional 7-layers of OSI model[9] is insufficient to describe the richness of new communication infrastructure of systems of systems. An example of such a class of systems is reactive systems based on the concept of Actors. Actors represent a system of completely decoupled components that interact only using (a)synchronous messages. While it can be argued that it is a part of the “applications layer” and can be described using other means, I think it unnecessarily bloats the “application layer”. I think for future systems such communication is better represented by a new OSI layer not yet present; call it the “systems layer” if you will. This layer would present systems for dynamic analysis of interaction networks to infer properties of the whole system based on the interaction patterns of individual nodes. This is an active field of research; see, for example, the works of the Barabasi Lab[10].

Common system architecture, for example, the one implemented in Akka[11] Actor system, relies on hierarchical structuring to achieve resilience. There are new, networked ways of structuring systems, for example by taking the inspiration from biologically inspired networks of networks, where similar components cluster for efficient exchange of communication patterns. Structuring systems with centralizing control signals is possible, by taking inspiration from how brains control the rest of the system. It is reasonable to assume that future systems of systems will benefit from similar arrangements also in human-created object networks.

Clustering of similar nodes is one reoccurring pattern aka homophily; the emergence of communication hubs is the second (see analyses of network properties, for example of the Internet[12]). Centralization and integration of communication hubs of different industries is a natural design pattern that can be expected in system development. For example, many modern systems are integration heavy, bringing different global systems together into a single product or a service. As a result, the behavior of the resulting systems of systems will be a continuously changing set of emergent properties appearing from interactions between systems. Simulation solutions for analyzing such properties will become increasingly important, but deterministic simulations will be unfeasible due to similar reasons as for simulation of biological organisms — due to the nature of continuously changing sensing and control networks. As a benefit from improved ways of reasoning about systems of systems, the models could enable macro analysis.

Road Ahead for Software-Intensive Systems

Human organizations provide inspiration for structuring machine organizations

I believe that the methods for efficient arrangements of networked components will continue to be a hot area for future system architects and designers. There is a need for developing methods and technologies that take extra human and computational resources for restructuring systems into new states of efficiency. I think that the approaches used in developing large human organizations will provide inspiration also for the organizations of machines. An interesting working example is the blackboard system[13], where a common knowledge base is iteratively updated by diverse specialists. Implementing efficient control feedback loops will be an essential part to the systems capability to adapt to changing conditions and for reflecting learning the system does. As a result, the automation of learning and insight extraction methods will be of high importance. Probabilistic programming languages[14] will most likely become integral parts in this trend.

To summarize, we will continue to see an explosion of software-intensive systems that evolve continuously by employing both people and machines. The number of nodes in future systems will be unprecedented. A key area of development will be in the methods enabling a high pace of development with low human resource need along with engaging user interaction. Software engineering finds itself in an interesting era where the boundaries between fields are blurring while the need for domain specialization is increasing. Yet, there is an underlying common language of networks of networks that can be viewed as an extension of existing models and will bring benefits in many industries.

--

--