Frage

Ich entwickle eine neue revolutionäre Web-Anwendung für den Enterprise-Markt. Sicher, viele vor mir gedacht, dass ihr Web-App nur revolutionär wäre es, um herauszufinden, ist es nicht. (Oder es ist, aber das Geschäft ist nicht gut sowieso).

Also ich denke, um herauszufinden, ob meine Idee keinen Schwung mit den niedrigsten Kosten hat, eine extreme YAGNI zu folgen:

  • Keine Sicherheitsfunktionen (das heißt, keine Benutzer, etc.). Für jeden neuen Kunden installiere ich eine neue Datenbankinstanz und eine neue Webapp-Instanz. Jede Webapp Instanz wird von einem HTTP-Server ein Passwort geschützt (verdauen oder Grund Genehmigung, vielleicht über https).

  • Keine Internationalisierung. Nur Englisch Zeichenfolge im Quellcode eingebettet ist.

  • Keine Entkopplung. Webpages gerade das Gespräch auf die Datenbank.

  • Keine Leistung Tricks. Keine Warteschlangen, Caches, Timer, Hintergrundjobs, asynchrone Aufrufe, etc.

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

  • Darüber hinaus verwenden YAGNI auf der Mikroebene, wann immer geeignet.

Ich will nur das Projekt starten und so schnell wie möglich einen Punkt zu erreichen, wo ich verkaufen kann (oder versuchen zu verkaufen) meine innovativen Funktionen mit einer einfachen und ansprechenden Benutzeroberfläche.

Wenn der Plan fehlschlägt, weiß ich früh. Wenn es erfolgreich ist, werde ich sehen, was die Kunden dann möchten. Wollen sie eine Französisch-Version? Oder wollen sie Benutzer und Rollen innerhalb der Organisation?

Ist das, was die Leute von YAGNI bedeuten, oder ist dies ein pathologisches und Übertreibung der plötzliche Beispiel YAGNI?

War es hilfreich?

Lösung

ich mit dem YAGNI Prinzip voll und ganz zustimmen, aber Sie wollen immer noch für den Erfolg planen. Wenn eine Anwendung eine vollständige Überarbeitung braucht, wenn es plötzlich mehr als zehn Benutzer hat, dann ist es YAGNI zu weit gegangen.

Einige Dinge, die Sie gehen zu müssen. Aus meiner Sicht sind die beiden wichtigsten Punkte:

  • Sie sich nicht in den Fuß schießen durch Ihre App nicht für die Internationalisierung vorbereitet. Wenn Ihre Anwendung taugt, wird die Internationalisierung auf dem Tisch einen Tag sein. Auch die Fähigkeit, unter Verwendung von UTF-8-fremde Zeichen zu handhaben ist eine absolute Voraussetzung, wenn eine Anwendung von Grund auf im Jahr 2010 Internationalisierung Aufbau kann nicht so wichtig, auf ein Englisch Muttersprachler erscheinen, aber glauben Sie mir, es ist wichtig, und der Schmerz von internationalisieren eine Anwendung später ist schrecklich.

  • Denken Sie zweimal über die keine Sicherheitsfunktionen Sache. Was ist eine Organisation oder eine Gruppe, die mit Benutzern auf verschiedene Sicherheitsstufen mit der App arbeiten will. Es könnte sein, dass dies eine Funktion, die Sie ohne wirklich tun können, ist - ich habe ein feinkörniges Systemsicherheit in vielen meiner Produkte gebaut, die noch zu seinem vollen Potential nie benutzt wurde. Aber denken Sie auch darüber, ob Ihre spezifische Anwendung ohne tun, auch wenn es erfolgreich ist.

Andere Tipps

Das ist, was sie „Prototyping“ nennen. Go for it.

Es gibt eine Feinheit zwischen YAGNI und Prototyping.

  1. Wenn es vom Benutzer angeforderten featuritis ist, und Sie sagen, nein, das ist YAGNI.

  2. Wenn es Implementierung (L18N "Entkopplung" (?), Warteschlangen, Caches, Timer, etc.), und Sie sagen nicht an sich selbst. Das ist nicht wirklich YAGNI. Das Prototyping.

Die meisten von dem, was Sie hier haben, scheint nicht benutzerorientierte Vergolden zu sein. Ich würde das nicht nennen - genau -. YAGNI

YAGNI ist Sie daran erinnert, den Unterschied zwischen dem, was Sie können tun und was Sie tun müssen, um Ihre Anforderungen zu erfüllen.

Zum Beispiel, wenn Ihre Anforderung sagt: „damit die Menschen Konten erstellen und melden Sie sich an“, nur Ihre Framework Methoden Standard Auth verwenden und auf die nächste Anforderung bewegen.

Ihre Web-App können Unterstützung OpenID, Active Directory, lokale Datenbank, Flat File, und eine Unmenge anderer Arten von Authentifizierungsmethoden, aber Sie können die Anforderung erfüllen, indem die einfachste Implementierung. (Für mich YAGNI impliziert DTSTTCPW ).

  

