Profilbild von Thomas Jarnot Senior Software-Developer (Fullstack) aus Bonn

Thomas Jarnot

nicht verfügbar bis 01.01.2025

Letztes Update: 11.04.2024

Senior Software-Developer (Fullstack)

Abschluss: nicht angegeben
Stunden-/Tagessatz: anzeigen
Sprachkenntnisse: deutsch (Muttersprache) | englisch (verhandlungssicher)

Dateianlagen

CV-Thomas-Jarnot-V27_090124.pdf

Skills

Kotlin, Java, Spring Boot, REST, Domain Driven Design, Jenkins, Google reCAPTCHA, OAuth2, AspectJ, Maven, Gradle, Git, BitBucket, RESTful HTTP, Apache Kafka, PostgreSQL, Docker, Nomad, Slash, Consul, Kibana, Grafana, Prometheus, IntelliJ IDEA, Kanban, HTTPS, nginx, React, Datenbank, Postgres, Google Cloud Platform, Kubernetes, Scrum, Groovy, Spock Framework, Letsencrypt, CMS, Microservices, DSL, JCR, HATEOAS, Guice, Handlebars/Freemarker, Stackdriver, SDK, IMPEX, GraphQL, Elasticsearch, JPA, Hystrix, Hypermedia, Web-API, OpenAPI 3.0, DDD, Spring Data, Spring JDBC, Hibernate, Resilience, Circuit-breaker, MockMVC, Jira, Confluence, Refactoring, Cloud, Regex, Zuul, Ribbon, Swing, JavaFX, DevOps, Linux, Spring Security, Spring Test, Spring Cloud, RabbitMQ, Nexus, Microsoft SQLServer, JSON, JsonPath, XML, Database, PL/pgSQL, Lombok, Keycloak, Cucumber, Selenium, Mockito, arc42, HTML, JBoss, Oracle, VAADIN, JEE, Liquibase, H2, Vagrant, Subversion, Apache Wicket, Bootstrap, HTML5, responsive design, JQuery, ISO8583, Jersey, DB2, UI/UX, JavaScript, CORS, CSS, GWT, SQL, Twitter Bootstrap, AJAX, Tomcat, Eclipse, Quickbuild (CI), Bean Validation, JSP/JSTL, Oracle Weblogic, RMI, Jetty, Solr, JSF, MySQL, Flyway, SOA, Karaf, OSGi, NoSQL, Lucene, POI, MongoDB, SAP R/3, 3D Secure, RSA, JAX-WS, SOAP/WSDL, JEE, J2EE, JMeter, JCA, UTM, DDT, PDF, iText, LDAP, CORBA, HBCI, Schufa-Client, Subversion, RDBMS

Projekthistorie

08/2023 - bis jetzt
Solution Architekt
(Konsumgüter und Handel, 1000-5000 Mitarbeiter)

Solution Architekt im Produkt Aktionssteuerung / Procurement Solutions
Mitarbeit im Retail-Großprojekt TROY zur Ablösung von Payback und der Gestaltung einer Inhouse-Lösung im
Rahmen des zukünftigen, bundesweiten Kundenbindungsprogramms für REWE- und Penny-Kunden. Ansprechpartner für Anwendungsmodernisierung hinsichtlich Cloud-Native-, Microservice- und Data-Mesh-Architekturen sowie Unterstützung bei dessen Realisierung.

Tätigkeitsschwerpunkte:
  • Analyse des seit 2003 historisch gewachsenen Datenmodells und der Legacy-Backends im Bereich
    der zentralen Aktionsplanung und Rabattpflege
  • Identifikation und Bereinigung von produktfremden Verantwortlichkeiten (Context-Cleanup)
  • Identifikation von Fehlverortungen und Erarbeitung von produktbereinigten Datenstrukturen
  • Analyse einer COBOL-getriebenen Satzartenschnittstelle (SEDAS) und Transformation in ein
    hierarchisches Domänenmodell mit Blick auf Ausdrucksfähigkeit und Ressourcen-Optimierung
  • Gestaltung, Implementierung und Qualitätssicherung des Nachrichtenmodells zur Versorgung von
    werbewirksamen Aktionsartikeln auf Basis von Java und Spock
  • Definition von fachlich getriebenen Domain-Events (gegenüber CRUD-Events)
  • Erarbeitung eines effizientes Topic-Designs für die Kafka-basierte Nachrichtenarchitektur
  • Implementierung von Kafka-Producern/Consumern auf Basis von Kotlin, Quarkus und Spring Boot
  • Identifikation weiterer Optimierungspotenziale hinsichtlich Domänenbildung, Entkopplung und
    Modularisierung
  • Beratung der Kommunikationspartner hinsichtlich der Anwendung des produktbereinigten Modells
  • Beratung der Kommunikationspartner hinsichtlich neuer Bezugswege zu den Owner-Produkten für
    nicht mehr versorgte Datenstrukturen
  • Regelmäßiger Austausch mit der Architekturleitung und Technologie-Teams bzgl. Architekturziele,
    Plattformstrategie, technischer Innovationen und Risikobewertung
  • Erarbeitung und Abstimmung von Transitionslösungen zur Einhaltung strikter Deadlines
  • Dokumentation von Architekturentscheidungen gemäß der Konzernrichtlinien
  • Förderung eines einheitlichen Sprachgebrauchs in der Aktions-Domäne (U biquitous Language)
  • Übersetzungstätigkeiten zur Transformation der Schnittstellenmodelle in die englische Sprache

Techstack & Keywords:
Java, Kotlin, Spring Boot, Quarkus, Apache Kafka, Docker, REST, GitLab, Spock Framework (BDD), Groovy,
IBM DB2 z/OS, IntelliJ IDEA, Maven, Jira, Confluence, Scrum, SEDAS, Data-Mesh, Domain-driven Design,
Event-driven Architecture


02/2023 - 08/2023
Software Developer, Coach
(Pharma und Medizintechnik)

Team Medikation / Meona-Server
Softwarelösung für die effiziente Dokumentation von Pflege- und Behandlungsleistungen und digitales Medikationsmanagement.

