Generell ist es besser, alle funktionalen Teile zu erstellen oder die Benutzeroberfläche zuerst zum Laufen zu bringen - oder eine Mischung aus beiden?

47

Generell ist es besser, alle funktionalen Teile zu erstellen oder die Benutzeroberfläche zuerst zum Laufen zu bringen - oder eine Mischung aus beiden?

Angenommen, Sie arbeiten an etwas Großem. Ist es allgemein anerkannt, dass alle Funktionsdatenerfassungs-Blobs vor einer Benutzeroberfläche funktionieren, dass alle Benutzeroberflächen einzeln oder in der Mitte arbeiten?

Wir alle wissen, dass die Arbeit in überschaubare Teile zerlegt werden muss, aber letztendlich stellt sich die Frage, ob die Benutzeroberfläche in überschaubare Teile eingeschlossen ist, nehme ich an.

Betrachten Sie für den Fall des Beispiels eine GUI-Anwendung mit einem Stammfenster, aber über einem Dutzend Registerkarten in verschiedenen Docks, um verschiedene Datenkomponenten zu trennen. Hinter jeder einzelnen Registerkarte befindet sich aus Sicht der Funktionseinheiten ein relativ komplexer Satz beweglicher Teile.

Die Beispielanwendung in dieser speziellen Frage ist hier mit dem begleitenden Blog und dem ursprünglichen kommerziellen Produkt .

RobotHumans
quelle

Antworten:

85

Es gibt eine allgemeine Vorstellung bei vielen Business - Anwender und Kunden , dass , wenn es aussieht komplett, es ist fast abgeschlossen. Wie Sie wahrscheinlich wissen, ist dies weit von der Wahrheit entfernt. Man kann es schön aussehen lassen, aber ohne Backend und einige Benutzer denken, dass es 80% der Arbeit ist, es schön aussehen zu lassen, nicht 20% ( oder die anderen 80% ).

Unzählige Entwickler können Horrorgeschichten darüber erzählen - ein Modell der Seiten in Microsoft Word mithilfe von Screenshots eines anderen Tools erstellen und der Kunde sagt: "Also, Sie haben es fast geschafft?"

Sie müssen das Tempo so einstellen, dass alle Teile fertig sind, wenn sie fertig sind. Der Versuch, zuerst das gesamte Backend und dann das gesamte Frontend zu bearbeiten, führt dazu, dass der Endbenutzer denkt, dass Sie nichts tun und fragt, warum Sie bezahlt werden, wenn es nichts zu zeigen gibt. Auf der anderen Seite steht das Front-End an erster Stelle, und der Endbenutzer nimmt wackelige Änderungen vor und verbraucht die ganze Zeit.

Der schlimmste Fall bei einem 'einen zuerst und dem anderen' ist, wenn Sie zu dem anderen Teil gelangen, stellen Sie fest, dass es überhaupt nicht zum Design passt.

Bauen Sie also beide. Zeigen Sie den Fortschritt im Front-End und lassen Sie das Back-End mit dem arbeiten, was Sie erstellen. In vielen Fällen ist es eine gute Idee, inkrementelle Builds bereitzustellen und sicherzustellen, dass Sie das machen, was der Client will (dies wird zu Agile). Zu lange Wartezeiten ohne "sichtbare Fortschritte" können die Kundenbeziehung beeinträchtigen (dies gilt für die beiden Fälle "Alles scheint früh erledigt zu sein" und "Nichts wird bis zum Ende erledigt" die Unit-Tests oder Datenbereinigung als Fortschritt).

Joel schrieb darüber in The Iceberg Secret, Revealed :

Wichtige Folgerung Zwei. Wenn Sie einem Nicht-Programmierer einen Bildschirm zeigen, dessen Benutzeroberfläche zu 100% schön ist, wird er denken, dass das Programm fast fertig ist.

Leute, die keine Programmierer sind, schauen nur auf den Bildschirm und sehen einige Pixel. Und wenn die Pixel so aussehen, als ob sie ein Programm bilden, das etwas bewirkt, denken sie: "Oh Gott, wie viel schwieriger könnte es sein, es tatsächlich zum Laufen zu bringen?"

