Neu bei YAGNI ist aber die Aussage, daß darüber hinaus auch nichts programmiert werden sollte, daß man (erst) in Zukunft brauchen wird. Weil man es später besser machen kann; weil man es dann zwar braucht, aber anders; weil man später weniger Vermutungen über Anforderungen und Code-Umfeld anstellen muß; weil es einen bis dahin nur beim Refactoring bremsen würde; weil man so schneller mehr Code für das jeweilige "Jetzt" fertig hat, statt für's "Später"; oder weil sich eben herausstellt, daß man es doch nicht gebraucht hat. |
Neu bei YAGNI ist aber die Aussage, daß darüber hinaus auch nichts programmiert werden sollte, das man (erst) in Zukunft brauchen wird. Weil man es später besser machen kann; weil man es dann zwar braucht, aber anders; weil man später weniger Vermutungen über Anforderungen und Code-Umfeld anstellen muß; weil es einen bis dahin nur beim Refactoring bremsen würde; weil man so schneller mehr Code für das jeweilige "Jetzt" fertig hat, statt für's "Später"; oder weil sich eben herausstellt, daß man es doch nicht gebraucht hat. |
Neben EinmalUndNurEinmal eines der wichtigsten Prinzipien für EinfachesDesign in ExtremeProgramming.
"Mach nur das, was wirklich notwendig ist!"
RonJeffries wird im Allgemeinen als der "Erfinder" von Yagni akzeptiert. Er schreibt in news:comp.software.extremeprogramming:
"YAGNI means "You Aren't Gonna Need It". It is not an XP practice, but it is a mantra that some of us use. I am probably the perpetrator of "YAGNI".
YAGNI means that when we are programming, and we think of a cool feature or extension that "we're gonna need", we say to ourselves, "you aren't gonna need it", and we leave the feature out. The reason that we do this is that our customer decides what features to build, the programmers do not.
YAGNI doesn't prohibit thinking: it prohibits programming unrequested features. YAGNI doesn't prohibit working on any general kind of thing: it prohibits programming on things that do not have high priority with the customer.
Folks have extended YAGNI thinking to other realms. It's probably always wise to use YAGNI to push back against things we always do. Do we always write a big requirements document? Maybe we aren't going to need it. (WAGNI? Hmm) Do we always write a test plan? WAGNI. Do we always make a risk list? WAGNI?
Well, maybe we do need it. Some of the risks are techical in nature, some are customer. Certainly the team ought to talk about risks, and we put them together so that they will talk. We don't have a list of things they must, should, may, or may not talk about. We trust that they'll talk about the things that their various expertise makes important to them. Risk might be one of those things."
Daß nichts dauerhaft Unnötiges programmiert werden sollte, ist nicht besonders neu oder erhellend.
Neu bei YAGNI ist aber die Aussage, daß darüber hinaus auch nichts programmiert werden sollte, das man (erst) in Zukunft brauchen wird. Weil man es später besser machen kann; weil man es dann zwar braucht, aber anders; weil man später weniger Vermutungen über Anforderungen und Code-Umfeld anstellen muß; weil es einen bis dahin nur beim Refactoring bremsen würde; weil man so schneller mehr Code für das jeweilige "Jetzt" fertig hat, statt für's "Später"; oder weil sich eben herausstellt, daß man es doch nicht gebraucht hat.
Deshalb sollte man sich immer so verhalten, als ob man solchen "Zukunfts-Code" tatsächlich nie benötigen wird, dann fährt man besser.
Die allgemeine Idee ist, dass man - um effizient zu sein - immer nur Dinge tun, planen, und vor allem programmieren soll, wenn sie und weil sie tatsächlich jetzt erforderlich sind. Niemals sollte man etwas programmieren, nur weil man davon ausgeht, dass das Feature in Zukunft benötig wird. Die Wahrscheinlichkeit ist zu hoch, dass man sich irrt und der Bedarf nie eintritt.
Dinge, auf die sich WerdenWirNichtBrauchen sinnvoll anwenden lässt:
Voraussetzungen für die Anwendung von WerdenWirNichtBrauchen auf Funktionalität:
Diskussion |
Kommt dabei wirklich etwas Vernünftiges heraus? Das liest sich wie eine Regel für die Ex-und-Weg-Programmierung. -- RalfEbert
Komisch. Ich mach immer das Gegenteil. Zuerst wird das komplexest mögliche Szenario geplant und designt, und dann werden davon Abstriche gemacht. Oder ich gebe auf. (Ganz Oder Gar Nicht) Ein halbes Produkt (bzw. so wie sich das der User vorstellt) führt nur zu Ärger. Grundsätzliche Probleme werden schon von vornherein abgecheckt und nicht unnötige Zeit in falsche Hoffnungen investiert. In C oder C++ könnte ich mir das natürlich nicht leisten, weil Pläne (Interfaces, Objekte) dort schlecht erweitert werden können. WerdenWirNichtBrauchen funktioniert nicht. --ReiniUrban
...Interfaces und Objekte...schlecht erweiterbar...
Es würde mich interessieren, wie du das begründest. Es widerspricht meinen Erfahrungen und es würde auch die ObjektOrientierteProgrammierung als Ganzes in Frage stellen, wenn dies so wäre. -- HelmutLeitner