Schlagwort-Archive: Continuous Delivery

Digitale Effizienz im Ausbau der Energiewende: Wie Solar Estate seinen Vertrieb neu konstruierte

Was passiert, wenn man ein datengetriebenes Vertriebsproblem nicht mit mehr Personal, sondern mit Mathematik und Systemdenken angeht? Die Antwort gibt ein Blick auf die Arbeitsweise von Solar Estate.

Das Problem: Vertriebsprozesse, die mitwachsen sollten – aber nicht konnten

Solar Estate plant und realisiert Photovoltaikprojekte auf Mehrfamilienhäusern in Deutschland. Die Nachfrage ist hoch, das Marktumfeld komplex. Jede Immobilie unterscheidet sich in rechtlicher, technischer und wirtschaftlicher Hinsicht. Die Folge: Der Aufwand für die Analyse, Bewertung und Angebotserstellung wuchs exponentiell mit dem Projektvolumen. Trotz hoher Nachfrage geriet das Vertriebsteam an Grenzen.

Kern des Problems war eine Exceldatei mit mehreren tausend Feldern und Verknüpfungen, in der alle Aspekte eines Projekts abgebildet wurden. Diese Datei war zwar funktional, aber schwer zu warten, nicht versionierbar und für neue Mitarbeiter kaum verständlich.

Der Umbau: Von implizitem Wissen zur expliziten Struktur

Statt den Vertriebsprozess personell auszuweiten, wurde das Modell selbst zerlegt, abstrahiert und neu strukturiert. Was als Werkzeug zur Projektbewertung begonnen hatte, wurde zu einem logischen Framework weiterentwickelt:

  • Alle Eingabefelder wurden typisiert, normalisiert und mit Abhängigkeiten versehen
  • Berechnungslogiken wurden aus der Datei extrahiert und in modulare Recheneinheiten überführt
  • Der gesamte Prozess wurde als Entscheidungsbaum mit über 100 Pfaden formell abgebildet

Das Ergebnis war ein Framework, das nicht nur die Rechenarbeit übernahm, sondern auch Vertriebsszenarien, Projektkonstellationen und technische Restriktionen in ein einziges Modell integrierte.

Das Resultat: Vertriebszeit halbiert, Skalierbarkeit verdoppelt

Die neue Architektur ermöglicht heute:

  • eine standardisierte Erstbewertung innerhalb weniger Minuten
  • automatisierte Entscheidungsvorschläge für oder gegen Projekte
  • Echtzeit-Anpassung von Finanzierungsmodellen und technischem Zuschnitt
  • ein Rollenmodell, in dem juniorige Vertriebskräfte ohne tiefes Vorwissen sinnvoll arbeiten können

Im Ergebnis wurde die Zeit für eine belastbare Projektbewertung um mehr als 90% reduziert. Noch wichtiger: Das Vertriebssystem ist nun nicht nur effizienter, sondern auch robuster gegen Fehler und besser adaptierbar für neue Rahmenbedingungen.

Ein Beispiel für datengetriebenes Wachstum im Mittelstand

Solar Estate zeigt, wie sich aus einem lokalen Vertriebsproblem eine strukturierende Kraft für die Gesamtorganisation entwickeln kann. Der Umbau des Excelmodells war kein IT-Projekt im engeren Sinne, sondern eine strategische Reaktion auf ein operatives Skalierungsproblem.

Die zugrundeliegende Logik lässt sich verallgemeinern: Wer den impliziten Code seiner Arbeitsweise sichtbar macht, kann ihn automatisieren, modulieren und dauerhaft verbessern.

Ausblick: Von der Datei zum digitalen Produkt

Die Entscheidung, aus einem internen Tool ein formalisiertes Framework zu machen, war kein Selbstzweck. Es öffnet nun die Option, dieses Wissen als Produkt weiterzudenken: für Partnerunternehmen, für andere Regionen, für angrenzende Segmente der Energiewirtschaft.

Solar Estate hat mit diesem Schritt nicht nur seinen Vertrieb restrukturiert, sondern ein Fundament geschaffen, auf dem weitere digitale Werkzeuge entstehen können. Die Energiewende braucht Tempo – und Tempo entsteht dort, wo Komplexität beherrschbar wird.

Dockerimage für CI/CD mit Sloppy CLI

In CI/CD-Situationen, also in Situationen, in denen wir automatisiert gewisse Aussagen über und Aufgaben am aktuellen Entwicklungsstand einer Software vornehmen wollen, sind wir häufig auf die Kommandozeile angewiesen.

TL;DR: Das Runner-Image z.B. für GitLab ist auf DockerHub frei verfügbar dielok/sloppy-cicd. Wir werden die Dockerfile auch in Kürze bei Github veröffentlichen.