Tätigkeitsschwerpunkte:
  • Optimierung der bestehenden Codebase hinsichtlich Wartbarkeit, Testabdeckung und Modularisierung
  • Aufbau eines Docker-Stacks zur Unterstützung der lokalen Entwicklung gegen die Datenbanken MS SQL Server, SAP MaxDB und MariaDB
  • Migration der monolithischen Codebase von Java 8 auf Java 17
  • Identifikation von Modulgrenzen im Bereich Katalog-Import/-Export und Überführung in ein Modellprojekt (Prototyp) auf Basis von Spring Boot, REST (Level 3), Hibernate, Liquibase und Java 17
  • Entwicklung und testgetriebene Dokumentation der REST API für für den Katalog-Import/-Export mit Spring REST Docs
  • Tiefgreifendes Customizing der Exporter-Serialisierung nach JSON und XML
  • Bereitstellung von HTTP-Anwendungsbeispielen mittels .http files sowie umfassenden Groovy-Scripts
  • Coaching des Entwicklungsteams hinsichtlich Spring, REST, Docker und Teststrategien
  • Durchführung von Tech-Talks zu den Themen REST sowie dem Test- und Spezifikations-Framework Spock inkl. Einführung in die JVM-Sprache Groovy
  • Begleitung der Einführung von Spock, der Umsetzung des BDD-Ansatzes und der Verbesserung von Testpraktiken
  • Ansprechpartner für weiterführende Implementierungs-, Design- und Architekturfragen
  • Aufbau von Docker-Stacks in der bestehenden Landschaft der Linux-Systeme
  • Analyse und Optimierung von nativen Linux-Skripten mit gleichzeitiger Überführung in einen
    Docker-Stack zur Steigerung der Portabilität und Nutzungseffizienz (zB. durch Nutzung von remote
    Container-Funktionalität via Docker-in-Docker) sowie der Möglichkeit zur Anbindung an die CI-Pipeline
  • Teilnahme am Scrum-Training

07/2022 - 12/2022
Architekt, Entwickler, Analyst
ALD Automotive, Hamburg (Automobil und Fahrzeugbau)

Customer-Portal
Greenfield-Projekt zur Entlastung der Kundenbetreuung. Digitalisierung und Automatisierung von manuellen Prozessen sowie Erstellung von Self-Services für B2C-Kunden.

Schwerpunkte:
  • Painpoint-Analyse der Prozesse Rückholung, Kaufpreisanfrage und Vertragsumstufung
  • Identifizierung der Bedarfsträger und Stakeholder im Umfeld der Kundenprozesse
  • Aktive Informationssammlung bei den Stakeholdern und Fachabteilungen
  • Aufbereitung und Vorstellung der Kundenprozesse nach Domain Story Telling
  • Entwicklung der REST-API für Customer-Services mit Spring Boot und Kotlin
  • Aufbau des öffentlichen Customer-Frontends mit React und Typescript
  • Entwicklung einer Client-Bibliothek für den Zugriff auf Inhouse- und Fremdsysteme auf Basis des
  • reaktiven Spring WebClients (RestTemplate deprecated).
  • Adaption der Client-Bibliothek an den internen Authentifizierungs-Mechanismus (automatischer
  • Token-Refresh bei HTTP 401 und Retry-Logik)
  • Einrichtung der Azure Deployment Pipeline
  • Implementierung des Azure Security Konzepts (Subscription-Key)
  • Kafka-Anbindung mit Spring
  • Aktive Wissensvermittlung an interne und externe Kollegen im Rahmen eines Regeltermins
  • Durchführung eines Workshops zu NATS/JetStream (message-oriented middleware) als schlanke Alternative zu Kafka
  • Containerisierung mit Docker und Kubernetes (Kustomize)

01/2021 - 06/2022
Architekt, Lead Entwickler
REWE digital, Köln (Konsumgüter und Handel)

KOS-Web
Entwicklung eines Frameworks zur Unterstützung der Migration und Neuentwicklung von Microservices auf
Basis von Spring Boot. Kapselung der Aspekte Logging, E2E-Monitoring, Resilience, Security und Test.
Modularisierte Bereitstellung als Spring Boot Starter Artefakte. Erstellung einer Show-Case Applikation sowie
testgetriebener REST API Dokumentationen auf Basis von Spring REST Docs. Automatische Verwaltung von
Versionen und Abhängigkeiten via Maven. Bereitstellung des Show-Cases als docker-compose Stack.

Kartenwelt
Konzeption und Entwicklung einer Plattform für den Kauf von digitalen Gutscheinen mit Anbindung der
Transaktions-Provider epay und PAYBACK bestehend aus 3 zentralen, REST-basierten Microservices
(Transactor, Purchaser und Exporter) auf Basis von Spring Boot. Hauptmerkmal der Plattform ist die schnelle
Abwicklung von eingehenden Kassen-Transaktionen. Diese werden zunächst vom Transactor angenommen
und zur späteren, asynchronen Verarbeitung in einer zentralen DB2-Instanz (Vorgabe) gespeichert. Die
Weitervarbeitung erfolgt über einen Spring-Scheduler (Reloader) als losgelöste REST-Aufrufe an den
Purchaser, welcher wiederum die Ergebnisse an den Exporter versorgt. Dieser stellt die gesammelten Daten
über verschiedene kanalspezifische Schnittstellen nachgelagerten Systemen wie Datawarehouse, SAP und
einer Metrikplattform bereit.

Coupon-World
Die Coupon-World ist eine Neuentwicklung zur Bereitstellung von vorgenerierten, digitalen Coupons.
Entworfen nach den Prinzipien des Domain-Driven-Designs bilden die Kontexte Generierung, Einlösung,
Validierung und Support die Hauptbestandteile der Plattform. Trigger für die Generierung von bis zu 10
Millionen Coupons in einem Vorgang, ist die Übergabe einer Kampagne aus einem internen Planungstool
(KMT) als REST-Aufruf. Gemäß dem bewährten Reloader-Ansatz der Kartenwelt, werden die
Kampagnen-Requests zunächst als Auftragsobjekt gespeichert und schnellstmöglich dem Aufrufer quittiert.
Die in near realtime erfolgende, nachgelagerte Generierung von eindeutigen Coupon-Codes erfolgt performant
in-memory in der Coupon-Keeper Komponente und wird dort in einer zentralen DB2-Instanz persistiert
(dynamische Tabellenallokation anhand Coupon-Prefix) und mit der Bereitstellung eines Download-Links als
CSV-Datei an den Aufrufer beendet. Bis zu einer max. Anzahl von 10 Mio Coupons, kann für eine bestimmte
Kampagne beliebig oft nachgeneriert werden. Weitere Prozesse, wie die Validierung und Einösung eines
Coupons durch das Kassensystem, finden in dedizierten Komponenten der jeweiligen Kontexte statt. Hierbei
wird durch die Parallelisierung von Anfragen an beteiligte Services eine möglichst hohe Performance
gegenüber den Dialogsystemem sichergestellt. Detaillierte Informationen zu den Vorgängen in der
Coupon-World werden durch den Support-Kontext bereitgestellt, welcher in verschiedene, interne
Analyse-Systeme eingebunden ist. Die Bereitstellung von REST API- und Architektur-Dokumentationen
(DDD-KontextMap, Domain-Story-Telling und Call-Flow etc.) runden das Projekt ab.

