Groovy 4 oder Kotlin: Warum der Sprachwechsel beim Upgrade weniger kostet als gedacht
Zurück zu Blogs
Development

Groovy 4 oder Kotlin: Warum der Sprachwechsel beim Upgrade weniger kostet als gedacht

Ein Plattform-Upgrade zwingt dazu, alten Groovy-Code anzufassen. Wann sich dabei der Umstieg auf Kotlin lohnt, zeigt ein Beispiel aus einem laufenden Projekt.

SW
Sascha Wechsler
30. Oktober 2026

Ein B2B-Portal läuft seit 2017 produktiv und ist über die Jahre organisch gewachsen: Bestellprozess, Freigabeablauf, Verwaltungswerkzeuge, zeitgesteuerte Abläufe, dazu Anbindungen an Verzeichnisdienst, Dateispeicher und Mailversand. Gebaut ist es auf einem Java-basierten CMS, das weniger ein Redaktionssystem als ein Anwendungsbaukasten ist: Groovy ist darin die eingebaute Skriptsprache, Erweiterungen laufen als Plugins. Der Code besteht aus rund 33'000 Zeilen Groovy in gut 240 Dateien und etwa 29'000 Zeilen Seitenvorlagen mit plattformeigenen Bausteinen. Daneben gibt es bereits einen modernen Teil: sechs Plugins in Kotlin mit rund 30'000 Zeilen und ein Frontend in Vue und TypeScript. Alter und neuer Stand halten sich ungefähr die Waage. Nun steht das nächste Upgrade der Plattform an, und mit ihm eine Frage, die sich nicht vermeiden lässt: Hebt man den Groovy-Code auf Groovy 4 an, oder schreibt man ihn bei dieser Gelegenheit in Kotlin neu?

Ein Plugin pro Funktionsbereich

Ab der nächsten Versionsstufe springt die Plattform von Java 8 auf Java 17 beziehungsweise 21 und von Groovy 2.4 auf Groovy 4. Später kommt der Wechsel von javax auf jakarta dazu. Der alte Code muss also ohnehin angefasst werden, egal wie man sich entscheidet. Damit lautet die Frage nicht «Kotlin oder nichts», sondern: anheben oder neu schreiben.
Für Groovy sprechen echte Gründe. Der Aufwand ist zunächst geringer, weil die Struktur des Codes bleibt und die Fachlogik angepasst statt neu aufgebaut wird. Groovy ist ausserdem die eingebaute Skriptsprache der Plattform, Aktionen und Vorlagen funktionieren damit ohne Umweg, und man kommt schneller zu einem ersten lauffähigen Stand. Für ein System, das in zwei Jahren abgelöst wird oder kaum noch Änderungen braucht, sind das gute Gründe.

So rechnet sich der Mehraufwand

Pro Funktion lassen sich fünf Bestandteile schätzen: die Analyse (was gehört dazu, worauf baut sie auf, wer nutzt sie), die Umsetzung, der Test, die Abnahme beim Kunden und Zuschläge für Projektkoordination und Reserve. Ein Durchlauf aus Prüfung und Korrektur bei der Abnahme dauert rund zwei Wochen.
Der Mehraufwand für Kotlin entsteht fast ausschliesslich bei der Umsetzung. Analyse, Test und Abnahme fallen auf beiden Wegen an. Einarbeitung ist kein nennenswerter Posten, weil Kotlin im selben System bereits in sechs Plugins läuft. Auch beim Tooling gibt es kaum Unterschiede, denn die Plugins müssen auf beiden Wegen gegen die neue Plattformversion neu gebaut werden.
Beim ersten Vorkonzept lag der geschätzte Mehraufwand für Kotlin deutlich höher als heute. Damals war der Groovy-Weg noch nicht genau bekannt. Die Bestandsaufnahme im Code und in der Datenbank hat gezeigt, dass er mehr Arbeit verlangt als angenommen. Für die tragenden Teile gibt es keine automatisierten Tests, die müssen auf beiden Wegen erst entstehen. Die Pflichtarbeiten des Herstellers fallen ebenfalls auf beiden Wegen an: Groovy 4, neuer Namensraum, Umstellung der Dateien auf UTF-8, neuer Texteditor, neuer Suchindex.
Dazu kommt, dass Groovy viele Fehler erst zur Laufzeit meldet. Nach dem Sprung auf Groovy 4 muss deshalb jede Funktion vollständig geprüft werden, nicht nur die geänderten. Die Bestandsaufnahme hat ausserdem Schwächen im alten Code aufgedeckt, etwa Fehler, die stillschweigend passieren, ohne dass jemand eine Meldung erhält. Auch die müssen auf beiden Wegen behoben werden. Gleichzeitig ist der Teil, der überhaupt neu geschrieben werden muss, kleiner geworden: Mehrere alte Funktionen werden nachweislich nicht mehr genutzt und entfallen, andere sind bereits in Kotlin umgesetzt.

Sascha, Softwareentwickler und technischer Lead bei Batix:«Der Mehraufwand pro Zeile Kotlin ist nicht kleiner geworden. Kleiner wird sein Anteil am Ganzen, weil der Sockel, den beide Wege gleich viel kostet, deutlich gewachsen ist.»

Direkt umsteigen statt Zwischenschritt

