Senior Cloud Developer | Expert in Golang and Java | 15+ Years Experience in Developing Exceptional Applications | Advocate for TDD and Clean Code
Aktualisiert am 22.04.2025
Profil
Freiberufler / Selbstständiger
Remote-Arbeit
Verfügbar ab: 01.05.2025
Verfügbar zu: 100%
davon vor Ort: 0%
golang
AWS
TDD
Amazon Web Services (AWS)
CI/CD
Docker
Git
Groovy
Hibernate
JQuery
JUnit
Jenkins
Linux
Maven
Microservices
Mockito
OpenJPA / JPA
PostgreSQL
Spock
Spring Boot
Terraform
Tomact
XML
Bulgarisch
Muttersprache
Deutsch
Muttersprache
Englisch
verhandlungssicher

Einsatzorte

Einsatzorte

möglich

Projekte

Projekte

6 Monate
2024-10 - 2025-03

Erweiterung und Anpassung von bestehenden Services, Deploymentautomatisierung

Java Developer (Backend)/ DevOps Engineer Java Spring Boot Docker ...
Java Developer (Backend)/ DevOps Engineer
  • Weiterentwicklung des bestehenden Systems: im Rahmen des Projekts wurden mehrere neue Funktionen eingeführt, wie z.B. die Bereitstellung von REST-Endpunkten für Versionsinformationen aus der MANIFEST, Implementierung von Import- und Export-Funktionalitäten
  • Bugfixing: Behebung von Fehlern in den bestehenden Services, die durch fehlenden Testabdeckung entstanden sind. Dabei wurde das Code-Coverage für einige Module erheblich erhöht, um die Qualität und Stabilität des Systems zu verbessern (z.B. von 0% auf 97% Line-Coverage und 83% Branch-Coverage)
  • Sicherheit der Services erhöhen: im Zuge der Anpassungen wurden bestimmte Ports geschlossen sowie Fixes für bekannte Sicherheitslücken implementiert.
  • Deploymentautomatisierung: neue Playbooks für die automatisierte Bereitstellung der Services in verschiedenen Umgebungen (TEST, PROD) erstellt. Auch bestehende Playbooks wurden optimiert, um den Deployment-Prozess zu beschleunigen und zu vereinfachen. Dabei wurden auch Validierungsmechanismen eingeführt, um die korrekte Funktionalität der Services nach dem Deployment sicherzustellen.
  • Aufräumarbeiten: sowohl im Code als auch in der Infrastruktur wurden Aufräumarbeiten durchgeführt, um veraltete oder nicht mehr benötigte Komponenten und Funktionalität zu entfernen. Dies diente dazu, die Wartbarkeit und Performance des Systems zu verbessern.
Java Spring Boot Docker Docker-Compose Kubernetes (k8s) Ansible bash Prometheus Kibana Grafana Linux Continuous Integration Continuous Delivery (CI/CD) Artifactory Ansible Automation Plattform Makrdown ASCII Doc GitLab Gitlab-CI Gradle SCM (Git) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence
Transport & Logistik
6 Monate
2024-04 - 2024-09

Ausbau von Features eines Monolithen, Erweiterung und Anpassung von bestehenden Services

Java Developer (Backend)/ DevOps Engineer Go/ Golang Java Spring Boot ...
Java Developer (Backend)/ DevOps Engineer
  • Die Planung und Erweiterung der Architektur: die Architektur wurde in enger Abstimmung mit dem Team geplant und erweitert, mit dem Ziel, den Betrieb mehrerer Replicas bestimmter Services in Kubernetes (k8s) zu ermöglichen. Dabei musste sichergestellt werden, dass die Replicas auf dieselben Daten zugreifen, um doppelte Datenverarbeitung zu vermeiden
  • Feature-Entwicklung: die Implementierung neuer Features in das bestehende System umfasste unter anderem die Anpassung bestimmter Microservices (basierend auf Java mit Spring Boot und Quarkus), um eine doppelte Verarbeitung von Daten zu verhindern. Darüber hinaus wurde der bestehende Service so erweitert, dass Daten nun in einer PostgreSQL-Datenbank statt in ElasticSearch gespeichert werden. Die Funktionalitäten wurden durch Unit- und Integrationstests abgesichert, wobei ein Test-Driven Development (TDD)-Ansatz zum Einsatz kam. Hierfür wurden unter anderem JUnit und Mockito für die Tests verwendet
  • Deployment und Monitoring: im Rahmen der Projektumsetzung erfolgte das Deployment der Microservices mittels GitHub Actions, während das Monitoring dieser Services mit Grafana und Prometheus sichergestellt wurde
  • Datenbankmodellierung sowie die Anbindung von Services: im Zuge der Architekturanpassungen war es erforderlich, die Datenquelle von ElasticSearch auf eine PostgreSQL-Datenbank umzustellen. Dazu wurde das Datenbankmodell erweitert und die entsprechenden Services angepasst
  • Bugfixing und Behebung von technischen Schulden: bei den aufgetretenen Fehlern handelte es sich häufig um bekannte Bugs oder technische Schulden, deren Behebung bisher aus Zeitmangel nicht möglich war. Zur Sicherstellung der Funktionalität wurde auch hier der Test-Driven Development (TDD)-Ansatz verfolgt. Die Beseitigung technischer Schulden führte zudem zu einer Beschleunigung und Optimierung des Build- und Deployment-Prozesses.
  • Ausbau von Funktionalitäten aus einem Monolithen: im Rahmen des Projekts wurde ein Ersatzservice in Golang entwickelt, der den schrittweisen Ausbau von Features eines Monolithen hin zu neuen Golang-Microservices ermöglicht. Dabei lag ein besonderer Fokus darauf, Funktionalitäten aus Feature Flags für verschiedene Contracts und Regionen zu übernehmen.
Go/ Golang Java Spring Boot Quarkus Docker Docker-Compose Kubernetes (k8s) Helm Charts bash Prometheus Kibana Grafana Elasticsearch SonarCloud Continuous Integration und Continuous Delivery (CI/CD) GitHub Github-Actions GitLab Gitlab-CI ArgoCD Maven Gradle SCM (Git) Agile Methodologies Test-Driven Development TDD) Extreme Programming (XP) Scrum Jira Confluence
IT Services & Consulting
2 Jahre 2 Monate
2021-11 - 2023-12

Infrastrukturkonzeption und Aufbau, Umzug von Microservices, Aufbau von Deployment-Pipelines, Featureentwicklung

Golang Developer (Backend)/ DevOps Engineer/ Architekt Go/ Golang Java Spring Boot ...
Golang Developer (Backend)/ DevOps Engineer/ Architekt
Product Owner, 10-köpfiges Entwicklerteam
  • Erstellung eines Konzeptes für den Aufbau der Infrastruktur: da die bestehende Infrastruktur manuell aufgesetzt wurde, bestand das Ziel darin, diese in der AWS-Cloud zu automatisieren. Dazu wurden verschiedene Tools und Werkzeuge evaluiert, darunter Terraform, CloudFormation und Shell-Skripte. Nach Rücksprache mit dem Team fiel die Wahl auf Terraform. Für die Evaluierung wurde ein Prototyp in Terraform erstellt, der anschließend in zwei AWS-Umgebungen (Europa und China) erfolgreich bereitgestellt wurde.
  • Leitung des Infrastruktur-Aufbaus: das Herzstück der Infrastruktur bildete ein Kubernetes-Cluster (EKS), in dem die einzelnen Services für den Betrieb, aber auch für Wartung und Pflege (beispielsweise Grafana, Prometheus, Autoscaler usw.) bereitgestellt wurden.
  • Auslagerung von Services aus einem Monorepo: im Zuge dessen wurden die notwendigen Services aus einem Monorepo in einzelne Repositories (Projekte in GitLab) ausgelagert und einzeln deployed. Das Deployment in Kubernetes erfolgte mittels Ansible und Helm-Charts, wobei eine teilweise signifikante Anpassung der Letzteren erforderlich war.
  • Aufbau von Pipelines mit GitLab-CI: Ziel war die automatisierte Bereitstellung der einzelnen Services in sechs verschiedenen AWS-Umgebungen, die weltweit verteilt waren (Europa, Nordamerika, Asien). Besonders herausfordernd gestaltete sich das Deployment in der Umgebung China. In diesem Projekt habe ich die Lead-Rolle übernommen und mehrere (indische) Kollegen in die Thematik eingearbeitet und begleitet. Darüber hinaus habe ich einen wesentlichen Teil der Implementierung selbst übernommen. Agile Methoden und Techniken waren fest in den Entwicklungsprozess integriert. Wenn Kollegen bei Aufgaben ins Stocken gerieten, habe ich sie intensiv unterstützt, um die Einhaltung der Deadlines sicherzustellen.
  • Einführung der statischen Codeanalyse: um eine konstant hohe Codequalität des Terraform-Codes sicherzustellen, habe ich proaktiv die Einführung einer statischen Codeanalyse vorgeschlagen. Dieser Schritt war entscheidend, um nicht nur die Qualität, sondern auch die Wartbarkeit und Sicherheit des Codes nachhaltig zu verbessern. Nach gründlicher Evaluierung und dem Testen mehrerer Tools fiel die Wahl auf Checkov, das sich als besonders leistungsfähig und flexibel erwies. Nach der umfassenden Behebung der identifizierten Probleme wurde Checkov erfolgreich in den CI/CD-Prozess integriert. Dies ermöglichte eine kontinuierliche Überprüfung und Sicherstellung der Codequalität direkt im Entwicklungsworkflow, wodurch die Effizienz und Fehlerreduktion signifikant gesteigert wurden.
  • Featureenwicklung: nach einer Projektlaufzeit von etwa sieben bis acht Monaten, die von der Konzeption und dem Aufbau der Infrastruktur sowie der Migration der Services geprägt war, rückte die Featureentwicklung in den Fokus des Projekts. Die implementierten Services waren serverless Funktionen, die in der AWS Cloud bereitgestellt wurden. Dabei wurde ausschließlich auf Managed AWS-Ressourcen zurückgegriffen, darunter Lambda, SQS, S3, DynamoDB, CloudWatch und weitere. Aufgrund der Abhängigkeiten der Services von externen Systemen konnten keine vollständigen Integrationstests durchgeführt werden. Stattdessen wurden Unit- und Service-Tests verwendet, um die Funktionalität sicherzustellen. Durch die testgetriebene Entwicklung konnten potenzielle Fehlerquellen bereits im Vorfeld identifiziert und behoben werden. Darüber hinaus wurden Kommunikationsprobleme mit dem Kunden festgestellt, deren Klärung für die Weiterentwicklung des Gesamtsystems von entscheidender Bedeutung war.
  • Anpassung des Deployment-Prozess: nach dem automatisierten Aufbau der Infrastruktur wurde der Deployment-Prozess für Cloud Native Micro Services angepasst. Dabei wurden hardcodierte Werte durch dynamische Werte ersetzt, um eine Bereitstellung der Services in unterschiedlichen Umgebungen (TEST, PROD) zu ermöglichen.
  • Migration von Microservices von Java nach Golang: diese zielte darauf ab, die Wartbarkeit und Skalierbarkeit der Services langfristig zu verbessern.
  • Workshops und Schulungen: im Rahmen des Projekts führte ich Workshops und Schulungen für indische Kolleginnen und Kollegen durch, um ihnen die neuen Technologien und Tools näherzubringen. Zu Beginn war es erforderlich, die spezifischen Wissenslücken bei den einzelnen Teilnehmern zu identifizieren. Anschließend organisierte ich mehrere Workshops zu Themen wie Git, CI/CD mit GitLab-CI und Terraform, die innerhalb von drei bis sechs Monaten stattfanden, um die Kollegen schnellstmöglich einzuarbeiten. Sechs Monate nach dem Einstieg dieser Kollegen wurde ich vom Kunden gebeten, eine umfassende Bewertung ihrer Leistungen vorzunehmen und eine Empfehlung auszusprechen.
  • Bugfixing und Improvement: bei den aufgetretenen Fehlern handelte es sich in den meisten Fällen um bereits bekannte Probleme in bestehenden Services. Diese waren zum Teil auf eine unzureichende Testabdeckung zurückzuführen. Die neu implementierten Features stellten jedoch kein Problem dar, da sie mittels Test-Driven Development (TDD) entwickelt wurden. Dadurch waren auch jegliche Edge Cases bereits im Vorfeld abgedeckt.
