Begriff
KISS (Keep It Simple, Stupid)
Warum wichtig?
Dieser Begriff ist ein Knoten im SengakujiWorks-Wissensnetz. Nutze Level 0 für die erste Einordnung, Level 1 für Praxis, Level 2 für technische Struktur und Level 3 für Grenzen, Fallstricke und Expertenkontext.
Ingenieure lieben es, komplizierte Maschinen zu bauen.
Aber in der Software ist Komplexität der Feind.
Je mehr bewegliche Teile, desto mehr geht kaputt.
KISS sagt: Wähle immer die einfachste Lösung.
Wenn ein if reicht, nutze kein Design Pattern.
Wenn eine Textdatei reicht, nutze keine Datenbank.
Einfacher Code ist leichter zu verstehen, leichter zu testen und leichter zu reparieren.
Merksatz: Ein Designprinzip, das besagt, dass Systeme am besten funktionieren, wenn sie einfach gehalten werden und unnötige Komplexität vermieden wird.
Beispiel:
Du willst wissen, ob ein User über 18 ist.
Kompliziert: Eine AgeVerificationStrategyFactory, die einen DateComparatorService aufruft, der Zeitzonen berücksichtigt.
KISS: if (user.age >= 18).
1. Essential vs. Accidental Complexity
- Essential: Das Problem ist schwer (z. B. Steuerrecht). Da kann der Code nicht super einfach sein.
- Accidental: Wir haben es uns schwer gemacht (durch falsche Tools, Over-Engineering, Microservices für Hallo Welt). KISS bekämpft Accidental Complexity.
2. "Stupid" is Compliment
Das "Stupid" meint nicht "dumm", sondern "narrensicher". Der Code sollte so einfach sein, dass ihn auch ein übermüdeter Entwickler am Freitagabend um 23 Uhr versteht, ohne etwas kaputt zu machen. Cleverer Code ("One-Liner", Bit-Hacks) ist oft schlecht, weil er schwer zu lesen ist.
3. Worse is Better
Ein berühmter Aufsatz (Richard Gabriel). Er sagt: Ein einfaches System (Unix), das vielleicht technisch nicht "perfekt" ist, gewinnt gegen ein perfektes, aber komplexes System (MIT Lisp Machine). Einfachheit ermöglicht schnelle Verbreitung und Evolution.
1. Cyclomatic Complexity
Die Messung von KISS ist keine reine Gefühlssache. Sie ist mathematisch metrisierbar durch Cyclomatische Komplexität (McCabe-Metrik).
Sie zählt die Anzahl der linear unabhängigen Pfade durch den Graphen deines Quellcodes. Ein nacktes Programm hat den Wert 1. Jedes if, while, for und case addiert 1 dazu.
Steigt die McCabe-Metrik einer Methode über 10, gilt der Code als stark anfällig für Bugs. Über 20 ist er unmöglich via Unit-Tests zu 100% abzudecken, da man 20 Test-Kombinationen nur für diese eine Funktion schreiben müsste. Linter in CI/CD-Pipelines (SonarQube) lassen Builds, die diese Komplexitäts-Schwelle reißen, rigoros fehlschlagen, um KISS zu erzwingen.
2. Over-Engineering und "Premature Optimization"
Ein Feindbild von KISS ist die vorzeitige Optimierung in der Softwarearchitektur. Donald Knuth sagte: "Premature optimization is the root of all evil". Viele Entwickler zementieren hunderte Abstraktions-Schichten (Interfaces, Dependency Injection), abstrahieren Datenbanktreiber und schreiben Caches, bevor überhaupt ein Flaschenhals gemessen wurde, nur um "auf Nummer sicher" zu gehen. Sie blähen das Projekt extrem auf. KISS kontert mit YAGNI (You Aren't Gonna Need It): Implementiere exakt das, was den aktuellen HTTP-Request befriedigt – der Refaktor zum Cache darf erst stattfinden, sobald die Datenbank unter echter Last ächzt.
3. State Management Complexity
Während KISS im Backend meist das Vermeiden von 12-stöckigen Factory-Pattern meint, dreht sich KISS im Frontend meist um State (Zustand). Jede Variable, die sich im React-Lebenszyklus verändert (Global State, Local State), ist ein Risiko für Race-Conditions. KISS zu befolgen bedeutet, "Derived State" (abgeleiteten Zustand) niemals zu speichern, sondern in der Render-Schleife live zu berechnen (Pure Functions). Weniger gespeicherte Variablen bedeuten exponentiell weniger Edge-Cases, in denen das System vom Entwickler nicht mehr intellektuell durchdrungen werden kann.
Quick-Check
Wann ist KISS falsch?
Wenn "einfach" zu "dumm" wird. Eine 5000-Zeilenmain()Funktion ist zwar "einfach" (keine Klassen), aber unwartbar. Struktur (Komplexität) ist nötig, um Chaos zu verhindern.Zusammenhang mit YAGNI?
KISS sagt wie (mach es simpel). YAGNI sagt was (mach nur das Nötige). Beide kämpfen gegen Ballast.Code Golf?
Der Versuch, ein Problem mit so wenig Zeichen wie möglich zu lösen. Das ist NICHT KISS. Code Golf ist unlesbar. KISS will Lesbarkeit, nicht Kürze.