Es war einmal.. vor nicht allzu langer Zeit, da wurden Anwendungen in Programmiersprachen kodiert und in ein Format kompiliert, das für bestimmte Prozessoren und Betriebssysteme einmalig war. Diese Applikationen waren in der Regel eigenständig, tendenziell groß und liefen in lokalen Rechenzentren. Jedermann ging davon aus, dass sie lange Lebensspannen haben. Sie wurden unter Einsatz umfangreicher Development-Lifecycle-Methoden entwickelt, mit engen und im Voraus festgelegten Anforderungen sowie langwierigen Entwicklungsplänen. Inzwischen nennt man sie „monolithische Legacy-Systeme“ – also die Dinosaurier der Unternehmensanwendungen. Sie erfüllten einst ihren Zweck, können mit technischen Innovation und neuen Geschäftsanforderungen aber nicht mehr Schritt halten.
Die Entwicklung hat sich gewandelt zu DevOps-Prozessen. Diese lenken die Erstellung von Microservices, welche auf Containern bereitgestellt und in beliebigen Clouds betrieben werden. Damit wurde der Entwicklungsprozess beschleunigt: weg von einer Wasserfall-Methodologie mit direkten Anforderungen und langen Fristen zwischen Spezifikation und Freigabe, hin zu iterativen Methoden mit häufigen Freigaben von neuen Funktionalitäten. Und diese werden nun ergänzt um kooperative DevOps-Praktiken mit automatisierter und kontinuierlicher Integration und Auslieferung. Der Trend in der Anwendungsarchitektur ist die Aufspaltung der Funktionalität in Komponenten. All-In-One-Anwendungen werden in separate Ebenen entkoppelt: Schnittstelle, Logik und Daten. Moderne, Service-orientierte Architekturen ermöglichen die Erstellung von Anwendungen mittels dedizierter Services bis hin zu Microservices und Application Programming Interfaces (APIs), worüber hochspezialisierte Komponenten für andere Anwendungen verfügbar sind.
Die Anwendungsbereitstellung ist dadurch wesentlich flexibler geworden. Applikationen sind nicht mehr eng an die Hardware gebunden und werden gemäß unabhängiger Standards geschrieben, beispielsweise Java Platform Enterprise Edition (Java EE), sodass sie in zahlreichen Hardware-Kombinationen und Betriebssystemen eingesetzt werden können. Virtuelle Maschinen (VMs) und Container ermöglichen außerdem ein einfaches Verpacken und Bereitstellen auf verschiedenen Hosts. Heutzutage ist es üblich, dass Anwendungen auf mehreren Servern in unterschiedlichen Rechenzentren, Private und Public Clouds bereitgestellt werden. Das beschleunigt den Einsatz und verbessert Performance sowie Verfügbarkeit.