Relaunch KOS-Payback (Alpha-Phase)
Das Vorhaben umfasst die Neustrukturierung der gesamten KOS-Payback-Plattform nach 10 jährigem Betrieb
und Weiterentwicklung durch verschiedene Teams. Sämtliche Aspekte der Plattform sollen nach zeitgemäßen
Kriterien analysiert, restrukturiert und ggf. abgelöst werden. Zielbild ist eine schlankere, konsolidierte und
zeitgemäße Architektur, die auf einer modernen Container-Plattform wie Kubernetes in der Google Cloud
realisiert werden soll. Weiteres Merkmal ist die Entkopplung der REST-basierten Service-Kommunikation
durch den Einsatz einer ereignisorientierten Streaming-Plattform wie Apache Kafka oder Google Pub/Sub.
Ergebnis der Mitarbeit ist die detailierte Analyse und Risikobewertung der bestehenden Plattform sowie der
Entwurf einer maßgeschneiderten Lösung mit Blick auf das Zielbild Containerisierung, Betrieb in der Cloud,
event-getriebenes Design, Einsatz von Monorepos (GitLab) sowie automatisierten Deployment (GitLab CI)
und Dokumentation nach Domain-Driven-Design und Domain-Story-Telling. Durch die ANÜ-bedingte
Befristung der Mitarbeit, konnten lediglich die Konzeption der Service-Kommunikation, Ansätze einer
ausbalancierten Domain-Bildung sowie die protoypische Realisierung von Monorepos und der GitLab-CI an
das Team übergeben werden.
Rolle: Architekt, Lead Entwickler
Weitere Aktivitäten:
  • Einführung von Kotlin, Groovy und Spock (BDD) im Entwicklungs-Team
  • Einführung von Docker/Docker-Compose zur Qualitätssteigerung der lokalen Entwicklung
  • Einführung von Domain-Driven-Design und Domain Story-Telling
  • Eigeninitiatives und kontinuierliches Coaching der Teammitglieder im Rahmen eines wöchentlichen Entwickler-Meetings
  • Vermittlung von Detailkenntnissen und permanenter Ansprechpartner in Entwicklungsfragen (Kotlin, Spock, Groovy, Spring Boot, Docker, git, IntelliJ IDEA, RESTful HTTP, CI/CD, Kafka, NoSQL etc.)
  • Förderer und Reviewer von Clean-Code Prinzipien wie Lesbarkeit, Kohäsion, Entkopplung, Single Responsibility, Testabdeckung etc.

07/2020 - 12/2020
Software-Entwickler (Fullstack)
DHL IT-Services, Berlin (Transport und Logistik)

Unterstützung eines Querschnitts-Teams im Kontext einer großen Logistikplattform mit den Schwerpunkten:
  • Automatisierte Löschungen von personenbezogenen Daten nach DSGVO
  • Analyse und Rückbau von veralteten und störanfälligen Services
  • Überführung notwendiger Funktionalitäten von zurückgebauten in neu zu erstellende Backend-Services auf Basis von Kotlin und Spring Boot.
  • Unterstützung bei der Störungsanalyse und -behebung
Weiterentwicklung von Backend-Services im Fachkontext “alternative Namensschreibweisen” und “Digitale Kopie” inkl. technischer Modernisierung auf Basis von Java & Spring Boot.

Entwicklung einer Frontend-Komponente auf Basis von Vue.js.

01/2019 - 06/2020
Software-Entwickler (Fullstack), Domain-Architekt
REWE digital, Köln (Konsumgüter und Handel)

Unterstützung im kontinuierlichen Team-Workflow nach Kanban mit den Themenschwerpunkten:
  • Ablösung des REWE-Onlineshop-Monolithen
  • Kundenregistrierung und -Login
  • Kunden-Selfservices (Stammdatenänderung, token-geschützter Passwort-Reset, E-Mail-Change etc.)
  • Datensynchronisation (Application Layer)
  • Session-Management, Authorization
  • Datenschutz nach DSGVO
  • Fraud-Protection, Geo-Blocking
  • Consent-Management
  • technische Migrationen

Analyse und Neufokussierung der bestehenden fachlichen Struktur und Förderung der Domänenbildung nach DDD.

Überführung bestehender Applikationslogik aus einem Tomcat-basierten Shop-Monolithen in Microservices auf Basis von Spring-Boot und Kotlin mit Anbindung an Apache Kafka.

Neuimplementierung der Kundenregistrierung als Microservice auf Basis von Kotlin und Spring Boot sowie als Microfrontend auf Basis von Next.js und React.

Implementierung eines Authorization-Services auf Basis von Spring Security OAuth mit Anbindung an den zentralen Redis-Cluster.

Neukonzeption eines skalierbaren Datenreplikations-Services, zur nachrichtenbasierten Synchronisation von Kundendaten in weiterverarbeitende Systeme (REWE Commerce-System, SAP, Salesforce, Kunden-Service Backoffice).

Ständige Anpassung und Weiterentwicklung der Monitoring- und Alerting-Plattform auf Basis von Kibana, Prometheus und Grafana.

Etablierung und Dokumentation sauberer REST-APIs.

Einführung von Kotlintest/MockK (now Kotest) als alternativen Testing-Stack zu Spock/Groovy.

Einführung von Aspektorientierung zur Kapselung und Verlagerung von technischen Zusatzaufgaben in Code-Artefakte außerhalb des Business-Codes.

Entwicklung von Migrationsstrategien zur verlustfreien Überführung von Postgres-Daten und Kafka-Topics.

Implementierung eines Stacks zur HTTP-basierten Publizierung von Kafka-Nachrichten für die lokale Entwicklung.

Entwicklung von Frontend-Services (BFF) und -Komponenten auf Basis von Node.js/Next.js und React.

