Ok, ich bin schon oft darauf gestoßen, aber hier ist das Worst-Case-Szenario etwas übertrieben.
Ein Kunde sagt: "Hey, können Sie uns dieses kleine Modul für diese kleine Aufgabe machen?"
Ich: "Sicher kein Problem".
Aufgrund von Budgets, Einschränkungen usw. überspringe ich einige der Architekturen und tauche direkt ein, damit es nicht ins Schwitzen kommt.
Dann fragen sie nach einem anderen Modul. Und ein anderer. Und einige Verbesserungen. Und das alles geschieht über Jahre hinweg sehr langsam. Und bevor Sie es wissen, haben Sie diese Monsteranwendung, die schrecklich aufgebaut ist.
Was machst du, wenn du aufgefordert wirst, etwas Kleines zu tun? Sie wissen nicht, ob es weiter wachsen wird ... ob der Kunde weiterhin nach Ergänzungen fragen wird (und sie auch nicht).
Sie können das Ding nicht überarchitekturieren, weil es immerhin nur eine kleine Anwendung ist, und sie werden woanders hingehen, wenn Sie sagen (da ich alle Stimmen kenne): "Nun, nur für den Fall, lassen Sie uns dieses Ding in Schichten mit Top konstruieren -o-the-Line-Sicherheit und Trennung von Bedenken. Lassen Sie uns in der Tat mit einem Tool zur Abhängigkeitsinjektion gehen, das dieses Ding wirklich fantastisch macht. bla bla bla ".
Sie werden "Ja, richtig" sagen und zu jemand anderem gehen.
Budget, Zeit und Wahrnehmung sind ebenso wichtig wie die Architektur der Anwendung selbst.
Wie soll das angegangen werden?
Ich denke, die Frage läuft wirklich darauf hinaus: "Wenn Sie nicht alle Informationen für das Endergebnis einer scheinbar kleinen Anwendung haben, wie können Sie vermeiden (oder abschwächen), frühzeitig architektonische und Designentscheidungen zu treffen, die vollständig sind." später nicht geeignet?
Mach ihm einfach eine kleine App und werde dafür bezahlt.
Nach meiner Erfahrung ist es zwingend, am Anfang mehr Zeit zu investieren, als wirklich benötigt wird, nur für den Fall, dass der Kunde mehr möchte. Aber Sie müssen den Aufwand dafür abwägen (werden Sie dafür bezahlt) und die Wahrscheinlichkeit, dass all diese zusätzlichen Änderungen tatsächlich eintreten werden. Die gesamte App wird möglicherweise nach einem Jahr vollständig ersetzt.
Und wenn Sie Zeit in die ursprüngliche Architektur investieren, haben Sie möglicherweise das Gefühl, sich selbst einen Gefallen zu tun. Aber wirklich, Sie tun dem Kunden nur einen Gefallen, indem Sie die anderen Module für ihn billiger machen.
Stellen Sie Ihrem Kunden für jedes nachfolgende Modul ein bisschen mehr in Rechnung und überarbeiten Sie das erste Projekt Schritt für Schritt, aber immer nur, um den Kundenanforderungen zu entsprechen.
quelle
Frühere Antworten sind gut und, wenn ich ehrlich bin, was ich wahrscheinlich tun würde. Trotzdem bin ich bei diesem Ansatz etwas unruhig, da Sie Entscheidungen treffen, die dem Kunden gehören, basierend auf der Annahme, was er will (und dem Wunsch, den Job zu bekommen).
Ich kann nicht Gefühl , das man Hilfe sollte tun werden , ist mit dem Kunden ehrlich zu sein und gibt ihnen die Wahl: 1. Ich kann dies tun , schnell und (relativ) billig jetzt. Es wird großartig sein - es wird funktionieren - aber zukünftige Verbesserungen werden inkrementell etwas mehr kosten. 2. Ich kann mehr Zeit im Voraus damit verbringen, was etwas mehr kostet und keinen wirklichen Nutzen für die Benutzer bringt, ABER Auf lange Sicht sparen Sie Geld, wenn Sie neue Funktionen hinzufügen müssen.
Im Idealfall können Sie ihnen einige Zeit- / Kostenangaben für das Baseballstadion geben - andernfalls könnte das Gespräch zu akademisch sein -, aber ich schätze, dass es auch mühsam sein kann, diese Zahlen zu ermitteln. Zumindest würde die Gestaltung der Diskussion in Bezug auf frühere Projekte dem Kunden das Leben erleichtern (und das Leben des Kunden zu erleichtern, sollte oberste Priorität haben :-))
Kommentare, die andere über eine gute Arbeitsbeziehung abgegeben haben, sind genau richtig - aber Sie können diesen Prozess beginnen, indem Sie selbst ehrlich sind. Wenn der Kunde der Typ ist, mit dem Sie nicht einmal ein Gespräch führen können, ist es jetzt vielleicht an der Zeit, sich zu fragen, wie sehr Sie diesen Job brauchen ...
quelle
Ich würde jede dieser "Iterationen" als separates Projekt behandeln. Sie sollten diese Projekte schließen, wenn jedes kleine Modul oder jede Ergänzung abgeschlossen ist. Wenn sie dann etwas anderes wollen, entwerfen Sie die Unterlagen. Und mit der Zeit wird die Software teurer ... was bedeutet, dass Sie für jedes kleine Projekt mehr verlangen.
Es ist eine Möglichkeit, es zu betrachten, anstatt eines ... LONGGGGGG-Projekts.
quelle
Das kannst du nicht . Programmierer sind keine Hellseher. Während wir einfache Dinge vorhersagen oder Verbesserungen der Benutzeroberfläche sehen können, können wir nicht wirklich über das hinaus programmieren, von dem wir nicht wissen, dass der Client es später möchte (sehen Sie den Wahnsinn dort?).
In Ihrer Frage wurde erwähnt, dass es Geschäftsprozesse gab, aber ich bin mir nicht sicher, ob es sich um gute Prozesse handelt. Hier sind einige Hinweise:
Ihr überwachsenes Produkt
Es passiert uns allen. Der Wiederaufbau von Grund auf ist normalerweise eine schreckliche Idee, insbesondere wenn man bedenkt, dass er in Zukunft erneut durchgeführt wird.
Stattdessen würde ich die vom Benutzer angeforderten Änderungen unter Vertrag nehmen. Fügen Sie für jedes Feature zusätzliche Zeit hinzu, indem Sie die ursprüngliche Zeit für die Bearbeitung des Features und die zusätzliche Zeit für die Verbesserung der Gesamtarchitektur verwenden, jeweils eine kleine Verbesserung. Das Ziel ist nicht, die Architektur in einem Vertrag vollständig zu "reparieren", sondern sie im Laufe der Zeit langsam zu bearbeiten.
Verbessern Sie langsam die Code-Iteration durch Iteration und konzentrieren Sie sich dabei auf die Teile, die wirklich wichtig sind.
quelle