15. Sep 2025
Agentic Coding in Aktion: Microservices mithilfe von KI von JavaScript nach Kotlin/Spring Boot migrieren

Projektziele & Anforderungen
Das Projektziel war es, den Migrationsprozess so weit wie möglich an die KI abzugeben und nur dort einzugreifen, wo menschliches Urteilsvermögen gefragt ist. Konkret sollten die JavaScript-Services automatisiert in schlanke Kotlin‑Spring-Boot‑Microservices überführt werden, die per Docker-Container laufen.
Neben dem reinen Funktionsumfang legten wir großen Wert auf Wartbarkeit, eine klar strukturierte Architektur, Unit-Tests für alle zentralen Funktionen und eine flexible Konfiguration über externe Dateien.
Migrationsprozess im Detail
Projektkontext
Grundlage des Projekts war das Backend einer Anwendung, die verschiedene Schnittstellen für kommunale Daten bereitstellt wie beispielsweise Wetterdaten, Abfuhrkalender und ÖPNV-Informationen. Es basiert auf Node.js und dem Parse Server Framework. Die Services kommunizieren mit externen APIs (z. B. OpenWeather) und persistieren die Daten über Parse Server.
Als Proof‑of‑Concept migrierten wir zunächst den einfachen Weather Service; komplexere Schnittstellen sollten folgen.
Um verschiedene KI‑Agenten zu vergleichen, entschieden wir uns, zwei parallele Migrationspfade zu testen: einmal mit Cursor AI, einmal mit dem GitHub Copilot Agent. Für Letzteren standen uns Unternehmenslizenzen von Accso zur Verfügung.
Migration mit Github Copilot
Mit GitHub Copilot starteten wir eine initiale Prompt-Session, in der der Agent die Codebasis analysierte, relevante JavaScript-Dateien extrahierte und ein neues Kotlin‑Spring-Boot‑Projekt anlegte. Im nächsten Schritt haben wir den Agenten schrittweise angeleitet und alle wichtigen Komponenten – von Datenmodell und Controllern über die OpenWeatherMap-Integration bis hin zum Scheduling – zu erzeugen. Zwischendurch forderten wir Feedback zu Architektur, Codequalität und Testabdeckung an und ließen uns schließlich beim Aufräumen des alten JavaScript-Codes im Parse Server sowie bei der Konfiguration der neuen REST-Endpunkte unterstützen.
Eingesetzte Prompts (Auszug)
Initiale Zielsetzung & Code-Extraktion
„My goal is to migrate the Weather Service from my Node.js Parse Server backend into a new Kotlin‑Spring Boot microservice that communicates via REST with the Parse Server. Please identify and extract all relevant JavaScript code for this service.“
Komponenten‑Migration
„Migrate the following points from JavaScript to Kotlin/Spring Boot:
- Data model and entity structure
- API endpoints and controllers
- OpenWeatherMap integration
- Scheduling and job management
Keep the search integration in the Parse Server and use its REST API for data persistence.“
Qualitäts‑Check
„Bitte gib Feedback zur Architektur, Codequalität und Testabdeckung dieses Services.“
„Überprüfe, ob alle notwendigen Funktionen zum Abruf von Wetterdaten und Speichern im Parse Server korrekt implementiert wurden. Gibt es funktionale Unterschiede?“
Parse‑Server Cleanup
„Ich habe den Weather Service erfolgreich in einen Spring Boot‑Microservice migriert. Bitte schlage eine Strategie vor, um die alten JavaScript-Funktionen aus dem Parse Server zu entfernen und die neuen REST-Endpunkte korrekt zu konfigurieren.
Migration mit Cursor AI
Bei der Migration mit Cursor AI verfolgten wir einen leicht abgewandelten Ansatz: Zunächst checkten wir den Node.js-Quellcode aus und legten anschließend alle verfügbaren Spezifikationsdateien in einen requirements-Ordner. Anschließend wiesen wir Cursor an, die Migration Schritt für Schritt durchzuführen. Zunächst wurden Kotlin‑Klassenschemata generiert, dann wurde die Funktionalität nach Kotlin übersetzt und anschließend automatisch passende Unit‑Tests erstellt. Dieser konsequent testgetriebene Workflow stellte sicher, dass jede Portierung sofort validiert wurde, wodurch sich die Zuverlässigkeit und Transparenz des Gesamtprozesses erhöhten.
Copilot vs. Cursor: Ein Vergleich
Beide Tools lieferten gute Ergebnisse bei der Analyse, Transformation und Dokumentation des Codes. Besonders bei Standardaufgaben wie dem Aufsetzen einer Spring-Boot Anwendung, der Integration von JUnit-Tests oder der Dockerisierung konnte die KI nahezu autonom arbeiten.
Kriterium | Cursor AI | GitHub Copilot Agent |
IDE‑Integration | Eigenständige Cursor IDE, optimiert für LLC‑Workflows und Spezifikations‑Management | Nahtlose Einbindung in VS Code/GitHub Codespaces |
Lernkurve | Eigene IDE erfordert Eingewöhnung | Bekanntes VS Code‑Interface, mit Chat-Interface |
Kosten & Lizenzen | Kostenlos bis 150 Anfragen/Monat, danach kostenpflichtige Pläne | Unternehmenslizenz vorhanden |
Erkenntnisse & Best Practices
Was funktioniert gut
- KI-gestützter Projekt-Setup:
Die initiale Einrichtung einer Entwicklungsumgebung, inklusive Dockerisierung und Anwendungsrahmen im bevorzugten Framework (z. B. Spring Boot), funktioniert mit KI-Unterstützung zuverlässig und weitgehend autonom. - Iterative Assistenz:
Bei vielen Entwicklungsaufgaben, insbesondere Standardfällen, können LLMs wie Copilot oder Cursor effektiv unterstützen, wenn sie schrittweise und gezielt eingesetzt werden. - Entkopplung von Technologie-Details:
Entwickler:innen müssen nicht jede Zeile Kotlin oder Spring Boot im Detail beherrschen. Entscheidend ist ein solides Verständnis für saubere Softwarearchitektur und Qualitätsprinzipien. - Code Translation:
Beide Tools sind in der Lage, Code zwischen Programmiersprachen zu übersetzen. Bei korrekter Anleitung erfolgt dies in der Regel funktionserhaltend. So lassen sich beispielsweise JavaScript-Services automatisiert in Kotlin überführen. - Dokumentationserstellung:
Ob technische API-Dokumentation oder erklärende Kommentare: Moderne KI-Werkzeuge erstellen eine strukturierte und verständliche Dokumentation für neue oder bestehende Projekte. - Schnelle Einarbeitung:
Der interaktive Umgang mit LLMs (z. B. durch gezielte Fragen in Copilot oder Cursor) ermöglicht eine deutlich schneller Einarbeitung in neue Codebasen, insbesondere bei unbekannten Technologien oder Architekturen.
Was problematisch sein kann
- Fehlende Kontextkontrolle:
Bei komplexen Prompts generieren Tools auch unnötige Dateien. - Loop-Effekte & chaotisches Verhalten:
Manchmal führt die Behebung eines Problems durch den Agenten zu einem neuen Problem, das wiederum das ursprüngliche Problem zurückbringt, ein klassischer Loop. Hier kann es helfen, eine externe Sicht (z. B. über ChatGPT ohne IDE) einzunehmen. - Verständnisverlust durch Automatisierung:
Da Agents oft eigenständig Code generieren, modifizieren und testen, besteht die Gefahr, dass Entwickler:innen den Überblick verlieren, insbesondere bei sicherheitsrelevanten oder komplexen Komponenten. - Kritische Schnittstellen erfordern Fachkenntnisse
In sicherheitsrelevanten Bereichen ist ein tiefes Verständnis der eingesetzten Technologie zwingend erforderlich, denn am Ende trägt der Mensch die Verantwortung für den produzierten Code. - Fehlende Reproduzierbarkeit
Selbst bei identischen Prompts kann ein LLM unterschiedliche Ergebnisse liefern.
Best Practices für KI-gestützte Migrationen
- Klare Spezifikation anlegen
Vor dem ersten Prompt sollte eine schriftliche Zieldefinition vorliegen: verwendete Sprache, Framework, relevante Bibliotheken, Integrationsgrenzen etc. Je konkreter das Zielbild, desto besser das Ergebnis. - In Teilschritte zerlegen
Komplexe Aufgaben lassen sich selten mit einem einzigen Prompt lösen. Stattdessen ist eine iterative Planung, logische Teilaufgaben, gezielte Feedback-Loops mit der KI sinnvoll - Technologie bewusst einsetzen
LLMs sind Werkzeuge und kein Ersatz für Architektur-Know-how. Entwickler:innen sollten stets kritisch prüfen, was erzeugt wird, und bei sensiblen Komponenten selbst Verantwortung übernehmen.
Fazit
Die Migration von Node.js zu Kotlin Spring Boot ist mit Unterstützung durch moderne KI-Werkzeuge wie GitHub Copilot Agent und Cursor AI heute wesentlich effizienter möglich als noch vor wenigen Jahren. Diese ermöglichen die teilweise oder vollautomatische Umsetzung einzelner Services, von Datenmodellen über Schnittstellen bis hin zur Testabdeckung.
Unsere Erfahrungen zeigen jedoch klar: KI ist ein mächtiger Helfer, aber kein Ersatz für fundiertes Architekturverständnis, sauberes Engineering und kritisches Qualitätsbewusstsein. Ein überzeugendes Ergebnis entsteht nur durch das Zusammenspiel aus klaren Zielen, menschlichen Überprüfungen und gezieltem KI-Einsatz
KI ist kein Selbstzweck, sondern ein Werkzeug. Je klarer das Ziel, desto nützlicher der Assistent.