Über entsprechende Skripte, also aneinandergereihte Befehle, automatisieren wir dann den Prozess und visualisieren ihn in Form von sogenannten Build- und Deploymentpipelines.

Auch mit dem Cloud-Anbieter Sloppy muss dies natürlich irgendwie innerhalb eines Skriptes möglich sein, damit wir den Entwicklungsstand auch automatisiert veröffentlichen können. So kann die Anwendung auch letztlich von Endnutzern verwendet werden. Dies kann ein Server sein, oder ein ganzes Netzwerk aus Servern, daher sprechen wir von Umgebungen. Auf der sogenannten Produktivumgebung läuft die Anwendung für den Endverbraucher. Umgangssprachlich „Prod“.

Auch auf Umgebungen die nicht produktiv sind, müssen die aktuellen Entwicklungsstände ausgerollt werden können. Diese dienen beispielsweise den Tests der Qualitätssicherung, Demonstrationen für Stakeholder und der Beobachtung des Fortschritts durch Manager. Das soll so zuverlässig, einfach und schnell wie möglich ablaufen: Also automatisiert.

Das geht mit Sloppy im Handumdrehen. Super einfach ist ein neues Projekt (Umgebung) angelegt, Services, Apps in Form von Docker-Containern definiert.Nicht nur in dem UI. dem Portal von Sloppy. Sloppy bietet eine gut entwickelte CLI-Anwendung, mit der Apps, Services und Projekte verwaltet und gesteuert werden können.

Und so können auch die Deployment-Schritte in der Pipeline mit Sloppys CLI-Tool automatisiert werden. Das Skript für diesen Schritt ist dann gerade einmal zwei Zeilen lang:

script:
- export SLOPPY_APITOKEN="$SLOPPY_APITOKEN"
- sloppy change --image docker/container:${CI_COMMIT_REF_NAME} umgebung/service/app

(Auszug aus der CI/CD-Konfiguration für Gitlab)

Zu verbessern wäre, dass dieser Pipelineschritt noch wartet, bis das Deployment erfolgreich abgeschlossen wurde und der Service gestartet werden konnte.

Doch wie bekommt die Pipeline die Sloppy CLI, sodass der Befehl sloppy überhaupt zur Verfügung steht? Entweder lädt und installiert die Pipeline die Binaries bei jeder Ausführung dieses Schrittes oder die Anwendung wird bereits in den zugrundeliegendeliegenden Container installiert und steht immer gleich zur Verfügung.

Für unser Zwecke habe ich den Container mal erstellt und auf Docker Hub verfügbar gemacht: dielok/sloppy-cicd. Viele Erfolg.

Wirtschaftlicher Nutzen von CI/CD

Produktinnovation ist in einer digitalisierten Welt der Schlüssel zum Erfolg. Um sich vom Wettbewerb abzuheben, sollen Innovationen so rasch wie möglich und voll funktionsfähig an den Markt gebracht werden. Doch konventionelle Entwicklungsmethoden sind meist schwerfällig und bremsen die Time-to-Market. Um die Zeitspanne zwischen Entwicklung und Marktveröffentlichung zu verkürzen, sind in der Vergangenheit effektive Ansätze entwickelt worden.

Bei konventionellen Vorgehensweisen, vergehen teilweise Monate bis es zu einem Release kommt. Zunächst müssen alle Fehler behoben und Funktionen entwickelt bzw. erweitert werden. Erst danach folgt ein großes Update. Dabei werden beinahe alle Änderungen und Anpassungen manuell durchgeführt und der Prozess wird dementsprechend anfälliger für Fehler. Der gesamte Prozess ist wenig flexibel sorgt oftmals für komplexe Workarounds für die Entwickler.

Eine Lösung für dieses umständliche Vorgehen muss her. Ein lohnender Ansatz soll den Entwicklungsprozess von Software vereinfachen und zugleich beschleunigen: Das CI/CD.

Unterschied zwischen Continuous Integration (CI) und Continuous Delivery (CD)

Was ist also CI/CI? CI bzw. CD steht für Continuous Integration bzw. Continuous Delivery. Continuous Integration (CI) ermöglicht eine kontinuierliche Integration von neuem Code in ein gemeinsames Repository während Continuous Delivery (CD) für die Überführung des Codes von Repository in die Produktion zuständig ist.

