Das richtige Web Framework wählen: warum ich Next.js und Ruby on Rails nutze, und wann die anderen besser passen

Kurz gesagt

Niveau: Fortgeschritten

  • Ich nutze Next.js für die Seiten, die Menschen lesen, und Ruby on Rails, bei Shops mit Solidus, für die Anwendung und ihre Geschäftsregeln.
  • Next.js rendert standardmäßig auf dem Server, mischt vorgerenderte, neu erzeugte und aktuelle Teile auf einer Seite und läuft auf jedem Node.js Server.
  • Rails 8 lässt Jobs, Cache und WebSockets auf deiner eigenen Datenbank laufen und deployt mit Kamal.
  • Laravel, Django, Express, NestJS und WordPress sind jeweils für manche Teams die richtige Antwort. Oft entscheidet das Team, das du schon hast.
  • Jede Option braucht innerhalb von etwa 18 Monaten ein Upgrade. Rechne Gesamtkosten über fünf Jahre und Supportkalender durch, bevor du wählst.

Das Framework, auf dem du baust, entscheidet, wie schnell du startest, wer das Ergebnis pflegen kann und was es kostet, es aktuell zu halten. Ich erkläre, warum ich auf Next.js und Ruby on Rails baue, beschreibe Laravel, Django, Express, NestJS und WordPress fair nach ihrer eigenen Dokumentation und gehe mit einer erfundenen Münchner Kaffeerösterei die Wahl durch, jeden Euro offen gerechnet.

Die kurze Antwort: das Framework folgt der Aufgabe

Ich arbeite vor allem mit zwei Frameworks. Mit Next.js für die Seiten, die Menschen lesen und durchklicken, und mit Ruby on Rails für die Anwendung dahinter, in der die Geschäftsregeln stecken. Bei Shops baut diese Rails Anwendung auf Solidus auf, einer Open Source eCommerce Engine für Rails.

Ich nutze die beiden nicht, weil sie gerade in Mode sind. Ich nutze sie, weil ich damit schnell vorankomme, sicher bleibe und gleichzeitig ein flexibles Frontend und ein robustes Backend bekomme. Das ist meine Wahl für meine Arbeit. Ein Naturgesetz ist es nicht, und gute Teams bauen jeden Tag gute Produkte mit Laravel, Django, Express, NestJS und WordPress.

Deshalb erkläre ich hier, was jedes dieser Frameworks ist, vergleiche sie an den Stellen, an denen ein Unternehmen Geld verliert oder spart (Passung, Menschen, Supportzeiträume, Lizenz), und gehe mit einem erfundenen Münchner Unternehmen eine Entscheidung Schritt für Schritt durch. Die technischen Fakten stammen aus der offiziellen Dokumentation, abgerufen am 8. November 2026. Die Unternehmen und Zahlen in den Beispielen sind erfunden.

Was ein Web Framework eigentlich macht

Ein Web Framework ist ein fertiges Gerüst für eine Webanwendung. Wenn ein Browser eine Seite anfragt, muss etwas den Code finden, der zu dieser Adresse gehört (Routing), die Daten holen, die Regeln anwenden und das Ergebnis in HTML verwandeln. Ein Framework erledigt die wiederkehrenden Teile jedes Mal gleich, damit die Entwicklerin oder der Entwickler nur das schreibt, was dein Geschäft besonders macht.

Frameworks unterscheiden sich darin, wie viel sie dir abnehmen. Rails beschreibt sich selbst als meinungsstark: Es "has opinions about the best way to do many things in a web application" und zieht Konventionen den Konfigurationsdateien vor.1 Express steht am anderen Ende und nennt sich "fast, unopinionated, minimalist".2 Keins davon ist an sich besser. Ein meinungsstarkes Framework gibt dir einen ausgetretenen Pfad. Ein minimales gibt dir Freiheit, und mit ihr jede einzelne Entscheidung.

Beispiel: eine Bestellseite, Schritt für Schritt

Ein Beispiel: Eine Kundin eines Hamburger Blumenladens öffnet https://blumenundzweige.example/orders/481. Dabei passieren fünf Dinge.

  1. Der Router liest die Adresse und findet den Code, der eine Bestellung anzeigt, mit 481 als Bestellnummer.
  2. Dieser Code fragt die Datenbank nach Bestellung 481.
  3. Eine Regel prüft, ob die anfragende Person auch die Kundin ist, die bestellt hat.
  4. Ein Template macht aus der Bestellung HTML: den Strauß, den Liefertermin, den Preis.
  5. Der Server schickt die Seite zurück.

In einem meinungsstarken Framework folgen die Schritte eins, zwei und vier Konventionen, also schreibt man hauptsächlich Schritt drei. In einem minimalen sucht man sich zuerst einen Router, eine Datenbankbibliothek und eine Template Engine aus.

Next.js: React auf dem Server, für die Seiten, die Menschen lesen

Next.js ist ein Framework auf Basis von React, der JavaScript Bibliothek für Benutzeroberflächen. Sein App Router ist der Standard für neue Projekte.3

Die wichtigste Idee ist die Server Component. Im App Router sind Layouts und Seiten standardmäßig Server Components. Sie holen die Daten und rendern auf dem Server und schicken fertiges HTML an den Browser.4 React definiert Server Components als Komponenten, die vorab rendern, entweder einmal beim Build oder bei jeder Anfrage.5 Nur die Teile, die im Browser interaktiv sein müssen, etwa ein Button mit Zustand, werden zu Client Components und tragen "use client" am Anfang der Datei.4 So landet weniger JavaScript auf dem Handy deiner Besucher.