Das große Risiko besteht darin, dass jeder denkt, dass Sie fast fertig sind, wenn Sie zuerst die Benutzeroberfläche verspotten, wahrscheinlich, damit Sie einige Gespräche mit dem Kunden führen können. Und wenn Sie dann das nächste Jahr damit verbringen, sozusagen "unter der Decke" zu arbeiten, wird niemand wirklich sehen, was Sie tun, und sie werden denken, dass es nichts ist.

Dies wird erneut im Blog-Beitrag wiederholt. Lassen Sie die Demo nicht fertig aussehen , da sie dieses hilfreiche Diagramm enthält:

Wie es gemacht ist, wie es aussieht

Beachten Sie hier, dass die beiden Optionen im Allgemeinen das "erledigen Sie die Benutzeroberfläche" (und dann ist zu erwarten, dass Sie bald fertig sind) und das "erledigen Sie das Backend" (und der Kunde ist dann besorgt, dass Sie die Frist verpassen) widerspiegeln.

Das Aussehen von "erledigt" sollte mit dem Aussehen von "erledigt" übereinstimmen.

Jeder Softwareentwickler hat dies in seiner Karriere viele Male erlebt. Aber Desktop-Publishing-Tools bereiten den technischen Redakteuren die gleichen Kopfschmerzen. Wenn Sie jemandem einen groben Entwurf zeigen, der perfekt geschrieben und formatiert ist, wird er als erledigter angesehen, als Sie möchten. Wir brauchen eine Übereinstimmung zwischen dem, wo wir sind und dem, was andere für uns halten.

In diesem Artikel wird auch ein wichtiger Punkt zur Art des Feedbacks angesprochen, das Sie mit den verschiedenen Ebenen der Helligkeit der Benutzeroberfläche erhalten. Wenn Sie etwas haben, das vollständig aussieht, erhalten Sie mit größerer Wahrscheinlichkeit Feedback zu "Könnten Sie die Schriftart ändern?" Als zu "Dieses Layout funktioniert nicht - es gibt zu viele Registerkarten."


Für diejenigen, die in der Java-Swing-Welt damit kämpfen, gibt es ein Look-and-Feel namens Napkin , das es so macht, dass die Benutzeroberfläche nicht vollständig aussieht (selbst wenn es so ist).

Der Schlüssel hier ist, es so zu machen, dass es nicht fertig aussieht . Das vollständige Erscheinungsbild der Benutzeroberfläche ist für viele Geschäftsbenutzer ein Signal dafür, dass die Anwendung vollständig ist (auch wenn es sich nur um ein paar statische Seiten handelt, hinter denen sich keine Logik befindet oder die in einem Interface Builder integriert sind).


Weiterführende Literatur (und Links aus dem Artikel):


quelle
7
Klingt so, als würden Sie eine Art agiler Methodik vorschlagen ... :)
Alexander
7
@Alexander Agile hilft in diesem Fall, ist aber nicht unbedingt erforderlich. Wasserfall kann (lieferbare) Meilensteine ​​haben und Kunden können sehr enttäuscht sein, wenn sie sehen, dass "es so aussieht, warum gibt es noch 3 Meilensteine, die genauso lange dauern?" FWIW, ich hatte Fälle, in denen der Geschäftsbenutzer dachte, dass dies aufgrund des Screenshots und der Farbe im technischen Design (Wasserfallladen) gut aussah.
3
Falls Sie keine Expertenantwort auf dieses Video gesehen haben, finden Sie diese hier: youtu.be/B7MIJP90biM
ragol
3
Ich habe UIs für den Großteil meiner Programmierkarriere entworfen und NICHT EINMAL nahm ein Kunde an, dass ein UI-Prototyp bedeutete, dass die Software "fast fertig" war. Für mich klingt es so, als ob die Moderatoren von Wireframe-Benutzeroberflächen die Wireframes im Vorfeld nicht gut erklären, wenn die Kunden irgendwie verwirrt sind, dass das Projekt fast abgeschlossen ist.
Graham
2
+1 für Serviette L & F. Das wird sicherlich in meiner Zukunft sein. :)
Kathy
27