Go/ Golang Java Spring Boot Terraform checkov CloudFormation Amazon CloudWatch Amazon EKS Amazon Elastic Container Registry (ECR) Amazon S3 Amazon Simple Notification Service (SNS) Amazon SQS Amazon VPC Amazon Web Services AWS DynamoDB AWS Lambda Docker Kubernetes (k8s) Helm harts bash Prometheus Kibana Grafana Ansible Sonarqube Continuous Integration und Continuous Delivery (CI/CD) Gitlab-CI GoCD SCM (Git) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence GitLab
Automotive
9 Monate
2023-01 - 2023-09

Weiterentwicklung des bestehenden System

Golang Developer (Backend) Go/ Golang PostgreSQL Flyway ...
Golang Developer (Backend)
Product Owner, 5-köpfiges Entwicklerteam
  • Implementierung von neuen Features: im Rahmen des Projekts wurden mehrere neue Funktionen eingeführt, darunter die Bereitstellung von REST-Endpunkten zur Ablösung der WebSocket Kommunikation zwischen Operator und Fahrzeug sowie die Behandlung von durch das Fahrzeug gemeldeten Vorfällen.
  • Weiterentwicklung des bestehenden Systems: Die Weiterentwicklung des bestehenden Systems beinhaltete die Anpassung der Services, um deren Funktionsumfang zu erweitern. Dazu zählten beispielsweise die Übermittlung des Fahrzeugakkustandes an den Operator oder die Verwaltung von Telefonnummern, sodass im Auto verbaute Geräte bei Bedarf SMS-Nachrichten versenden können.
  • Service-Orchestrierung: da es sich um einen Prototypen handelte, wurden die einzelnen Services in Docker-Containern bereitgestellt und vorerst mittels Docker-Compose orchestriert. Auf diese Weise konnte das Team die Services schnell und einfach deployen und testen.
  • Datenbankmodellierung: im Hinblick auf die Systemerweiterung bzw. die Integration neuer Funktionen war eine Erweiterung des Datenbankmodells erforderlich. Dabei wurde besonderer Wert darauf gelegt, dass die Datenbankstruktur flexibel genug ist, um zukünftige Anforderungen abzudecken. Diesbezüglich wurden neue Tabellen hinzugefügt und bestehende Tabellen erweitert. Für die Datenbankmigration wurde Flyway verwendet.
  • Bugfixing: aufgrund des Prototypen-Charakters des Systems traten zahlreiche Probleme auf, die es zu beheben galt. Die Funktionalität wurde durch Unit- und Integrationstests sichergestellt, welche mittels Test-Driven Development (TDD) entwickelt wurden.
Go/ Golang PostgreSQL Flyway RabbitMQ Docker WebSocket Swagger API Continuous Integration und Continuous Delivery (CI/CD) Gitlab-CI SCM (Git) Agile Methodologies Test-Driven Development (TDD) Kanban Jira Confluence Gitlab Bitbucket
Automotive
1 Jahr 11 Monate
2021-02 - 2022-12

Weiterentwicklung des Flugmanagementsystems

Golang Developer (Backend)/ DevOps Engineer/ Architekt Go/ Golang Terraform PostgreSQL ...
Golang Developer (Backend)/ DevOps Engineer/ Architekt
Product Owner, 7-köpfiges Entwicklerteam
  • Konzeption neuer Features und Architekturanpassungen: im Rahmen des Projekts wurden mehrere neue Features und Architekturanpassungen konzipiert, darunter die Einführung von Flughafengebühren und Steuern sowie deren Darstellung für die abgefragten Flüge. Weitere Anpassungen umfassten das automatisierte Tagging von AWS-Ressourcen und die Einbindung neuer Fluggesellschaften in die Flugsuche, um die Funktionalität und Benutzererfahrung weiter zu verbessern.
  • Weiterentwicklung des bestehendes Systems: im Laufe der fast zweijährigen Projektarbeit wurden dutzende neue Funktionalitäten eingeführt, darunter die Ablösung von Kinesis und die Einbindung von DynamoDB als Datenquelle, die Implementierung eines Retry-Mechanismus in einigen Services, das Update von Zusatzleistungen bei der Flugbuchung sowie die automatisierte Migration der Konfiguration für die einzelnen Services zu Redis. Es wurden ausschließlich Lambda Funktionen (serverless) eingesetzt, die über SNS/SQS miteinander kommunizierten. Die Daten wurden sowohl in DynamoDB als auch in PostgreSQL gespeichert.
  • Anbindung neuer externen Systemen: die Flugsuche wurde um weitere Fluggesellschaften erweitert, wodurch den Kunden eine größere Auswahl an Flügen zur Verfügung stand. 
  • Datenbankmodellierung: im Rahmen der Systemerweiterung bzw. der Integration neuer Funktionen war eine Erweiterung des Datenbankmodells erforderlich. Hierbei wurden hauptsächlich neue Tabellen in PostgreSQL bzw. DynamoDB hinzugefügt.
  • Monitoring und Pflege der Services: zur schnelleren Reaktion auf auftretende Probleme habe ich sechs neue Dashboards in Datadog erstellt, die die wichtigsten Metriken anzeigten. Die Bereitstellung der Metriken erfolgte über AWS CloudWatch und AWS X-Ray. Darüber hinaus wurden bestehende Dashboards angepasst, um Doppelungen zu vermeiden und die Übersichtlichkeit zu optimieren.
  • Kostenoptimierung: bei der Analyse der Kosten stellte sich heraus, dass die Log-Komponente (Cloud-Watch) eine der kostenintensivsten Positionen war. Zur Reduzierung der Kosten wurden mehrere Anpassungen an verschiedenen Stellen vorgenommen. Als erstes wurde die Bibliothek, die die Logs an CloudWatch sendet, angepasst und Logausgaben mit wenig Informationsgehalt entfernt. Als zweites wurde die Log-Retention von 90 Tagen auf 14 Tage reduziert. Schließlich wurden Logs in S3 Buckets archiviert und nur bei Bedarf in Datadog erneut geladen. Diese Maßnahmen führten zu einer Reduzierung der Kosten um ca. 40 %.
  • Codequalität verbessern: bei der ersten Kundenbesprechung wurde schnell deutlich, dass die Codequalität der Services nicht den vereinbarten Qualitätsansprüchen genügte. Die Testabdeckung der etwa 90 Microservices lag im Durchschnitt bei 5% bis maximal 10%. Eine reine Nachholung der Tests war nicht zielführend. Daher war es zunächst erforderlich, das Mindset der Entwickler zu beeinflussen und den von mir vorgeschlagenen Test-Driven Development (TDD)-Ansatz zu etablieren. Die Umsetzung erfolgte schrittweise. Zunächst wurden meine Anpassungen ? unabhängig davon, ob es sich um neue Funktionen oder die Behebung von Fehlern handelte ? nach dem TDD-Ansatz entwickelt. Im anschließenden Review-Prozess stieß dies bei den Kolleginnen und Kollegen auf positive Resonanz. Als Nächstes initiierte ich Diskussionen über die unzureichende Testabdeckung in den Services und überzeugte die Kollegen von der essenziellen Bedeutung von Tests. Darüber hinaus führte ich mehrere Workshops zu diesem Thema durch und präsentierte meine Vorgehensweise den Kolleginnen und Kollegen aus meinem Team sowie aus anderen Teams. Nach fast zwei Jahren konnten wir eine Testabdeckung von mindestens 60% bei allen 90 Microservices erreichen. Einige davon wiesen sogar eine Testabdeckung von über 80% auf. Dies wurde auch durch die Anpassung der Akzeptanzkriterien in den Tickets erreicht.
  • Dokumentation: beim Projektstart stellte ich fest, dass es für die meisten Microservices keine Dokumentation gab. Um die Einarbeitung neuer Kolleginnen und Kollegen zu erleichtern, habe ich vorgeschlagen, die Erstellung von Dokumentationen in den jeweiligen Tickets zu verpflichten. Daraufhin haben wir bei allen 90 Services die Dokumentationen erstellt und ab dem Zeitpunkt bei Änderungen in den Services die Dokumentationen aktualisiert.
  • Agilität: leider gab es in der ganzen Abteilung keine Scrum Master, sodass ich diese Rolle teilweise übernahm. Für ca. 1,5 Jahre habe ich diese Rolle parallel zur Entwicklung ausgeübt und das Team bei den täglichen Standups, den Sprint-Reviews und -Retrospektiven als Scrum Master unterstützt. Dabei habe ich darauf geachtet, dass die Scrum-Regeln eingehalten wurden und die Meetings effizient und zielgerichtet abliefen. In diesem Zeitraum sind wir auf Kundenwunsch von Kanban nach Scrum gewechselt.
