Today’s complex systems development is being hindered by a confused array of software tools and platforms.
Highlighting the scale of today’s complexity problem, the space shuttle used just 40,000 lines of code while a modern luxury car uses 90 million coding lines. In the USA there are 500,000 unfilled vacancies for developers and code-writers but just 50,000 students graduate each year with computer science qualifications, according to Harbor Research.
Designers and developers expect evolving software development tools to be functional, ubiquitous and easy-to-use. The first two expectations run counter to the third and in order to achieve all three, a new approach is required: a common means of developing and managing code that can orchestrate new development across families of interrelated hardware and diverse computing domains.
For decades we’ve been hearing that we’ll eventually cross a chasm and computers will finally form-fit themselves to human beings, rather than humans form-fitting to computers. And yet, more than forty years after Xerox PARC, we still haven’t made computing invisible. We live in a world of “apps” (a concept the PARC scientists opposed, incidentally) created by a priestly caste of programmers writing obscure code illegible to ordinary civilians. If you want a tiny app for your business, you have to hire an “app developer.” It’s like insisting that people get an agricultural degree to plant a vegetable garden.
Software architecture is quickly becoming the foundation of every technology-driven organisation; not just hardware and software companies but also any organisation that is building digital capabilities.
But the tools we are working with today to develop complex application solutions were not designed to handle the scope of new capabilities, the diversity of usage and devices, and the massive volume of data-points and interactions between and among systems.
These challenges are diluting the ability of organisations to efficiently and effectively manage development. The fragmented nature of software development tools available today make it extremely difficult, if not impossible, to leverage new hardware, cloud and networking developments sprouting up across diverse domains and applications.
To overcome the complex obstacles involved, first, we need to achieve more distributed and intelligent infrastructure that enables powerful and pervasive networking and compute resources to be deeply embedded into our everyday lives to overcome infrastructural limitations on new, more dynamic software applications and solutions.
Second, emerging applications are increasingly running on specialised hardware platforms such as wearables and VR headsets, application-specific integrated circuits, accelerators for AI and inferencing workloads, and field-programmable gate arrays for specialised use cases such as software-defined networking devices. This requires new development tools that can abstract and reduce development complexity to enable application-specific hardware devices to work seamlessly with software.
Third, software applications today have become distributed, needing to work across multiple clouds, at the edge, and in diverse devices supporting multi-modal interfaces including voice, wearables, touch and AR/VR, in addition to web and mobile. Emerging software applications will increasingly need to support new and novel user experiences.
Fourth, we need better ways to manage data interactions and eliminate data boundaries — getting the application data close to its point of use while managing changes in the data quickly and consistently to enable fast, reliable and trusted application experiences — connecting users with the right code and the right data at the right time requires intelligent orchestration of application traffic and workloads across dynamic and distributed users and applications.