Wann wird eine Seite gerendert? Next.js kennt drei Antworten, und eine Seite darf sie mischen.

  • Beim Build vorgerendert. Die Seite entsteht einmal und wird als Datei ausgeliefert, der schnellste Fall überhaupt.
  • Im Hintergrund neu erzeugt. Incremental Static Regeneration (ISR) liefert eine vorgerenderte Seite aus und baut sie nach einer festgelegten Zeit oder auf Anforderung neu, sodass sich Inhalte ändern, ohne dass die ganze Website neu gebaut wird.6
  • Bei jeder Anfrage gerendert, für alles, was von der Besucherin abhängt, etwa von einem Cookie.

Mit eingeschalteten Cache Components, die neue Apps mit den empfohlenen Standardeinstellungen bereits haben, baut Next.js für jede Route eine statische Hülle und streamt die Teile, die frisch sein müssen, zur Anfragezeit hinein. Die Dokumentation nennt das Partial Prerendering.7 Die Direktive use cache markiert Daten oder Komponenten zum Cachen, mit einer Lebensdauer, die cacheLife festlegt.7

Vercel, das Unternehmen hinter Next.js, brauchst du dafür nicht. Next.js läuft als Node.js Server, in Docker oder als statischer Export, und Cache Components und ISR funktionieren auch selbst gehostet, ISR allerdings nicht beim statischen Export.68

Warum ich es nutze: für alles, was Kundinnen und Kunden sehen und wo Tempo, Reaktionsfähigkeit und Feinschliff zählen. Zusammen mit einem robusten Backend, etwa Rails oder einer Headless eCommerce Engine, deckt es den Teil des Produkts ab, den die Kundschaft tatsächlich zu Gesicht bekommt.

Beispiel: eine Studiowebsite mit drei Arten von Seiten

Ein Beispiel: Alster Pilates ist ein erfundenes Studio in Hamburg. Seine Website unter alsterpilates.example hat drei Arten von Seiten.

Startseite und Über uns ändern sich zweimal im Jahr. Sie werden beim Build vorgerendert, jede Besucherin bekommt dieselbe Datei.

Der Kursplan ändert sich im Laufe des Tages. Angenommen, 2.000 Menschen am Tag öffnen ihn. Für jede einzeln frisch gerendert, sind das 2.000 Renderings. Mit einer Lebensdauer von einer Stunde gecacht, wird er höchstens 24 Mal am Tag gerendert:

v=VR=2.00024≈83v = \frac{V}{R} = \frac{2.000}{24} \approx 83

Dabei ist vv die Zahl der Besucher, die sich ein Rendering teilen, VV die Zahl der Besucher pro Tag und RR die höchste Zahl an Renderings pro Tag, die eine Lebensdauer von einer Stunde zulässt. Grundlagen: Verhältnisse und Raten

// app/timetable/page.tsx
import { cacheLife } from 'next/cache'

export default async function Timetable() {
  'use cache'
  cacheLife('hours')
  const classes = await fetch('https://api.alsterpilates.example/classes').then((r) => r.json())
  return <ClassList classes={classes} />
}

Die Begrüßung für Mitglieder ("Willkommen zurück, Jo") liest ein Cookie und lässt sich deshalb nicht teilen. Sie sitzt in einer Suspense Grenze und wird zur Anfragezeit hineingestreamt, während der Rest der Seite aus der statischen Hülle kommt.7

Ruby on Rails: eine Anwendung, die die Geschäftsregeln hält

Rails ist ein Full Stack Framework für Ruby, gebaut um zwei Ideen, die es selbst nennt: Don't Repeat Yourself und Convention Over Configuration.1 Eine einzige Anwendung enthält die Modelle, die Regeln, die Hintergrundarbeit, die Mails und die Adminoberflächen, und zwar in jedem Rails Projekt gleich angeordnet.

Rails 8, erschienen im November 2024, hat dafür gesorgt, dass diese eine Anwendung weniger fremde Dienste braucht.9 Die Ankündigung zählt die neuen Standards auf:

  • Solid Queue führt Hintergrundjobs auf der Datenbank aus, die du ohnehin hast. Weder Redis noch ein eigenes Jobframework sind nötig.9
  • Solid Cache legt gecachte Seitenfragmente auf der Festplatte ab statt in Redis oder Memcached.9
  • Solid Cable leitet WebSocket Nachrichten über die Datenbank.9
  • Kamal 2 ist fertig eingerichtet, um auf einen Cloud Server oder eigene Hardware zu deployen, mit Thruster vor dem Applikationsserver, sodass kein Nginx nötig ist.9 Kamal deployt jede App, die in einem Container läuft, nicht nur Rails.10
  • Ein Generator für die Authentifizierung legt die Grundmodelle für Nutzer und Sitzungen an.9

Die aktuelle Versionslinie ist 8.1.11

Darauf sitzt Solidus. Seine Guides beschreiben es als freie Open Source eCommerce Plattform auf Basis von Ruby on Rails, gebaut als Rails Engine.12 Eine Engine steckt man in die eigene Anwendung, also teilen sich Katalog, Warenkorb, Checkout und Bestellungen eine Codebasis mit deinen eigenen Regeln. Mehr dazu in Headless Solidus.

Warum ich es nutze: Damit liefere ich robuste Systeme schnell. In Wachstumsprojekten zählt, wie schnell etwas Wert bringt, mehr als jeder Trend. In Rails lege ich SaaS Backends, Adminbereiche und Abläufe, bei denen die Geschäftslogik wichtiger ist als pixelgenaue Oberflächen.

Beispiel: Verlängerungen für einen Teeclub im Abo