Go/ Golang Terraform PostgreSQL Amazon S3 Amazon Simple Notification Service (SNS) Amazon SQS Amazon Web Services AWS CloudWatch AWS CodeBuild AWS CodeDeploy AWS Command Line Interface (CLI) AWS DynamoDB Redis AWS Lambda Datadog bash Continuous Integration und Continuous Delivery (CI/CD) Gitlab-CI SCM (Git) Gitlab Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Kanban Jira Confluence
Tourismus
8 Monate
2020-07 - 2021-02

Löschen von Daten im DSGVO Kontext, Weiterentwicklung des bestehendes Systems

Java Developer (Backend)/ DevOps Engineer Java Spring Boot Groovy ...
Java Developer (Backend)/ DevOps Engineer
Product Owner, Scrum Master, 5-köpfiges Entwicklerteam
  • Implementierung von Löschroutinen: Im Rahmen des Projekts wurden mehrere Routinen entwickelt, die eine Löschung personenbezogener Daten ermöglichten. Dabei wurde darauf geachtet, dass die Daten in sämtlichen Systemen, d. h. in der Datenbank, in den Logdateien usw., gelöscht wurden.
  • Rückbau von veralteten Komponenten: einige Services waren nicht mehr auf dem neuesten Stand und wurden nicht mehr benötigt. Wir haben sie deshalb zurück gebaut (PostgreSQL-Datenbank, TeamCity Pipelines usw.) und die entsprechenden Ressourcen freigegeben.
  • Deployment und Monitoring: die Services wurden mit TeamCity auf dem eigenen Server ausgerollt und mit Grafana überwacht. Dazu wurden mehrere Dashboards angepasst und neue erstellt, um die wichtigsten Metriken anzuzeigen.
  • Datenbankmodellierung: im Rahmen der Implementierung der Löschroutinen war eine Erweiterung des Datenbankmodells (PostgreSQL) erforderlich. Diese umfasste in erster Linie die Hinzufügung neuer Tabellen sowie die Erweiterung bestehender Tabellen.
Java Spring Boot Groovy Spock JUnit Mockito Maven Gradle Continuous Integration und Continuous Delivery (CI/CD) TeamCity Grafana bash SCM (Git) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence Bitbucket
IT
1 Jahr 9 Monate
2018-07 - 2020-03

Erkennung & Kategorisierung von Objekten

Golang Developer (Backend)/ DevOps Engineer/ Architekt Go/ Golang Terraform Amazon Aurora ...
Golang Developer (Backend)/ DevOps Engineer/ Architekt
Erkennung und Kategorisierung von Objekten wie Pflanzen, Insekten und Krankheiten auf Bildern, die auf einem Feld aufgenommen wurden. Product Owner, Scrum Master, 12-köpfiges Entwicklerteam
  • Architekturplanung: bei diesem Projekt handelte es sich um eine Greenfield-Entwicklung, bei der die Architektur und Infrastruktur von Grund auf neu geplant und aufgebaut werden mussten. Das Ziel bestand darin, Daten zu empfangen (Metadaten, Bilder), diese zu verarbeiten und darauf basierend einen Data Lake aufzubauen, um KI-Algorithmen zu trainieren. Das System sollte in der AWS-Cloud betrieben werden, wobei die Architektur als Microservice-Architektur zu gestalten war. Aufgrund der suboptimalen Performance von Java wurde Golang als Programmiersprache gewählt. Der Fokus lag auf der Verwendung von Managed AWS Services (Lambdas, API Gateway, S3, DynamoDB u. a.), um den Betrieb so einfach wie möglich zu gestalten. Die Kommunikation zwischen den Services sollte über SNS und SQS erfolgen. Zudem war es erforderlich, dass einzelne Ereignisse auch von anderen Ressourcen getriggert werden können (z. B. vom S3, wenn ein Bild hochgeladen wurde).
  • Infrastrukturplanung und -aufbau: von Beginn an war es unsere Absicht, die Infrastruktur in der AWS-Cloud automatisiert zu errichten. Für die Umsetzung dieser Anforderungen kamen die Tools Terraform und CloudFormation in Frage. Aufgrund der Multicloud-Unterstützung entschieden wir uns für Terraform. Das Backend-Team (2 Personen) arbeitete nach dem Motto ?You build it, you run it?, weshalb die Planung und Erstellung der AWS-Ressourcen in unseren Händen lag. Der Rest des Teams konnte sich bei Bedarf an das Infrastruktur-Team wenden. Die Infrastruktur wurde in mehreren AWS-Accounts automatisiert aufgebaut, um die Umgebungen (DEV, TEST, PROD) voneinander zu trennen.
  • Implementierung: die Übertragung, Persistierung und Weiterverarbeitung von Metadaten und Bildern erfolgte durch einzelne Microservices (Lambda Funktionen). Insgesamt wurden über 100 Lambda Funktionen implementiert, wobei die Anzahl durch Refactorings und Optimierungen auf ca. 80 Lambda Funktionen reduziert wurde.
  • Deployment und CI/CD-Aufbau: die Funktionen und AWS-Ressourcen wurden mittels Pipelines (GitLabCI) in jede der drei Umgebungen automatisiert deployt/ erstellt/ angepasst. Ebenso wurden die Tests (Unit- und Integrationstests) durch die Pipelines durchgeführt und bei Erfolg die Funktionen in die jeweilige Umgebung deployt.
  • Datenbankmodellierung (NoSQL): die Speicherung der Metadaten erfolgte in einer einzigen DynamoDB-Tabelle. Diese erfüllte die Anforderungen und zeigte sich hinsichtlich der Performance als ausreichend.
  • Dokumentation (Markdown): die Dokumentation erfolgte in Markdown-Dateien in der jeweiligen Lambda Funktion (im jeweiligen Repository). Zweck der Dokumentation war es, den Entwicklern, die das System weiterentwickeln sollten, eine Grundlage für ihre Arbeit bereitzustellen und deren Einarbeitung zu erleichtern.
  • Agilität: einige Teammitgliedern haben bereits Erfahrung mit agilen Frameworks (Scrum) gesammelt. Allerdings wurde das im Team nicht so konsequent gelebt, wie es erforderlich war. Das praktizierte Vorgehen widersprach manchmal den agilen Prinzipien. Daher habe ich das Team auch in dieser Hinsicht unterstützt und nach und nach mehr an die Scrum-Prinzipien herangeführt.
Go/ Golang Terraform Amazon Aurora Amazon S3 Amazon Simple Notification Service (SNS) Amazon SQS Amazon Web Services AWS API Gateway AWS Command Line Interface (CLI) AWS DynamoDB AWS Identity and Access Management (IAM) AWS Lambda AWS X-Ray Docker bash Continuous Integration und Continuous Delivery (CI/CD) Gitlab-CI Kibana Elasticsearch Elastic Stack (ELK) SCM (Git) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence Gitlab
Chemie
9 Monate
2017-10 - 2018-06

Implementierung eines Produktrückrufservices

Java Developer (Fullstack)/ DevOps Engineer/ Architekt Java Spring Boot Groovy ...
Java Developer (Fullstack)/ DevOps Engineer/ Architekt
Implementierung eines Produktrückrufservices, Darstellung von benutzerspezifischen Werbemitteln, Implementierung eines Double-Opt-In Verfahren bei Email-Änderung. Product Owner, Scrum Master, 2- bis 5-köpfiges Entwicklerteam
  • Mitarbeit an Architekturentscheidungen: gemeinsam mit anderen Teammitgliedern war ich an der Gestaltung der Systemarchitektur beteiligt. Dabei ging es unter anderem um die Auswahl der Programmiersprache, die Datenbank, die Kommunikation zwischen den Services sowie die Aufteilung der Services in Microservices. Da wir nach dem Motto ?You build it, you run it? arbeiteten, übernahmen wir alle Aufgaben von der Architektur über die Entwicklung bis hin zum Betrieb der Services selbst.
  • Backend-Entwicklung von Microservices: der Schwerpunkt unseres Teams lag auf der Entwicklung von Microservices zur Abwicklung des Produktrückrufs. Dazu zählten die Identifikation betroffener Produkte und Kunden sowie die Kommunikation per E-Mail. Insgesamt setzten wir fünf Microservices mit Java und Spring Boot um. Für diese Services wurden Docker-Container erstellt und mit Docker-Compose orchestriert.
  • Microfrontends: zusätzlich zur Abwicklung des Produktrückrufs haben wir die Front- und Backend-Entwicklung für die Darstellung der spezifischen Werbemittel auf der Shop-Seite verantwortet. Die Werbemittel (ausschließlich Bilder) wurden in einem eigenen Service verwaltet und je nach Benutzerprofil auf der Shop-Seite angezeigt.
  • Backend-Entwicklung von Double-Opt-In-Verfahren bei E-Mail-Änderung des Benutzers: diese Funktionalität war Teil eines größeren Projekts. Ursprünglich war geplant, den bestehenden Service anzupassen. Aufgrund der Komplexität, der zahlreichen Abhängigkeiten und der fehlenden Tests wurde jedoch entschieden, den Service komplett neu zu implementieren. Dabei wurden erneut Java und Spring Boot verwendet, um Konsistenz mit den anderen Services zu gewährleisten. Anschließend integrierten wir den Service in die CI/CD-Pipeline (Jenkins) und überführten ihn in die Produktion.
  • Monitoring und Pflege der Services: die Services wurden mittels Prometheus und Grafana überwacht. Hierzu wurden dedizierte Geräte (Nuc + Bildschirm) eingesetzt, welche die Dashboards für das gesamte Entwicklerteam jederzeit sichtbar machten.
  • Dokumentation: für jeden Service wurde eine REST-API-Dokumentation gemäß Swagger erstellt. Zusätzlich wurden die Funktionalitäten der Services in Markdown-Dokumentationen festgehalten.