"Ich kann alles tun, genügend Zeit"

     

- Jeder Programmierer ich je getroffen habe

Ich bin kein Fan des YAGNI Prinzip selbst; Ich sehe es viel zu oft in der Begründung von schlecht gestalteter Software verwendet. Über entwickelte Software ist ein Problem, natürlich auch, aber „YAGNI“ nicht wirklich viel Platz für die tatsächliche Wirkungsanalyse lassen.

Es stellt sich heraus, dass viele der Dinge in der Welt der Software, die Sie denken, gehen zu müssen, nicht, die Sie tatsächlich gehen zu müssen. Und dann einige. Who'dathunkit.

Ich habe eine oder zwei Anwendungen geschrieben, die Wegwerf-Apps oder halten Nahmen sein, die immer noch nach zwei Jahren in der Produktion sollte. Sie sind ein Schmerz zu erhalten.

Vor allem, wenn es um so etwas wie Sicherheit geht - Sie sind wahrscheinlich werden es brauchen

.

YAGNI ist ein gutes Prinzip, aber es ist nicht das einzige Konstruktionsprinzip. Viele der oben genannten Sinn machen schnell ein Produkt vor der Nutzer zu erhalten. Aber wenn zum Beispiel beginnen die Webseite, die direkt auf die Datenbank sprechen zu jedem dupliziert Code haben Sie auf einem Prinzip, dass die sklavische Abhängigkeit finden werden (YAGNI) unter Ausschluß der anderen (in diesem Fall DRY) wird Ihre Möglichkeiten einschränken, reagieren auf Ihre hoffentlich wachsende Zahl der Nutzer Feature-Requests.

Wenn Sie gehen, um wirklich eine revolutionäre Web-Anwendung für den Enterprise-Markt zu entwickeln Ich bin mir nicht wirklich sicher, was diese Dinge Y ou A int G onna N eed.

Auch Ihre Beispiele sind ziemlich spezifisch. Zum Beispiel, wenn Sie sagen: „keine Sicherheitsfunktionen“ ... Ich würde sagen, dass die Nutzer eine Sache vielleicht haben Sie ohne tun können, aber Ihre Eingaben Hygienisierung ist eine Sie können es nicht. Auch „Skalierbarkeit“ ist nicht eine Frage der Datenbank sharding oder Replikation, das sind Entscheidungen, die Sie, nachdem Sie Ihre Anwendung realisieren nicht gut skalierbar ist.

würde ich eher vorsichtig sein bei der Verwendung von YAGNI als Design-Richtlinie auf hohe Niveau, sie paßt am besten, wenn Sie ungerade Produkteigenschaften sprechen oder vielleicht Softwarekomponenten extreme Flexibilität.

Nur mein 0,2

Wenn Sie eine „YAGNI“ so extrem (und ich werde Diskussionen über umgehen, ob oder nicht, das ist eine gute Idee, wie auch Diskussionen darüber, ob oder nicht, das ist wirklich „YAGNI“), sollten Sie bereit sein gnadenlos zu Refactoring Ihre Code-Basis hinzufügen in später, was Sie auslassen jetzt ohne einen Ball von Schlamm zu schaffen.

In meinem Kopf YAGNI wird am häufigsten in Zusammenhang verwendet mit einem Entwickler denken „oh wäre es klug sein, wenn wir auch Feature X. hinzugefügt Wir haben es in der Zukunft brauchen könnte.“ Nie immer Funktionen hinzufügen, die nicht erforderlich ist.

, dass Ihr Code wird gesagt immer für Änderungen offen sein sollte, wenn Ihr Kunde denkt Funktion Y unbedingt notwendig ist. Eine gute Architektur ist ein Muss!

In Bezug auf Skalierbarkeit, Warteschlangen-Caching: Es hängt davon ab. Was ist die Voraussetzung für die Anwendung? Ist es eine Intranet-Site von 10 gleichzeitigen Benutzern verwendete oder ist es eine beliebte Website mit Millionen von Nutzern. Es hängt davon ab, ob. Suchen Sie nach den Anforderungen und tun das - nichts weiter. YAGNI. Wenn Ihre Anforderung ändern; ändern Ihre Anwendung -. es sollte für Änderungen offen sein

YAGNI ist gut, wenn es eine gute Chance ist finden Sie nie es brauchen. Wenn Sie es nicht brauchen jetzt aber sind Sie fast sicher, dass Sie es brauchen in absehbarer Zeit, dann ist es fast immer einfacher ist es, vorne zu passen als später. Wenn Sie rechtfertigen die Umsetzung nicht Dinge, die Sie nicht müssen diese zweite wird aber in naher Zukunft durch YAGNI mit ziemlicher Sicherheit brauchen, das ist, wo die Probleme beginnen.

Der Punkt, der YAGNI ist nur eine große Haupt unter vielen ist gut zu merken; manchmal YAGNI schlägt eine Entscheidung, aber es gibt genauso gut (oder besser) Gründen einen anderen zu bevorzugen.