Es kommt darauf an: Sie benötigen eine enge Rückkopplungsschleife für Ihre wichtigste Funktionalität

Wenn der Kern dessen, was Sie tun, der riskante und beängstigende Teil, ein interner Motor ist, dann bringen Sie den Kern dazu, dass er beispielsweise in der Konsole oder durch Komponententests funktioniert. Ein Protokollparser benötigt beispielsweise keine Benutzeroberfläche, um zu wissen, ob er ordnungsgemäß funktioniert.

Wenn Ihre coole Sache Interaktivität beinhaltet - Interaktivität, die Sie ständig beheben, wegwerfen und neu entdecken müssen -, dann ist ein UI-First-Ansatz von entscheidender Bedeutung. Ich möchte beispielsweise eine App erstellen, mit der Benutzer mit einer Datenvisualisierung interagieren können. Das Wichtigste, was ich herausfinden muss, ist, ob die Visualisierung aussagekräftig ist. Daher werde ich wahrscheinlich ein halbes Dutzend Ansätze wegwerfen, bevor ich mich auf einen einlasse. Ich mache das alles, bevor ich einen Einzeltest schreibe.

Dazwischen befindet sich ein verschwommener grauer Bereich, in dem Sie entscheiden können, wie Sie am besten mit Ihrem Code interagieren und ihn validieren (automatisierte Tests? Benutzeroberfläche für Experimente?). Ich persönlich habe beide Extreme und alles dazwischen getan, und die Entscheidung, an welcher Stelle ich mich in diesem Spektrum befinde, ist eine der schwierigsten Entscheidungen, die ich treffen muss, und hängt zu 100% von der Art der Dinge ab, die ich baue.

Doug T.
quelle
2
Identifizieren und adressieren Sie die riskantesten und kritischsten Komponenten im Vorfeld, um das Risiko von Überläufen und / oder Ausfällen zu verringern. Ob es sich bei diesen Komponenten um die Benutzeroberfläche, die Geschäftslogik usw. handelt oder höchstwahrscheinlich um eine Kombination aller verschiedenen Komponenten.
Alexander
1
Es hört sich wirklich so an, als würden Sie mit mir über das Prototyping sprechen. Wenn Sie immer noch Designs wegwerfen, sollten Sie das wiederholen - nicht den eigentlichen Code.
Aaronaught
8

In einer agilen Umgebung kann es zu Diskussionen über "Laufskelette" oder "dünne vertikale Scheiben" kommen. Die Idee ist, dass Sie die Software Stück für Stück auf eine funktionierende Art und Weise aufbauen, da es für den Benutzer wichtig ist, dass Software funktioniert.

In der von Ihnen erwähnten Beispielanwendung würden Sie mit dem Fenster und möglicherweise einer Registerkarte beginnen und dafür sorgen, dass alles in gewisser Weise von vorne nach hinten funktioniert. Dann würden Sie im Laufe der Zeit von Fall zu Fall Funktionen und daher Registerkarten hinzufügen, damit jedes Feature beim Erstellen funktioniert. Dies ist ein Teil dessen, was Ihnen häufige Kundendemonstrationen bieten: Sie haben die Möglichkeit, etwas Neues zu zeigen und sofort Feedback dazu zu erhalten.

Kurz gesagt, ja, UI-Arbeit ist ein absoluter Bestandteil einer funktionalen Arbeitseinheit, wenn Sie über eine UI verfügen.

Beginnen Sie mit etwas Kleinem, das funktioniert, und iterieren Sie seine Funktionalität, um eine vollständige Software bereitzustellen.