Java Spring Boot Groovy Spock Maven Gradle PostgreSQL Apache Kafka Flyway Docker Gulp Prometheus.io Grafana Swagger API Continuous Integration und Continuous Delivery (CI/CD) Jenkins Sonar bash SCM (Git) Agile Methodologies Check-Square Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence Bitbucket
E-Commerce
2 Monate
2017-08 - 2017-09

Implementierung eines Services zur Anzeige der Ergebnisse

Java Developer (Backend)/ DevOps Engineer Java Spring Boot ...
Java Developer (Backend)/ DevOps Engineer
Product Owner, Scrum Master, 7-köpfiges Entwicklerteam
  • Backend-Entwicklung: die Aufgabe bestand darin, einen Microservice zur Anzeige der Ergebnisse der Bundestagswahl 2017 zu implementieren. Der Service sollte in regelmäßigen Abständen die vorläufigen Ergebnisse aus einem externen System abrufen und diese auf der eigenen Webseite anzeigen.
  • Integration des Services in die CI/CD-Pipeline: der Service wurde mittels Jenkins gebaut und auf dem jeweiligen Server deployed.
  • Testcoverage und Quality Gates: ich bin zu einem Zeitpunkt in das Projekt eingestiegen, als die Testabdeckung 0% betrug. Ich arbeite ausschließlich nach dem Test-Driven Development (TDD)-Ansatz, weshalb ich direkt beim ersten Task mit der Implementierung von Tests begonnen habe. Hierfür habe ich Groovy und Spock verwendet. Als nächstes haben wir mittels Sonar einige Quality Gates definiert, die die Qualität des Codes sicherstellen sollten. Die Quality Gates wurden in die CI/CD-Pipeline integriert, sodass ein Deployment nur bei Erfüllung der Quality Gates möglich war.
  • Monitoring: der Service wurde mittels Prometheus und Grafana überwacht und die wichtigsten Metriken in Dashboards visualisiert.
  • Dokumentation: eine REST-API Dokumentation wurde mittels Swagger erstellt. Zusätzlich wurden die Funktionalitäten des Services in Markdown-Dokumentationen festgehalten.
Java Spring Boot Groovy Spock JUnit Mockito Prometheus Docker Docker-Compose Postgres Maven Gulp Gradle Thymeleaf Freemarker Continuous Integration und Continuous Delivery (CI/CD) Jenkins Sonar SCM (Subversion - svn) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence Bitbucket
Medien
6 Jahre 10 Monate
2010-10 - 2017-07

verschiedenes

Java Developer (Fullstack)/ DevOps Engineer/ Architekt Active Record Agile Methodologies Android ...
Java Developer (Fullstack)/ DevOps Engineer/ Architekt
Product Owner, Scrum Master, 2- bis 8-köpfige Entwicklerteams
  • Technische Leitung und Architekturplanung: diese Rolle habe ich in mehreren Projekten in ähnlicher Form wahrgenommen. Die Teams umfassten zwei bis fünf Mitglieder. Die Projekte waren sehr unterschiedlich. Sie umfassten die Entwicklung von klassischen Webanwendungen (Frontend, Backend, Datenbank) in Tomcat oder JBoss sowie die Entwicklung von Anwendungen für mobile Endgeräte. In den Projekten war ich für die Architekturplanung und die technische Leitung zuständig. Dabei habe ich darauf geachtet, dass die Architektur den Anforderungen entspricht und die Services skalierbar und wartbar sind.
  • Front- und Backend-Entwicklung von klassischen Anwendungen, Microservices und mobilen Anwendungen: ich verfüge über langjährige Erfahrung als Fullstack-Entwickler und habe in dieser Zeit sowohl Front- als auch Backend-Entwicklung durchgeführt. Dabei habe ich verschiedene Technologien und Frameworks eingesetzt, darunter Java, Kotlin, Spring Boot, Docker, Docker-Compose, JUnit, Mockito, Groovy, Spock, Tomcat u. v. a. Seit 2015 liegt mein Fokus auf der Backend-Entwicklung, wobei ich mich auf die Architektur und Entwicklung von Microservices sowie deren Deployment spezialisiert habe.
  • Aufbau CI/CD-Pipelines: bereits im Jahr 2010 habe ich erste Erfahrungen mit Continuous Integration und Continuous Delivery gesammelt. Zu dieser Zeit arbeitete ich mit Hudson, dem Vorgänger von Jenkins. Seitdem habe ich in jedem Projekt, in dem ich tätig war, CI/CD-Pipelines aufgebaut und/oder gepflegt.
  • Monitoring und Pflege der Services: bei der Überwachung der Java Services in den Projekten habe ich in der Regel auf Prometheus und Grafana zurückgegriffen.
  • Erstellung von Anleitungen und API Dokumentation: das war ein wichtiger Teil meiner Arbeit. Bei Legacy-Projekten war oft keine Dokumentation vorhanden, was eine große Herausforderung darstellte. Bei neueren Diensten und Projekten habe ich dafür gesorgt, dass die Dokumentation von Anfang an erstellt wurde.
Active Record Agile Methodologies Android AngularJS 1.x Ansible bash Bitbucket Bower Confluence CSS Cucumber Docker Docker-Compose Droidparts Dropwizard Eclipse ExtGWT (GXT) Factory Girl Git Gradle Groovy GWT HTML iText Java 6-8 JavaScript JBoss Jenkins Jira JOSM jQuery JSP JSR 303 JUnit Kotlin Linux Maven Mechanize Mockito OpenJPA Oracle OsmDroid PostgreSQL Robolectric Ruby Scrum Selenium Selenium Webdriver Spock Spring Spring 3 (Core MVC Security) Spring Actuator Spring Boot Spring REST Docs Subversion Test-Driven Development (TDD) Tomcat Velocity vertx XML Extreme Programming (XP) XPath
IT-Dienstleistungen

Aus- und Weiterbildung

Aus- und Weiterbildung

2 Jahre 3 Monate
2007-10 - 2009-12

Studium - Informatik

Master of Computer Science, Universität Leipzig
Master of Computer Science
Universität Leipzig
4 Jahre
2003-10 - 2007-09

Studium - Informatik

Bachelor of Computer Science, Universität Leipzig
Bachelor of Computer Science
Universität Leipzig

Position

Position

  • Senior Backend Developer | Go | Golang | Java | DevOps | AWS | Cloud | IaC (terraform)

Kompetenzen

Kompetenzen

Top-Skills

golang AWS TDD Amazon Web Services (AWS) CI/CD Docker Git Groovy Hibernate JQuery JUnit Jenkins Linux Maven Microservices Mockito OpenJPA / JPA PostgreSQL Spock Spring Boot Terraform Tomact XML

Produkte / Standards / Erfahrungen / Methoden

Amazon Web Services (AWS)
Bitbucket
CI/CD
CleanCode
CSS
ExtremeProgramming
Git
Gradle
Grafana
Jenkins
Jira
Log4j
Maven
OpenJPA
Prometheus
Scrum
Spring
TDD
Tomcat
XP

Profil
  • Als erfahrener Java-Entwickler bringe ich fundiertes Know-how in der Entwicklung skalierbarer, hochwertiger Backend-Systeme mit, die Effizienz und saubere Code-Standards vereinen. Mein umfassendes Fachwissen in modernen Cloud Architekturen, insbesondere mit AWS, sowie meine praktische Erfahrung in agilen Methoden wie Scrum, Test-Driven Development (TDD) und Extreme Programming, befähigen mich, maßgeschneiderte Lösungen zu realisieren, die spezifischen Anforderungen in diversen Branchen gerecht werden. Dazu zählen Medien, E-Commerce, Chemie, Tourismus und Automotive.
  • Ich setze auf präzise Prozesse und hohe Qualitätsstandards, die nicht nur die Softwareentwicklung verbessern, sondern auch die Teamentwicklung vorantreiben und so optimale Projektergebnisse erzielen. Dank meines technischen und methodischen Fachwissens kann ich Teams erfolgreich anleiten, motivieren und eine Kultur der kontinuierlichen Verbesserung und des Lernens fördern.
  • Zusätzlich habe ich eine nachweisbare Erfolgsbilanz in der Auswahl passender Teammitglieder für Projekte. Durch strukturierte Evaluationsmethoden und gezieltes Feedback stelle ich sicher, dass jedes Teammitglied optimal zum Projekterfolg beiträgt. Dadurch schaffe ich eine solide Basis für langfristiges Wachstum und Stabilität im Team.

Testing
  • JUnit
  • Mockito 
  • Groovy 
  • Spock 
  • SonarQube 
  • Selenium
  • Cucumber 

Build Tools
  • Maven
  • Gradle

Logging & Monitoring
  • Grafana
  • Prometheus
  • Kibana
  • Datadog
  • Logz.io

Containerization
  • Docker
  • Docker-Compose
  • Kubernetes

Infra & Deployment
  • Terraform
  • Ansible
  • Helm

CI/CD
  • Jenkins
  • Gitlab-CI
  • Github Actions
  • TeamCity

Version Control
  • Git
  • Subversion
  • Mercurial
  • CVS 

Agile
  • TDD
  • XP
  • Scrum
  • Kanban

Frameworks/Libraries
  • Spring Boot
  • Dropwizard
  • Quarkus
  • OpenJPA
  • Hibernate

Miscellaneous
  • Linux
  • bash
  • Tomcat
  • AWS
  • Kafka

SOFT SKILLS
  • Teamführung und Zusammenarbeit
    • Kommunikationsfähigkeit
    • Verhandlungs- und Konfliktlösungskompetenz
    • Feedback-Kultur 
    • Mentoring und Coaching
    • Kollaborationsfähigkeit
    • Flexibilität und Anpassungsfähigkeit
    • Teamführung
  • Effizienz und Qualität im technischen Workflow
    • Agiles Mindset
    • Qualitätsbewusstsein
    • Problemlösungsorientierung
    • Organisationsfähigkeit
    • Zeitmanagement
    • Prozessoptimierung
    • Entscheidungsfähigkeit
    • Innovationsförderung

Berufserfahrung

2017 - heute
Position: Senior Software Developer (freiberuflich)
Branchen: Medien, E-Commerce, Chemie, Tourismus, Automotive

2010 - 2017
Position: Software Developer
Firma: tarent GmbH/ tarent solutions GmbH

2005 - 2009
Position: Werkstudent 
Firma: Robotron Datenbank Software

2004 - 2009
Position: Netzwerkbetreuer 
Firma: Studentenwerk Leipzig

Betriebssysteme

Linux