Anpassung von self-contained Systems zur Integration in ein unternehmensweites Dynamic UI Composition (aka Transklusion) Framework.

Weiterentwicklung der CI-Chain von nativen zu Agent-basierten builds (Jenkins).

Implementierung von Google reCAPTCHA (Enterprise) zur Absicherung des Registrierungs- und Login-Frontends.

Anbindung der Backend- und Frontend-Services an den Machine- bzw. User-Token-Workflow (OAuth2).

10/2018 - 12/2018
Software-Entwickler, technischer Koordinator
OBI digital (Sonstiges)

OBI Gartenplaner / Online-Konfigurator

Verantwortlich für die Abstimmung, Entwicklung und das Deployment des Product Information Services (Microservice).

Prototyping des internen Deployment-Stacks auf Basis von Docker (Swarm Mode) inkl. HTTPS Reverse-Proxy (nginx), Frontend (React) und Datenbank (Postgres).

Aufbau der automatisierten CI-Chain via Jenkins (Declarative Pipeline).

Weiterentwicklung und Migration des Deployment-Stacks in Richtung Google Cloud Platform / GKE (Kubernetes).

Permanentes Tracking des Laufzeitverhaltens (Spring Boot Admin).

Etablierung von Domain Driven Design und PACT (Testing).

Abstimmung mit verschiedenen Stakeholdern aus den Fachbereichen und den angrenzenden Entwicklungen.

Aktive Förderung der Feedback-Kultur.

Agiler Prozess nach Scrum.

04/2018 - 09/2018
Software-Entwickler, DevOps-Engineer, Technical Lead
ZEG (Sonstiges)

ZEG ONLINE 3.0
CMS-basierte eCommerce-Plattform für die Brandshops und Fachhändler der ZEG

Die ZEG ist eine Einkaufsgemeinschaft von 960 Fahrradgeschäften in Europa und entwickelt in Kooperation mit führenden Herstellern Sonder- und Exklusivmodelle, zum Vertrieb über die eigene Online-Plattform.

Im Zuge neuer Payment-Provider, Liefer- und Sortieroptionen, verbesserter Verfügbarkeitsermittlung, Anbindung weiterer Fachhändler-Shops (von 5 auf >200), Anpassung an neueste Datenschutzrichtlinien und zahlreicher Detailverbesserungen, soll die ZEG-Plattform großflächig ausgebaut werden.

Die ZEG-Plattform ist als ein monolithisches System einzustufen. Entgegen aller Trends zu Microservices und modularer Architektur, ist es durchaus möglich ist, gut strukturierte und wartbare Monolithen zu bauen. Jedoch wurde schnell deutlich, dass das System unter wenig agilen Prozessen und jahrelang im pragmatischen Stil vorangetrieben wurde. Stabilität, Flexibilität, Performance und Wartbarkeit waren weit ab existierender Standards, sodass sich die Weiterentwicklung als äußerst zäh und ineffizient ergab.

Nach selbstmotivierten Vorschlägen, die Abläufe durch den Einsatz agiler Methoden zu unterstützen, den Bedarf an guter Dokumentation zu erkennen sowie den Aufbau dringend benötigter QS- und CI-Infrastruktur in Gang zu setzen, erhielt ich nach kurzer Zeit die Chance, dies als Doppelspitze (Co-Lead) zu realisieren.

Nach den spürbar positiven Auswirkungen der neuen QS-Möglichkeiten auf die Qualitätskrise und die verbesserte Feedback-Kultur im Team, war die Akzeptanz für eine neue Denkweise bzgl. moderner Software-Entwicklung ausreichend aufgebaut. Daraufhin erhielt ich als neuer Technical Lead die Chance, das System mit folgenden Kernzielen architektonisch und technologisch auf eine neue Basis zu stellen:
  • fachliche Problembereiche klar abstecken und Schlüsselabstraktionen bilden (Domain-Entities)
  • Domänenbildung forcieren, Beziehungen und saubere Schnittstellen entwerfen (RESTful HTTP)
  • unabhängige Microservices mit Blick auf moderne Orchestrierungs runtimes implementieren
  • gezielter Paradigmenwechsel zu reaktiver Programmierung und nicht-blockierender Kommunikation
  • neues, cross-funktionales Produktdesign (Frontend auf performanterer React-Basis externalisieren)
  • Resilienz durch extern. Circuit-Breaker (sidecar pattern) und Failover-Strategien erhöhen
  • Konzepte für Monitoring, Alerting, Metriken und Self-Healing aufsetzen
  • Rückbau von redundantem Code und obsoleter Funktionalität
  • Automatisierungsgrad erhöhen, Jobs schreiben für alles was Zeit vernichtet (Jenkins Job-DSL)
  • Migration von starren zentralisierten Bamboo-Agents hin zu agilen Builds & Infrastructure as Code
  • Wertesystem für Clean Code, Software-Qualität & 12-Factor-Konformität im Team vermitteln



01/2018 - 03/2018
Software-Entwickler, REST-Architekt
REWE digital (Konsumgüter und Handel)

Fulfilment Center 2.0 - Substitute service
Subsystem zur synchronen Ermittlung von Ersatzartikel

Zur Kommissionierung von Online-Bestellungen in einem für stationäre Kunden zugänglichen REWE Markt, soll eine Software-Plattform geschaffen werden, die den Kommissionierer bestmöglich durch den Markt navigiert und eine Hilfe bietet, die gewünschten Artikel der Bestellung in kürzester Zeit zusammenzutragen. Dabei kann es im Verlauf der Kommissionierung vorkommen, dass bestimmte Artikel nicht verfügbar sind und die Bereitstellung von Ersatzartikel erforderlich ist. Die Anfrage von Ersatzartikel erfolgt synchron via HTTP an den Substitute service, welcher wiederum eine Reihe weiterer Anfragen kapselt, orchestriert und zu einem verwertbaren Gesamtergebnis kumuliert.

Die Kernkomponente zur Ermittlung von Ersatzartikel basiert auf einem dedizierten Elasticsearch-Cluster, der via HTTP More-Like-This-Suchen für einen übergebenen Artikel ausführt. Für jeden übereinstimmenden Ersatzartikel werden weitere Informationen zur aktuellen Verfügbarkeit hinzugefügt und eine quantifizierte Sortierung durchgeführt. Der Bounded context “Substitute service” besteht aus einer eigenen Datenhaltung zur Ermittlung von adäquaten Ersatzartikel (Elasticsearch index) sowie den Stock-Informationen als relationales Modell (JPA & CloudSQL). Die Befüllung der lokalen Datenhaltung mit Ersatzartikel sowie Stock-Informationen erfolgt durch Konsumierung von externen Daten, die durch Kafka-Messages bereitgestellt werden. Dies beinhaltet sowohl die fortlaufende Aktualisierung bestehender Daten sowie eine Vollversorgung from scratch durch Zurücksetzen des Topic-offsets. Die Re-Indizierung der Artikeldaten sowie der Neuaufbau der Stock-Datenbank ist jeweils als dedizierter Jenkins-Job realisiert.

