Wie sich ein Software Engineer in die Logistik verliebt
Hinter den Kulissen

Wie sich ein Software Engineer in die Logistik verliebt

Seit inzwischen fast 5 Jahren bin ich bei Digitec Galaxus für die Entwicklung von Logistik-Software zuständig. Dass ich für Logistikthemen plötzlich so brenne, hätte ich mir nie erträumt. Es kam aber genau so. Ein Erklärungsversuch.

Als ich direkt nach meinem Studium bei Digitec Galaxus durchstarten wollte und eine Offerte für eine Junior Software Engineer Stelle in einem im Aufbau stehenden Logistikteam erhalten habe, wusste mein unerfahrenes Ich erst nicht so recht, wie ich mir die Arbeit vorstellen soll. Die Logistikwelt war mir bis anhin fremd. Im Studium gab es kaum Berührungspunkte. Ich dachte im ersten Moment nicht, dass es so vielfältig werden könnte, wie in einem Online-Shop-Team. Und schon gar nicht, dass ich mal einen Blogpost darüber publizieren würde.

Wie die Logistik und ich uns kennenlernten

Das änderte sich rasch. Schon in der ersten Woche durfte ich das Lager in Wohlen erleben. Ein Process Engineer führte mich und eine kleine Gruppe von neuen Mitarbeitenden durchs ganze Lager. Wir durften bei allen Gliedern in der Kette gleich selber Hand anlegen und konnten so die involvierten Personen und Abläufe kennenlernen. Die Teamleiter, welche uns die Prozesse vorstellten, haben sehr schnell erfahren, dass ich ein neuer Software Engineer bin. Sie konnten es natürlich nicht sein lassen, mir erste Verbesserungswünsche und Ideen mit auf den Weg zu geben. Die Tour hinterliess einen bleibenden Eindruck, den ich noch spät abends verarbeitete. Ich war begeistert, wie viel Mensch und Technik so koordiniert miteinander arbeiten.

Vor Ort im Lager fallen mir immer die besten Ideen ein
Vor Ort im Lager fallen mir immer die besten Ideen ein

Bei so vielen Eindrücken fragte ich mich zu Beginn, wozu wir zuständig sind? Um diese Frage zu beantworten, haben wir für unser Team mit dem passenden Namen «Lords of Logistics» schon früh folgende passende Team-Mission gewählt: «Artikel, sie zu verteilen, sie alle zu finden, aus den Lagern zu treiben und ewig an den Kunden zu binden». Wir sind grundsätzlich für das Herzstück der Logistik zuständig, für die Lagerung der Produkte.

Gerne möchte ich euch drei meiner Lieblingsinitiativen (Projekte) vorstellen, an welchen ich unter anderem in den letzten 5 Jahren arbeiten durfte.

Wie der Blitz ins erste Projekt: Blitzlieferung

Schon bald nach meinem Start durfte ich bei einer grösseren Initiative mitmischen: dem Blitzlieferungspilot in der Stadt Zürich. Wie viele Kundinnen und Kunden wünsche auch ich mir häufig, dass mein Einkauf so schnell wie möglich vor meiner Tür liegt. Die Blitzlieferung solls richten. Bei so einem Feature treffen viele Wünsche und Erwartungen zusammen, was die Lösung schnell sehr komplex werden lässt.

Die Initiative zog sich durch viele Bereiche in unserer grossen Softwarelandschaft und bedingte entsprechend eine gute Kooperation zwischen allen beteiligten Teams. Beginnend beim Online-Shop, wo wir die Verfügbarkeit erweitern mussten. Zum ersten Mal galt sie nur für gewisse Postleitzahlen. Im Checkout sollte mittels Verfügbarkeit auch eine Blockierung des Versandkanals Blitzlieferung eingebaut werden, da die Kundschaft ihre Bestellung ja am gleichen Tag erwartet und nicht plötzlich durch fehlende Verfügbarkeit überrascht werden will. Hierbei mussten wir stabile REST-Schnittstellen für unsere Online-Shop-Teams bereitstellen und die benötigte Performance und SLA einhalten.

Natürlich gab es zusätzlich eine Reihe von logistischen Herausforderungen zu bewältigen. Die Grösste war meiner Meinung nach die Koordination aller zeitlich kritischen Abläufe. Wir mussten sicherstellen, dass die Aufträge rechtzeitig verbucht werden, damit sie bis zur Deadline kommissioniert werden können, da sie sonst die Abfahrtszeit des Lastwagens verpassen. Und wenn mal etwas schiefgeht, wollten wir mittels gutem Logging, Monitoring und Alerting schnell reagieren können.

Wenn ich im Lager bin, packe ich immer gerne direkt mit an
Wenn ich im Lager bin, packe ich immer gerne direkt mit an

Und weiter gings bei der Auslieferung an unseren Partner notime, welcher alle Daten so früh und korrekt haben muss, damit die Lieferung am selben Tag stattfinden kann. Für notime war der Prozess jedoch auch nicht ganz gleich wie bei ihren anderen Kunden und Kundinnen: Wir wollten unsere Produkte unverpackt senden, d.h. notime durfte die Konsolidierung der Produkte pro Lieferadresse und das Beilegen der Stromadapter übernehmen.

Nun stehe ich da und halte meine neuen Airpods in der Hand, die ich erst heute Mittag bestellt habe. Ich freue mich aufs Musikhören und bin stolz, Teil der Initiative Blitzlieferung gewesen zu sein.

Das Schmalganglager: Nichts für Klaustrophober