Ein Beispiel: Der Teeclub Plagwitz ist ein erfundenes Leipziger Unternehmen mit 1.200 Abonnentinnen und Abonnenten, deren Abo sich jeweils am Ersten des Monats verlängert. Jede Verlängerung heißt: Karte belasten und eine Bestätigungsmail schicken. Angenommen, jede dauert zwei Sekunden, vor allem weil auf den Zahlungsanbieter und den Maildienst gewartet wird.

Nacheinander erledigt, sind das 1.200×2=2.4001.200 \times 2 = 2.400 Sekunden, also 40 Minuten. Deshalb wird jede Verlängerung ein Hintergrundjob in Solid Queue. Mit vier Jobs gleichzeitig dauert der ganze Stapel 2.400÷4=6002.400 \div 4 = 600 Sekunden, zehn Minuten, und niemand wartet auf eine Seite. In Rails 8 braucht das keinen zusätzlichen Server: Die Jobs sind Zeilen in derselben Datenbank wie die Abos.9

Warum ich die beiden kombiniere

Next.js rendert die Seiten, die die Kundschaft sieht. Rails hält die Daten und die Regeln. Dazwischen setze ich eine REST oder GraphQL API und teste diese Grenze sorgfältig, wie ich in TDD und BDD für APIs erkläre.

Wie sich ein Next.js Frontend und ein Rails Backend eine Anfrage teilenEin Ablauf von oben nach unten: Eine Besucherin öffnet eine Produktseite, Next.js liefert die vorgerenderte statische Hülle, fragt dann über die API bei der Rails Anwendung nach aktuellem Preis und Bestand, streamt beides in die Seite und übergibt Warenkorb und Checkout an Rails.Eine Besucherin öffnet eineProduktseiteNext.js liefert die vorgerendertestatische Hülle: Layout, Fotos,BeschreibungNext.js fragt die Rails API nachaktuellem Preis und BestandRails wendet die Regeln an:Händlerpreise, Bestand, AktionenDie aktuellen Teile werden in die SeitegestreamtWarenkorb und Checkout laufen auf Railsund Solidus

Lies das Diagramm von oben: Jeder Kasten ist ein Schritt eines einzigen Besuchs, in der richtigen Reihenfolge. Die obere Hälfte ist Next.js, das die Seite auf den Bildschirm bringt. Die untere Hälfte ist Rails, das entscheidet, welcher Preis heute für genau diese Kundin gilt. Die API in der Mitte ist der Vertrag zwischen beiden.

Die Kombination hat ihren Preis: zwei Anwendungen, die deployt und aktualisiert werden wollen, statt einer. Für ein kleines Produkt mit wenig öffentlicher Website reicht oft eine einzige Rails Anwendung mit eigenen Views. Die Kombination lohnt sich, wenn die öffentlichen Seiten in Suche und Kampagnen echtes Gewicht tragen.

Beispiel: wo eine Preisänderung ankommt

Ein Beispiel: Ein Kölner Großhändler für Bäckereiware ändert den Händlerpreis für Sauerteigbrote von 2,40 € auf 2,55 €. Die Änderung passiert einmal, im Rails Admin. Die Produktseite in Next.js zeigt sie bei der nächsten Anfrage, denn der Preis ist ein aktueller Teil, der über die API abgefragt wird, während Fotos und Beschreibung weiter aus der statischen Hülle kommen. Eine einzige Quelle der Wahrheit, und kein Neubau der Website für 15 Cent.

Die fairen Alternativen

Jede dieser Optionen ist in den richtigen Händen eine gute Wahl. Hier steht, was jede ist, nach ihrer eigenen Dokumentation, und wann ich sie empfehlen würde.

Laravel

Laravel ist ein Full Stack Framework für PHP, mit eigenen Queues, eigenem Caching, Starter Kits für die Authentifizierung und mehr. Einmal im Jahr erscheint eine Hauptversion, ungefähr im ersten Quartal. Laravel 13 erschien am 17. März 2026 und braucht mindestens PHP 8.3.13 Für mich ist es das Rails der PHP Welt, und das meine ich als Kompliment. Für Teams, die schon in PHP arbeiten, oder für Unternehmen mit PHP Betreuung im Haus ist Laravel eine sehr gute Wahl. Ich bevorzuge Rails einfach wegen seiner Konsistenz und seiner Kultur.

Django

Django ist ein Full Stack Framework für Python. Seine Adminoberfläche entsteht aus deinen Datenmodellen und ist als internes Verwaltungswerkzeug für vertrauenswürdige Mitarbeitende gedacht, nicht als öffentliches Frontend.14 Die Dokumentation beschreibt die Schutzmechanismen, die gleich mitkommen: Templates maskieren riskante Zeichen und verhindern so den Großteil von Cross Site Scripting, Querysets sind gegen SQL Injection geschützt, und es gibt eingebauten Schutz gegen Cross Site Request Forgery und Clickjacking.15 Ich setze Django für Data Science Anwendungen mit viel Python Logik ein, bei denen die Analysepipeline wichtiger ist als die Darstellung. Für APIs ziehe ich trotzdem Rails vor, und für Projekte mit viel Oberfläche Next.js.

Express, und NestJS obendrauf

Express ist das kleine, flexible Web Framework für Node.js, "fast, unopinionated, minimalist".2 NestJS ergänzt die Struktur, die Express weglässt: Es ist ein Framework für serverseitige Node.js Anwendungen, nutzt standardmäßig Express darunter, kann stattdessen Fastify verwenden und übernimmt seine Architektur stark von Angular.16 Express nehme ich, wenn ich Microservices oder kleine API Endpunkte am Rand eines Systems baue. Bei größeren Apps wird es zu einem Knäuel aus Entscheidungen ohne Leitplanken. NestJS bringt für genau dieses Problem eigene Konventionen mit.