Weiterhin wird die Aussagekraft von Verfügbarkeitsdaten durch einen synchronen REST-Call unterstützt, der zusätzlich zu den aktuellen Bestandsdaten, die Verfügbarkeit zu einem zukünftigen Zeitpunkt sowie die von einer anderen Bestellung potenziell bereits kommissionierte Menge berücksichtigt.

Durch den synchronen Charakter der End-To-End-Verarbeitung und eines vorgegebenen Antwortzeitverhaltens, gehören Verfügbarkeit und Fehlertoleranz zu den primären Qualitätszielen des Substitute services. Diese werden maßgeblich durch den Einsatz der Container-Management-Plattform “Kubernetes” sowie der Implementierung des Circuit-breaker-patterns mittels der Resilienz-Bibliothek “Hystrix” erzielt.

Der Einsatz aussagekräftiger HTTP Status codes, Hypermedia & selbstbeschreibende Ressourcen (HATEOAS) sowie intuitiver Resource identifier bilden die Grundlage für höchste REST-Konformität (Maturity Level 3). Die lückenlose Dokumentation der gesamten Web-API nach OpenAPI 3.0 mittels Swagger runden die Erfüllung der hohen Qualitätsansprüche des Kunden sowie die Constraints der Gesamtarchitektur ab.

03/2017 - 12/2017
Software-Entwickler, Domain-Architekt, DevOps-Engineer
CBC (Medien und Verlage)

Pressezentrum
Verteiltes System zur Bereitstellung von Programmwocheninformationen und medialen Inhalten

Architektur-Refactoring einer bestehenden, verteilten Applikationslandschaft hinsichtlich Annäherung der Granularität an eine Microservice-Definition sowie einer dynamischen und skalierbaren Laufzeitarchitektur auf Basis von Spring-Cloud und Docker (Swarm Mode). Zusätzlich erfolgt die Neuentwicklung eines öffentlich
verfügbaren REST-Services zur Bereitstellung von Programmwochen-, VOD- und EPG-Metadaten sowie medialen Inhalten für Netzbetreiber und externe Plattformpartner. Die mehrstufige Security zur Validierung des Authentication-Headers und Autorisierung gegen verschiedene Unternehmensdatenbanken wurde auf Basis von Path-Matching (Regex) und Request-Filtering als eigene Spring-Boot-Starter-Module realisiert die per Classpath-Dependency via Maven modular aufgeschaltet werden können und sich selbständig aktivieren (Autoconfiguration). Die Lastverteilung und Verfügbarkeit der rund 100 Applikationsprozesse wurde auf Basis von Spring-Cloud mittels Eureka, Zuul, Ribbon und Docker gewährleistet und erfolgreich produktiv gestellt. In einer darauffolgenden Phase erfolgte der Rückbau der Systeme Zuul, Eureka und Config-Server zugunsten rein Docker-basierter Lösungen. Weitere Aufgaben zur Umstellung von Standalone-Tomcats auf Spring-Boot sowie der Erweiterung eines Swing und JavaFX-Clients rundeten den Aufgabenbereich ab.
 

Content Information Service
Belieferung von Netzbetreibern mit Metainformationen zu linearen und non-linearen Programmen

Die Mediengruppe besitzt mehrere Anwendungen, über welche Metadaten zu linearen und non-linearen Programminhalten aller Sender gepflegt werden. Mit dem stetigen Ausbau des Video-on-Demand-Bereichs, sind die Anforderungen an interne Systeme, als auch die der externen Netzbetreiber deutlich komplexer und vielfältiger geworden. Der Content Information Service soll die vorhandenen Metadaten aus allen Einzelsystemen sammeln und verdichten, sodass eine Aufbereitung für externe Netzbetreiber einfach und individuell möglich ist. Hierzu ist ein verteiltes und skalierbares System aufzusetzen (green field), das über eine Messaging-Schnittstelle aus verschiedenen Quellen beliefert wird, die Daten normalisiert nach dem Entity-Attribute-Value-Pattern speichert und als REST-Ressourcen in verschiedenen Repräsentationsformen (Accept-Header) nach außen bereitstellt. Durch die domänen-getriebene (DDD) Zerlegung der fachlichen Architektur in verschiedene Bounded Contexts, entsteht eine hoch skalierbare und ausfallsichere Kommunikationslandschaft von mittels HATEOAS (REST) vernetzten Ressourcen in einem Docker-Stack.

10/2016 - 02/2017
Software-Entwickler, Test-Engineer
New Oncology (Pharma und Medizintechnik)

NEOdb
Onkologisches Informationssystem in einer Microservice-Landschaft

Die Aufgabe besteht in der Entwicklung eines medizinischen Informationssystems in der streng regulatorischen Fachdomäne der Onkologie sowie dem agilen Vorgehensmodell nach Scrum. Einzelne fachliche Module repräsentieren die Säulen (Bounded Contexts) einer skalierbaren Microservice-Architektur auf passender Granularität von Workflow- und Eco-System-Services wie Patients, Accounts, Analyses, Cases, Diagnoses, Medical History, Documents, Lab, Identity, Discovery, Gateway und User-Management. Ein konsequentes Id-Management durch das dedizierte Identity-Modul dient der Vergabe und Verwaltung von service-übergreifenden, technischen
und fachlichen Schlüsseln. Basierend auf einem Database-per-Service-Ansatz, erlaubt die transparente Umsetzung von Fremdschlüsseln auf dem REST-Layer (Filter-Resolution-Framework), das Filtern und Sortieren nach gleichzeitig moduleigenen sowie modulfremden Informationen. Optimierte Read/Write-Modelle mittels @JsonView sorgen für die gezielte Reduzierung des IO-footprints bei Operationen wie beispielsweise Get/List/Create/Update. Weiterhin stellen die Services per Definition selbstbeschreibende Ressourcen auf Basis von REST-Prinzipien wie HATEOAS bereit, die zur transparenten Steuerung von Oberflächenelementen und Folgeoptionen an das UI propagiert werden.