Durch die Anwendung von CI/CD können sowohl die Fehlerquote als auch der Release-Zyklus minimiert werden. Im ersten Schritt, der Continuous Integration, testet der Entwickler den von ihm produzierten Teil des Codes bevor er ihn in das Controle-Repository übermittelt. Danach folgt meist eine neue Quellcode-Version, welche mittels Unit-Tests auf Fehler geprüft und in Testumgebungen eingefügt wird. Hier werden auch ganzheitliche Systemtests durchgeführt. Wenn der neue Teil des Codes erfolgreich alle Tests durchlaufen hat, wird das Team automatisch benachrichtigt. Zudem werden Informationen über die Anzahl der Tests und der gefundenen Fehler gesammelt.

Continuous Delivery (CD) setzt dort an, wo Continuous Integration endet. Bevor Software in die Produktionsumgebung übermittelt wird, werden Systemtests, Unit-Tests (inklusive API-Tests und Lasttests) und Integrationstests durchgeführt. Diese Tests sind allesamt Teil von Continuous Delivery und werden automatisch durchgeführt. Über den kompletten CI/CD-Prozess hinweg, können Fehlermeldungen rasch und direkt über Feedback-Kanäle an die Entwickler weitergeleitet werden.

Nachfolgend sind die relevantesten Vorteile von CI/CD aufgelistet, die letztlich in einer Kostensenkung resultieren.

  • Kleine Schritte: Statt große Teile des Codes auf einmal zu integrieren und in späterer Folge deren Fehler umständlich zu beheben, werden bei CI/CD mehrere kleinere Teile in das Repository eingefügt. Das Continuous Testing wird dadurch erleichtert, weil nur kleinere Stücke untersucht werden müssen und mögliche Probleme somit eher gefunden werden.
  • Kürzere Release Rates: Durch das rasche Erkennen und Beheben von Fehlern, können mehrere kleinere Code-Teile in kürzeren Abständen released werden. Dies ist allerdings nur möglich, wenn in einem kontinuierlichen Prozess entwickelt und der Code in einem releasefähigen Zustand gehalten wird.
  • Ordentlicher Backlog: Wird CI/CD in den Entwicklungsprozess integriert, so verändert sich die Fehlerquote im Backlog. Da kleinere Fehler rascher gefunden werden, kann sich das Team auf kritische Probleme konzentrieren.
  • Einfache Wartung: Mithilfe von Microservices können einzelne Bereiche eines Systems heruntergefahren werden ohne das restliche System betroffen ist. Somit können Wartungsarbeiten nahezu unbemerkt stattfinden.
  • Continuous Feedback: Durch die regelmäßige Integration des Codes, entsteht eine verlässliche und kontinuierliche Feedbackschleife. In dieser befinden sich vor allem Entwickler. Deren Rückmeldung zu Pipeline Build-Fehler, Merging-Problemen, Architektur-Rückschlägen usw. ist enorm wichtig für den gesamten Prozess.

Darauf sollte geachtet werden

Den Entwicklern soll die Arbeit mit dem CI/CD-Ansatz erleichtert werden, weshalb ein einfacher Prozessaufbau essentiell ist. Je weniger sie sich mit dem eigentlichen Prozess und manuellen Aufgaben aufhalten, desto effektiver kann gearbeitet werden. Zudem sollten Entwickler bis auf wenige Ausnahmen, direkt am Master-Branch arbeiten um eine sofortige Integration und das zugehörige Testen zu ermöglichen.

Wird CI/CD in den Entwicklungsprozess von Software integriert, so müssen automatisierte Tests auf allen Ebenen durchgeführt werden. Dies schließt mitunter Unit-, Integrations- und Systemtests ein, genauso wie automatisierte Tests für Funktionalität, Benutzerfreundlichkeit, Leistung, Last, Stress und Sicherheit durchgeführt werden müssen. Erst dann kann von CI/CD ganzheitlich profitiert werden.

Als nützliche Tools erweisen sich beispielsweise Repository-Management-Systeme wie Gitlab und Bitbucket oder Services für die Build-Automatisierung wie Jenkins oder eben auch Gitlab. Beispiele für die Testautomatisierung sind das Tool Katalon Studio oder jUnit in der Javawelt. Aber die Auswahl ist praktisch unendlich.

Fazit

Continuous Integration und Continuous Deployment zerstückeln den Entwicklungsprozess in kleine Teile. Diese Teile werden in regelmäßigen Abständen in ein gemeinsames Repository integriert und nach dem Testen dem Kunden rasch zur Verfügung gestellt. Sie sind ein zentrale Teil der DevOps-Methodik. Der gesamte Entwicklungsprozess wird übersichtlicher und flexibler, dadurch werden Fehler einfacher gefunden und behoben. Um mit der Konkurrenz mitzuhalten bzw. diese sogar zu übertreffen und unnötige Fehlersuche zu vermeiden, ist die Integration von CI/CD in den Entwicklungsprozess also eine einfache, effektive aber auch mittlerweile unverzichtbare Methode.