WordPress

WordPress ist kein Framework, sondern ein Content Management System, und für eine Website, die vor allem aus Artikeln und Seiten besteht, die Leute ohne Programmierkenntnisse pflegen, ist es oft die ehrliche Antwort. Es steht unter der GPLv2 oder später.17 Schwieriger wird es, wenn eine Website eigene Geschäftsregeln entwickelt, die dann in Plugins und Themes leben. Darüber habe ich einen eigenen Artikel zu WordPress und PHP geschrieben.

Beispiel: drei Teams, drei richtige Antworten

Ein Beispiel: drei erfundene Unternehmen, drei Antworten.

Eine Münchner Personalvermittlung hat zwei PHP Entwickler, die ihre Systeme in und auswendig kennen. Sie braucht ein Kundenportal. Laravel, weil die Leute, die es pflegen werden, die Sprache schon sprechen.

Ein Leipziger Startup für Datenanalyse erstellt Prognosen in Python und zeigt sie in einem Dashboard für Kunden. Django, weil die Modelle und die Website dann eine Sprache und eine Codebasis teilen.

Eine Hamburger Eventfirma betreibt eine kleine Buchungs API, die ihre Partner aufrufen, und daneben eine eigene Website. Express oder NestJS für die API, weil die Aufgabe aus einer Handvoll Endpunkten besteht, nicht aus einer ganzen Anwendung.

Keiner dieser Fälle ist mein Stack, und jeder ist für dieses Team richtig.

Wie lange jede Version gepflegt wird

Jedes Framework hört irgendwann auf, alte Versionen zu reparieren. Endet der Sicherheitssupport, bleibt eine neu entdeckte Lücke offen, solange du nicht aktualisierst. Damit sind Upgrades bei jeder Wahl laufende Kosten.

  • Rails: Jede Minor Serie bekommt ein Jahr lang Bugfixes und zwei Jahre lang Sicherheitsfixes, gerechnet ab ihrem ersten Release. Rails 8.1 hat Sicherheitssupport bis zum 10. Oktober 2027. Der Sicherheitssupport für Rails 8.0 endete am 7. November 2026.11
  • Next.js: Eine Hauptversion ist im Active LTS, bis die nächste Hauptversion erscheint, danach im Maintenance LTS, mit nur noch kritischen Bugfixes und Sicherheitsupdates, bis zwei Jahre nach ihrem ersten Release. Next.js 16 erschien am 21. Oktober 2025. Next.js 15 bekommt Sicherheitsreleases bis zum 31. Januar 2027, eine Verlängerung des ursprünglichen Datums. Wartungsreleases können als Minor Versionen erscheinen, auch wenn sie inkompatible Änderungen enthalten.18
  • Laravel: Bugfixes für 18 Monate und Sicherheitsfixes für zwei Jahre. Laravel 12 hat Sicherheitsfixes bis zum 24. Februar 2027, Laravel 13 bis zum 17. März 2028.13
  • Django: 5.2 ist die aktuelle Version mit Langzeitsupport (LTS), unterstützt bis April 2028. Django 6.1 wird bis Dezember 2027 unterstützt, und die nächste LTS Version, 6.2, ist für April 2027 geplant.19
  • Express: Unterstützt wird nur die jeweils neueste Version jeder Hauptlinie. Die Versionen 4 und 5 stehen beide ohne Enddatum als unterstützt in der Liste.20

Verbleibende Monate Sicherheitssupport für die neueste VersionslinieBalkendiagramm der Monate zwischen November 2026 und dem veröffentlichten Ende des Sicherheitssupports für die neueste Versionslinie jedes Frameworks: Rails 8.1, 11 Monate. Next.js 16, 11 Monate. Django 6.1, 13 Monate. Laravel 13, 16 Monate. Django 5.2 LTS, 17 Monate. Express hat kein veröffentlichtes Enddatum und fehlt deshalb.Verbleibender Sicherheitssupport ab November 2026, in Monaten0510152011Rails 8.111Next.js 1613Django 6.116Laravel 1317Django 5.2LTSMonateVersionslinie

Die waagrechte Achse zeigt die neueste Versionslinie jedes Frameworks, dazu die LTS Version von Django. Die senkrechte Achse zeigt die Monate von November 2026 bis zum veröffentlichten Ende des Sicherheitssupports. Die Erkenntnis: Bei keinem davon kannst du bauen und vergessen. Jede Option hier braucht innerhalb von etwa anderthalb Jahren ein Upgrade.

Beispiel: ein Upgradekalender

Ein Beispiel: Ein Leipziger Händler für Gartenbedarf betreibt seinen Shop auf Rails 8.0 und seine Marketingwebsite auf Next.js 15. Heute ist der 8. November 2026.

Rails 8.0 hat gestern, am 7. November 2026, den Sicherheitssupport verloren.11 Dieses Upgrade ist also überfällig.

Next.js 15 bekommt Sicherheitsreleases bis zum 31. Januar 2027.18 Ab dem 8. November bleiben 22 Tage im November, 31 im Dezember und 31 im Januar: 22+31+31=8422 + 31 + 31 = 84 Tage, also 12 Wochen.

Also: Rails 8.0 auf 8.1 noch in diesem Monat, danach Next.js 15 auf 16 innerhalb von 12 Wochen, beides als bekannte Kosten eingeplant.

Was die Lizenz dir erlaubt

