Baue das Einfachste, das funktioniert. Widerstehe dem Drang, zu viel zu entwickeln.
XP hat ein Mantra: Mach das Einfachste, das möglicherweise funktionieren könnte.
Das bedeutet nicht, faul zu sein oder unsauberen Code zu schreiben. Einfacher Code ist oft schwerer zu schreiben als komplexer Code. Es erfordert:
Einfacher Code ist:
Komplexer Code ist:
Einfach ist Schwer
„Ich hätte einen kürzeren Brief geschrieben, aber ich hatte nicht die Zeit." —Blaise Pascal. Einfacher Code erfordert mehr Nachdenken, nicht weniger.
YAGNI ist das Prinzip, dass du nur das bauen solltest, was du gerade jetzt brauchst.
Füge nicht hinzu:
Warum? Weil:
Die XP-Wette: Wenn du später etwas brauchst, kannst du es später hinzufügen. Mit TDD, Refactoring und CI ist Änderung günstig. Also zahle nicht für die Zukunft, bevor du musst.
Das ist eine radikale Idee. Traditionelles Software Engineering sagt, antizipiere Änderungen und entwirf für Flexibilität. XP sagt, warte, bis du es tatsächlich brauchst.
Das Team muss E-Mails versenden. Sie implementieren das Versenden über SMTP. Später brauchen sie SendGrid. Sie refaktorieren. Gesamtkosten: weniger als eine steckbare E-Mail-Abstraktion von Anfang an zu bauen.
Das Team muss E-Mails versenden. Sie bauen ein generisches 'MessageProvider'-Interface mit steckbaren 'MessageTransport'- und 'MessageFormatter'-Abstraktionen. Sie nutzen nur jemals SMTP mit einem Format. Die Abstraktionen verlangsamen jede Änderung.
Kent Beck definierte einfaches Design als Code, der:
1. Alle Tests besteht Der Code funktioniert. Das ist nicht verhandelbar. Ein schönes Design, das nicht funktioniert, ist wertlos.
2. Absicht offenbart Der Code ist leicht zu verstehen. Gute Namen, klare Struktur, lesbare Organisation. Jemand Neues kann ihn aufgreifen und verstehen, was er tut.
3. Keine Duplikation hat (DRY) Jedes Stück Wissen ist einmal und nur einmal ausgedrückt. Duplikation erzeugt Wartungslast und Fehlerrisiko.
4. Die wenigsten Elemente hat Keine zusätzlichen Klassen, Methoden, Variablen oder Abstraktionen. Alles, was existiert, hat einen Grund zu existieren.
Die Regeln sind in Prioritätsreihenfolge. Tests zu bestehen übertrifft alles. Aber sobald Tests bestehen, bevorzuge Klarheit über DRYness. Und füge nur Elemente hinzu, die den ersten drei Regeln dienen.
Einfaches Design bedeutet nicht kein Design. Es bedeutet inkrementelles Design – das Design entwickelt sich, während du lernst.
Der Prozess:
Deshalb betont XP Refactoring so stark. Wenn du den Code nicht sicher ändern kannst, kannst du kein inkrementelles Design machen. Du steckst mit dem fest, was du zuerst gebaut hast.
Big Up-Front Design (BUFD) scheitert, weil:
Inkrementelles Design gelingt, weil:
Wenn du den Drang verspürst, eine Abstraktion hinzuzufügen, frage: „Brauche ich das jetzt, oder rate ich?" Wenn du rätst, warte.
Einfaches Design bedeutet nicht, jede Komplexität zu vermeiden. Manchmal ist Komplexität notwendig.
Füge Komplexität hinzu, wenn:
Füge keine Komplexität hinzu für:
Der Unterschied liegt zwischen wesentlicher Komplexität (dem Problem inhärent) und zufälliger Komplexität (durch deine Lösung eingeführt). XP minimiert zufällige Komplexität, indem es sich weigert, für imaginäre Anforderungen zu bauen.
Wenn du eine Abstraktion brauchst, lass sie aus dem Entfernen von Duplikation entstehen. Die „Regel der Drei" ist hilfreich: abstrahiere nicht, bis du dasselbe Muster dreimal siehst. Bis dahin verstehst du die tatsächlichen Variationen, nicht die imaginierten.