Programmiersprachen

Go
Golang
Java
JavaScript
Kotlin
Ruby

Datenbanken

Oracle
PostgreSQL
MySQL

Einsatzorte

Einsatzorte

möglich

Projekte

Projekte

6 Monate
2024-10 - 2025-03

Erweiterung und Anpassung von bestehenden Services, Deploymentautomatisierung

Java Developer (Backend)/ DevOps Engineer Java Spring Boot Docker ...
Java Developer (Backend)/ DevOps Engineer
  • Weiterentwicklung des bestehenden Systems: im Rahmen des Projekts wurden mehrere neue Funktionen eingeführt, wie z.B. die Bereitstellung von REST-Endpunkten für Versionsinformationen aus der MANIFEST, Implementierung von Import- und Export-Funktionalitäten
  • Bugfixing: Behebung von Fehlern in den bestehenden Services, die durch fehlenden Testabdeckung entstanden sind. Dabei wurde das Code-Coverage für einige Module erheblich erhöht, um die Qualität und Stabilität des Systems zu verbessern (z.B. von 0% auf 97% Line-Coverage und 83% Branch-Coverage)
  • Sicherheit der Services erhöhen: im Zuge der Anpassungen wurden bestimmte Ports geschlossen sowie Fixes für bekannte Sicherheitslücken implementiert.
  • Deploymentautomatisierung: neue Playbooks für die automatisierte Bereitstellung der Services in verschiedenen Umgebungen (TEST, PROD) erstellt. Auch bestehende Playbooks wurden optimiert, um den Deployment-Prozess zu beschleunigen und zu vereinfachen. Dabei wurden auch Validierungsmechanismen eingeführt, um die korrekte Funktionalität der Services nach dem Deployment sicherzustellen.
  • Aufräumarbeiten: sowohl im Code als auch in der Infrastruktur wurden Aufräumarbeiten durchgeführt, um veraltete oder nicht mehr benötigte Komponenten und Funktionalität zu entfernen. Dies diente dazu, die Wartbarkeit und Performance des Systems zu verbessern.
Java Spring Boot Docker Docker-Compose Kubernetes (k8s) Ansible bash Prometheus Kibana Grafana Linux Continuous Integration Continuous Delivery (CI/CD) Artifactory Ansible Automation Plattform Makrdown ASCII Doc GitLab Gitlab-CI Gradle SCM (Git) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence
Transport & Logistik
6 Monate
2024-04 - 2024-09

Ausbau von Features eines Monolithen, Erweiterung und Anpassung von bestehenden Services

Java Developer (Backend)/ DevOps Engineer Go/ Golang Java Spring Boot ...
Java Developer (Backend)/ DevOps Engineer
  • Die Planung und Erweiterung der Architektur: die Architektur wurde in enger Abstimmung mit dem Team geplant und erweitert, mit dem Ziel, den Betrieb mehrerer Replicas bestimmter Services in Kubernetes (k8s) zu ermöglichen. Dabei musste sichergestellt werden, dass die Replicas auf dieselben Daten zugreifen, um doppelte Datenverarbeitung zu vermeiden
  • Feature-Entwicklung: die Implementierung neuer Features in das bestehende System umfasste unter anderem die Anpassung bestimmter Microservices (basierend auf Java mit Spring Boot und Quarkus), um eine doppelte Verarbeitung von Daten zu verhindern. Darüber hinaus wurde der bestehende Service so erweitert, dass Daten nun in einer PostgreSQL-Datenbank statt in ElasticSearch gespeichert werden. Die Funktionalitäten wurden durch Unit- und Integrationstests abgesichert, wobei ein Test-Driven Development (TDD)-Ansatz zum Einsatz kam. Hierfür wurden unter anderem JUnit und Mockito für die Tests verwendet
  • Deployment und Monitoring: im Rahmen der Projektumsetzung erfolgte das Deployment der Microservices mittels GitHub Actions, während das Monitoring dieser Services mit Grafana und Prometheus sichergestellt wurde
  • Datenbankmodellierung sowie die Anbindung von Services: im Zuge der Architekturanpassungen war es erforderlich, die Datenquelle von ElasticSearch auf eine PostgreSQL-Datenbank umzustellen. Dazu wurde das Datenbankmodell erweitert und die entsprechenden Services angepasst
  • Bugfixing und Behebung von technischen Schulden: bei den aufgetretenen Fehlern handelte es sich häufig um bekannte Bugs oder technische Schulden, deren Behebung bisher aus Zeitmangel nicht möglich war. Zur Sicherstellung der Funktionalität wurde auch hier der Test-Driven Development (TDD)-Ansatz verfolgt. Die Beseitigung technischer Schulden führte zudem zu einer Beschleunigung und Optimierung des Build- und Deployment-Prozesses.
  • Ausbau von Funktionalitäten aus einem Monolithen: im Rahmen des Projekts wurde ein Ersatzservice in Golang entwickelt, der den schrittweisen Ausbau von Features eines Monolithen hin zu neuen Golang-Microservices ermöglicht. Dabei lag ein besonderer Fokus darauf, Funktionalitäten aus Feature Flags für verschiedene Contracts und Regionen zu übernehmen.
Go/ Golang Java Spring Boot Quarkus Docker Docker-Compose Kubernetes (k8s) Helm Charts bash Prometheus Kibana Grafana Elasticsearch SonarCloud Continuous Integration und Continuous Delivery (CI/CD) GitHub Github-Actions GitLab Gitlab-CI ArgoCD Maven Gradle SCM (Git) Agile Methodologies Test-Driven Development TDD) Extreme Programming (XP) Scrum Jira Confluence
IT Services & Consulting
2 Jahre 2 Monate
2021-11 - 2023-12

Infrastrukturkonzeption und Aufbau, Umzug von Microservices, Aufbau von Deployment-Pipelines, Featureentwicklung

Golang Developer (Backend)/ DevOps Engineer/ Architekt Go/ Golang Java Spring Boot ...
Golang Developer (Backend)/ DevOps Engineer/ Architekt
Product Owner, 10-köpfiges Entwicklerteam
  • Erstellung eines Konzeptes für den Aufbau der Infrastruktur: da die bestehende Infrastruktur manuell aufgesetzt wurde, bestand das Ziel darin, diese in der AWS-Cloud zu automatisieren. Dazu wurden verschiedene Tools und Werkzeuge evaluiert, darunter Terraform, CloudFormation und Shell-Skripte. Nach Rücksprache mit dem Team fiel die Wahl auf Terraform. Für die Evaluierung wurde ein Prototyp in Terraform erstellt, der anschließend in zwei AWS-Umgebungen (Europa und China) erfolgreich bereitgestellt wurde.
  • Leitung des Infrastruktur-Aufbaus: das Herzstück der Infrastruktur bildete ein Kubernetes-Cluster (EKS), in dem die einzelnen Services für den Betrieb, aber auch für Wartung und Pflege (beispielsweise Grafana, Prometheus, Autoscaler usw.) bereitgestellt wurden.
  • Auslagerung von Services aus einem Monorepo: im Zuge dessen wurden die notwendigen Services aus einem Monorepo in einzelne Repositories (Projekte in GitLab) ausgelagert und einzeln deployed. Das Deployment in Kubernetes erfolgte mittels Ansible und Helm-Charts, wobei eine teilweise signifikante Anpassung der Letzteren erforderlich war.
  • Aufbau von Pipelines mit GitLab-CI: Ziel war die automatisierte Bereitstellung der einzelnen Services in sechs verschiedenen AWS-Umgebungen, die weltweit verteilt waren (Europa, Nordamerika, Asien). Besonders herausfordernd gestaltete sich das Deployment in der Umgebung China. In diesem Projekt habe ich die Lead-Rolle übernommen und mehrere (indische) Kollegen in die Thematik eingearbeitet und begleitet. Darüber hinaus habe ich einen wesentlichen Teil der Implementierung selbst übernommen. Agile Methoden und Techniken waren fest in den Entwicklungsprozess integriert. Wenn Kollegen bei Aufgaben ins Stocken gerieten, habe ich sie intensiv unterstützt, um die Einhaltung der Deadlines sicherzustellen.
  • Einführung der statischen Codeanalyse: um eine konstant hohe Codequalität des Terraform-Codes sicherzustellen, habe ich proaktiv die Einführung einer statischen Codeanalyse vorgeschlagen. Dieser Schritt war entscheidend, um nicht nur die Qualität, sondern auch die Wartbarkeit und Sicherheit des Codes nachhaltig zu verbessern. Nach gründlicher Evaluierung und dem Testen mehrerer Tools fiel die Wahl auf Checkov, das sich als besonders leistungsfähig und flexibel erwies. Nach der umfassenden Behebung der identifizierten Probleme wurde Checkov erfolgreich in den CI/CD-Prozess integriert. Dies ermöglichte eine kontinuierliche Überprüfung und Sicherstellung der Codequalität direkt im Entwicklungsworkflow, wodurch die Effizienz und Fehlerreduktion signifikant gesteigert wurden.
  • Featureenwicklung: nach einer Projektlaufzeit von etwa sieben bis acht Monaten, die von der Konzeption und dem Aufbau der Infrastruktur sowie der Migration der Services geprägt war, rückte die Featureentwicklung in den Fokus des Projekts. Die implementierten Services waren serverless Funktionen, die in der AWS Cloud bereitgestellt wurden. Dabei wurde ausschließlich auf Managed AWS-Ressourcen zurückgegriffen, darunter Lambda, SQS, S3, DynamoDB, CloudWatch und weitere. Aufgrund der Abhängigkeiten der Services von externen Systemen konnten keine vollständigen Integrationstests durchgeführt werden. Stattdessen wurden Unit- und Service-Tests verwendet, um die Funktionalität sicherzustellen. Durch die testgetriebene Entwicklung konnten potenzielle Fehlerquellen bereits im Vorfeld identifiziert und behoben werden. Darüber hinaus wurden Kommunikationsprobleme mit dem Kunden festgestellt, deren Klärung für die Weiterentwicklung des Gesamtsystems von entscheidender Bedeutung war.
  • Anpassung des Deployment-Prozess: nach dem automatisierten Aufbau der Infrastruktur wurde der Deployment-Prozess für Cloud Native Micro Services angepasst. Dabei wurden hardcodierte Werte durch dynamische Werte ersetzt, um eine Bereitstellung der Services in unterschiedlichen Umgebungen (TEST, PROD) zu ermöglichen.
  • Migration von Microservices von Java nach Golang: diese zielte darauf ab, die Wartbarkeit und Skalierbarkeit der Services langfristig zu verbessern.
  • Workshops und Schulungen: im Rahmen des Projekts führte ich Workshops und Schulungen für indische Kolleginnen und Kollegen durch, um ihnen die neuen Technologien und Tools näherzubringen. Zu Beginn war es erforderlich, die spezifischen Wissenslücken bei den einzelnen Teilnehmern zu identifizieren. Anschließend organisierte ich mehrere Workshops zu Themen wie Git, CI/CD mit GitLab-CI und Terraform, die innerhalb von drei bis sechs Monaten stattfanden, um die Kollegen schnellstmöglich einzuarbeiten. Sechs Monate nach dem Einstieg dieser Kollegen wurde ich vom Kunden gebeten, eine umfassende Bewertung ihrer Leistungen vorzunehmen und eine Empfehlung auszusprechen.
  • Bugfixing und Improvement: bei den aufgetretenen Fehlern handelte es sich in den meisten Fällen um bereits bekannte Probleme in bestehenden Services. Diese waren zum Teil auf eine unzureichende Testabdeckung zurückzuführen. Die neu implementierten Features stellten jedoch kein Problem dar, da sie mittels Test-Driven Development (TDD) entwickelt wurden. Dadurch waren auch jegliche Edge Cases bereits im Vorfeld abgedeckt.