Komplexe Sequenzerdaten, die durch die zyklische Überwachung von Import-Locations in das System eingespielt werden, werden durch Coloring und Highlighting in der UI augenfreundlich präsentiert. Die hierfür erforderlichen Regeln für Schwellwerte und Datentypen, werden mittels SpEL-basierter Regeln (Spring Expression Language) konfigurierbar abgelegt. Ein token-basiertes Single-Sign-On, mit und ohne Benutzerkontext, wird vom Identitäts- und Authorisationsmangegment-System KeyCloak abgedeckt. Ein dynamisches Routing sowie ein zentraler Einstiegs-Endpoint in die modularisierte Anwendungslandschaft wird durch ein angepasstes API-Gateway auf Basis von Zuul (Netflix OSS) bereitgestellt. Das Spektrum der Entwicklungsarbeiten erstreckt sich über den gesamten Stack. Von proprietärer Datenbankprogrammierung
mit PL/pgSQL (Postgres) über JPA-Persistenz, Scheduling, Service- und Endpoint-Implementierung bis zur Konzeption und Realisierung von automatisierten Integrations- und UI-Tests. Die Aggregation der Module zu einer Docker-Runtime für die Adhoc-Bereitstellung des gesamten Applikations-Stacks für lokale Entwicklungs- und Testszenarien, wurde hierbei ständigen Anpassungen und einem planvollen Wachstum unterzogen. Die Einhaltung hoher Quality-Gates hinsichtlich Code-Qualität und Test-Coverage der gesamten Codebase, von einfachen Bean-Tests über Branching-, Cross-Module-Integration bis hin zu automatisierten UI-Tests, wird im Rahmen der agilen Team-Prozesse routinemäßig validiert. Eine hohe Sensibilität im Umgang mit medizinischen und system-relevanten Informationen (Festplattenverschlüsselung,
sichere Kommunikationskanäle) sowie der Einhaltung von regulatorischen Richtlinien wie GAMP (21 CFR Part 11, CSV) runden den Entwicklungsprozess ab.

06/2016 - 09/2016
Software-Entwickler, Domain-Architekt
Deutsche Post Direkt GmbH (Transport und Logistik)

OnlineServices 2.0
Neukundenansprache via Infopost – Adressvermietung

Die Aufgabe besteht in der Neuauflage einer mehrschichtigen Java-Enterprise-Applikation zur Bereitstellung von Adressdaten für die Neukundengewinnung. Das System soll nicht nur die Bereitstellung von Adressen ermöglichen, sondern den gesamten Prozess von der Kundenselektion bis zur Einlieferung durch den Lettershop im Briefzentrum end-to-end abbilden. Um die Masse an Aufträgen wirtschaftlich abzuwickeln, ist es notwendig, die Bearbeitungszeit im Backoffice auf wenige Minuten zu reduzieren, welches hohe Ansprüche an ein performantes und möglichst beratungsfreies Frontend mit gleichzeitig hohem Bedienkomfort (interaktive Karte mit Gebiets- und radialer Umkreisselektion) stellt. Neben der Interaktion via HTML-Oberfläche bietet das System weitere Schnittstellen zum Down- und Upload von Dokumenten sowie den automatisierten Versand von generierten Word- und PDF-Dokumenten per EMail. Das Runtime-Szenario besteht aus mehreren Java-Prozessen (Tomcats, JBoss), die per JDBC in ein Oracle-RAC persistieren und per REST/JSON mit weiteren Umsystemen zur Erstellung von Karten-Visuals, Office-Dokumenten sowie Engines zur performanten (in-memory) Zählung von Adressdaten und zur Auto-Vervollständigung von Gebietseingaben kommunizieren.

04/2016 - 05/2016
Coach für Software-Entwicklung mit Java
Haeger Consulting (Internet und Informationstechnologie)

Coaching und Workshops
Trainingsprojekt “pathfinder”

Vermittlung von praxis- und marktrelevanten Skills für neue Mitarbeiter, rund um die objekt- und komponenten-orientierte Software-Entwicklung auf dem Java-Enterprise-Stack. Getreu dem Motto: “make .jar, not .war” wurde der Aufbau einer ausführbaren (self-contained) Spring-Boot-Datenapplikation inkl. JPA-Persistenz, REST-Schnittstelle und responsivem Frontend exerziert.

Nach Abschluss einer detaillierten, fachlichen Analyse, folgte in ersten Praxisschritten die Modellierung der Anwendungsdomäne als JPA-Entitäten zur späteren Persistierung in die populäre Entwickerdatenbank H2, auf die über die leistungsstarken Spring-Data-Repositories zugegriffen wurde. Darauf aufbauend erfolgte der
Entwurf und die Implementierung der REST-Schnittstelle als Spring-Controller. Mit besonderem Augenmerk darauf, dass REST nicht nur als kohäsive Informationsstruktur mit Endpoints, die auf konkrete Entitäten abgebildet sind zu verstehen ist, sondern auch virtuelle bzw. Pseudo-Ressourcen ebenfalls als probates Mittel zum Ausdruck einer hohen Schnittstellensemantik dienen. Der richtige Einsatz von HTTP Status-Codes, Request- und Response-Parametrisierung, sowie des Zustandsparadigmas HATEOAS, welches REST neben einer Server- auch explizit zu einer Client-Angelegenheit macht, runden den Service-Part ab.

Modernste Frontend-Technolgien mit Apache Wicket, Bootstrap und HTML5 verleihen der soliden Basisapplikation eine hochwertige Präsentation, die mittels responsive design die gängigsten Endgeräteklassen aus einer einzigen Codebase anspricht.

Sämtliche Abschnitte des Projekts, von der Analyse über Entwurfsdiskussionen bis zum Issue-Tracking und der Codeverwaltung ​ git ​ wurden in der agilen Hosting-Plattform BitBucket ​ festgehalten.

Es wurde in weniger als 30 Tagen eine lauffähige Applikation, ein agiles Configurationmanagement, sowie ein erfolgreiches Team gebildet.

08/2015 - 03/2016
Software-Entwickler (Fullstack), technischer Koordinator
Bank-Verlag GmbH (Banken und Finanzdienstleistungen)

paydirekt
Anbindung Autorisierungszentrale (BVtoAZ)