Ein Zwischenschritt auf die nächste Version der heutigen Linie hätte einen eigenen Testzyklus beim Kunden gekostet. Er hätte ausserdem auf eine Version geführt, die selbst keine Updates mehr erhält. Der eigentliche Umbruch mit neuer Java-Version, Groovy 4 und dem Wechsel auf Docker kommt danach ohnehin. Was ein Zwischenschritt gebracht hätte, etwa ein Prüfwerkzeug für den Namensraum oder einen Vorabtest mit Groovy 4, lässt sich genauso auf der neuen Umgebung erreichen.
Deshalb wird das Zielsystem auf einem neuen Server parallel aufgebaut, Funktion für Funktion und mit Prüfung nach jedem Schritt. Die Produktion läuft unterdessen unverändert weiter, umgeschaltet wird erst nach der Abnahme.
Das Vorgehen hat einen Preis, und der gehört dazu. Die Produktion bleibt länger auf dem alten Stand und hat bis zur Umschaltung dessen bekannte Schwächen. Dem begegnet man mit gezielten Sofortmassnahmen, statt den Altbestand einmal zwischendurch anzuheben. Am Ende steht eine grosse Umschaltung, die sich mit einer Generalprobe und einer Rückfallbereitschaft entschärfen lässt: Die alte Umgebung bleibt lauffähig, bis auf der neuen alle Abläufe einmal erfolgreich gelaufen sind und der Kunde abgenommen hat. Und zwei Umgebungen kosten doppelt, allerdings nur bis zur Umschaltung.

Fünf Kriterien für die Entscheidung

Aus dem Beispiel lassen sich fünf Fragen ableiten, die ein Entscheider vor der Wahl klären sollte.
Erstens: Muss der Code ohnehin angefasst werden? Steht ein Plattformwechsel an, schrumpft der Unterschied zwischen Anheben und Neuschreiben deutlich.
Zweitens: Gibt es Tests? Ohne Testnetz ist es ein grosser Vorteil, wenn der Compiler Fehler findet, bevor sie im Betrieb auftauchen.
Drittens: Wie lange lebt das System noch, und wie oft wird es geändert? Der Mehraufwand fällt einmal an, der Nutzen bei jedem Change Request erneut, weil Änderungen im neuen Code schneller und sicherer umzusetzen sind.
Viertens: Wohin entwickelt sich die Plattform? Der Hersteller der Plattform empfiehlt Kotlin für Plugins und kündigt an, alte Bausteine in der nächsten Hauptversion zu entfernen. Wer auf Groovy bleibt, riskiert einen zweiten Umbau.
Fünftens: Wo liegt das Wissen? Gewachsener Groovy-Code mit plattformeigenen Bausteinen ist Spezialwissen weniger Personen, Kotlin ist verbreitet.

Sascha zur Gewichtung:«Wenn der Code ohnehin angefasst werden muss und das System noch Jahre weiterentwickelt wird, ist Kotlin die bessere Wahl. Das Anheben auf Groovy ist sinnvoll, wenn ein System absehbar abgelöst wird oder kaum noch Änderungen braucht. Dann zählt der geringere Startaufwand mehr als die langfristige Wartbarkeit.»

Fazit

Wer vor einem Plattformsprung steht, sollte zuerst klären, was ohnehin angefasst werden muss, und erst danach über die Sprache entscheiden. Der Unterschied zwischen den Wegen ist dann oft kleiner als der Sockel, den beide gemeinsam haben, und dieser Sockel lässt sich mit einer ehrlichen Bestandsaufnahme beziffern, bevor die Entscheidung fällt.

Der Sockel aus Analyse, Test, Abnahme und Pflichtarbeiten fällt auf beiden Wegen an, nur die Umsetzung kostet in Kotlin mehr (schematisch)
Der Sockel aus Analyse, Test, Abnahme und Pflichtarbeiten fällt auf beiden Wegen an, nur die Umsetzung kostet in Kotlin mehr (schematisch)

Häufig gestellte Fragen

Muss man beim Plattform-Upgrade von Groovy auf Kotlin wechseln? +

Nein. Das Upgrade erzwingt den Sprung auf eine neue Java- und Groovy-Version, nicht den Wechsel der Sprache. Der alte Code muss in jedem Fall angefasst werden, ob er danach in Groovy 4 oder in Kotlin vorliegt, ist eine Entscheidung.

Wann ist es sinnvoll, bei Groovy zu bleiben? +

Wenn ein System absehbar abgelöst wird oder kaum noch Änderungen braucht. Dann zählt der geringere Startaufwand mehr als die langfristige Wartbarkeit.

Warum fällt der Mehraufwand für Kotlin kleiner aus als zuerst gedacht? +

Weil der Sockel aus Analyse, Test, Abnahme und Pflichtarbeiten auf beiden Wegen anfällt und grösser ist als angenommen. Der Mehraufwand pro Zeile Kotlin bleibt gleich, sein Anteil am Ganzen sinkt.

Braucht es einen Zwischenschritt auf eine Zwischenversion der Plattform? +

Im Beispiel nicht. Ein Zwischenschritt hätte einen eigenen Testzyklus beim Kunden gekostet und auf eine Version geführt, die keine Updates mehr erhält. Ob das bei einem anderen System gleich gilt, hängt vom Einzelfall ab.

Wie lässt sich das Risiko einer grossen Umschaltung senken? +

Mit einer Generalprobe und einer Rückfallbereitschaft. Die alte Umgebung bleibt lauffähig, bis auf der neuen alle Abläufe einmal erfolgreich gelaufen sind und die Abnahme erfolgt ist.

Kontakt

Wer ein bestehendes System auf eine neue Plattformversion heben will und abwägt, ob Groovy-Code angehoben oder neu geschrieben werden soll, findet in der individuellen Softwareentwicklung der Batix den passenden Ansprechpartner.

Kontakt aufnehmen