Go/ Golang Java Spring Boot Terraform checkov CloudFormation Amazon CloudWatch Amazon EKS Amazon Elastic Container Registry (ECR) Amazon S3 Amazon Simple Notification Service (SNS) Amazon SQS Amazon VPC Amazon Web Services AWS DynamoDB AWS Lambda Docker Kubernetes (k8s) Helm harts bash Prometheus Kibana Grafana Ansible Sonarqube Continuous Integration und Continuous Delivery (CI/CD) Gitlab-CI GoCD SCM (Git) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence GitLab
Automotive
9 Monate
2023-01 - 2023-09

Weiterentwicklung des bestehenden System

Golang Developer (Backend) Go/ Golang PostgreSQL Flyway ...
Golang Developer (Backend)
Product Owner, 5-köpfiges Entwicklerteam
  • Implementierung von neuen Features: im Rahmen des Projekts wurden mehrere neue Funktionen eingeführt, darunter die Bereitstellung von REST-Endpunkten zur Ablösung der WebSocket Kommunikation zwischen Operator und Fahrzeug sowie die Behandlung von durch das Fahrzeug gemeldeten Vorfällen.
  • Weiterentwicklung des bestehenden Systems: Die Weiterentwicklung des bestehenden Systems beinhaltete die Anpassung der Services, um deren Funktionsumfang zu erweitern. Dazu zählten beispielsweise die Übermittlung des Fahrzeugakkustandes an den Operator oder die Verwaltung von Telefonnummern, sodass im Auto verbaute Geräte bei Bedarf SMS-Nachrichten versenden können.
  • Service-Orchestrierung: da es sich um einen Prototypen handelte, wurden die einzelnen Services in Docker-Containern bereitgestellt und vorerst mittels Docker-Compose orchestriert. Auf diese Weise konnte das Team die Services schnell und einfach deployen und testen.
  • Datenbankmodellierung: im Hinblick auf die Systemerweiterung bzw. die Integration neuer Funktionen war eine Erweiterung des Datenbankmodells erforderlich. Dabei wurde besonderer Wert darauf gelegt, dass die Datenbankstruktur flexibel genug ist, um zukünftige Anforderungen abzudecken. Diesbezüglich wurden neue Tabellen hinzugefügt und bestehende Tabellen erweitert. Für die Datenbankmigration wurde Flyway verwendet.
  • Bugfixing: aufgrund des Prototypen-Charakters des Systems traten zahlreiche Probleme auf, die es zu beheben galt. Die Funktionalität wurde durch Unit- und Integrationstests sichergestellt, welche mittels Test-Driven Development (TDD) entwickelt wurden.
Go/ Golang PostgreSQL Flyway RabbitMQ Docker WebSocket Swagger API Continuous Integration und Continuous Delivery (CI/CD) Gitlab-CI SCM (Git) Agile Methodologies Test-Driven Development (TDD) Kanban Jira Confluence Gitlab Bitbucket
Automotive
1 Jahr 11 Monate
2021-02 - 2022-12

Weiterentwicklung des Flugmanagementsystems

Golang Developer (Backend)/ DevOps Engineer/ Architekt Go/ Golang Terraform PostgreSQL ...
Golang Developer (Backend)/ DevOps Engineer/ Architekt
Product Owner, 7-köpfiges Entwicklerteam
  • Konzeption neuer Features und Architekturanpassungen: im Rahmen des Projekts wurden mehrere neue Features und Architekturanpassungen konzipiert, darunter die Einführung von Flughafengebühren und Steuern sowie deren Darstellung für die abgefragten Flüge. Weitere Anpassungen umfassten das automatisierte Tagging von AWS-Ressourcen und die Einbindung neuer Fluggesellschaften in die Flugsuche, um die Funktionalität und Benutzererfahrung weiter zu verbessern.
  • Weiterentwicklung des bestehendes Systems: im Laufe der fast zweijährigen Projektarbeit wurden dutzende neue Funktionalitäten eingeführt, darunter die Ablösung von Kinesis und die Einbindung von DynamoDB als Datenquelle, die Implementierung eines Retry-Mechanismus in einigen Services, das Update von Zusatzleistungen bei der Flugbuchung sowie die automatisierte Migration der Konfiguration für die einzelnen Services zu Redis. Es wurden ausschließlich Lambda Funktionen (serverless) eingesetzt, die über SNS/SQS miteinander kommunizierten. Die Daten wurden sowohl in DynamoDB als auch in PostgreSQL gespeichert.
  • Anbindung neuer externen Systemen: die Flugsuche wurde um weitere Fluggesellschaften erweitert, wodurch den Kunden eine größere Auswahl an Flügen zur Verfügung stand. 
  • Datenbankmodellierung: im Rahmen der Systemerweiterung bzw. der Integration neuer Funktionen war eine Erweiterung des Datenbankmodells erforderlich. Hierbei wurden hauptsächlich neue Tabellen in PostgreSQL bzw. DynamoDB hinzugefügt.
  • Monitoring und Pflege der Services: zur schnelleren Reaktion auf auftretende Probleme habe ich sechs neue Dashboards in Datadog erstellt, die die wichtigsten Metriken anzeigten. Die Bereitstellung der Metriken erfolgte über AWS CloudWatch und AWS X-Ray. Darüber hinaus wurden bestehende Dashboards angepasst, um Doppelungen zu vermeiden und die Übersichtlichkeit zu optimieren.
  • Kostenoptimierung: bei der Analyse der Kosten stellte sich heraus, dass die Log-Komponente (Cloud-Watch) eine der kostenintensivsten Positionen war. Zur Reduzierung der Kosten wurden mehrere Anpassungen an verschiedenen Stellen vorgenommen. Als erstes wurde die Bibliothek, die die Logs an CloudWatch sendet, angepasst und Logausgaben mit wenig Informationsgehalt entfernt. Als zweites wurde die Log-Retention von 90 Tagen auf 14 Tage reduziert. Schließlich wurden Logs in S3 Buckets archiviert und nur bei Bedarf in Datadog erneut geladen. Diese Maßnahmen führten zu einer Reduzierung der Kosten um ca. 40 %.
  • Codequalität verbessern: bei der ersten Kundenbesprechung wurde schnell deutlich, dass die Codequalität der Services nicht den vereinbarten Qualitätsansprüchen genügte. Die Testabdeckung der etwa 90 Microservices lag im Durchschnitt bei 5% bis maximal 10%. Eine reine Nachholung der Tests war nicht zielführend. Daher war es zunächst erforderlich, das Mindset der Entwickler zu beeinflussen und den von mir vorgeschlagenen Test-Driven Development (TDD)-Ansatz zu etablieren. Die Umsetzung erfolgte schrittweise. Zunächst wurden meine Anpassungen ? unabhängig davon, ob es sich um neue Funktionen oder die Behebung von Fehlern handelte ? nach dem TDD-Ansatz entwickelt. Im anschließenden Review-Prozess stieß dies bei den Kolleginnen und Kollegen auf positive Resonanz. Als Nächstes initiierte ich Diskussionen über die unzureichende Testabdeckung in den Services und überzeugte die Kollegen von der essenziellen Bedeutung von Tests. Darüber hinaus führte ich mehrere Workshops zu diesem Thema durch und präsentierte meine Vorgehensweise den Kolleginnen und Kollegen aus meinem Team sowie aus anderen Teams. Nach fast zwei Jahren konnten wir eine Testabdeckung von mindestens 60% bei allen 90 Microservices erreichen. Einige davon wiesen sogar eine Testabdeckung von über 80% auf. Dies wurde auch durch die Anpassung der Akzeptanzkriterien in den Tickets erreicht.
  • Dokumentation: beim Projektstart stellte ich fest, dass es für die meisten Microservices keine Dokumentation gab. Um die Einarbeitung neuer Kolleginnen und Kollegen zu erleichtern, habe ich vorgeschlagen, die Erstellung von Dokumentationen in den jeweiligen Tickets zu verpflichten. Daraufhin haben wir bei allen 90 Services die Dokumentationen erstellt und ab dem Zeitpunkt bei Änderungen in den Services die Dokumentationen aktualisiert.
  • Agilität: leider gab es in der ganzen Abteilung keine Scrum Master, sodass ich diese Rolle teilweise übernahm. Für ca. 1,5 Jahre habe ich diese Rolle parallel zur Entwicklung ausgeübt und das Team bei den täglichen Standups, den Sprint-Reviews und -Retrospektiven als Scrum Master unterstützt. Dabei habe ich darauf geachtet, dass die Scrum-Regeln eingehalten wurden und die Meetings effizient und zielgerichtet abliefen. In diesem Zeitraum sind wir auf Kundenwunsch von Kanban nach Scrum gewechselt.