Anbindung der zentralen eBanking-Geschäftskomponenten an einen externen Dienstleister zur Autorisierung von Kartenzahlungen. Die Hauptaufgabe besteht in der Neuauflage und Erweiterung einer bestehenden REST-Kommunikation. Hierbei handelt es sich um UTF-8-basierte Eingangsdaten, die zunächst in eine TLV-Struktur (Tag-Length-Value) mit einem EBCDIC-kodierten Value-Bereich aufbereitet werden, um sie anschließend in einer ISO8583-Nachrichtenstruktur (Standard for Financial Transaction Card Originated Messages) an den Autorisierungsdienstleister zu überstellen. Die Übertragung erfolgt via HTTP POST als signierte, Base64-URL-kodierte Nutzdaten in einer JSON-Struktur.
 

paydirekt
Enrollment during shopping

Entwicklung einer Web-Applikation (BFE) zur Ad-hoc-Teilnahme am ​ paydirekt - ​ Bezahlverfahren. Als Teil eines komplexen Workflows zwischen Banken, Bank-Verlag und Händlersystemen, übernimmt die Applikation abschnittsweise die Kontrolle über den erfordlichen Registrierungsprozess bei ​ paydirekt und übergibt anschließend zurück an die Client-Applikation, um das dortige Banking- oder Shopping-Erlebnis des Kunden nicht zu beeinträchtigen. Durch einen initialen REST-Call wird von BFE eine Deeplink-URL zurückgegeben, mit der die Applikationen in einem vorinitialisierten Kundenkontext aufgerufen wird. Nach Validierung div. personenbezogener Eingaben und Absicherung durch 2-Faktor-Autorisierung, übergibt BFE die Kontrolle automatisch, per HTTP Redirect inkl. Status-Meldungen zum Ausgang der ​ paydirekt - ​ Registrierung, an den Aufrufer zurück. Als öffentliches User Interface ist BFE zeitgemäß und optisch hochwertig gestaltet, sowie auf verschiedenen mobilen Geräteklassen uneingeschränkt nutzbar. Ebenfalls Schwerpunkt der Entwicklung ist die Look&Feel-Mandantenfähigkeit, durch die die zentrale Geschäftslogik im CI​ 1) verschiedener Banken und Händler wiederverwendet sowie durch Feature-Flags (compile-statisch) individuell angepasst werden kann. Der Aufbau einer Grid-Umgebung für automatisierte Browser-Tests im Rahmen des CI​ 2)​ -Builds runden das Aufgabenfeld ab.

04/2015 - 08/2015
Software-Entwickler (Fullstack)
Mazda Motors (Deutschland) GmbH (Automobil und Fahrzeugbau)

Mobile Salesman

Entwicklung einer Prototyp-Applikation zur Anzeige von Fahrzeugbeständen mit Optimierung für die Zielplattform iPad. Die Applikation zeigt eine Liste von Fahrzeugelementen, welche sich mittels Responsive Design an die Gegebenheiten der Anzeige anpasst. So werden auf mobilen Geräteklassen die Fahrzeugelemente stärker fokussiert, wogegen auf größeren Desktops automatisch zusätzliche Bedienelemente eingeblendet werden.

Der Aufbau der Seite erfolgt in verschiedenen Phasen, um Blockiereffekte zu vermeiden und eine gute User Experience zu gewährleisten. Hierzu werden die Fahrzeugdaten klassifiziert und in verschiedene Ebenen verlagert (Progressive Disclosure), die nach dem initialen Rendering per JQuery-AJAX-Calls im Hintergrund
automatisch befüllt werden. Busy-Indikatoren symbolisieren hierbei die Hintergrundaktivität.

Die Appliaktion demonstriert verschiedene Szenarien, die die vielseitigen Einsatzmöglichkeiten von Wicket hervorheben. Das Deployment-Szenario der Applikation kennzeichnet sich dadurch aus, dass die Applikation zentral gehostet wird, die Nutzdaten aber aus lokalen Datenquellen (LAN) in Form von RESTful Webservices
bezieht. In diesem Zusammenhang zeigte der Prototyp verschiedene Einsatzmöglichkeiten von Wicket als Render-Engine, Resource-Manager, zur Geneneriung und Ausführung von JavaScript-Code, bis hin zum Einsatz als statefull/stateless JSON- und Markup-Response-Provider.

Eine Lösung für die durch dieses Szenario bedingte CORS-Problematik (Cross-Origin Resource Sharing), die standardmäßig die Kommunikation eines Web-Clients mit einer anderen Web-Resource als seiner Quelle unterbindet, wurde durch den Einsatz von Preflight-Requests und den notwendigen HTTP-Response-Headern
veranschaulicht.

Für den Aufbau eines Styleguides als Standard für weitere interne Entwicklungen erscheint der Prototyp in einer hochwertigen und zeitgemäßen Optik, die sich durch ausgewählte Bootstrap-Elemente, Chart-Komponenten, CSS-Transitionen, Auto-Paging (aka Infinite Scrolling), Slideshows, Type-Aheads, Slide-In-Menüs, Hover-Effekte etc. und allgemein hohen Bedienkomfort auszeichnet.

Die durch die Prototyp-Applikation demonstrierten, vielfältigen technischen und visuellen Möglichkeiten haben eine anstehende Entscheidung zugunsten Wicket gegenüber einer alternativen Lösung auf GWT-Basis maßgeblich beeinflusst.

10/2014 - 03/2015
Software-Entwickler (Fullstack)
REWE Systems GmbH

Big Data Dashboard

Design und Implementierung einer Web-Oberfläche zur Visualisierung von statistischen Daten aus einer Big-Data-Plattform. Hierbei stand ein optisch ansprechendes und zeitgemäßes Erscheinungsbild mit hohem Bedienkomfort im Vordergrund, welches durch den Einsatz von Bootstrap, Chart-Komponenten und ausgewählten JQuery-Plugins sowie modernen UI-Konzepten wie Progressive Disclosure realisiert wurde.
 

Marktdatenbank

Entwicklung eines web-basierten Informationssystems, zur Verwaltung von Platzierungselementen in den Märkten, bestehend aus einem JPA-Daten-Layer, einer REST-Schnittstelle zur Anbindung weiterer Systeme, einer Batch-Verarbeitung, einer Mock-Clientlib mit In-Memory-Datenbank sowie einer Web-Oberfläche. Für die Applikation bestanden zusätzliche Sicherheitsanforderungen in Form von SSL-Verschlüsselung sowie einem Berechtigungskonzept. Zudem sollten bestimmte Features per Build-Prozess für verschiedene Umgebungen aktiviert oder deaktiviert werden können. Die Applikation setzt teilweise auf bestehenden Tabellen einer DB2-Datebank auf. Für den Anteil des applikations-spezifischen Modells wurden SQL-Scripts zur Erstellung und initialen Befüllung der Tabellen bereitgestellt.