Letztes Jahr durfte ich für eine ähnlich grosse Initiative die Rolle des Solution Architekten übernehmen, was so viel bedeutet wie die Ansprechperson aus der Softwareentwicklung, die verantwortlich für das Softwaredesign und die Umsetzung ist. Unsere Mission: eine inhouse Lösung für ein Schmalganglager zu entwickeln, welches zum Weihnachtsgeschäft 2022 stehen sollte.

So sieht das Schmalganglager heute aus
So sieht das Schmalganglager heute aus

Ein Schmalganglager hat, wie der Name schon sagt, schmale Gänge. Die Schmalgangstapler müssen entsprechend innerhalb der Gänge geführt fahren, da sonst ein Risiko für Kollisionen mit den Regalen besteht. Weiter erkennt man nur sehr schwer, wo Lagerplätze frei sind oder wo welche Lagerplatznummer ist.

Aus diesen Gründen mussten wir die Prozesse so entwickeln, dass eine automatische Gang- und Lagerplatzwahl möglichst effizient stattfindet. Die Fahrzeuge sollten auch über die jeweiligen Gänge und Lagerplätze Bescheid wissen, damit sie den Mitarbeitenden schnell und kontrolliert zum nächsten Lagerplatz führen.

Wir haben diese Gelegenheit auch gleich genutzt, um den Code unseres Teams einen Schritt näher an die Soll-Architektur zu führen. Das hiess für uns, dass wir zum ersten Mal eine Lagerhaltungssoftware getrennt von unserem Monolithen in einem Modul (=Microservice) aufbauen. Wie sich das Modul in die Gesamtarchitektur einbettet, ist etwas, was wir, wie üblich bei uns in der Firma, mit den strategischen Domain-Driven Design Patterns erarbeiten. Ein Beispiel davon sieht man im Bild der “High-Level Architektur”.

High-Level Architektur am Beispiel der Einlagerung
High-Level Architektur am Beispiel der Einlagerung

Bei uns gilt soweit wie möglich: ein Modul, ein Team. Also durften wir innerhalb unseres Moduls unseren Wünschen freien Lauf lassen. Wir haben für die Onion Architecture mit Vertical Slices und CQRS entschieden. Im Herzstück unseres Moduls, der Domäne, verwenden wir auch taktische DDD Patterns, wie Aggregates, Value Objects, Domain Events und Domain Services. Auf Ebene Persistierung machen uns das Repository und Unit of Work Pattern das Leben einfacher.

Unsere Modul interne Architektur
Unsere Modul interne Architektur

Wir sind sehr zufrieden mit dem finalen Produkt, da wir nun relativ schnell neue Features integrieren und mit unserer Testsuite bestehend aus NUnit, FluentAssertions, AutoFixture, Moq und Playwright testen können. Optimierungspotential besteht natürlich trotzdem. Ein Beispiel wäre vor allem bei den Integration-Events, die mit unserem Monolithen kommunizieren und die Bestände synchronisieren. Wir sind aber laufend dran, unsere Lösung zu verbessern.

Vom Hackfest zur Lagervisualisierung

Bei dem einen fixen Bürotag treffen wir uns nach getaner Arbeit oft in unserer hauseigenen Bar auf ein Feierabendbier. Bei einem solchen hatten wir die Idee, eine 3D-Visualisierung vom Lager zu bauen, damit wir uns die Situation vor Ort besser vorstellen können. Piratisch wie ich bin, probierte ich das in einem Prototyp mit der Javascript 3D Library three.js aus. Die Visualisierung sah schon in diesem Prototyp-Status vielversprechend aus, aber leider stotterte sie noch bei Bewegungen der Kamera aufgrund schlechter Performance. Ich konnte es aber nicht lassen und habe den Prototypen im Team vorgestellt.

Glücklicherweise haben wir mit Christian Sami einen Entwickler mit Master of Arts in Game Design bei uns im Team, der in meinem Prototyp Potenzial sah und genau wusste, wie man das Ganze noch optimieren und erweitern könnte. Zusammen mit einem weiteren Engineer hat er am Hackfest 2022 meinen Prototypen weiterentwickelt und in eine anwendbare Lösung verwandelt.

Die finale Lagervisualisierung im Einsatz
Die finale Lagervisualisierung im Einsatz

Das Performanceproblem konnten sie mit verschiedenen Techniken lösen: serverside Caching der Lagerplätze, eine zentrale Textur für alle Lagerplätze und ein grosses Mesh, welche alle Boxen beinhaltet. Sie haben auch gleich weitere nützliche Features eingebaut, wie zum Beispiel eines meiner Lieblingsfeatures: der Füllgrad als Farbverlauf von grün zu rot. Die erweiterte Visualisierung aus dem Hackfest wird heute im Lager täglich genutzt. Sie hilft den Lagermitarbeitenden, das Lager einfacher zu konfigurieren und visuell Probleme zu erkennen, wie beispielsweise, wenn zu wenig Lagerplätze frei sind.

Was bringt die Zukunft?

Am Horizont stehen genauso spannende Projekte wie in der Vergangenheit. Aktuell sind wir mit der Erweiterung von der Blitzlieferung beschäftigt, womit zukünftig 60 % aller Schweizer Haushalte in den Genuss von schnelleren Lieferzeiten bis zu Same Day kommen. Hier werden wir auch viele im Pilotprojekt etwas zu kurz gekommene technische Schulden angehen, wie beispielsweise der Migration von möglichst viel Code aus dem Monorepo in das Modul.

Hast du nach diesem Blogpost logistische Schmetterlinge im Bauch? Bei Digitec Galaxus findest du bestimmt deine Liebe.

58 Personen gefällt dieser Artikel



Tech
Folge Themen und erhalte Updates zu deinen Interessen

Diese Beiträge könnten dich auch interessieren

Kommentare

Avatar