With business models and business needs changing so rapidly, an adaptable architecture is critical to allow systems to cope with change. Historically, adaptability has been sought through anticipating the places where a system must be adaptable and through various architectural approaches. However, recent experiences have shown these approaches to be inadequate, at least as currently practiced. This talk presents some principles of evolutionary architecture that allow systems to respond to change without needing to predict the future. We then describe three approaches that realize these principles and discuss how these approaches support adaptability of systems in an evolutionary way.
Kaum haben wir uns von dem klassischen Monolithen und der zugehörigen Ablaufumgebung namens Application Server zugunsten von Microservices und Embedded Runtimes verabschiedet, taucht am Horizont mit Serverless Applications bzw. Architectures schon die nächste Evolutionsstufe auf. Was bitte ist das jetzt schon wieder? Und wer braucht so etwas? Der Workshop zeigt, wie sich dank BaaS, FaaS und einiger anderer Akronyme Mobile- und Enterprise-Anwendungen implementieren lassen – ganz ohne Server! Ganz ohne?
Na ja, fast. Wir werden Hands-On gemeinsam die ersten Schritte gehen und über Patterns und typische Pitfalls diskutieren.
Zeit- und Featuredruck, hohe technische Schulden, wenig Innovation - möglicherweise gepaart mit Fluktuation und Unverständnis seitens Management - so sah es zu Beginn unserer Rettungsaktion mit dem zentralen IT-System eines (realistischen aber fiktiven) Unternehmens aus. Erleben Sie die Geschichte von VENOM, einem großen, erfolgreichen aber auch chaotischen IT-System aus der Sicht verschiedener Beteiligten. Unsere Protagonisten sind zufriedene und erschrockene Benutzer, motivierte, engagierte und frustrierte Entwickler, scham- und rücksichtslose, effektive und chaotische Manager, Admins und Betreiber und Andere. Erleben Sie, wie methodische Verbesserung von Software funktionieren kann: Von der systematischen Architekturbewertung über die Entwicklung angemessener Verbesserungsmaßnahmen bis hin zur effektiven Umsetzung zeigen wir auf, wie Modernisierung und Innovation sich mit Projektalltag und Feature-Druck vereinbaren lassen. Sie lernen drei Iterationen einer Modernisierungs- und Verbesserungsinitiative kennen, die das (ziemlich verkorkste) System wieder auf Trab bringt.
Das Thema Hybrid Cloud ist derzeit in zahlreichen Organisationen ein gewichtiges Thema. Man will besonders wertvolle oder schützenswerte Daten lieber nicht außer Haus geben und diese lieber in einer On-Premise Cloud / PaaS Lösung halten und auf der anderen Seite möchte man für alle anderen Funktionen von den Skalierungs-, Abrechnungs- und Self-Service-Vorteilen einer öffentlichen Cloud-Lösung profitieren. Solche Setups erfordern von uns als Software Architekten jedoch die Berücksichtigung zahlreicher Aspekte.
Dieser Workshop stellt Ihnen zum einen kurz das Szenario „Hybrid Cloud“ vor, um dann die zu lösenden Herausforderungen wie Latenzen, Security oder Integration zu diskutieren. Nach dieser Vorstellung wird sich der überwiegende Teil des Workshops mit Lösungsansätzen beschäftigen. Hierzu zählen folgende Fragestellungen:
- Wie stelle ich sicher, dass ich meine Software einfach von einer Cloud-Plattform zur nächsten schieben kann?
- Wie kann ich sicherstellen, dass die Fachlichkeit in einem solchen Szenario richtig verteilt ist?
- Welche Integrations- und Kommunikationsmöglichkeiten habe ich erstens innerhalb einer Cloud und dann vor allem Cloud-übergreifend und welche sind besonders empfehlenswert?
- Wie gehe ich mit internen Bestandssystemen in einem Hybrid Cloud Umfeld um?
Der Workshop wird sowohl aus Theorie (70 %) und praktischen Übungen (30 %) bestehen.
Viele Projekte kranken daran, dass die Kommunikation zwischen den Beteiligten nicht gut funktioniert, und zwar in vielerlei Hinsicht:
- Die Projektverantwortlichen denken sich im Vorfeld selbst etwas aus, anstatt mit Problemen zu den Entwicklern zu kommen. ("Das ist so doch bestimmt am einfachsten!")
- Die Entwickler denken sich bei Unklarheiten selbst etwas aus, anstatt die Fachbereichler um Klärung zu bitten. ("Das kann doch nur so gemeint sein!")
- Derselbe Begriff wird für verschiedene Dinge benutzt
- Verschiedene Begriffe werden für dasselbe Ding benutzt
- Lücken, Probleme oder Defekte werden in der Konzeptionsphase übersehen oder ignoriert und tauchen erst nach mehrmonatiger teurer Entwicklung auf
EventStorming verspricht hier Abhilfe, da es alle Beteiligten zusammenbringt und ihnen dabei hilft, sich bereits zu Beginn eines Projekts darüber klarzuwerden, worum es eigentlich gehen soll. Das Ergebnis einer solchen Session ist üblicherweise sehr viel gemeinsames Verständnis, eine gemeinsame Sprache sowie ein Domänenmodell (im Sinne von Domain-Driven Design). Doch wenn so ein Modell zu abstrakt bleibt, besteht weiterhin die Gefahr, dass viele Probleme und Lücken erst zur Entwicklungszeit sichtbar werden. Daher schauen wir uns in einem zweiten Schritt an, wie man das Domänenmodell präzisieren kann, suchen Einschränkungen und prüfen das Modell auf Vollständigkeit. Über die Beziehungen zwischen den Entities und Value Objects des Modells lassen sich Bounded Contexts und Aggregate identifizieren, sodass sich das Modell relativ unproblematisch in Code überführen lässt.
In diesem Workshop werden wir uns anhand einer vorgegebenen Domäne damit beschäftigen, ein solches präzises Domänenmodell in mehreren Stufen zu entwickeln und zu verstehen. Die Modellierungsarbeit findet dabei mit Post-Its an der Wand statt.
Keine Präsentation über moderne Architekturen ohne „Conways Law“: Der Zusammenhang zwischen Organisationsstruktur und Architektur ist mittlerweile fast ein Allgemeinplatz. Aber was machen wir aus dieser profunden und doch gleichzeitig trivialen Erkenntnis? Mit diesem Vortrag werden wir versuchen, gemeinsam einen Blick auf Herausforderungen, Patterns und Antipatterns von moderner Architekturarbeit in der Praxis zu werfen – und daraus möglichst konkrete Empfehlungen für die tägliche Arbeit abzuleiten.
Beim Bauen von Softwaresystemen werden tolle Technologien, Programmiersprachen und Tools eingesetzt. Das ist gut und richtig und außerdem macht das viel Spaß. Dabei verlieren wir immer mal wieder aus den Augen, dass das Entscheidende für den Erfolg unserer Software nicht die Technik, sondern die Fachlichkeit ist. Haben wir die Anforderungen der Anwender fachlich sinnvoll umgesetzt? Haben wir unsere Software so strukturiert, dass sie ohne viele Umbauarbeiten um weitere fachliche Funktionalität erweitert werden kann? Können sich neue Entwickler schnell in unsere Software einarbeiten? Skaliert unsere Software, wenn mehr und mehr Anwender anfangen sie zu benutzen?
In dieser Keynote wollen wir uns den verschiedenen Ursachen und Missverständnissen widmen, die unseren Fokus immer wieder von der Fachlichkeit weg zur Technik lenken, obwohl wir doch wissen, dass das kontraproduktiv ist.
Damit größere Systeme oder Systemlandschaften über einen längeren Zeitraum hohe Qualität ausstrahlen, sind sowohl technische als auch fachliche Änderungen unausweichlich. Die gesündesten mir bekannten Ansätze kümmern sich stetig um diese Änderungen und betrauen möglichst viele Entwickler mit der Weiterentwicklung der Architektur. Konzepte und Technologien werden lokal und unabhängig getestet, bevor sie entweder verworfen werden, lokal als Optimierung bestehen bleiben oder als breiter anwendbares Konzept in die Landschaft wachsen. Durch den harten Test des Lebens (bzw. durch den kontinuierlichen Kontakt von Entwicklern mit wichtigen Qualitätsmerkmalen) entstehen wertvolle Beiträge zu einer Architektur, die sich stetig weiterentwickelt. Evolutionärer Architektur.
In diesem Workshop stelle ich den Zyklus evolutionärer Architekturentwicklung vor. Von Lernfenstern mit Experimenten und erlaubten Abweichungen vom „Standard“, über weich definierte Regeln und geförderte Innovation bis hin zur eingeschränkten Anwendbarkeit von überholten Konzepten. Beispiele aus realen Entwicklungsvorhaben verdeutlichen die Konzepte.
Bei Softwareentwicklungsprojekten kommt oft nicht das heraus, was sich der Fachanwender vorgestellt hat. Erst im Einsatz werden die Kommunikationsprobleme zwischen Fachleuten und Entwicklern sichtbar und damit viel zu spät. Wie wäre es, wenn Fachseite und Entwickler miteinander in derselben Sprache sprechen und dadurch frühzeitig merken würden, ob sie sich verstehen? Hier setzt Domain Driven Design (DDD) an: Fachexperten und Techniker entwickeln ganz bewusst eine gemeinsame Fachsprache, die die Basis für die domänengetriebene Architektur bildet.
Aber nicht nur die Fachanwender und die Entwickler missverstehen sich, sondern auch die Entwickler untereinander haben verschiedenen Vorstellungen von der Architektur des zukünftigen Systems. Um auch an dieser Stelle hohe Qualität zu gewährleisten, bietet DDD vordefinierte Muster, wie Entity, ValueObject, Service etc. an. Diese DDD-Muster vereinfachen die Kommunikation im Entwicklungsteam und führen zu einer einheitlichen Architektur.
Fachsprache und Muster funktionieren nicht nur für ein System, sondern auch in großen Softwareprojekten mit mehreren Entwicklungsteams oder bei getrennt entwickelten Microservices. Hier kommen Konzepte wie EventStorming, Domain Storytelling, Bounded Context, Context Map, Shared Kernel, Domain Events, Anticorruption Layer etc. zum Tragen.
Carola Lilienthal zeigt Ihnen in diesem Workshop, wie eine Fachsprache entwickelt, verschiedene Bounded Contexts identifiziert und die DDD-Muster eingesetzt werden, um eine an der Fachdomäne orientierte Anwendung zu entwerfen.
Während in einer klassischen Konzern-IT Standards und Blaupausen für immer gleiche Anwendungsarchitekturen sorgen, betonen Microservice-Ansätze die technologische Freiheit. Zwei extreme Spielarten der Ausgestaltung von Makro- und Mikroarchitektur.
In diesem Mix aus Vortrag und kurzen interaktiven Elementen lernen Sie neben dem Konzept selbst auch die auf Ihre Ziele abgestimmte Richtung, die Sie in dieser Fragestellung einschlagen sollten. Wie sieht in Ihrem Kontext die Balance aus - was geben Sie für alle Elemente Ihrer Andwendung(slandschaft) vor, wo lassen Sie bewusst Spielraum? Und gibt es auch noch etwas dazwischen? Zu diesem Zweck passen wir organisatorische und technologische Trends wie 2-Speed/Bimodale Architekturen, Cloud und Domänenorientierung in das Entwurfsdoppel Makro und Mikro ein.
Funktionale Programmiersprachen unterstützen uns bei der Entwicklung von komplexen Systemen durch mehrere Eigenschaften. Unter anderem bieten sie uns eine genaue Kontrolle des Zustandes der Anwendung und eine Beschränkung der Nebenwirkungen an — wichtige Vorteile, insbesondere in einer multi-threaded Umgebung. Bei der Einführung einer funktionalen Sprache zu Beginn der Entwicklungsphase wird eine Frage sehr oft gestellt: Wie sollen wir unsere neue Anwendung strukturieren?
Dieser Workshop vermittelt einen Ansatz einer Architektur funktionaler Web- Anwendungen. Wir werden das Rad nicht neu erfinden. Stattdessen werden wir erprobte architektonische Lösungen an die funktionale Welt anpassen. Mithilfe der "Hexagonal Architecture" werden wir die Zuständigkeiten in unserer Anwendung klar trennen. Unseren funktionalen und Nebenwirkungs-freien Kern, der von anderen Teilen des Systems unabhängig ist, werden wir gründlich mit Property-based Testing prüfen. Wir werden auch besprechen, wie andere erprobte architektonische Ansätze zu funktionalen Programmiersprachen passen.
Am Dienstag bietet der Themenabend eine sehr gute Gelegenheit wichtige Softwarearchitekturthemen mit den Trainern in entspannter Atmosphäre zu diskutieren. An speziellen "Thementischen" können Teilnehmer – zu Freibier und nichtalkoholischen Getränken – die Experten jedes Themengebietes befragen oder mit anderen Teilnehmern diskutieren. Hier kann von den Teilnehmern auch unverbindlich und individuell ein eigenes Thema vorgeschlagen werden.
Was passiert eigentlich zwischen dem Abschicken einer Bestellung im Webshop und der Lieferung der Ware?
In diesem Workshop werden wir gemeinsam eine Domänenarchitektur für "Food Service Distribution" erarbeiten und verschiedene Umsetzungsoptionen in einer Microservice-Architektur diskutieren. Neben Domänen- und Architekturfragen wollen wir unsere "Lessons learned" aus der Umsetzung und dem 24/7-Betrieb einer großen Microservice-Plattform teilen und Raum für einen Erfahrungsaustausch zu diesen Themen bieten.
Microservice-Architekturen wie die ISA (Independent Systems Architecture) und SCS (Self-contained Systems) müssen eine Reihe von technischen Herausforderungen lösen. Dazu zählen Deployment, Service Discovery, Resilience und Load Balancing.
In diesem Workshop zeigen wir, warum Kubernetes eine ideale Lösung für diese Punkte darstellt und gehen auf zusätzliche Technologien für asynchrone Kommunikation und UI-Integration ein. So zeigt der Workshop nicht nur theoretische Architektur-Prinzipien, sondern auch deren ganz praktische Umsetzung.
Fast jedes Softwaresystem wird mit guten Vorsätzen, aber unter schwierigen Bedingungen entwickelt. Die typische Schwierigkeiten, die im Lebens eines Softwaresystems auftreten, sind: Deadlines, die uns zwingen, Hacks zu programmieren; unterschiedliche Qualifikationen im Entwicklungsteam, die zu Code in verschiedener Qualität führen; und auch alter Code, der unordentlich und zu einem großen Knäuel verwoben daherkommt. All dieser schlechte Code wird die Entwicklungskosten in der Zukunft in die Höhe treiben und führt dazu, dass wir das Softwaresystem nicht mehr gerne anfassen. Wir haben Legacy!
In diesem Workshop erlernen Sie Techniken und Konzepte aus Domain-Driven Design, die helfen ein Legacy-System wieder auf den Pfad der Tugend zu bringen. Wir diskutieren, wie Legacy-Systeme mit Hilfe von Bounded Contexts und Microservices fachlich zerlegt werden können und wie die Building Blocks von DDD Schritt für Schritt in Legacy-Systeme eingeführt werden können.
Microservice-Architekturen wie die ISA (Independent Systems Architecture) und SCS (Self-contained Systems) müssen eine Reihe von technischen Herausforderungen lösen. Dazu zählen Deployment, Service Discovery, Resilience und Load Balancing.
In diesem Workshop zeigen wir, warum Kubernetes eine ideale Lösung für diese Punkte darstellt und gehen auf zusätzliche Technologien für asynchrone Kommunikation und UI-Integration ein. So zeigt der Workshop nicht nur theoretische Architektur-Prinzipien, sondern auch deren ganz praktische Umsetzung.