Mein Skill Set
Ich bin Software Engineer mit Fokus auf der Konzeption und Umsetzung moderner Softwarelösungen. Dazu gehören die Neuentwicklung von Anwendungen mit aktuellem Tech-Stack, die Modernisierung bestehender Legacy-Systeme sowie agentic coding und die Entwicklung von KI-gestützten Lösungen.
agentic coding
Agentic Coding sehe ich als konsequente Weiterentwicklung moderner Softwareentwicklung, insbesondere im Enterprise-Umfeld. Ich habe entsprechende Setups bereits für komplexe Multi-Modul- und Monorepo-Codebases umgesetzt, bei denen KI-gestützte Workflows gezielt in bestehende Entwicklungsprozesse integriert wurden. Dabei lag der Fokus auf der Erstellung von Custom Agents und Skills, die Entwicklungsaufgaben automatisieren, Qualität sichern und gleichzeitig Kosten durch effiziente Modellnutzung optimieren.
Zum Einsatz kamen unter anderem Tools wie GitHub Copilot, Cloud Code, Open Code sowie verschiedene experimentelle Umgebungen wie Anti-Gravity-Setups. Ergänzend arbeite ich regelmäßig mit unterschiedlichen KI-Modellen wie GPT, Claude und Gemini sowie lokalen und offenen Modellen über Ollama und vergleichbare Runtime-Umgebungen. Ziel ist dabei stets, robuste, skalierbare und qualitativ hochwertige Entwicklungsprozesse zu etablieren, die klassische Softwareentwicklung sinnvoll mit KI erweitern.
ai solutions
Ich habe bereits agentische KI-Systeme für Endanwender entwickelt, die von einfachen Chatbots bis hin zu komplexen KI-Assistenten reichen. Dabei kamen unterschiedliche Ansätze wie klassisches RAG, GraphRAG, agentisches RAG sowie hybride Retrieval-Architekturen zum Einsatz, um kontextuelle Antworten präzise und robust zu gestalten. Als technische Grundlage nutze ich dabei sowohl relationale als auch vektorbasierte und graphbasierte Speicherlösungen wie PostgreSQL mit pgvector, ChromaDB sowie Frameworks wie LangChain und LangGraph zur Orchestrierung komplexer agentischer Workflows und Entscheidungslogiken. Der Fokus lag sowohl auf B2E- als auch B2B-Anwendungen, insbesondere zur Optimierung von Prozessen in Datenpflege, Datenanalyse und Wissensarbeit, ergänzt durch Bildanalyse-Prototypen zur Verarbeitung unstrukturierter Daten in realen Anwendungsfällen.
Software architecture
Die Liebe zur Softwarearchitektur ist für mich besonders, da sie im Vergleich zu Technologien und Frameworks eine bemerkenswerte Beständigkeit aufweist. Vorausgesetzt, sie wird von Anfang an evolutionär durchdacht und implementiert. Eine saubere Umsetzung kann nicht nur die Wartungsaufwände, sondern auch die Projektrisiken erheblich reduzieren. Oftmals sind es nicht die Kosten für die initiale Entwicklung einer Software, sondern die Aufwendungen für den laufenden Betrieb und die Erweiterung, die Herausforderungen bereiten. Nicht selten erfordert selbst die kleinste Erweiterung, wie beispielsweise das Hinzufügen eines neuen Feldes, mehrere Tage oder sogar Wochen. Eine sorgfältig durchdachte und erweiterungsfreudige Softwarearchitektur minimiert solche Aufwände auf nur wenige Stunden.
Es ist egal, ob sich das Projekt in einem bereits fortgeschrittenem Stadium oder auf einer grünen Wiese befindet, für mich ist es essentiell sich den Überblick zu verschaffen. Deshalb hängt aus meiner Sicht die Softwarearchitektur mit der Anforderungsanalyse unmittelbar zusammen. Ich präferiere eindeutig den Top-down Ansatz. Vor allem eine klare verständliche Visualisierung der Softwarearchitektur, der Infrastruktur und der entsprechenden Prozessabläufe erachte ich für absolut notwendig. Gerade die Prozesse haben sowohl den fachlichen, als auch den technischen Blickwinkel. Es ist wichtig diese beiden Sichten eindeutig zu trennen, damit die Zusammenarbeit mit den entsprechenden Stakeholdern reibungslos ablaufen kann. Im Laufe des Projekts und vor allem zum Schluss ist es notwendig die Dokumentation an dieser Stelle aktuell zu halten. Den sie vereinfacht das On-Boarding für die neuen Kollegen, bzw. die Übergabe in den Betrieb. Hier ist ein Beispiel: https://docs.openvalidation.io/contribution/developer-guide/architecture
Abhängig von der Anforderung bevorzuge ich den Microservice bzw. den Cloud-native Ansatz, der vor allem auf die Skalierbarkeit, Wartung und Interoperabilität einer Software ausgelegt ist. Die 12 Factor App Methodik ist ein weiterer von mir präferierter Ansatz für den SaaS Bereich. Ansonsten, je nach Anforderung verwende ich DDD, CQRS und weitere architektonische Design Patterns. Im Enterprise Umfeld, wo viele WebAPI's benötigt werden halte ich den Contract First Ansatz unter Verwendung der OpenAPI Spezifikation für sinnvoll.
In meinem Verständnis von der Softwarearchitektur geht es nicht nur darum große skaliebare Systemlandschaften zu entwerfen sondern auch kleinere modulare Frameworks. Z.B. Fluent API's oder auch internal DSL's usw. Es geht darum Bereiche im code zu identifizieren, die Wartungsintensiv sind, um diese zu modularisieren.
Besonders wichtig ist der Wissenstransfer innerhalb des Teams. Eine nicht praktizierte Architektur ist genauso kostspielig wie gar keine. Hierbei sind vor allem Commitments des Teams, regelmäßige Pair-Programming-Sessions und teamübergreifende Code-Reviews vonnöten.
Full Stack development
Komplexe Systeme bestehen in der Regel aus vielen verschiedenen Systemkomponenten, die wiederum in mehrere logische Layer aufgegliedert sind. Z.B. das Frontend, REST- bzw. WebAPI-Middleware, das Backend und evtl. noch die Persistenzschicht mit einer Datenbank. Dann gibts noch den DevOps Bereich mit den CI/CD Pipelines und nicht zuletzt die Infrastruktur mit dem Blech im Keller oder virtuell in der Cloud (PaaS, Iaas). In der Summe sind es sehr viele verschiedene Technologien mit je einer eigenen Toolchain, eigenen Frameworks und eigenen best practices. Es sind separate Ökosysteme, die je ein spezifisches Wissen erfordern. Viele Entwickler spezialisieren sich oft nur für einen einzigen dieser Bereiche. Es gibt aber auch Entwickler, die unbedingt den kompletten Stack, also den Full Stack beherrschen möchten. Ich gehöre zu der 2'en Sorte.
Ein schlagkräftiges Softwareentwicklungsteam benötigt neben den Spezialisten, je nach Teamgröße 1, 2 oder auch mehr Generalisten. Als Full Stack Entwickler kann man den eigentlichen Entwicklungsprozess besser skalieren, indem man die Abhängigkeiten der einzelnen Arbeitspakete erkennt und die entsprechenden Massnahmen ergreift. Außerdem werden Projektrisiken minimiert, dadurch, dass innerhalb des Projektes Wissensinseln oder Kopfmonopole vermieden werden.
GenAI
Mit fundierter Erfahrung im Bereich GenAI habe ich bereits eine Vielzahl von Prototypen für verschiedene Anwendungen entwickelt. Diese Prototypen umfassen die Verwendung von Modellen wie GPT, DALL-E, text-embedding-ada, LLAMA usw. Auch mit Vektor-Datenbanken habe ich ebenfalls einiges an Erfahrung gesammelt. Darüber hinaus verfüge ich über Fachkenntnisse im Prompt Engineering sowie umfassende Erfahrung im Bereich Data Analytics und Aufbereitung von Daten ihm Rahmen einer ML Pipeline.
Meine Stärke liegt vor allem in der nahtlosen Integration von KI-Technologien in umfassende Softwarelösungen. Mit einem fundierten Hintergrund in Softwareentwicklung und -architektur sowie Kenntnissen im Bereich UI/UX biete ich eine einzigartige Kombination von Fähigkeiten, die nicht häufig anzutreffen ist.
Im Gegensatz zum klassischen Data Scientist, der sich oft ausschließlich auf die Analyse von Daten und auf das Modelltraining konzentriert, verfüge ich über das Wissen und die Fähigkeiten, um Lösungen wirklich End2End zu integrieren. Meine Expertise ermöglicht es mir, die Lücke zwischen der Entwicklung/Integration von KI-Modellen und ihrer praktischen Anwendung zu schließen.
Technology Stack
Der von mir verwendete Technologie Stack wird zwar mit der Zeit immer größer, allerdings gibts einige Konstanten darin. Ich arbeite vor allem mit Java, .Net, und Node.js bzw. TypeScript als Basistechnologie. Selbstverständlich Docker bzw. Kubernetes im DevOps Bereich. Im Bereich Cloud Infrastruktur und PaaS habe ich hauptsächlich mit Azure und AWS gearbeitet. Im Bereich Datenbanken habe ich unter anderem mit MS SQL, Oracle, MongoDB und Firebase gearbeitet bzw. mit verschiedenen Cloud Diensten, wie z.B.: Blob oder Table Storage oder S3 usw.
Frameworks kommen und gehen, damit habe ich mich bereits arrangiert, indem ich versuche immer den aktuellen Tech Stack zu verwenden. Ansonsten das was der Kunde halt braucht.
JAVA
Java 8 bis 21, Spring, Spring Boot, Maven, Gradle, JPA, JUnit, Mockito, IntelliJ
.NET
C#, ASP.Net, .Net Core, Visual Studio, Entity Framework, Nuget, NUnit, WPF, Windows Forms, WCF, NANCYFX
NODE.JS bzw. TYPESCRIPT
JavaScript, TypeScript, NPM, Nest, Express, Mocha, Chai, axios, VS Code
FRONTEND
Vue.js, Vuex, Vuetifyjs, Nuxt.js, Angular, Bootstrap, Material, CSS, SASS, LESS, HTML
TESTING
Cypress, Playwright, Selenium, Puppeteer, Cucumber
DATENBANKEN
MS SQL Server, Oracle Database, MongoDB, Firebase, Influxdb, PostgreSQL
DEVOPS
Azure DevOps, TFS, GitLab, GitHub, Jenkins, Docker, Kubernetes, Helm, Argo CD, GitOps
CLOUD INFRASTRUKTUR
Microsoft Azure, AWS
OS
Windows, Mac, Linux(Ubuntu)
SONSTIGES
Kafka, Jira, ANTLR, Postman/Newman, OpenAPI, Power Point( ist mein Photoshop), UML, Power BI, Grafana, MQTT, RabbitMQ, Selenium, GraphQL, TensorFlow,js
DevOps
Meine Fähigkeiten im Bereichs DevOps umfassen den Aufbau von Build Pipelines und Multi-Stage Deployments unter Verwendung der entsprechenden Toolchain. Dazu gehört unter anderem Konfiguration eines Docker- bzw. eines Kubernetes-Setups, Konfiguration der Secrets, Unterstützung bei der Konzeption des Release- und Testmanagements, Implementierung verschiedener Quality Gates(Unit- und Integrationstests) und Konfiguration der Cloud Infrastruktur bzw. der managed services. GitOps Ansatz.
Requirement Engineering
Das Thema Anforderungsanalyse umfasst die Erstellung einer fachlichen bzw. technischen Spezifikation im Rahmen eines Dialogs mit den Domain Experten bzw. allen relevanten Stakeholdern. Ich erlebe es ständig, dass vor allem in den Großprojekten im Enterprise Umfeld dieser Bereich große Schwierigkeiten bereitet. Oft werden Fachlichkeit und Technik unnötigerweise miteinander vermischt.
Genau wie das Eisenerz aus dem Gestein, sollte die Fachlichkeit als Erstes, aus der gesamten Anforderung heraus extrahiert werden. Und wenn sie in ihrer reinsten Form vorliegt, dann kann man anschließend problemlos eine technische Lösung dafür erarbeiten. Dazu sollte man den gegebenen Kontext aus der Vogelperspektive betrachten und sich schrittweise in die einzelnen Unterbereiche hinein zoomen. Die am Ende entstehende Spezifikation sollte den Entwickler dazu befähigen mit weniger Rücksprachen zum Fachbereich seinen Job zu erledigen.
Genau an dieser Stelle kann ich helfen.
Technical Writing
Sowohl die Erstellung einer technischen Dokumentation, als auch der Aufbau einer Knowledge Base, die man am Ende gerne liest, gehört zu meinen Spezialitäten.
Ich erstelle gerne Konzepte und Präsentationen, visualisiere komplexe Prozessabläufe, um z.B. die entsprechende Zielgruppe von dem Vorhaben zu überzeugen.
Hier ist das Beispiel eines Dokumentationsportals:
http://visualknowledge.io
https://docs.openvalidation.io
Coaching
In vielen meiner Projekte übernehme ich die Rolle des Teamleads, des Lead-Developers oder des Softwarearchitekten. Dabei lege ich besonderen Wert auf den kontinuierlichen Wissensaustausch. Ehrlicherweise strebe ich keinesfalls danach, in Projekten als alleiniger Entscheidungsträger ohne Backup zu agieren. Aus diesem Grund, und weil ich generell der Ansicht bin, dass Einzelmonopole nicht mehr zeitgemäß sind, ist es mir ein Anliegen, mein Wissen zu teilen.
Besonders, wenn der Auftraggeber durch den Erwerb externer Dienstleistungen seine eigene IT-Mannschaft stärken möchte, halte ich es für entscheidend, dass der Know-how-Transfer einen wesentlichen Teil meiner erbrachten Leistung ausmacht. Unabhängig vom Zweck bin ich jemand, der gerne sein Wissen teilt.
Research & development
Die Technologie war für mich schon immer nur ein Mittel zum Zweck. Was wirklich spannend ist Das, was man mit ihr erschaffen kann.
Vor allem privat hab ich schon immer an irgendwelchen Ideen und Projekten rumgetüftelt. Aus vielen dieser Experimenten entstanden auch produktive Lösungen.
Aber auch das Erlernen einer neuen Technologie verbinde ich nach Möglichkeit mit der Entwicklung eines Prototypen. Das ist mein Weg sich weiter zu bilden.
Prototypen entwickeln, mit Technologien experimentieren und Dinge zu Bauen, die es vorher nicht gab ist meine wahre Leidenschaft.
An dieser Stelle helfe ich PoC's oder Showcases zu erstellen, um zum Beispiel einen kostengünstigen Smoke Test oder einen A/B Test durchzuführen, um diesen dann anschließend als eine Art Entscheidungsgrundlage zu verwenden.