Go/ Golang Terraform PostgreSQL Amazon S3 Amazon Simple Notification Service (SNS) Amazon SQS Amazon Web Services AWS CloudWatch AWS CodeBuild AWS CodeDeploy AWS Command Line Interface (CLI) AWS DynamoDB Redis AWS Lambda Datadog bash Continuous Integration und Continuous Delivery (CI/CD) Gitlab-CI SCM (Git) Gitlab Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Kanban Jira Confluence
Tourismus
8 Monate
2020-07 - 2021-02

Löschen von Daten im DSGVO Kontext, Weiterentwicklung des bestehendes Systems

Java Developer (Backend)/ DevOps Engineer Java Spring Boot Groovy ...
Java Developer (Backend)/ DevOps Engineer
Product Owner, Scrum Master, 5-köpfiges Entwicklerteam
  • Implementierung von Löschroutinen: Im Rahmen des Projekts wurden mehrere Routinen entwickelt, die eine Löschung personenbezogener Daten ermöglichten. Dabei wurde darauf geachtet, dass die Daten in sämtlichen Systemen, d. h. in der Datenbank, in den Logdateien usw., gelöscht wurden.
  • Rückbau von veralteten Komponenten: einige Services waren nicht mehr auf dem neuesten Stand und wurden nicht mehr benötigt. Wir haben sie deshalb zurück gebaut (PostgreSQL-Datenbank, TeamCity Pipelines usw.) und die entsprechenden Ressourcen freigegeben.
  • Deployment und Monitoring: die Services wurden mit TeamCity auf dem eigenen Server ausgerollt und mit Grafana überwacht. Dazu wurden mehrere Dashboards angepasst und neue erstellt, um die wichtigsten Metriken anzuzeigen.
  • Datenbankmodellierung: im Rahmen der Implementierung der Löschroutinen war eine Erweiterung des Datenbankmodells (PostgreSQL) erforderlich. Diese umfasste in erster Linie die Hinzufügung neuer Tabellen sowie die Erweiterung bestehender Tabellen.
Java Spring Boot Groovy Spock JUnit Mockito Maven Gradle Continuous Integration und Continuous Delivery (CI/CD) TeamCity Grafana bash SCM (Git) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence Bitbucket
IT
1 Jahr 9 Monate
2018-07 - 2020-03

Erkennung & Kategorisierung von Objekten

Golang Developer (Backend)/ DevOps Engineer/ Architekt Go/ Golang Terraform Amazon Aurora ...
Golang Developer (Backend)/ DevOps Engineer/ Architekt
Erkennung und Kategorisierung von Objekten wie Pflanzen, Insekten und Krankheiten auf Bildern, die auf einem Feld aufgenommen wurden. Product Owner, Scrum Master, 12-köpfiges Entwicklerteam
  • Architekturplanung: bei diesem Projekt handelte es sich um eine Greenfield-Entwicklung, bei der die Architektur und Infrastruktur von Grund auf neu geplant und aufgebaut werden mussten. Das Ziel bestand darin, Daten zu empfangen (Metadaten, Bilder), diese zu verarbeiten und darauf basierend einen Data Lake aufzubauen, um KI-Algorithmen zu trainieren. Das System sollte in der AWS-Cloud betrieben werden, wobei die Architektur als Microservice-Architektur zu gestalten war. Aufgrund der suboptimalen Performance von Java wurde Golang als Programmiersprache gewählt. Der Fokus lag auf der Verwendung von Managed AWS Services (Lambdas, API Gateway, S3, DynamoDB u. a.), um den Betrieb so einfach wie möglich zu gestalten. Die Kommunikation zwischen den Services sollte über SNS und SQS erfolgen. Zudem war es erforderlich, dass einzelne Ereignisse auch von anderen Ressourcen getriggert werden können (z. B. vom S3, wenn ein Bild hochgeladen wurde).
  • Infrastrukturplanung und -aufbau: von Beginn an war es unsere Absicht, die Infrastruktur in der AWS-Cloud automatisiert zu errichten. Für die Umsetzung dieser Anforderungen kamen die Tools Terraform und CloudFormation in Frage. Aufgrund der Multicloud-Unterstützung entschieden wir uns für Terraform. Das Backend-Team (2 Personen) arbeitete nach dem Motto ?You build it, you run it?, weshalb die Planung und Erstellung der AWS-Ressourcen in unseren Händen lag. Der Rest des Teams konnte sich bei Bedarf an das Infrastruktur-Team wenden. Die Infrastruktur wurde in mehreren AWS-Accounts automatisiert aufgebaut, um die Umgebungen (DEV, TEST, PROD) voneinander zu trennen.
  • Implementierung: die Übertragung, Persistierung und Weiterverarbeitung von Metadaten und Bildern erfolgte durch einzelne Microservices (Lambda Funktionen). Insgesamt wurden über 100 Lambda Funktionen implementiert, wobei die Anzahl durch Refactorings und Optimierungen auf ca. 80 Lambda Funktionen reduziert wurde.
  • Deployment und CI/CD-Aufbau: die Funktionen und AWS-Ressourcen wurden mittels Pipelines (GitLabCI) in jede der drei Umgebungen automatisiert deployt/ erstellt/ angepasst. Ebenso wurden die Tests (Unit- und Integrationstests) durch die Pipelines durchgeführt und bei Erfolg die Funktionen in die jeweilige Umgebung deployt.
  • Datenbankmodellierung (NoSQL): die Speicherung der Metadaten erfolgte in einer einzigen DynamoDB-Tabelle. Diese erfüllte die Anforderungen und zeigte sich hinsichtlich der Performance als ausreichend.
  • Dokumentation (Markdown): die Dokumentation erfolgte in Markdown-Dateien in der jeweiligen Lambda Funktion (im jeweiligen Repository). Zweck der Dokumentation war es, den Entwicklern, die das System weiterentwickeln sollten, eine Grundlage für ihre Arbeit bereitzustellen und deren Einarbeitung zu erleichtern.
  • Agilität: einige Teammitgliedern haben bereits Erfahrung mit agilen Frameworks (Scrum) gesammelt. Allerdings wurde das im Team nicht so konsequent gelebt, wie es erforderlich war. Das praktizierte Vorgehen widersprach manchmal den agilen Prinzipien. Daher habe ich das Team auch in dieser Hinsicht unterstützt und nach und nach mehr an die Scrum-Prinzipien herangeführt.
Go/ Golang Terraform Amazon Aurora Amazon S3 Amazon Simple Notification Service (SNS) Amazon SQS Amazon Web Services AWS API Gateway AWS Command Line Interface (CLI) AWS DynamoDB AWS Identity and Access Management (IAM) AWS Lambda AWS X-Ray Docker bash Continuous Integration und Continuous Delivery (CI/CD) Gitlab-CI Kibana Elasticsearch Elastic Stack (ELK) SCM (Git) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence Gitlab
Chemie
9 Monate
2017-10 - 2018-06

Implementierung eines Produktrückrufservices

Java Developer (Fullstack)/ DevOps Engineer/ Architekt Java Spring Boot Groovy ...
Java Developer (Fullstack)/ DevOps Engineer/ Architekt
Implementierung eines Produktrückrufservices, Darstellung von benutzerspezifischen Werbemitteln, Implementierung eines Double-Opt-In Verfahren bei Email-Änderung. Product Owner, Scrum Master, 2- bis 5-köpfiges Entwicklerteam
  • Mitarbeit an Architekturentscheidungen: gemeinsam mit anderen Teammitgliedern war ich an der Gestaltung der Systemarchitektur beteiligt. Dabei ging es unter anderem um die Auswahl der Programmiersprache, die Datenbank, die Kommunikation zwischen den Services sowie die Aufteilung der Services in Microservices. Da wir nach dem Motto ?You build it, you run it? arbeiteten, übernahmen wir alle Aufgaben von der Architektur über die Entwicklung bis hin zum Betrieb der Services selbst.
  • Backend-Entwicklung von Microservices: der Schwerpunkt unseres Teams lag auf der Entwicklung von Microservices zur Abwicklung des Produktrückrufs. Dazu zählten die Identifikation betroffener Produkte und Kunden sowie die Kommunikation per E-Mail. Insgesamt setzten wir fünf Microservices mit Java und Spring Boot um. Für diese Services wurden Docker-Container erstellt und mit Docker-Compose orchestriert.
  • Microfrontends: zusätzlich zur Abwicklung des Produktrückrufs haben wir die Front- und Backend-Entwicklung für die Darstellung der spezifischen Werbemittel auf der Shop-Seite verantwortet. Die Werbemittel (ausschließlich Bilder) wurden in einem eigenen Service verwaltet und je nach Benutzerprofil auf der Shop-Seite angezeigt.
  • Backend-Entwicklung von Double-Opt-In-Verfahren bei E-Mail-Änderung des Benutzers: diese Funktionalität war Teil eines größeren Projekts. Ursprünglich war geplant, den bestehenden Service anzupassen. Aufgrund der Komplexität, der zahlreichen Abhängigkeiten und der fehlenden Tests wurde jedoch entschieden, den Service komplett neu zu implementieren. Dabei wurden erneut Java und Spring Boot verwendet, um Konsistenz mit den anderen Services zu gewährleisten. Anschließend integrierten wir den Service in die CI/CD-Pipeline (Jenkins) und überführten ihn in die Produktion.
  • Monitoring und Pflege der Services: die Services wurden mittels Prometheus und Grafana überwacht. Hierzu wurden dedizierte Geräte (Nuc + Bildschirm) eingesetzt, welche die Dashboards für das gesamte Entwicklerteam jederzeit sichtbar machten.
  • Dokumentation: für jeden Service wurde eine REST-API-Dokumentation gemäß Swagger erstellt. Zusätzlich wurden die Funktionalitäten der Services in Markdown-Dokumentationen festgehalten.
Java Spring Boot Groovy Spock Maven Gradle PostgreSQL Apache Kafka Flyway Docker Gulp Prometheus.io Grafana Swagger API Continuous Integration und Continuous Delivery (CI/CD) Jenkins Sonar bash SCM (Git) Agile Methodologies Check-Square Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence Bitbucket
E-Commerce
2 Monate
2017-08 - 2017-09

Implementierung eines Services zur Anzeige der Ergebnisse

