Eckdaten
- Firma LEW Service & Consulting GmbH für Lechwerke AG
- Rolle: Backend Software Entwickler (angestellt)
- Zeitraum: Juni 2020 bis Dezember 2020
Hintergrund
In der funktionsübergreifenden Zusammenarbeit zwischen dem Vertrieb, dem Kundenservice, der SAP-Entwicklung und der Web-Entwicklung sollen Endkundenprozesse im Rahmen eines Projektes optimiert und digitalisiert werden. Dafür musste zunächst eine technische Grundlage geschaffen werden. Erst dann kann eine einfache Umsetzung der künftigen Maßnahmen erfolgen.
Situation vor Umsetzung
Kunden können bereits digital über eine separate Web-Anwendung auf ihre Verträge und Rechnungen zugreifen. Des Weiteren haben sie die Option, bestimmte Funktionen, wie z. B. die Bankdatenänderung durchzuführen. Leider führt die direkte Kopplung an das SAP-System dazu, dass bei Wartungsarbeiten im Hintergrund auch das Kundenportal nicht mehr aufrufbar ist. Zudem ist der bisherige Identity Provider unflexibel und nicht mehr auf dem neuesten Stand der Technik. Deshalb soll dieser abgelöst werden. Die separate Anwendung läuft zudem auf einem anderen Server und muss extra betreut werden, was die Wartungskosten erhöht. Ein zentraler Punkt, der bei der bisherigen Lösung zu großen Problemen führte, ist die Zählerablesung sämtlicher Kunden zwischen Weihnachten und Neujahr. Dies führt zu einer erheblichen Auslastung der Webanwendung und der beteiligten Systeme.
Zielsetzung
Folgende Ziele wurden identifiziert:
- Planung einer Softwarearchitektur, die nicht-funktionale Anforderungen wie eine höhere Ausfallsicherheit, Fehlertoleranz und Skalierbarkeit berücksichtigt
- Entwicklung einer technischen Grundlage, die eine flexible Erweiterbarkeit
- Reduzierung des Telefonaufkommens beim Kundenservice
- Erhöhung der Online-Nutzungsquote
- Schleichende Migration, sodass es keine Unterbrechungen im laufenden Betrieb gibt
- Reduzierung des Wartungsaufwands
Umsetzung
Die gesetzten Ziele führten zu einer Reihe an Herausforderungen und Fragestellungen. Um die schleichende Migration gewährleisten zu können, musste zunächst geklärt werden, wie mit den Kunden umgegangen werden soll. Die Übernahme von Accounts vom alten Identity Provider konnte nicht ohne weiteres durchgeführt werden, da sich die Passwörter nicht übertragen lassen. Mithilfe eines Migrationsprozesses und der Übertragung der übertragbaren Bestandteile der Nutzerkonten konnte dieses Problem bewältigt werden.
Früh im Projekt war klar, dass das Kundenportal in die Softwareumgebung der Website integriert werden soll, um den Wartungsaufwand drastisch zu reduzieren. Dafür mussten in dieser Umgebung – sowohl im Frontend als auch im Backend – die entsprechenden Komponenten neu implementiert werden. Außerdem muss der Quellcode sauber und getestet sein. Dadurch wird das Auftreten von Bugs zu reduziert und die künftige Wartbarkeit sichergestellt.
Ein wichtiger Aspekt war zudem der Umgang mit Lastspitzen. Um mit diesen besser umgehen zu können, wurden Prozesse zur asynchronen Kommunikation implementiert, unter dem Einsatz eines Service Busses. Ein zusätzlicher Vorteil ist die Auflösung der direkten Abhängigkeit zwischen dem Web- und dem SAP-System. Im Falle von Wartungsarbeiten kann die Web-Anwendung mit den bereits abgerufenen und zwischengespeicherten Daten des SAP-Systems weiterarbeiten und dem Nutzer trotzdem die gewünschte Funktionalität anbieten. Nachrichten, die aufgrund einer unterbrochenen Kommunikation zwischen den beiden Umgebungen nicht zugestellt werden konnten, werden behalten und zugestellt, sobald die Kommunikation wieder möglich ist. Um die Auslastung der Web-Umgebung so gut wie möglich zu steuern, wurde im Backend auf einen Microservice-Ansatz gesetzt, der die individuelle Skalierung einzelner Services erlaubt. Somit werden die zur Verfügung stehenden Ressourcen optimal ausgenutzt.
Um die neue Lösung schnell für Kunden bereitstellen zu können, wurde sich bei der Umsetzung für ein iteratives und agiles Vorgehen entschieden. Dabei sollen zunächst die Kunden über den neuen Log-in auf die neue Seite zugreifen können, werden aber für Funktionen, die noch nicht umgezogen worden sind, auf die jeweilige Stelle im Alt-System mit einer entsprechenden Verlinkung umgeleitet. Dies hatte den Vorteil, dass schon sehr frühzeitig in der Entwicklung festgestellt werden konnte, wie gut die Authentifizierungs- und Migrationsprozesse auf den Identity Provider lief. Dadurch entstand ein Minimum Viable Product (MVP), das als solches dem Kreis der Endkunden bereitgestellt worden ist, um die Kunden früh in die Entwicklung einzubeziehen.
Im Rahmen der Migration wurde auch das Mailing-System „Mailjet“ angebunden, um den Versand der E-Mails nachvollziehbar zu gestalten und die fälschliche Spam-Kategorisierung zu reduzieren. Toller Nebeneffekt: Die Fachabteilungen können schnell, flexibel und ohne Entwicklerunterstützung E-Mail-Templates anlegen und bearbeiten.
Durch die Einführung eines neuen Programms und eines neuen Identity Providers können sich Sicherheitsrisiken ergeben. Zur Prüfung der Software wurde ein Penetrationstest vor der Bereitstellung durchgeführt und die aufgeführten Befunde behoben.
Mein Beitrag
Als Softwareentwickler in der Abteilung der Web-Entwicklung habe ich sowohl bei der Konzeption als auch bei der Entwicklung tatkräftig mitgewirkt. Darunter fallen die Planung und Definition der Software-Architektur, die Implementierung der Geschäftslogik im Backend und aufgrund meines SAP-Hintergrunds die Anbindung der SAP-Funktionalitäten. Mir war dabei vor allem wichtig, dass Daten und Funktionen unabhängig von der Verfügbarkeit des ERP-Systems aufgerufen werden können. Dies erreichte ich unter anderem durch den Einsatz von Caching und eines Messaging Systems.
Bei solch einem System ist es wichtig, die Korrektheit der Daten sicherzustellen. Deshalb habe ich in Absprache mit den SAP-Kollegen zur Validierung präzise Regeln definiert. Diese werden über das eingesetzte Domain-Driven-Design so erzwungen, dass es kein Objekt geben kann, welches sich in einem ungültigen Zustand befindet.
Damit am Ende das Zusammenspiel gut läuft, stand ich im engen und fachübergreifenden Austausch mit den Kollegen aus der SAP-Entwicklung, dem Kundenservice und dem Vertrieb. Dadurch konnte ich unter anderem für eine schnelle und reibungslose Anbindung der SAP-Funktionen sorgen und im Falle eines Fehlers schnell und flexibel reagieren. Zur Verbesserung der Kommunikation mit anderen Fachbereichen visualisierte ich technische Prozesse mithilfe von Diagrammen.
Gab es im Frontend Engpässe, habe ich bei der Entwicklung der React-Komponenten und Logik unterstützt.
Eingesetzte Technologien
Zur Umsetzung der Anwendung kam eine Vielzahl an Technologien zum Einsatz. Die Entwicklung im Backend erfolgte dabei in C# und .NET Core, das Frontend hingegen überwiegend in React mit TypeScript. Zur Entwicklung der REST- und gRPC-Schnittstellen nutzte ich das Framework ASP.NET (Web API). Für die Abbildung der asynchronen Prozesse setzte ich NServiceBus ein, welches die Zustellung von Nachrichten selbst im Fehlerfall gewährleistet. Zur Speicherung von Daten nutzte ich das bereits vorhandene Microsoft SQL Server Cluster. In der Entwicklung nahm ich das Entity Framework zur Hilfe.
Die Benutzerverwaltung löste das Azure AD B2C in Kombination mit OAuth, wodurch erstmals eine gemanagte, einfach konfigurierbare Lösung eingesetzt wurde. Weitere Software-Metriken und Logs werden mit Application Insights erfasst. Echtzeit Updates zur Benachrichtigung des Nutzers oder Aktualisierung des Frontends wurden über SignalR und Azure Functions realisiert.
Kundennutzen
Durch die Umsetzung der Migration können nun neue Funktionen einfach hinzugefügt werden. Die bessere Skalierbarkeit ermöglicht es dem Vertrieb mehr Kunden für das Portal zu begeistern, ohne sich über Performanceeinbußen Gedanken machen zu müssen. Zählerstandserfassungen laufen online zuverlässig ab und reduzieren das Telefonaufkommen beim Kundenservice. Die Nutzung der Onlinedienste konnte durch die Migration um 55 % und die Verfügbarkeit sogar über 95 % gesteigert werden. Die Entwicklung der Kundenportal-Nutzer übertraf sogar die Prognosen des Kunden.
Sie haben ein ähnliches Problem, das Sie von einem erfahrenen Entwickler lösen lassen wollen? Nehmen Sie gerne Kontakt mit mir auf.