32 Stimmen

Wie weit gehen Sie mit YAGNI?

Ich entwickle eine neue, revolutionäre Webanwendung für den Unternehmensmarkt. Sicher, viele vor mir dachten, dass ihre Webanwendung revolutionär sein würde, nur um herauszufinden, dass sie es nicht ist. (Oder sie ist es, aber das Geschäft läuft trotzdem nicht gut).

Um herauszufinden, ob meine Idee mit den geringsten Kosten durchsetzbar ist, überlege ich, ein extremes YAGNI zu verfolgen:

  • Keine Sicherheitsmerkmale (d. h. keine Benutzer usw.). Für jeden neuen Kunden installiere ich eine neue Datenbankinstanz und eine neue Webapp-Instanz. Jede Webapp-Instanz ist durch ein http-Server-Passwort geschützt (Digest oder Basisautorisierung, vielleicht über https).

  • Keine Internationalisierung. Nur englische Zeichenfolge in den Quellcode eingebettet.

  • Keine Entkopplung. Nur Webseiten, die mit der Datenbank kommunizieren.

  • Keine Leistungstricks. Keine Warteschlangen, Caches, Timer, Hintergrundaufträge, asynchrone Aufrufe usw.

  • Keine Skalierbarkeit. Keine Datenbankpartitionierung, keine Shards, kein Clustering oder Replikation.

  • Verwenden Sie außerdem YAGNI auf der Mikroebene, wann immer es sich anbietet.

Ich möchte einfach nur mit dem Projekt beginnen und so schnell wie möglich einen Punkt erreichen, an dem ich meine innovativen Funktionen mit einer einfachen und ansprechenden Benutzeroberfläche verkaufen (oder zu verkaufen versuchen) kann.

Wenn der Plan scheitert, werde ich es frühzeitig erfahren. Wenn er erfolgreich ist, werde ich sehen, was die Kunden dann wollen. Wollen sie eine französische Version? Oder wollen sie Benutzer und Rollen innerhalb der Organisation?

Ist es das, was die Menschen mit YAGNI meinen, oder ist dies ein pathologisches und übertriebenes Beispiel für YAGNI?

3voto

Pablo Fernandez Punkte 98441

Wenn Sie wirklich ein revolutionäre Webanwendung für den Unternehmensmarkt Ich bin mir nicht ganz sicher, welche dieser Dinge Y ou A int G onna N eed.

Auch Ihre Beispiele sind ziemlich spezifisch. Wenn Sie zum Beispiel sagen: "keine Sicherheitsmerkmale"... Ich würde sagen, dass Benutzer eine Sache sind, auf die man vielleicht verzichten kann, aber die Bereinigung der Eingaben ist eine Sache, auf die man nicht verzichten kann. Außerdem ist "Skalierbarkeit" keine Frage von Datenbank-Sharding oder Replikation, das sind Entscheidungen, die man trifft, nachdem man festgestellt hat, dass die Anwendung nicht gut skaliert.

Ich würde lieber vorsichtig sein, wenn ich YAGNI als High-Level-Design-Richtlinie, Es passt am besten, wenn Sie über seltsame Produktmerkmale oder vielleicht Software-Komponenten extreme Flexibilität sprechen.

Nur meine 0,2

3voto

quentin-starin Punkte 25165

Wenn Sie "YAGNI" bis zum Äußersten treiben (und ich werde die Diskussion darüber, ob das eine gute Idee ist oder nicht, ebenso umgehen wie die Diskussion darüber, ob das wirklich "YAGNI" ist oder nicht), sollten Sie darauf vorbereitet sein, Ihre Codebasis gnadenlos zu überarbeiten, um später das hinzuzufügen, was Sie jetzt weglassen, ohne einen Ball of Mud zu erzeugen.

2voto

Tim Skauge Punkte 1754

Meiner Meinung nach wird YAGNI am häufigsten im Zusammenhang mit einem Entwickler verwendet, der denkt: "Oh, es wäre schlau, wenn wir auch Funktion X hinzufügen würden. Wir könnten sie in Zukunft brauchen." Niemals immer Funktionen hinzufügen, die nicht erforderlich sind.

Dennoch sollte Ihr Code immer offen für Änderungen sein, wenn Ihr Kunde die Funktion Y für absolut notwendig hält. Eine gute Architektur ist ein Muss!

In Bezug auf Skalierbarkeit, Warteschlangen, Zwischenspeicherung: Es kommt darauf an. Was ist die Anforderung an die Anwendung? Handelt es sich um eine Intranetseite, die von 10 Benutzern gleichzeitig genutzt wird, oder um eine beliebte Website mit Millionen von Benutzern? Das kommt darauf an. Ermitteln Sie die Anforderungen und tun Sie das - mehr nicht. YAGNI. Wenn sich Ihre Anforderungen ändern, ändern Sie Ihre Anwendung - sie sollte offen für Änderungen sein.

2voto

dsimcha Punkte 65784

YAGNI ist gut, wenn eine gute Chance besteht, dass Sie niemals brauchen es. Wenn Sie es jetzt nicht brauchen, aber fast sicher sind, dass Sie es in absehbarer Zeit brauchen werden, ist es fast immer einfacher, es im Voraus einzubauen als später. Wenn Sie sich dafür rechtfertigen, Dinge nicht zu implementieren, die Sie nicht brauchen diese zweite aber mit ziemlicher Sicherheit in naher Zukunft von YAGNI benötigen werden, beginnen die Probleme.

2voto

Drew Wills Punkte 8228

Es ist gut, sich daran zu erinnern, dass YAGNI nur ein großer Grundsatz unter vielen ist; manchmal schlägt YAGNI eine Entscheidung vor, aber es gibt ebenso gute (oder bessere) Gründe, eine andere vorzuziehen.

Hier gibt es einen Bereich, in dem ich das Gefühl habe, dass einige YAGNI-Befürworter zu weit gehen: Wenn man sich mit OOD/Polymorphismus auskennt, kostet es in der Regel nicht viel, einige großartige Erweiterungspunkte für die zukünftige Verwendung "einzubacken", selbst in einem Prototyp.

Hier ist ein Beispiel...

Sie erstellen einen Prototyp einer Webapplikation, die die Möglichkeit bietet, eine druckfreundliche Version eines Berichts anzuzeigen. Sie müssen schnell arbeiten, haben aber das Gefühl, dass die Steakholder später auch die Möglichkeit haben werden, den Bericht per E-Mail zu versenden.

Verstecken Sie in Ihrem serverseitigen Java-Code das Wissen, dass der Bericht für den Drucker vorbereitet wird, hinter einer Schnittstelle. Erstellen Sie eine konkrete Klasse, die die Schnittstelle erweitert, um diese Verantwortung zu übernehmen. Gehen Sie nicht wirklich los und schreiben. eine E-Mail-Version der Schnittstelle, denn YAGNI. Aber wenn Sie das jemals tun, können Sie es ohne Beeinträchtigung Ihrer bestehenden Funktionen hinzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X