Timeless Software: Part 1
Cycles of Renovation
I’m sitting on a Lufthansa flight in the newly refurbished cabin of a Boeing 747, and I cannot help but marvel at the evolution of this beautiful plane. The 747 was first released in the 1960s, before I was born. Today, the machine is so fundamentally different from its beginnings. It has an advanced cockpit, new communication and navigation systems, quieter, more efficient engines, and an updated, modern cabin, fitted with comfortable seats and new amenities. And yet, essentially, the Boeing 747 is the same as when it was first born: it possesses the same principles of flight, the same levels of safety and reliability, the same optimizations around the essentials of travel requirements, fuel consumption, and maintenance.
At its core, the 747 is engineered around safety, reliability, and maintainability. And like a rudder, these core attributes have guided and stabilized the evolution of the plane through a long period of changing customer expectations, advancing technologies, new market requirements, and shifting government regulations.
36 years after delivering our first packaged application, we’ve learned at SAP that successful large-scale enterprise software follows essentially the same trajectory and lineage. Enterprise software solves fundamental problems that businesses face every day, over generations of business change and of technological change and, in doing so, it continuously evolves in a constant cycle of renovation. I call this Timeless Software, and want to write here about what some of its fundamental characteristics are, and how it will help define our software for the next several generations of changes to come.
Today, SAP software covers a massive breadth of business activities. The functionality of the SAP Business Suite deals with a large spectrum of business processes, from finance and human resources to sales and service, from planning and procurement to manufacturing and logistics, from managing supply chains to managing business strategy, from decision-making to governance and compliance. In addition, the suite comprises variations on these processes across 100+ countries and 25+ industries. Despite this massive reach, customers expect a fundamental degree of coherence, stability, reliability, and integration across their entire software landscape.
The demand for stability, given the mission critical nature of many of these business processes, coupled with the fundamental ways in which customers deploy the software to mirror the uniqueness of their business, means that our software and our relationships with customers, are very long-lived and often last decades. Over this long lifespan, customers always expect the software to contribute to two fundamental metrics:
- Control costs, by ensuring that the software is integrated, comprehensive and reliable, easy to operate and cheaply administer
- Allow for growth, by ensuring that the software addresses differentiated areas and is easy to evolve, change, and integrate as necessary
So this is the essential duality that our customers expect from their IT landscape: Deliver operational efficiency via coherence and stability, while enabling business growth and managing change necessary to survive and grow. And our prime requirement then becomes: Enable evolution of our software without disruption; provide a large breadth of stable functionality, over generations of change. And it is around this requirement that we seek to design and architect the evolution of our software.
The Dynamics of Change
What are the dynamics of constant change? We know that business requirements change all the time; markets evolve, businesses are bought and sold, regulations change, and the circumstances that govern how customers purchase products evolve constantly. Even the ordinary, day-to-day challenges of competition require IT organizations to constantly shift and evolve their landscapes. None of this is for the faint of heart.
New Technology Layers
The technological layers are also drivers of change and can transform the way people interact. This year, we estimate that nearly a billion business users worldwide will use various mobile devices to conduct business. Every year we see roughly two new major UI paradigms. Just in the last 3 years, we have seen the iPhone, Google’s work on Google maps, and highly interactive web applications enabled by AJAX, Adobe’s work with AIR, Microsoft’s work on Silverlight, and others.
Emerging Programming Languages
Even programming languages, and programming models around them, continuously evolve. Roughly every 10 years a major new language emerges, and minor ones emerge every 3 years or so, well within the lifecycle of large-scale applications. New programming models and robust developer communities can quickly emerge around new languages. The language Ruby, for example, is thought to have reached a million programmers faster than any other language ever.
The three key infrastructural building blocks: processors, network and memory, evolve continuously and often non-linearly. And this evolution sometimes enables, or requires, new architectural paradigms. For instance, cheap main-memory and elastic farms of simple servers have enabled fundamentally new ways of analyzing large amounts of data. Similarly, multi-core processors require rethinking application programming to better utilize their parallelism or risk slowing down.
So large scale software, over its lifetime, is subjected to change continuously, business change, as well as change across all the technology layers that it inhabits.
As I look to the future evolution of our products for the next generation, this becomes our essential challenge:
- How do we build applications to serve the needs of every user, and every activity, in every business around the world?
- How do we do so effectively, efficiently, and with maximum coherence?
- How do we evolve these applications, their ongoing change, consumption, delivery and integration, as well as their connection to the present, across generations of change?
I believe the answer to this essential question is Timeless Software.
Understanding Timeless Software
Enterprise applications are built using a collection of programming models and languages that describe their content, are executed using a set of corresponding containers or run-time, and continuously change over their lifetime. My sense is that these three constructs form the essence around which we need to understand Timeless Software, its characteristics, and how we achieve it:
- Content, i.e. the application content, the UI content, the integration content, to represent and serve the activities of users
- Containers, i.e. the runtime(s) that this content inhabits, and
- Change, i.e. the ongoing operation and evolution of both the content and the containers over the lifecycle of a solution while maintaining a continuous link with the past
There are other aspects, to be sure, but these are the three basic ones and I want to share my view on their evolution in my next blog in this series.