Hier ist ein Bereich, wo ich einige YAGNI Befürworter fühlen zu weit gehen kann: Wenn Sie mit OOD / Polymorphismus vertraut sind, ist es in der Regel kostet Sie nur sehr wenig zu „backen in“ einige große Erweiterungspunkte für die zukünftige Verwendung, auch in einem Prototyp .

Hier ist ein Beispiel ...

Sie erstellen einen Prototyp Webapp, die die Fähigkeit umfasst eine druckfreundliche Version eines Berichts angezeigt werden soll. Sie müssen schnell arbeiten, aber haben ein ziemlich gutes Gefühl, die steakholders für die Fähigkeit, fragen Sie den Bericht auch auf der ganzen Linie E-Mail.

In Ihrem serverseitigen Java-Code, blenden Sie die Kenntnis der Tatsache, dass der Bericht für den Drucker hinter einer Schnittstelle vorbereitet. Erstellen Sie eine konkrete Klasse, die die Schnittstelle erweitert die Verantwortung zu halten. Sie eigentlich nicht gehen und schreiben eine E-Mail-Version der Schnittstelle, da YAGNI. Aber wenn Sie jemals tun, sind Sie setzen Sie sich auf Ihre vorhandenen Funktionen ohne Blutbad hinzuzufügen.

Ich würde sagen, dass, wenn Sie durch das Wegwerfen alle gesunden Menschenverstand und macht das ganze Projekt in der die meisten expediant Art und Weise möglich anfangen, dann, was Sie mit am Ende wird ... ein großer Haufen scheitern wird, die durch keine ist bedeutet Revolutionary (tm).

Wenn Sie wirklich wissen wollen, ob es sinnvoll sein wird, haben einige Bildschirm mock ups. Vielleicht sogar nur regelmäßige alte hart codierte html. Nehmen Sie diejenigen, um potenzielle Kunden und sehen, ob Sie Ihren Fuß in die Tür bekommen. Wenn einige von ihnen zu beißen beginnen, dann den Hintern Büste und es bauen.

Es wird Zeit in Anspruch nimmt einen Vertrag an Ort und Stelle zu bekommen, Zahlung zu erhalten, und jemand auf Ihren Kunden Personal bekommen, um tatsächlich zu verwenden zu beginnen. Während das vor sich geht, bauen es.

Die meisten wahrscheinlich, was passieren wird, ist, dass potenzielle Kunden Ihre App sehen und hoffentlich Ihnen sagen, warum es nicht für sie arbeiten. Ändern Sie die Mock-ups und gehen Sie zurück. Iterate wie nötig, bis Sie ein Front-End-Design für Ihr Produkt haben, dass jemand bereit ist zu zahlen.

Was ich tun würde, ist:

1) Entwerfen Sie es in Betracht, die richtigen architektonischen Entscheidungen. Internationalisierung und Sicherheit sind wahrscheinlich müssen diesen Fall haves in.

2) Bei der Entwicklung, erstellen Sie die Haken für diese Grundsätze später umgesetzt werden. Also, wenn Sie Zeit und Budget haben, können Sie diese implemente ohne großen Umbau zu tun.

3) Dann können Sie auf die Funktionen konzentrieren, die Ihre Anwendung fliegen würde und sind wichtiger, um Ihre potenziellen Kunden.

Also ich denke, in diesem Fall, dass ich mehr von dem KISS Ansatz verwenden als „extremer YAGNI“, wie Sie vorgeschlagen.

Meiner Meinung nach, sollte YAGNI standardmäßig gefolgt werden, da es für Steigerung der Produktivität stark .

Es gibt einige Ausnahmen, dachte. Zum Beispiel, wenn Sie eine 3rd-Party-Bibliothek entwickeln, müssen Sie zumindest ein wenig vor der Zeit denken und einige zukünftigen Bedürfnisse der Nutzer zu antizipieren. Das ist nicht zu sagen, dass Sie auf YAGNI vollständig aufgeben müssen, aber man sollte es nicht so streng wie bei einer Inhouse-Entwicklung folgen.

Ja, aber ...

Ich neige dazu, mit vielen Ihrer Überlegungen außer die „keine Entkopplung“ zu einigen, weil die „es“ in YAGNI steht für Funktionalität, keine Schritte für das Denken. Einführung in einige Abstraktionen (nur zur Entkopplung benötigt diejenigen) wird tilgen sofort in Bezug auf die Fehler nicht gemacht oder Fehler schneller gefunden und entfernt werden.

Ein schöner (weil es spart Ihnen denken) Möglichkeit, diese Abstraktionen einzuführen wäre zu einen guten Web-Framework verwenden und einfach seine vorgeschlagene Anwendung folgen Strukturierung Stil .

Als Nebenleistung, wäre es dann viel einfacher geworden, die Sicherheit zu erhöhen, Internationalisierung, Performance und Skalierung Sachen später und Ihr YAGNI-verhalten soll jetzt ziemlich sicher sein.

(Leider gilt das Argument nur, wenn Sie das wissen Web-Framework bereits. Wissen herrscht in YAGNI Reich).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top