03/2014 - 09/2014
Software-Entwickler (Fullstack)
Deutsche Post IT Services GmbH (Transport und Logistik)

Kundendatenapplikation

Migration einer web-basierten Callcenter-Applikation von Bootstrap 2 auf 3 mit ca. 90% markup impact.

Beratung der Fachseite hinsichtlich Implementierung funktionaler Erweiterungen inkl. Kreation neuer Oberflächen sowie Einführung neuer Bedienkonzepte nach aktuellen Ergonomieprinzipien und technischen Standards, zB. In-place-editing, Function Merge, Progressive Disclosure mit anschließender Realisierung.

Umstellung von Page-Flow auf AJAX-Kommunikation sowie REST-konformen Resource-Mappings. Anbindung von AJAX-basierter Kommunikation an server-seitige Validierung nach JSR-303 Bean Validation.

Steigerung der Performance und User Experience durch Ansätze aus der reaktiven Programmierung. Einsatz neuer UI-Elemente auf JQuery-Basis sowie Programmierung von Custom Controls / Widgets.

Einführung von Frontend-Templating zur Reduzierung von server-generiertem Web-Content.

Implementierung von Collapsibles zur Minimierung von Kontextwechseln durch herkömmliche Page-Flows. Einführung von Chart-Komponenten zur Datenvisualisierung.

Unterstützung bei der Implementierung der Service- und Integrations-Layer sowie Optimierung von Datenbank-Abfragen.

Beratung in weiteren Architekturthemen wie Kopplung von Suchmaschinen und Datenbanken, den Vorteilen schemaloser Persistenz insb. in frühen Entwicklungsphasen sowie dem REST-Paradigma.

Mitarbeit in einer 20-köpfigen, Scrum-orientieren Projektorganisation. Begleitung und Unterstützung während der Einführungsphase.
 


10/2013 - 02/2014
Software-Entwickler (Fullstack)
REWE Systems GmbH (Konsumgüter und Handel)

Business Portal KAM/GFL

Fachliche Erweiterung eines web-basierten Informationssystems. Über das Refactoring des Persistenzlayers basierend auf Hibernate/JPA, Generierung von Schema-Diffs mittels Hibernate-Maven-Plugin, manuelle DB Schema-Patches und SQL-Migrations-Scripts, Implementierung von in Spring-Beans gekapselter Fachlogik bis hin zur Anpassung der Ajax-getriebenen Web-Oberfläche mit Apache Wicket.
 

Web-Components Showcase / Prototype Application

Aufbau einer Komponentenbibliothek als strategische Plattform für die Entwicklung neuer Web-Applikationen im REWE-Konzern. Die entwickelten Komponenten auf Basis von Wicket, JQuery UI & Twitter Bootstrap bieten ein Höchstmaß an User-Experience, Flexibilität sowie Wiederverwendbarkeit in verschiedenen Anwendungsprojekten durch eine klare, interne Struktur, gängige Architekturmuster und ausführlich dokumentierter Komponenten API.  Die Unterstützung modernster Web-Standards, wie Responsive Design durch die Komponenten, ermöglicht die Entwicklung von Desktop-, Tablet- und Smartphone-Applikationen in einer einheitlichen Codebase.

High-Level-Komponenten wie z.B. Google Maps, Geo-Completion, Tag Clouds, High Charts, Collapsibles, Tag Fields, Smart Tables (Paging, Sorting, Dissolvable Columns), Content Slider, Animated Fullscreen Background Images, Type Aheads, Masked Input uvm. gehören seitdem zum Repertoire der REWE Group Web-Entwicklung.

Zuzüglich der eher technischen Showcase-Application, wurden viele Komponenten auf der Basis eines Applikations-Prototypen mit fachlicher Ausrichtung (Kunden-Dashboard, Online-Einkäufe, Payback-Daten etc.) erfolgreich angewendet und vom Fachgremium mit großer Zustimmung angenommen.

05/2013 - 09/2013
Software-Entwickler (Fullstack)
HRS (Sonstiges)

eRFP platform
Fachliche Weiterentwicklung und Modernisierung der führenden Hotel-Auktionsplattform „eRFP“.

Erweiterung und Dynamisierung bestehender sowie Entwicklung neuer Views in verschiedenen VAADIN-basierten Frontends. Anbindung an neue, zentrale Service-Komponenten, Einführung eines Event-Bus zur Entkopplung des Unternehmens-Frameworks und Integration spezialisierter JavaScript-Komponenten sowie Durchführung von Refactorings zur Erhöhung der Code-Qualität und Wartbarkeit.

Migration der Frontend-Plattform von VAADIN 6 auf VAADIN 7.

10/2012 - 04/2013
Software-Entwickler (Fullstack)
Mercedes-Benz Trucks (Automobil und Fahrzeugbau)

Single Source Publishing

Design und Implementierung eines Content-Informationssystems zur Bereitstellung wiederverwendbarer und internationalisierter Inhaltselemente für die Output-Kanäle Broschüre, Web und WebSpecial. Realisierung nach konzern-strategischem Architekturstil mittels SOA und REST. Konzeption und Realisierung von Online-Schnittstellen zur Integration in die Konzerninfrastruktur. Entwurf des Content-Repositories zur Verwaltung der Elemente nach ISO 639 Internationalisierung und strukturtreues Mapping der REST-Schnittstelle.

Entwicklung eines Web 2.0 Administrations-Frontends.
 

TCO Calculator

Re-Engineering und Erweiterung einer bestehenden Web-Applikation zur Wirtschaftlichkeitsberechnung verschiedener Baufahrzeuge gegenüber dem Wettbewerb. Umstellung der textbasierten Input-Controls auf interaktive Slider sowie der Implementierung finanzmathematischer Algorithmen.

Reisebereitschaft

Verfügbar in den Ländern Deutschland
Reisebereitschaft deutschlandweit gegeben
Profilbild von Thomas Jarnot Senior Software-Developer (Fullstack) aus Bonn Senior Software-Developer (Fullstack)
Registrieren