Java Developer (Backend)/ DevOps Engineer Java Spring Boot ...
Java Developer (Backend)/ DevOps Engineer
Product Owner, Scrum Master, 7-köpfiges Entwicklerteam
  • Backend-Entwicklung: die Aufgabe bestand darin, einen Microservice zur Anzeige der Ergebnisse der Bundestagswahl 2017 zu implementieren. Der Service sollte in regelmäßigen Abständen die vorläufigen Ergebnisse aus einem externen System abrufen und diese auf der eigenen Webseite anzeigen.
  • Integration des Services in die CI/CD-Pipeline: der Service wurde mittels Jenkins gebaut und auf dem jeweiligen Server deployed.
  • Testcoverage und Quality Gates: ich bin zu einem Zeitpunkt in das Projekt eingestiegen, als die Testabdeckung 0% betrug. Ich arbeite ausschließlich nach dem Test-Driven Development (TDD)-Ansatz, weshalb ich direkt beim ersten Task mit der Implementierung von Tests begonnen habe. Hierfür habe ich Groovy und Spock verwendet. Als nächstes haben wir mittels Sonar einige Quality Gates definiert, die die Qualität des Codes sicherstellen sollten. Die Quality Gates wurden in die CI/CD-Pipeline integriert, sodass ein Deployment nur bei Erfüllung der Quality Gates möglich war.
  • Monitoring: der Service wurde mittels Prometheus und Grafana überwacht und die wichtigsten Metriken in Dashboards visualisiert.
  • Dokumentation: eine REST-API Dokumentation wurde mittels Swagger erstellt. Zusätzlich wurden die Funktionalitäten des Services in Markdown-Dokumentationen festgehalten.
Java Spring Boot Groovy Spock JUnit Mockito Prometheus Docker Docker-Compose Postgres Maven Gulp Gradle Thymeleaf Freemarker Continuous Integration und Continuous Delivery (CI/CD) Jenkins Sonar SCM (Subversion - svn) Agile Methodologies Test-Driven Development (TDD) Extreme Programming (XP) Scrum Jira Confluence Bitbucket
Medien
6 Jahre 10 Monate
2010-10 - 2017-07

verschiedenes

Java Developer (Fullstack)/ DevOps Engineer/ Architekt Active Record Agile Methodologies Android ...
Java Developer (Fullstack)/ DevOps Engineer/ Architekt
Product Owner, Scrum Master, 2- bis 8-köpfige Entwicklerteams
  • Technische Leitung und Architekturplanung: diese Rolle habe ich in mehreren Projekten in ähnlicher Form wahrgenommen. Die Teams umfassten zwei bis fünf Mitglieder. Die Projekte waren sehr unterschiedlich. Sie umfassten die Entwicklung von klassischen Webanwendungen (Frontend, Backend, Datenbank) in Tomcat oder JBoss sowie die Entwicklung von Anwendungen für mobile Endgeräte. In den Projekten war ich für die Architekturplanung und die technische Leitung zuständig. Dabei habe ich darauf geachtet, dass die Architektur den Anforderungen entspricht und die Services skalierbar und wartbar sind.
  • Front- und Backend-Entwicklung von klassischen Anwendungen, Microservices und mobilen Anwendungen: ich verfüge über langjährige Erfahrung als Fullstack-Entwickler und habe in dieser Zeit sowohl Front- als auch Backend-Entwicklung durchgeführt. Dabei habe ich verschiedene Technologien und Frameworks eingesetzt, darunter Java, Kotlin, Spring Boot, Docker, Docker-Compose, JUnit, Mockito, Groovy, Spock, Tomcat u. v. a. Seit 2015 liegt mein Fokus auf der Backend-Entwicklung, wobei ich mich auf die Architektur und Entwicklung von Microservices sowie deren Deployment spezialisiert habe.
  • Aufbau CI/CD-Pipelines: bereits im Jahr 2010 habe ich erste Erfahrungen mit Continuous Integration und Continuous Delivery gesammelt. Zu dieser Zeit arbeitete ich mit Hudson, dem Vorgänger von Jenkins. Seitdem habe ich in jedem Projekt, in dem ich tätig war, CI/CD-Pipelines aufgebaut und/oder gepflegt.
  • Monitoring und Pflege der Services: bei der Überwachung der Java Services in den Projekten habe ich in der Regel auf Prometheus und Grafana zurückgegriffen.
  • Erstellung von Anleitungen und API Dokumentation: das war ein wichtiger Teil meiner Arbeit. Bei Legacy-Projekten war oft keine Dokumentation vorhanden, was eine große Herausforderung darstellte. Bei neueren Diensten und Projekten habe ich dafür gesorgt, dass die Dokumentation von Anfang an erstellt wurde.
Active Record Agile Methodologies Android AngularJS 1.x Ansible bash Bitbucket Bower Confluence CSS Cucumber Docker Docker-Compose Droidparts Dropwizard Eclipse ExtGWT (GXT) Factory Girl Git Gradle Groovy GWT HTML iText Java 6-8 JavaScript JBoss Jenkins Jira JOSM jQuery JSP JSR 303 JUnit Kotlin Linux Maven Mechanize Mockito OpenJPA Oracle OsmDroid PostgreSQL Robolectric Ruby Scrum Selenium Selenium Webdriver Spock Spring Spring 3 (Core MVC Security) Spring Actuator Spring Boot Spring REST Docs Subversion Test-Driven Development (TDD) Tomcat Velocity vertx XML Extreme Programming (XP) XPath
IT-Dienstleistungen

Aus- und Weiterbildung

Aus- und Weiterbildung

2 Jahre 3 Monate
2007-10 - 2009-12

Studium - Informatik

Master of Computer Science, Universität Leipzig
Master of Computer Science
Universität Leipzig
4 Jahre
2003-10 - 2007-09

Studium - Informatik

Bachelor of Computer Science, Universität Leipzig
Bachelor of Computer Science
Universität Leipzig

Position

Position

  • Senior Backend Developer | Go | Golang | Java | DevOps | AWS | Cloud | IaC (terraform)

Kompetenzen

Kompetenzen

Top-Skills

golang AWS TDD Amazon Web Services (AWS) CI/CD Docker Git Groovy Hibernate JQuery JUnit Jenkins Linux Maven Microservices Mockito OpenJPA / JPA PostgreSQL Spock Spring Boot Terraform Tomact XML

Produkte / Standards / Erfahrungen / Methoden

Amazon Web Services (AWS)
Bitbucket
CI/CD
CleanCode
CSS
ExtremeProgramming
Git
Gradle
Grafana
Jenkins
Jira
Log4j
Maven
OpenJPA
Prometheus
Scrum
Spring
TDD
Tomcat
XP

Profil
  • Als erfahrener Java-Entwickler bringe ich fundiertes Know-how in der Entwicklung skalierbarer, hochwertiger Backend-Systeme mit, die Effizienz und saubere Code-Standards vereinen. Mein umfassendes Fachwissen in modernen Cloud Architekturen, insbesondere mit AWS, sowie meine praktische Erfahrung in agilen Methoden wie Scrum, Test-Driven Development (TDD) und Extreme Programming, befähigen mich, maßgeschneiderte Lösungen zu realisieren, die spezifischen Anforderungen in diversen Branchen gerecht werden. Dazu zählen Medien, E-Commerce, Chemie, Tourismus und Automotive.
  • Ich setze auf präzise Prozesse und hohe Qualitätsstandards, die nicht nur die Softwareentwicklung verbessern, sondern auch die Teamentwicklung vorantreiben und so optimale Projektergebnisse erzielen. Dank meines technischen und methodischen Fachwissens kann ich Teams erfolgreich anleiten, motivieren und eine Kultur der kontinuierlichen Verbesserung und des Lernens fördern.
  • Zusätzlich habe ich eine nachweisbare Erfolgsbilanz in der Auswahl passender Teammitglieder für Projekte. Durch strukturierte Evaluationsmethoden und gezieltes Feedback stelle ich sicher, dass jedes Teammitglied optimal zum Projekterfolg beiträgt. Dadurch schaffe ich eine solide Basis für langfristiges Wachstum und Stabilität im Team.

Testing
  • JUnit
  • Mockito 
  • Groovy 
  • Spock 
  • SonarQube 
  • Selenium
  • Cucumber 

Build Tools
  • Maven
  • Gradle

Logging & Monitoring
  • Grafana
  • Prometheus
  • Kibana
  • Datadog
  • Logz.io

Containerization
  • Docker
  • Docker-Compose
  • Kubernetes

Infra & Deployment
  • Terraform
  • Ansible
  • Helm

CI/CD
  • Jenkins
  • Gitlab-CI
  • Github Actions
  • TeamCity

Version Control
  • Git
  • Subversion
  • Mercurial
  • CVS 

Agile
  • TDD
  • XP
  • Scrum
  • Kanban

Frameworks/Libraries
  • Spring Boot
  • Dropwizard
  • Quarkus
  • OpenJPA
  • Hibernate

Miscellaneous
  • Linux
  • bash
  • Tomcat
  • AWS
  • Kafka

SOFT SKILLS
  • Teamführung und Zusammenarbeit
    • Kommunikationsfähigkeit
    • Verhandlungs- und Konfliktlösungskompetenz
    • Feedback-Kultur 
    • Mentoring und Coaching
    • Kollaborationsfähigkeit
    • Flexibilität und Anpassungsfähigkeit
    • Teamführung
  • Effizienz und Qualität im technischen Workflow
    • Agiles Mindset
    • Qualitätsbewusstsein
    • Problemlösungsorientierung
    • Organisationsfähigkeit
    • Zeitmanagement
    • Prozessoptimierung
    • Entscheidungsfähigkeit
    • Innovationsförderung

Berufserfahrung

2017 - heute
Position: Senior Software Developer (freiberuflich)
Branchen: Medien, E-Commerce, Chemie, Tourismus, Automotive

2010 - 2017
Position: Software Developer
Firma: tarent GmbH/ tarent solutions GmbH

2005 - 2009
Position: Werkstudent 
Firma: Robotron Datenbank Software

2004 - 2009
Position: Netzwerkbetreuer 
Firma: Studentenwerk Leipzig

Betriebssysteme

Linux

Programmiersprachen

Go
Golang
Java
JavaScript
Kotlin
Ruby

Datenbanken

Oracle
PostgreSQL
MySQL

Vertrauen Sie auf Randstad

Im Bereich Freelancing
Im Bereich Arbeitnehmerüberlassung / Personalvermittlung

Fragen?

Rufen Sie uns an +49 89 500316-300 oder schreiben Sie uns:

Das Freelancer-Portal

Direktester geht's nicht! Ganz einfach Freelancer finden und direkt Kontakt aufnehmen.