Keith B
quelle
+1 Es ist wichtig, immer ein versandfähiges Teil zu haben.
JensG
@Jens: "Es ist wichtig, immer ein versandfähiges Stück zu haben", ist ein Canard. Bestenfalls gilt dieser Spruch nur für eine Minderheit von Softwareanwendungen. In der realen Welt sind Anwendungen, die nur einen Teil der Arbeit erledigen, nicht im geringsten nützlich.
Dunk
Das sind deine Erfahrungen. Ich habe verschiedene. Große, reale Projekte mit vielen Meilensteinen und echten Kunden.
JensG
1
@Dunk: Eine Anwendung, die keinen Teil des Jobs ausführt, ist weniger nützlich als eine Anwendung, die einen Teil des Jobs ausführt. Ich spreche jedoch nicht von einer Anwendung, die "erledigt" ist. Ich spreche über die Reihenfolge, in der eine Anwendung erstellt werden soll. Meine Erfahrung ist mit JensG kongruent: Es macht Kunden viel glücklicher, immer eine Beta zu schneiden, die auf dem basiert, was Sie in dieser Woche vorgeführt haben, und sie an die Kunden zu versenden.
Keith B
Dies ist die einzige Antwort, mit der ich mich identifizieren kann. Die anderen scheinen nicht einmal die Möglichkeit in Betracht zu ziehen, dass eine gute Produktentwicklung nicht sauber in "UI" und "Back-End" zerfällt. Es ist eine Frage, die sich nur ein Programmierer- oder Projektmanager-Neuling jemals stellen würde, und keine, die ein erfahrener Programmierer oder PM als bare Münze ansehen sollte. Die Idee zu fragen, was "zuerst gemacht" werden soll, stinkt nach Wasserfall.
Aaronaught
3

Ich würde empfehlen, eine Mischung aus Funktionalität und Benutzeroberfläche zu erstellen (und so schnell wie möglich Feedback zu erhalten oder Erfahrungen zu sammeln).

Übrigens, ist es nicht die Art und Weise, wie die meisten großen GUI-Software entwickelt wird? Schauen Sie sich zum Beispiel den Firefox- Browser an: Von einer Version zur nächsten haben sich Funktionalität und Benutzeroberfläche weiterentwickelt.

Basile Starynkevitch
quelle
2

In großen (PHP-webbasierten) Anwendungen, an denen ich arbeite, versuche ich zuerst, die Klassen und Methoden einzurichten, die Dummy-Werte zurückgeben . Hiermit wird ein Pseudovertrag erstellt, mit dem die anderen Entwickler die Benutzeroberfläche implementieren können.

Ein sekundärer Vorteil dieser Methode ist, dass wir den Vertrag / die Schnittstelle optimieren können, wenn sich die UI-Anforderungen ändern (und sie ändern sich immer), noch bevor der gesamte Code geschrieben und ausgeliefert wurde.

dotancohen
quelle
Das ist etwas, was ich zu tun versuche. Da mein spezielles Projekt als massive UI-Shell implementiert ist und jeder Datenpunkt-Harvester ein Plug-In ist, ist jedes Plug-In für die Verwaltung seiner eigenen UI-Komponenten verantwortlich. Auf diese Weise ist für eine bestimmte Person / Personengruppe kein "Vertrag" erforderlich. Die Annahme ist, dass die gleiche Gruppe von Personen an einem bestimmten Plug-In von Anfang bis Ende arbeitet. Das ist einer der Gründe, warum ich es so gestalte, wie ich bin. Alternativ ist dies für andere Projekte ein hervorragender Ratschlag. Also stimme mir zu, denn es wird für andere nützlich sein.
RobotHumans
2

Ich tendiere dazu, mit einer beschissenen Benutzeroberfläche zu beginnen : Etwas, das nur die variablen Daten auf dem Bildschirm ausgibt. Keine Schriften, keine Ausrichtung, lange Zeit nichts Grafisches. Nur "Welcome user x" und Buttons mit dem Namen "load pic" usw. Das Gute daran ist, dass Sie herausfinden, ob im Backend etwas kaputt ist.

Mit fortschreitender Entwicklung müssen möglicherweise mehr oder weniger Dinge erledigt werden. Aber irgendwann werden Sie feststellen, dass das Backend fast fertig ist. Jetzt haben Sie eine Benutzeroberfläche, die alle benötigten Anhänge enthält, und Sie können viel Zeit mit den grafischen Arbeiten verbringen.

Achtung, es ist nicht narrensicher. Sie benötigen ein wenig Voraussicht, um bestimmte Probleme zu erkennen. Möglicherweise müssen Sie nach UI-Komponenten suchen, um die Daten sinnvoll anzuzeigen.