Rails, Next.js, Laravel, Express und NestJS stehen unter der MIT Lizenz.2122232425 Django und Solidus stehen unter der BSD 3 Clause Lizenz.2627 Beide sind freizügig: Du darfst Software, die damit gebaut ist, nutzen, ändern und verkaufen, auch als Closed Source, solange du den Urheberrechtshinweis und den Lizenztext beibehältst. Die BSD 3 Clause Variante ergänzt, dass du die Namen des Projekts und seiner Mitwirkenden nicht ohne Erlaubnis nutzen darfst, um für dein Produkt zu werben.26

WordPress steht unter der GPLv2 oder später, einer Copyleft Lizenz. Die eigene Position von WordPress ist, dass abgeleitete Werke die GPL erben und dass Plugins und Themes abgeleitete Werke sind. Gleichzeitig räumt WordPress eine gewisse rechtliche Grauzone ein.17

Für eine Website, die du für dich selbst baust, ändert das selten etwas. Wichtig wird es, wenn du das Gebaute verkaufen oder weitergeben willst, und dann fragst du am besten eine Anwältin oder einen Anwalt.

Beispiel: das Buchungsmodul verkaufen

Ein Beispiel: Eine Kölner Kletterhalle will ihr eigenes Buchungsmodul unter einer geschlossenen Lizenz an andere Hallen verkaufen.

Ist das Modul ein WordPress Plugin, erbt es nach der Position von WordPress die GPL,17 also braucht eine geschlossene Lizenz vor dem Start rechtliche Beratung. Ist es eine Rails Engine, verlangt die MIT Lizenz nur, dass der Hinweis von Rails mit Rails selbst mitreist,21 und die Halle kann ihren eigenen Code lizenzieren, wie sie will.

Beliebtheit, einmal gemessen und datiert

Beliebtheit zählt aus einem praktischen Grund: wie viele Menschen an deinem System arbeiten können. Der Stack Overflow Developer Survey 2025 hat gefragt, mit welchen Web Frameworks und Technologien die Befragten im vergangenen Jahr intensiv entwickelt haben, und 23.678 Befragte haben diese Frage beantwortet.28

Anteil der Befragten mit intensiver Arbeit im jeweiligen Framework, Stack Overflow Developer Survey 2025Balkendiagramm des Anteils aller Befragten der Frage zu Web Frameworks im Stack Overflow Developer Survey 2025, die intensiv mit dem jeweiligen Framework gearbeitet haben: Next.js 20,8 %, Express 19,9 %, WordPress 13,6 %, Django 12,6 %, Laravel 8,9 %, NestJS 6,7 %, Ruby on Rails 5,9 %.Intensive Arbeit im vergangenen Jahr, alle Befragten, 20250 %6,3 %12,5 %18,8 %25 %20,8 %Next.js19,9 %Express13,6 %WordPress12,6 %Django8,9 %Laravel6,7 %NestJS5,9 %Ruby onRailsAnteil der Befragten, %Framework oder Technologie

Die waagrechte Achse zeigt die Frameworks aus diesem Artikel. Die senkrechte Achse zeigt den Anteil aller Befragten dieser Frage, die im vergangenen Jahr intensiv mit dem jeweiligen Framework gearbeitet haben. Mehrfachnennungen waren möglich, deshalb ergeben die Anteile zusammen nicht 100 %. Die Erkenntnis: Die JavaScript Optionen haben die größten Pools an Leuten, Rails den kleinsten der sieben. Gezählt sind Entwicklerinnen und Entwickler weltweit, die freiwillig geantwortet haben, nicht der deutsche Markt, und die Zahl sagt, wie groß der Pool ist, nicht welches Framework besser ist.

Beispiel: der Pool pro tausend

Ein Beispiel: Stell dir 1.000 dieser Befragten vor.

N=q×1.000N = q \times 1.000

Dabei ist NN die erwartete Zahl der 1.000 Befragten, die mit einem Framework arbeiten, und qq der Umfrageanteil dieses Frameworks als Dezimalzahl. Grundlagen: Verhältnisse und Raten

Next.js: 0,208×1.000=2080{,}208 \times 1.000 = 208. Laravel: 0,089×1.000=890{,}089 \times 1.000 = 89. Rails: 0,059×1.000=590{,}059 \times 1.000 = 59. Auf jede Rails Entwicklerin in der Stichprobe kommen also etwa 208÷59=3,5208 \div 59 = 3{,}5 Leute mit Next.js und 89÷59=1,589 \div 59 = 1{,}5 mit Laravel. Für ein Unternehmen, das einstellen muss, fließt das in die Bewertung weiter unten ein.

Beispiel: eine Münchner Kaffeerösterei wählt ihren Stack

Die Rösterei Giesing ist eine erfundene Kaffeerösterei in München. Sam, die Inhaberin, braucht drei Dinge: eine Marketingwebsite mit Blog, einen Onlineshop mit Kaffeeabos und ein Bestellportal für den Großhandel, in dem Cafés ihre eigenen Preise sehen und auf Rechnung bestellen. Im Haus gibt es niemanden, der programmiert. Jede Zahl unten ist eine Annahme für dieses Beispiel, kein Angebot.

Drei Optionen liegen auf dem Tisch.

  • A: WordPress mit WooCommerce, die Großhandelsregeln in Plugins.
  • B: eine Laravel Anwendung, der Shop aus Paketen und eigenem Code zusammengebaut.
  • C: Rails mit Solidus für Shop und Portal, dazu eine Marketingwebsite in Next.js.

Schritt eins: die Gesamtkosten über fünf Jahre

