Continuous Integration (CI) ist für viele moderne Softwareentwicklungsteams ein unverzichtbarer Bestandteil des Workflows. Es sorgt für kontinuierliches Testen, Validieren und Bereitstellen von Codeänderungen – doch oftmals kann der CI-Prozess zeitraubend und kostenintensiv sein. Solche Herausforderungen kennt auch das Entwicklungsteam von Datawrapper nur zu gut. In ihrem umfangreichen Monorepo, das zahlreiche Pakete und Workflows beinhaltet, erwiesen sich CI-Durchläufe als langwierig und teuer, insbesondere bei ihrem Hauptworkflow für die SvelteKit-Webanwendung, der bis zu 17 Minuten pro Ausführung benötigte und täglich bis zu 100 Mal gestartet wurde. Die Analyse und Optimierung dieser Prozesse führte zu beeindruckenden Ergebnissen: Die CI-Laufzeiten wurden um 80 % reduziert und die Kosten um fast die Hälfte gesenkt.
Diese Erfolgsgeschichte zeigt, wie durch gezielte technische Maßnahmen sowohl die Effizienz als auch die Wirtschaftlichkeit von CI erheblich verbessert werden können – und liefert wertvolle Erkenntnisse, die für viele Entwicklerteams relevant sind. Ein entscheidender Ansatzpunkt war die Umstellung des Paketmanagers von NPM auf PNPM. Während NPM bei einem Monorepo schnell dazu führt, dass Abhängigkeiten mehrfach in verschiedenen Packages installiert werden, verfolgt PNPM einen deutlich effizienteren Ansatz. PNPM nutzt einen globalen Speicher, in dem jede Abhängigkeit nur einmal heruntergeladen und gespeichert wird. Anschließend erstellt es symbolische Verknüpfungen in den jeweiligen Teilprojekten.
Das hat nicht nur Auswirkungen auf den Speicherbedarf, sondern auch auf die Geschwindigkeit der Installationsprozesse. Datawrapper konnte dadurch die Zeit für die Umgebungseinrichtung im CI um beeindruckende 74 % verkürzen. Ebenso entfiel durch PNPM die Notwendigkeit zahlreicher eigener Skripte, da das Tool eine eingebaute Filterfunktion besitzt, mit der Abhängigkeiten in der richtigen Reihenfolge gebaut werden können. Die Automatisierung und Vereinfachung des Aufbaus sorgte für weniger Fehlerquellen und einen geringeren Wartungsaufwand. Neben der Wahl des richtigen Paketmanagers spielte auch das Caching von Abhängigkeiten und vorgebauten Artefakten eine zentrale Rolle.
In traditionellen Setups werden bei jedem CI-Durchlauf die gleichen Module mehrfach installiert und gebaut, obwohl sich diese oft kaum ändern. Mit PNPM ist das gezielte Zwischenspeichern des globalen Speichers und von Build-Ergebnissen sehr viel einfacher möglich. Indem der Pfad zum PNPM-Store ermittelt und dieser über den Caching-Mechanismus von GitHub Actions gesichert wird, können nachfolgende Jobs oder Builds dieselben Ressourcen nutzen und Zeit sparen. Zusätzlich werden gemeinsam genutzte Libraries kontinuierlich gebaut und deren Ergebnisse nur dann aktualisiert, wenn sich deren Quellcode oder die Abhängigkeitsdatei geändert haben. Diese ausgeklügelte Strategie reduzierte die Setup-Zeit in der Testumgebung nochmals drastisch und führte zu einem fast neunfach schnelleren Setup als zuvor.
Eine weitere Maßnahme war die Aufteilung der CI-Workflows in parallele Jobs. Ursprünglich liefen die einzelnen Schritte des Workflows sequentiell ab, was die Gesamtzeit erheblich verlängerte. Nachdem das Setup durch schnellere Paketinstallation und Caching deutlich effizienter wurde, konnte man die einzelnen Schritte parallel ausführen. Das führte zu einer signifikanten Reduktion der realen Wartezeit für Entwicklerinnen und Entwickler, denn der gesamte Workflow war schneller durchlaufen. Obgleich sich dadurch die Laufzeit verkürzte, entstanden im Cloud-Billing höhere Kosten, da mehrere Jobs gleichzeitig Ressourcen beanspruchten.
Es zeigte sich also ein Trade-off zwischen Geschwindigkeit und Ausgaben, der mit weiteren Maßnahmen adressiert werden musste. Die Kostenfrage führte zur Einführung eines alternativen CI-Runners namens Blacksmith. Dieser Anbieter verspricht nicht nur geringere Preise, sondern ebenfalls eine höhere Ausführungsgeschwindigkeit im Vergleich zu den standardmäßigen GitHub Actions Runnern. Nach dem Wechsel zu Blacksmith konnten die Jobs im Schnitt um über 20 % schneller ausgeführt werden, während die monatlichen Ausgaben um 45 % sanken. Die Migration erwies sich als unkompliziert: Es genügte, die Runner-Typen sowie die Cache-Aktionen in den Workflows auszutauschen und in wenigen Schritten auf Blacksmiths Infrastruktur umzusteigen.
Ein nützliches Migrations-Tool unterstützte dabei, auch wenn einige Composite Actions manuell angepasst werden mussten. Das Ergebnis war jedoch eindeutig: Ein schnelleres System zu niedrigeren Kosten sorgte für eine spürbare Verbesserung der Entwicklererfahrung und der betrieblichen Effizienz. Zusammengenommen ergaben diese vier Maßnahmen – Umstieg auf PNPM, Caching von Abhängigkeiten und Builds, parallele Workflows und der Wechsel zum neuen Runner – eine beeindruckende Leistungssteigerung. Die Continuous Integration von Datawrapper läuft jetzt rund 80 % schneller als zuvor und kostet 45 % weniger. Das bedeutet weniger Zeitverschwendung beim Warten auf Test- und Build-Ergebnisse und mehr Zeit für echte Entwicklungsarbeit.
Gerade für Unternehmen mit umfangreichen Mono-Repos und häufigen CI-Ausführungen kann dieses Optimierungspotenzial nachhaltig die Produktivität erhöhen und die Infrastrukturkosten senken. Neben den technischen Aspekten steht auch das Entwicklerteam selbst im Fokus dieser Veränderungen. Die Optimierung von CI-Prozessen setzt nicht nur Know-how in DevOps und Build-Systemen voraus, sondern profitiert von einer kollaborativen Kultur, in der Erfahrungen geteilt und Veränderungen gemeinsam angestoßen werden. Datawrapper betont die Zusammenarbeit im Team und die Offenheit für neue Tools und Herangehensweisen als entscheidende Faktoren für ihren Erfolg. Es zeigt sich, dass kontinuierliche Verbesserung nicht nur eine technische Herausforderung ist, sondern auch eine Frage der Teamdynamik und der Bereitschaft zur Anpassung.
Darüber hinaus haben die beschriebenen Schritte auch Nebeneffekte wie eine Vereinfachung der Codebasis und der Skripte mit sich gebracht. Die Aufgaben automatischer Paketverwaltung, die früher durch komplexe maßgeschneiderte Skripte erledigt wurden, übernimmt PNPM zuverlässig und effizient. Die Nutzung nativer Funktionen eines modernen Paketmanagers spart Zeit nicht nur im CI, sondern auch bei der lokalen Entwicklung und beim Onboarding neuer Teammitglieder. Insgesamt führt das zu einer besseren Wartbarkeit und Skalierbarkeit des Projekts. Trotz aller Verbesserungen bleibt bei Datawrapper die Analyse und Optimierung der Linting-Schritte noch eine offene Herausforderung.
Linting, also das statische Code-Checking, ist inzwischen der zeitintensivste Schritt im Workflow, insbesondere bei großen TypeScript-Monorepos. Hier bestehen noch Potenziale zur Beschleunigung durch spezialisierte Tools oder angepasste Konfigurationen, die jedoch sorgfältig evaluiert werden müssen, um Qualitätsverluste zu vermeiden. Dieser Punkt illustriert zudem, dass CI-Optimierung ein fortlaufender Prozess ist, bei dem immer neue Engpässe identifiziert und adressiert werden. Für viele Teams, die mit langsamen und kostspieligen CI-Prozessen kämpfen, liefert die Datawrapper-Erfahrung wichtige Erkenntnisse. Die Wahl des richtigen Paketmanagers ist eine fundamentale Entscheidung, die sich stark auf die Performance auswirkt.
Intelligentes Caching vermeidet unnötige Wiederholungen und beschleunigt Abläufe. Parallelisierung kann zwar die Gesamtlaufzeit verkürzen, erfordert aber die Balance zwischen Kosten und Geschwindigkeit. Und schließlich lohnt sich die Prüfung alternativer CI-Infrastrukturen, die sowohl preisbewusst als auch leistungsfähig sind. Ein solches Gesamtpaket trägt maßgeblich dazu bei, dass Entwicklerinnen und Entwickler motiviert bleiben und ihre Ergebnisse schnell liefern können. Abschließend ist festzuhalten, dass der Erfolg bei der Optimierung von Continuous Integration nicht einfach über Nacht entsteht.
Er erfordert systematische Analyse, Mut zu Veränderungen und die Bereitschaft, neue Werkzeuge und Konzepte einzusetzen. Datawrapper hat mit seinem holistischen Ansatz gezeigt, wie zeit- und kosteneffiziente CI-Pipelines aussehen können. Ihre Geschichte kann als Inspiration für Entwicklerteams aller Größenordnung dienen, die ihre Continuous Integration auf die nächste Stufe heben möchten. Denn in einer Welt, in der Softwareentwicklung immer schneller und komplexer wird, sind optimierte Prozesse ein entscheidender Wettbewerbsvorteil.