Julian Bauß, Data Engineer bei Bonprix
30. Juni 2017Julian Bauß ist Java-Entwickler und Teil der neu gegründeten Abteilung Marketing-Data-Platform. Seine Aufgabe: die Entwicklung, das Projektmanagement und die Server-Verwaltung der "Realtime-Engine". Am Beispiel einer Echtzeitabbrechererkennung erklärt er, wie sie dafür Apache Kafka, Flink und Cassandra nutzen, um in Echtzeit auf das Nutzerverhalten im Bonprix-Shop reagieren zu können.
Vita
Julian studiert Informatik an der Hochschule für angewandte Wissenschaften in Hamburg, als er sich für ein Praktikum zur Erstellung der Bachelorarbeit bei Bonprix bewirbt. Nach erfolgreichem Abschluss wird er bei Bonprix übernommen, wo er zunächst in der Abteilung Webshop-Entwicklung arbeitet. 2016 wechselt er als Data Engineer in die Abteilung Marketing-Data-Plattform.
Tools
- Apache Kafka, Flink, Cassandra
- Mattermost
- GitLab, Jenkins
- IntelliJ
- Jira, Confluence
Empfehlungen
- Newsletter: O’Reilly Data Newsletter, Flink Mailingliste
- Blog: The Netflix Tech Blog, Joel On Software Blog
Social
Hallo Julian, was steckt hinter deinem Titel “Data Engineer”?
Als ich im Juli letzten Jahres in die frisch gegründete Abteilung Marketing-Data-Plattform gewechselt bin, wurde ich gefragt: “Du bist Entwickler, aber Entwickler trifft es nicht so ganz. Denn du machst mehr als Entwickeln. Mit welcher Berufsbezeichnung würdest du dich wohlfühlen?”
Da haben wir erst einmal recherchiert, was denn gerade im Silicon Valley die übliche Bezeichnung ist. Und dort sind wir auf den Titel “Data Engineer” gestoßen, der am besten abbildet, was ich momentan mache.
Wie lange bist du schon bei Bonprix?
Seit gut drei Jahren. Ende 2013 habe ich bei Bonprix meine Bachelorarbeit in angewandter Informatik geschrieben und bin dann als Webshop-Entwickler übernommen worden.
Welche Aufgaben hast du in der Abteilung Marketing-Data-Plattform?
Ich arbeite hauptsächlich für das Projekt “Realtime-Engine”. Bei dem Projekt geht es darum in Echtzeit Daten auszuwerten, die wir zum Beispiel im Web-Shop sammeln, um darauf reagieren zu können. In unserem Data-Warehouse sammeln wir bereits Vertriebsdaten in einer analytischen MPP-Datenbank. Wenn man allerdings auf einzelne Ereignisse reagieren will, ist ein Data-Warehouse nicht so gut geeignet. Darum haben wir vor etwa einem Jahr dieses Projekt ins Leben gerufen.
Ich bin der Erste, der auf diesem Thema arbeitet. Da das Projekt noch recht neu ist, sind meine Aufgaben vielfältig: Ich bin Entwickler, technischer Projektmanager und kümmere mich um die Rechenzentrums- und Netzwerkthemen. In dem Fall schaue ich zum Beispiel, ob wir weitere Hardware brauchen. Das sind die drei Spannungsfelder, in denen ich derzeit unterwegs bin.
Wie ist dein Team dafür aufgestellt?
Im Moment bin ich alleine, aber wir planen uns hier breiter auszustellen. Das heißt aber nicht, dass ich zur Zeit alleine arbeite. Das Projekt erfordert es, dass ich eng mit den Kollegen aus anderen Abteilungen und externen Partnern zusammenarbeite. Beispielsweise bezieht die Realtime-Engine Daten aus dem Data-Warehouse. Um das Data-Warehouse herum haben wir ein großes Team, das mich unterstützt. Kollegen aus der Webshop-Entwicklung sind für mich ebenfalls wichtige Ansprechpartner. Weil das meine ehemalige Abteilung ist, bin ich dort natürlich gut vernetzt. Die andere Hälfte unseres Java-Entwicklungsteams arbeitet vor allem an unserem BI-Portal. Ich bin also gut integriert. Aber wir suchen mehr Leute, da das Thema immer wichtiger wird.
Außerdem arbeite ich mit Felix zusammen, einem Entwickler, der unter anderem Tools für unser Online-Marketing entwickelt. Für ihn ist die Realtime-Engine relevant, weil wir auch unsere Tools mit Echtzeitdaten anreichern wollen. Darum schaut er immer wieder mit in das Projekt und führt Code-Reviews durch. Und das ist auch wichtig. Ich versuche immer, die optimale Lösung zu entwickeln. Da hilft es, wenn auch noch ein Kollege drauf guckt.
Ich versuche immer die optimale Lösung zu entwickeln. Da hilft es, wenn auch noch ein Kollege drauf guckt.
Wieviel deiner Arbeitszeit fällt in welchen Aufgabenbereich?
Innerhalb meiner drei Aufgabenbereiche arbeite ich zu 50 Prozent für Entwicklung und Architektur, 25 Prozent entfallen auf Rechenzentrumsthemen, Server und Netzwerk, und 25 Prozent auf Kommunikation, technisches Projektmanagement und Anforderungsmanagement.
An welchen konkreten Features arbeitest du bei der Realtime-Engine?
Ein Use-Case, den wir kürzlich implementiert haben, ist die Echtzeitabbrechererkennung. Dabei geht es darum anhand eines Machine-Learning-Modells vorherzusagen, wann ein Kunde den Webshop verlassen wird ohne etwas zu kaufen. Das mathematische Modell, auf dem die Echtzeitabbrechererkennung basiert, wurde vom Data-Analytics-Team ausgearbeitet und anhand historischer Daten auf Korrektheit geprüft.
Wie organisiert ihr so einen Entwicklungsprozess?
Wir gehen iterativ vor, machen aber kein Scrum nach Lehrbuch. Das Team bestand aus vier Personen: Sascha als Data-Scientist, ich als Data-Engineer, Sarah als Projektmanagerin und Nina, die das Thema Personalisierung verantwortet und sich um Use-Cases kümmert. Das Projekt startete mit einem Kick-Off, bei dem wir bereits offene Tasks identifiziert und in Jira abgebildet haben. Wir haben uns wöchentlich in einem Progress-Meeting getroffen. Insgesamt hat das Projekt etwa vier oder fünf Monate gedauert.
Besonders mit Sascha, der das Machine-Learning-Modell anhand von historischen Daten erarbeitet hat, habe ich dabei intensiv zusammengearbeitet.
Welche Herausforderungen gab es bei der Implementierung der Echtzeitabbrechererkennung?
Das Spannendste für mich war, dass dies der erste Use-Case gewesen ist, den ich in der Realtime-Engine implementieren konnte. Zuvor war alles eher ein theoretisches Konzept. Die Grundlagen waren zwar gelegt, und wir wussten, dass wir damit etwas machen können. Aber als es dann soweit war, musste ich die unterschiedlichen Technologien erst noch mal abklopfen und prüfen, ob das System bereit für den Live-Betrieb ist. Und natürlich traten dann auch Problem auf, die ich nicht vorhergesehen hatte.
Außerdem war dies für mich der erste Einstieg in unsere Tracking-Logik. Damit hatte ich vorher nur wenig zu tun. Das war wirklich spannend: Wo kommen meine Daten her? Welche Performance-Probleme entstehen, wenn ich derart große Datenmengen verarbeite, und was muss ich auf Netzwerkebene beachten?
Wie ist die Realtime-Engine technologisch aufgebaut?
Wir haben eine heilige Dreiteilung, wie ich sie nenne: Apache Kafka, Flink und Cassandra. Der KFC-Stack. Wir haben uns im Vergleich zu anderen Technologien dafür entschieden, weil wir dies für die vielversprechendste Möglichkeit gehalten haben ein Streaming-Projekt zu realisieren. Vor einem Jahr hat man zum Beispiel von Flink noch nicht so viel gehört. Da hat man eher über Spark gesprochen. Nachdem Netflix Anfang des Jahres in San Jose verkündet hat, ihre Streaming-Jobs von Spark auf Flink umzuziehen, gehen alle zu Flink. Wenn Netflix das macht, ist das immer eine ganz gute Orientierung.
Wie genau habt ihr den KFC-Stack implementiert?
Kafka ist ein Messaging System, in das Producer Daten in ein Topic reinschreiben können. Das kann man sich wie einen Newsfeed oder einen Online-Nachrichtenticker vorstellen. Andere Systeme können das Topic subscriben und bekommen die Nachrichten dann ausgeliefert. Flink steht direkt hinter Kafka. Der Webshop schreibt die Tracking-Daten in den Kafka rein, Flink liest diese aus und wendet beispielsweise unsere Echtzeitabbrechererkennung oder Customer-Journey-Logik an. Aus der Abbrechererkennung bekommen wir dann einen Wahrscheinlichkeitswert zurück, den wir entweder für eine Langzeitbetrachtung in die NoSQL-Datenbank Cassandra speichern oder direkt an den Webshop senden. Der Webshop empfängt die Nachricht und kann auf Basis von konfigurierbaren Schwellenwerten entscheiden, was er damit macht.
Und welche Art von User bricht denn nun besonders oft ab?
Dazu kann dir unser Modellexperte Sascha mehr sagen. Das Modell ist komplex und berücksichtigt viele verschiedene Variablen. Wir haben vor kurzem einen Multi-Varianten-Test durchgeführt, um zu schauen, wie gut das Modell funktioniert. Das Ergebnis ist sehr vielversprechend.
Wie hoch ist aktuell die Genauigkeit in der Vorhersage?
Beim Abbrecher-Scoring können wir mit 95-prozentiger Wahrscheinlichkeit vorhersagen, ob jemand abbricht. Wir stehen aber mit dem Projekt eigentlich am Anfang. Aktuell betrachten wir nur eine Session. In Zukunft wollen wir über mehrere Sessions schauen. Denn es gibt ja die Momente, wo ich weiß, das ich gerne einen Pulli kaufen will, aber erst mal schaue, was es so gibt. Die Echtzeitabbrechererkennung ist ein Proof of Concept, und es macht Sinn, das noch weiter auszubauen.
Lass uns mal ein wenig auf die Arbeitsbedingungen bei Bonprix eingehen. Wie sieht dein Arbeitsplatz aus?
Ich persönlich bin genügsam, was das angeht. Für mich muss erst mal der Laptop gut funktionieren. Ich habe einen Windows-Rechner von Lenovo mit einem i7-Prozessor und 16 Gigabyte Arbeitsspeicher und bin damit sehr glücklich. Was immer schön ist, sind viele Monitore. Ich habe ein Zwei-Monitor-Setup mit meinem Laptop daneben und das funktioniert für mich sehr gut. Felix hat ein MacBook Pro. In der Beziehung sind wir flexibel. Das Setup muss einfach gut zu der Aufgabe passen.
Bonprix ist Teil eines Konzerns. Wie muss man sich die IT bei euch vorstellen?
Wir Entwickler bekommen spezielle Entwickler-Laptops, die ein anderes Rechtekonzept als die unserer Kollegen in anderen Fachbereichen haben.
Wie sieht es mit euren Tools aus?
Wir nutzen Mattermost, das ist quasi ein Open-Source-Slack, das auf unserem eigenen Server läuft. Das ist ganz nett!
Im Entwicklungsumfeld, dass sich alle teilen, nutzen wir unseren selbstgehosteten GitLab als Server für die Versionskontrolle mit Git. Jira benutzen wir als Ticketing-System und Confluence für die Dokumentation. Wir arbeiten relativ viel auf den Servern des Rechenzentrums, was wir über eine sichere SSH-Verbindung über die Shell machen. Mit der Shell fühle ich mich immer am wohlsten.
Jenkins nutzen wir für unsere Continuous-Integration- und Deployment-Prozesse, die automatisierte Ausführung von Softwaretests und solche Geschichten. Im Web-Shop haben wir eine ziemlich coole Deployment-Pipeline, die optisch anzeigt, welche Tests nach dem letzten Built des Web-Shops positiv durchgelaufen sind. Wenn Tests fehlschlagen gibt es einen Alert. Nur nach erfolgreichem Durchlaufen der Tests wird ein Build fürs Deployment freigegeben.
Welche IDE nutzt du?
Mittlerweile benutze ich IntelliJ. Das war für mich vor kurzem erst eine Umstellung, denn ich habe während des Studiums viel mit Eclipse gearbeitet.
Wir würdest du deine Lebensphase hier bei Bonprix beschreiben?
Ich bin sehr glücklich hier. Während des Studiums habe ich mich intensiv mit Informatik, Softwareentwicklung und Software-Engineering beschäftigt und gemerkt, wie viel Bock ich darauf habe. Innerhalb meiner Jobs bei Bonprix habe ich mich inhaltlich sehr weiterentwickelt. Im Studium habe ich viel Theorie gelernt, aber hier war es sehr praxisorientiert. Ich habe viel im Umgang mit den Kollegen gelernt: Wie stellt man die richtigen Fragen in der Anforderungsanalyse? Worauf sollte ich achten, wenn ich ein System baue? Da unsere Plattform raffiniert und der Deployment-Prozess sehr gut durchgeplant ist, konnte ich viel Wissen mitnehmen.
Und im Moment habe ich hier ein bisschen grüne Wiese mit der Realtime-Engine. Da kann ich viel mitgestalten und Ideen einbringen. Das ist echt cool.
Was sind wichtige Themen und Trends in deinem Bereich?
Gerade beschäftigt mich das Thema Monitoring sehr. Die Frage ist: Wie bekomme ich es hin meine Machine-Learning-Modelle kontinuierlich auf Qualität zu prüfen? Hier hat selbst die Community noch wenig Antworten.
Als Informatiker befasse ich mich gerne mit neuen Programmiersprachen. Sie ermöglichen einem einen anderen Blickwinkel auf die Entwicklung. Gerade evaluieren wir Kotlin für Prototypen und Microservices. Mit Flink bin ich gerade auch sehr gut beschäftigt. Da passiert in der Community gerade viel und das Framework wird immer weiterentwickelt.
Wir kommen langsam zum Ende unseres Interviews und es wird Zeit ein paar Bücher und Blogs zu empfehlen.
Zum Thema BI und Machine Learning kann ich den O’Reilly Data Newsletter sehr empfehlen. Fast alle Newsletter von O’Reilly sind sehr gut, ist immer etwas Spannendes dabei. Ich lese im Allgemeinen recht viel im Netflix-Blog. Den Blog ‘Joel on Software’ lese ich auch sehr gerne, da er einen Einblick in sehr viele Softwareentwicklungsthemen gibt.
Ähnlicher Art ist Coding Horror. Der Stack Overflow-Gründer Jeff Atwood schreibt dort coole Artikel über Softwareentwicklung aus unterschiedlichen Perspektiven, sowohl auf der technischen als auch organisatorischen Ebene.
Was kannst du zum Thema Flink empfehlen?
Bei Flink hat mir die Mailingliste sehr weitergeholfen. Ich hatte ein paar Mal grundlegende Fragen in der Mailingliste gestellt, und die Community konnte mir schnell weiterhelfen. Manchmal ist es nämlich gar kein technisches Problem, sondern eine falsche Herangehensweise. Aber das findet man erst raus, wenn man losgeht und baut und die richtigen Fragen stellt.
Lieber Julian, vielen Dank für das Interview.
Dieses Interview wurde am 8. Mai bei Bonprix in Hamburg geführt.