Die Gesamtkosten (Total Cost of Ownership) addieren den Bau, die laufenden Kosten, die Kosten für Änderungen und die erwarteten Kosten, wenn etwas schiefgeht:

TC=C0+T (12m+k c)+∑ipi xiTC = C_0 + T\,(12m + k\,c) + \sum_i p_i\,x_i

Dabei ist TCTC die Summe der Kosten über den Zeitraum, C0C_0 die einmaligen Baukosten, TT der Zeitraum in Jahren, mm die monatlichen Kosten für Hosting, Lizenzen und Pflege, kk die Zahl der Änderungen pro Jahr, cc die Kosten einer Änderung, und ∑ipi xi\sum_i p_i\,x_i die erwarteten Kosten der Risiken, also für jedes Risiko seine Wahrscheinlichkeit pip_i mal seine Kosten xix_i. Grundlagen: Erwartungswert

Die Annahmen, mit Begründung. T=5T = 5 Jahre und k=8k = 8 Änderungen pro Jahr für jede Option. A kostet im Bau 14.000 €, weil der Großteil des Shops als Plugins schon existiert, und 350 € im Monat inklusive Pluginlizenzen. Jede Änderung kostet 900 €, weil sich die Großhandelsregeln um Plugins von Dritten herum fügen müssen, die Sam nicht kontrolliert. Aus demselben Grund trägt A eine Chance von eins zu vier auf eine Nacharbeit für 10.000 €. B und C schreiben die Großhandelsregeln als ganz normalen Anwendungscode: 600 € pro Änderung und eine Chance von eins zu zehn, dass ein Upgrade um 6.000 € teurer wird als geplant. B kostet im Bau 32.000 €, weil der Shop aus Einzelteilen entsteht, und 250 € im Monat für eine Anwendung. C kostet 30.000 €, weil Solidus den Shop mitbringt, und 300 € im Monat für zwei Anwendungen.

Option A:

TCA=14.000+5 (12×350+8×900)+0,25×10.000TC_A = 14.000 + 5\,(12 \times 350 + 8 \times 900) + 0{,}25 \times 10.000

12×350=4.20012 \times 350 = 4.200 und 8×900=7.2008 \times 900 = 7.200, zusammen 11.40011.400 pro Jahr. Fünf Jahre ergeben 57.00057.000. Das Risiko liegt bei 2.5002.500. Also TCA=14.000+57.000+2.500=73.500TC_A = 14.000 + 57.000 + 2.500 = 73.500 €. Grundlagen: Erwartungswert

Option B:

TCB=32.000+5 (12×250+8×600)+0,10×6.000TC_B = 32.000 + 5\,(12 \times 250 + 8 \times 600) + 0{,}10 \times 6.000

12×250=3.00012 \times 250 = 3.000 und 8×600=4.8008 \times 600 = 4.800, zusammen 7.8007.800 pro Jahr und 39.00039.000 über fünf Jahre. Das Risiko liegt bei 600600. Also TCB=32.000+39.000+600=71.600TC_B = 32.000 + 39.000 + 600 = 71.600 €. Grundlagen: Erwartungswert

Option C:

TCC=30.000+5 (12×300+8×600)+0,10×6.000TC_C = 30.000 + 5\,(12 \times 300 + 8 \times 600) + 0{,}10 \times 6.000

12×300=3.60012 \times 300 = 3.600 und 4.8004.800 für Änderungen, zusammen 8.4008.400 pro Jahr und 42.00042.000 über fünf Jahre. Das Risiko liegt bei 600600. Also TCC=30.000+42.000+600=72.600TC_C = 30.000 + 42.000 + 600 = 72.600 €. Grundlagen: Erwartungswert

Gesamtkosten über fünf Jahre für drei Stacks einer erfundenen KaffeeröstereiBalkendiagramm der Gesamtkosten über fünf Jahre im erfundenen Beispiel der Rösterei Giesing: WordPress mit WooCommerce 73.500 €, Laravel 71.600 €, Rails mit Solidus und Next.js 72.600 €.Gesamtkosten über fünf Jahre, erfundenes Beispiel0 €25.000 €50.000 €75.000 €100.000 €73.500 €A: WordPress undWooCommerce71.600 €B: Laravel72.600 €C: Rails,Solidus undNext.js€Option

Die waagrechte Achse zeigt die drei Optionen, die senkrechte die Gesamtkosten über fünf Jahre in Euro. Die Erkenntnis ist, wie nah sie beieinanderliegen: 1.900 € zwischen der teuersten und der günstigsten, etwa 2,7 % der niedrigsten Summe. Unter diesen Annahmen entscheiden die Kosten allein nichts.

Schritt zwei: eine gewichtete Bewertung

Wenn die Kosten so nah beieinanderliegen, hängt die Wahl an Dingen, die kein Geld sind. Eine gewichtete Bewertung stellt sie nebeneinander:

Sj=∑i=1nwi sijS_j = \sum_{i=1}^{n} w_i\, s_{ij}

Dabei ist SjS_j die Gesamtpunktzahl von Option jj, nn die Zahl der Kriterien, wiw_i das Gewicht von Kriterium ii, wobei alle Gewichte zusammen eins ergeben, und sijs_{ij} die Punktzahl von eins bis fünf, die Option jj bei Kriterium ii bekommt. Die Formel hat dieselbe Form wie ein Erwartungswert, nur mit Gewichten statt Wahrscheinlichkeiten. Grundlagen: Erwartungswert