Carlos
quelle
Und wo kommt der Kunde in Ihrer Methodik ins Spiel? Denken Sie daran, dass Ihr Kunde normalerweise nur eine sehr allgemeine Vorstellung davon hat, was er möchte. Es liegt an Ihnen, herauszufinden, wie Sie genau das herausholen können, was sie wollen, damit Sie es bauen können. Ihre Methodik hat nur das erstellt, was Sie denken, dass der Kunde es wünscht, aber das wird selten das sein, was der Kunde tatsächlich will. Sie haben also eine Menge Zeit damit verschwendet, etwas zu programmieren, das der Kunde nicht möchte.
Eintauchen
Ah, meine "Kunden" sitzen direkt neben mir und ich habe einen Hintergrund auf dem Gebiet, der mir eine ziemlich gute Vorstellung davon gibt, was gewünscht wird. Grundsätzlich sind wir immer in der Nähe des Endprodukts, was die Benutzeroberfläche betrifft, und ich kann immer ein Feedback erhalten. Ich hatte das Problem einer langen Rückkopplungsschleife nicht in Betracht gezogen. Ich denke, das Domainwissen ist der Schlüssel.
Carlos
0

Wenn Sie ein gutes Meilenstein- und Problemverfolgungssystem verwenden, können Sie einige dieser Probleme vermeiden, da das Management auf einen Blick erkennen kann, wie produktiv Sie sind. Sie werden sehen können, dass Sie das Backend zu 80% abgeschlossen haben und dass die Benutzeroberfläche der nächste Meilenstein ist. Sie können sehen, dass Sie eine Reihe von UI- und Backend-Aufgaben haben, die für einen bestimmten Feature-Meilenstein abgeschlossen werden müssen. Aber alles beginnt mit den Anforderungen des Projekts, und die Antwort von Doug T wirft einige gute Punkte in Bezug auf diesen Aspekt des Entwurfs eines Systems auf.

Derek
quelle
0

Denken Sie an die Sicht Ihrer Benutzer / Kunden. Ein Softwaresystem ist eine Sammlung von Funktionen, die den Benutzern / Kunden einen Mehrwert bieten. Natürlich hat jede dieser Funktionen eine Benutzeroberfläche, ein Backend und einige andere Dinge.

Bauen Sie Ihr System immer Feature für Feature auf und teilen Sie es in sehr kleine Features auf. Auf diese Weise sind Sie immer in der Nähe, um Ihren Kunden etwas mehr zu bieten. Denken Sie daran, dass es bei der Softwareentwicklung nicht darum geht, die Version 1.0 zu erstellen, sondern um die Version 1.0.1 bis 1.0.2 und so weiter ...

AlfredoCasado
quelle
0

Es hängt davon ab, ob. Wie genau sind Ihre Anforderungen definiert? Wie stark ist die Benutzeroberfläche von dem System betroffen?

Nach meiner Erfahrung wissen die meisten Kunden erst, was sie wollen, wenn sie etwas vor sich sehen. Daher stelle ich normalerweise einige Wire-Frames mit wichtigen UI-Aspekten bereit oder stelle den Großteil der UI bereit (funktioniert nicht). Auf diese Weise kann der Kunde seine Meinung zu Features / Funktionen ohne allzu großen Einfluss ändern, da sich das Datenbankdesign und die Codestruktur noch in der Entwurfsphase befinden - es ist einfach, das Design zu ändern. Es ist um Größenordnungen einfacher / schneller, das Design früher im Projekt als später zu ändern.

Agile heißt, Sie sollten auch zuerst an den schwierigsten und wichtigsten Dingen arbeiten. Scheitern Sie schnell . Sobald der Kunde die Benutzeroberfläche gesehen hat, konzentriere ich mich darauf, kleine Komponenten zu erstellen, die voll funktionsfähig sind. Dabei geht es darum, die wichtigsten und am schwierigsten zu implementierenden Komponenten zuerst zu besprechen, damit Sie so schnell wie möglich wissen, ob Sie auf Hürden stoßen.

Dann haben Sie Ihre Sprints und stehen in ständiger Kommunikation mit dem Kunden, um sowohl die Benutzeroberfläche als auch die funktionalen Aspekte zu verbessern.

Daveo
quelle