Sam legt vier Kriterien und ihre Gewichte fest:

  • Passung für die Großhandelsregeln, Gewicht 0,35. A bekommt 2, B 4, C 5, weil der Shop bei C schon in derselben Rails Codebasis steckt, in der die Regeln geschrieben werden.
  • Kosten über fünf Jahre, Gewicht 0,25. Die niedrigste Summe bekommt 5, und für jede 1.000 € darüber geht ein halber Punkt ab. B bekommt 5. C liegt 1.000 € darüber, also 4,5. A liegt 1.900 € darüber, also 5−0,95=4,055 - 0{,}95 = 4{,}05.
  • Menschen, die es pflegen können, Gewicht 0,25. Nach den Umfragepools oben bekommt A 4, B 4, C 3.
  • Tempo und Bearbeitung der Marketingseiten, Gewicht 0,15. A bekommt 4, weil die Redaktion WordPress kennt, B 3, C 5, wegen der vorgerenderten statischen Hülle.

Option A: 0,35×2+0,25×4,05+0,25×4+0,15×4=0,70+1,01+1,00+0,60=3,310{,}35 \times 2 + 0{,}25 \times 4{,}05 + 0{,}25 \times 4 + 0{,}15 \times 4 = 0{,}70 + 1{,}01 + 1{,}00 + 0{,}60 = 3{,}31.

Option B: 0,35×4+0,25×5+0,25×4+0,15×3=1,40+1,25+1,00+0,45=4,100{,}35 \times 4 + 0{,}25 \times 5 + 0{,}25 \times 4 + 0{,}15 \times 3 = 1{,}40 + 1{,}25 + 1{,}00 + 0{,}45 = 4{,}10.

Option C: 0,35×5+0,25×4,5+0,25×3+0,15×5=1,75+1,13+0,75+0,75=4,380{,}35 \times 5 + 0{,}25 \times 4{,}5 + 0{,}25 \times 3 + 0{,}15 \times 5 = 1{,}75 + 1{,}13 + 0{,}75 + 0{,}75 = 4{,}38.

C gewinnt mit 0,28 Punkten Vorsprung. A, mit den niedrigsten Baukosten, landet auf dem letzten Platz, weil das Großhandelsportal der schwierige Teil dieser Aufgabe ist.

Schritt drei: eine Tatsache ändern, und die Antwort kippt

Jetzt angenommen, Sam hat einen PHP Entwickler, der schon lange im Haus ist. Die Personalwertung von B steigt auf 5, die von C fällt auf 2, weil der Entwickler erst Ruby lernen müsste. Sonst ändert sich nichts.

Option B: 1,40+1,25+0,25×5+0,45=1,40+1,25+1,25+0,45=4,351{,}40 + 1{,}25 + 0{,}25 \times 5 + 0{,}45 = 1{,}40 + 1{,}25 + 1{,}25 + 0{,}45 = 4{,}35.

Option C: 1,75+1,13+0,25×2+0,75=1,75+1,13+0,50+0,75=4,131{,}75 + 1{,}13 + 0{,}25 \times 2 + 0{,}75 = 1{,}75 + 1{,}13 + 0{,}50 + 0{,}75 = 4{,}13.

Jetzt gewinnt Laravel mit 0,22 Punkten Vorsprung. Das ist die Lehre in einer einzigen Rechnung: Das Framework ist selten die entscheidende Tatsache. Das Team, der schwierige Teil der Aufgabe und die Kosten von Änderungen sind es.

Ein Entscheidungsablauf zum Mitnehmen

Einen Web Stack in fünf Fragen wählenEin Entscheidungsablauf von oben nach unten: Zuerst die Frage, ob die Website vor allem aus Inhalten besteht, die Leute ohne Programmierkenntnisse pflegen. Wenn ja, ein Content Management System wie WordPress in Betracht ziehen. Wenn nein, fragen, ob es schon ein Team in einer Sprache gibt, und das Full Stack Framework dieser Sprache wählen. Wenn nein, fragen, ob der Kern Datenarbeit in Python ist, und Django wählen. Sonst fragen, ob die öffentlichen Seiten Suche und Kampagnen tragen, und dann Rails mit einem Next.js Frontend kombinieren, andernfalls eine einzige Rails Anwendung. Zum Schluss die Gesamtkosten über fünf Jahre und den Supportkalender durchrechnen.Schreib den schwierigen Teil derAufgabe aufSind es vor allem Inhalte, dieLeute ohne Programmierkenntnissepflegen?jaEin Content Management System wieWordPress in Betracht ziehenGibt es schon ein Team in einerSprache, das bleibt?jaDas Full Stack Framework dieser Sprachenehmen: Laravel, Django, Rails oderNestJSIst der Kern Datenarbeit in Python?jaDjangoTragen die öffentlichen SeitenSuche und Kampagnen?jaRails, mit Solidus für einen Shop, undein Next.js FrontendneinEine einzige Rails Anwendung miteigenen ViewsGesamtkosten über fünf Jahre undSupportkalender durchrechnen

Beantworte die Fragen von oben nach unten. Ein Ja führt zum jeweiligen Vorschlag, ein Nein zur nächsten Frage. Jeder Weg endet gleich: mit der Rechnung der Gesamtkosten und dem Upgradekalender, denn ein Stack, den du dir nicht leisten kannst aktuell zu halten, ist der falsche Stack.

Was das für dich heißt

Ich halte nichts von Frameworks, die nur vom Hype leben. Jedes Unternehmen hat seine eigenen Rahmenbedingungen: die Erfahrung des Teams, die Zeit bis zum Marktstart, die Wartbarkeit, die Flexibilität und die Kosten. Ich baue mit Rails und Next.js, weil ich damit diese Rahmenbedingungen besser im Griff habe als mit jeder anderen Kombination, die ich bisher gefunden habe.

Trotzdem: Gute Ergebnisse kommen nicht von Frameworks. Sie kommen davon, wie man sie einsetzt. Wähl den Stack, der zu deinem Team und deinem schwierigsten Problem passt, rechne ihn über fünf Jahre durch und trag die Upgradetermine gleich am ersten Tag in den Kalender ein.

Footnotes

  1. Ruby on Rails, Getting Started with Rails, Rails Guides v8.1.4.1, guides.rubyonrails.org, abgerufen am 8. November 2026, https://guides.rubyonrails.org/getting_started.html

  2. Express, Express: fast, unopinionated, minimalist web framework for Node.js, expressjs.com, abgerufen am 8. November 2026, https://expressjs.com/

  3. Vercel, Installation, Next.js Dokumentation, nextjs.org, aktualisiert am 2. Oktober 2026, https://nextjs.org/docs/app/getting-started/installation

  4. Vercel, Server and Client Components, Next.js Dokumentation, nextjs.org, aktualisiert am 5. Oktober 2026, https://nextjs.org/docs/app/getting-started/server-and-client-components

  5. React, Server Components, react.dev, abgerufen am 8. November 2026, https://react.dev/reference/rsc/server-components

  6. Vercel, How to implement Incremental Static Regeneration (ISR), Next.js Dokumentation, nextjs.org, aktualisiert am 15. Oktober 2026, https://nextjs.org/docs/app/guides/incremental-static-regeneration

  7. Vercel, Caching (Cache Components and Partial Prerendering), Next.js Dokumentation, nextjs.org, aktualisiert am 6. Oktober 2026, https://nextjs.org/docs/app/getting-started/caching

  8. Vercel, How to self host your Next.js application, Next.js Dokumentation, nextjs.org, aktualisiert am 15. Oktober 2026, https://nextjs.org/docs/app/guides/self-hosting

  9. David Heinemeier Hansson, Rails 8.0: No PaaS Required, rubyonrails.org, 7. November 2024, https://rubyonrails.org/2024/11/7/rails-8-no-paas-required

  10. Kamal, Deploy web apps anywhere, kamal-deploy.org, abgerufen am 8. November 2026, https://kamal-deploy.org/

  11. Ruby on Rails, Maintenance policy for Ruby on Rails, rubyonrails.org, abgerufen am 8. November 2026, https://rubyonrails.org/maintenance

  12. Solidus, Introduction, Solidus Guides, guides.solidus.io, abgerufen am 8. November 2026, https://guides.solidus.io/

  13. Laravel, Release notes, Laravel 13.x Dokumentation, laravel.com, abgerufen am 8. November 2026, https://laravel.com/docs/13.x/releases

  14. Django Software Foundation, The Django admin site, Django Dokumentation, docs.djangoproject.com, abgerufen am 8. November 2026, https://docs.djangoproject.com/en/stable/ref/contrib/admin/

  15. Django Software Foundation, Security in Django, Django Dokumentation, docs.djangoproject.com, abgerufen am 8. November 2026, https://docs.djangoproject.com/en/stable/topics/security/

  16. NestJS, Introduction, NestJS Dokumentation, docs.nestjs.com, abgerufen am 8. November 2026, https://docs.nestjs.com/

  17. WordPress, License, wordpress.org, abgerufen am 8. November 2026, https://wordpress.org/about/license/

  18. Vercel, Next.js support policy, nextjs.org, abgerufen am 8. November 2026, https://nextjs.org/support-policy

  19. Django Software Foundation, Download: supported versions and roadmap, djangoproject.com, abgerufen am 8. November 2026, https://www.djangoproject.com/download/

  20. Express, Version support, expressjs.com, abgerufen am 8. November 2026, https://expressjs.com/en/support/

  21. Ruby on Rails, MIT Lizenzdatei, GitHub, abgerufen am 8. November 2026, https://raw.githubusercontent.com/rails/rails/main/MIT-LICENSE

  22. Vercel, Next.js Lizenzdatei (MIT), GitHub, abgerufen am 8. November 2026, https://raw.githubusercontent.com/vercel/next.js/canary/license.md

  23. Laravel, Lizenzdatei des Laravel Frameworks (MIT), GitHub, abgerufen am 8. November 2026, https://raw.githubusercontent.com/laravel/framework/12.x/LICENSE.md

  24. Express, Express Lizenzdatei (MIT), GitHub, abgerufen am 8. November 2026, https://raw.githubusercontent.com/expressjs/express/master/LICENSE

  25. NestJS, Nest Lizenzdatei (MIT), GitHub, abgerufen am 8. November 2026, https://raw.githubusercontent.com/nestjs/nest/master/LICENSE

  26. Django Software Foundation, Django Lizenzdatei (BSD 3 Clause), GitHub, abgerufen am 8. November 2026, https://raw.githubusercontent.com/django/django/main/LICENSE

  27. Solidus contributors, Solidus Lizenzdatei (BSD 3 Clause), GitHub, abgerufen am 8. November 2026, https://raw.githubusercontent.com/solidusio/solidus/main/LICENSE

  28. Stack Overflow, 2025 Developer Survey: Technology, web frameworks and technologies, survey.stackoverflow.co, 2025, https://survey.stackoverflow.co/2025/technology

Wenn du gerade einen Stack abwägst oder dich fragst, ob deiner noch passt: In meinem kostenlosen Workshop rechnen wir die Optionen gemeinsam gegen dein Team und dein schwierigstes Problem durch, und die ersten zwei Wochen Arbeit gehen auf meine Rechnung.