Benutzer Anforderungen alleine zusammenstellen oder weiterleiten lassen?


16

Ich bin sicher, jeder hat so etwas erlebt. Sie treffen sich mit einem Kunden, der ein Projekt hat. Sie haben keine oder nur wenige Anforderungen und das vage Verständnis dafür, was sie wollen / brauchen. An diesem Punkt scheint es zwei Möglichkeiten zu geben:

1) Sagen Sie den Benutzern: "Ok, also kann ich nichts für Sie bauen, wenn Sie es noch nicht einmal beschreiben können. Warum kommen wir nicht in ein paar Wochen wieder zusammen, wenn Sie wissen, was Sie wollen."

2) Treffen Sie sich einige Male mit den Benutzern und helfen Sie ihnen dabei, herauszufinden, was sie wollen, indem Sie sie mit der guten alten sokratischen Methode führen. "Müssen Sie X verfolgen?", "Wie wäre es mit Y?", "Benötigen Sie die Funktionalität Z?"

Bei der ersten Option sind Sie nicht daran gehindert, die Arbeit eines anderen zu erledigen oder psychische Fähigkeiten zu erlangen. Die Benutzer stellen Ihnen jedoch möglicherweise nie eine schlüssige Spezifikation vor, oder sie können eine Ewigkeit in Anspruch nehmen, während die Frist immer näher rückt. Mit der zweiten Option verschwenden Sie viel Zeit damit, ein Business Analyst zu werden, und müssen eine Menge Business-Wissen in Ihren Kopf stecken, das Sie wahrscheinlich nie wieder verwenden werden, aber es ist viel wahrscheinlicher, dass Sie eine solche Spezifikation herausbringen macht keinen Sinn.

Für mich ist dies einer der herausforderndsten Aspekte der Entwicklung, und ich habe das Gefühl, mit diesem Gefühl nicht allein zu sein. Welche dieser Optionen funktioniert Ihrer Erfahrung nach besser?


neugierige frage: warum ist ihrer meinung nach die anforderungsanalyse die aufgabe eines anderen?
Steven A. Lowe

@Stephen - Nun, weil ich die Anforderungen tatsächlich von internen Geschäftsanalysten erhalte, die die Anforderungen von den tatsächlichen Benutzern sammeln sollen. Sie könnten richtig sein, dass es wirklich meine Verantwortung sein sollte, aber ihr Job scheint schrecklich überflüssig, wenn das der Fall ist. Wie beim Testen verstehe ich, dass ich eine gewisse Menge an Tests durchführen muss, aber ich bin am produktivsten, wenn ich unsere Tester diese Arbeit machen lasse. Bestimmte Dinge können nicht von Testern getestet werden, und ich weiß, dass bestimmte Anforderungen von BAs nicht erfasst werden können, aber wenn dies ihre Aufgabe ist, sollte ich wahrscheinlich nicht alles tun.
Morgan Herlocker

1
Vielen Dank für den Zusammenhang, Ihre Frage macht jetzt viel mehr Sinn. Auf der einen Seite klingt es so, als ob Ihre internen Business Analysten nicht ihren Job machen, auf der anderen Seite, wenn sie keine Entwickler sind, würde ich nicht darauf vertrauen, dass ihre Analyse vollständig oder korrekt ist - aber das bin nur ich ;-)
Steven A. Lowe

Antworten:


9

Ich muss zugeben, dass ich manchmal Option 3 wähle)

3) Hören Sie den vagen Vorstellungen der Kunden zu, und denken Sie darüber nach, wie viele Wochen sie brauchen, um herauszufinden, was sie genau wollen.

Dies funktioniert vor allem bei kleinen Aufträgen, da dadurch Situationen vermieden werden, in denen Kunden diese brillante Idee im Kopf haben, die in der Praxis nicht praktikabel ist.

Es passiert mir die ganze Zeit; "Sicher könnten wir tun ..." ist eine sehr beängstigende Phrase. Zumal die Dinge erwähnt werden, sind fast immer die Glocken, Pfeifen und "schön zu haben" Klasse von Funktionen. Sie verstehen das nicht ganz in der Aussage "Nun, offensichtlich ein Bug-Tracker, und dann ...". Der Großteil der möglichen Arbeit steckt in den ersten vier Worten.

Daher ist es manchmal schön, eine Kundenvision zu verfolgen , eine angemessene Dosis Programmierer mit gesundem Menschenverstand einzusetzen und etwas zu entwickeln, das ihren Bedürfnissen entspricht.

In Bezug auf die ursprüngliche Frage; Ich finde, es kommt sehr auf den Kontext an. Wenn ich mit dem Kunden zusammenbleibe (dh durch einen Arbeitsvertrag, an den ich gebunden bin, oder wenn es keine alternative Arbeit gibt), ist # 2 der vernünftigste Ansatz. Andernfalls ist die Wahrscheinlichkeit groß, dass Ihnen in einer Woche eine wunderbare und detaillierte Spezifikation präsentiert wird ... die für Sie als Programmierer völlig unbrauchbar ist.

Viel das gleiche Problem wie oben (# 3) und eines, bei dem Sie sowieso # 2 machen müssen.


1
+1: Hypothetisch über "Erforderlich", "Gewünscht" und "Optional" zu sprechen, ist für viele Menschen fast unmöglich. Es ist viel einfacher, über eine konkrete Implementierung zu sprechen.
S.Lott

Ich finde es eine große Hilfe, nicht verhandelbare, realistische $ (oder Zeit-) Zahlen gegen "Erforderlich", "Gewünscht" und "Optional" zu setzen ......
mattnz

@mattnz: Es könnte für einige Benutzer funktionieren, zu versuchen, "realistisch" zu sein. Es ist noch einfacher, über eine konkrete Implementierung zu verhandeln. Benutzer können verlangen, dass konkrete Features hinzugefügt, geändert oder entfernt werden. Weniger hypothetisch. Weniger "realistisch". Tatsächlicher, greifbarer und konkreter.
S.Lott

27

Wenn Sie nur ein Programmierer sein möchten, warten Sie, bis jemand anderes herausgefunden hat, was der Client benötigt, und codieren Sie das dann

Wenn Sie ein Entwickler sein möchten und dies Ihr Kunde ist, dann nehmen Sie die Hand Ihres Kunden und führen ihn sanft durch den dichten, unheimlichen Wald der Möglichkeiten, bis Sie zusammen die mit fröhlichen Häschen gefüllte Wiese an der Kreuzung von Wants und Needs finden.

ADDENDUM: Dieser Prozess wird als "Systemanalyse und -design" (aka Consulting) bezeichnet und sollte niemals kostenlos durchgeführt werden


1
+1 für das KOSTENLOSE Bit :) Lassen Sie sich nie dazu bringen, ein paar Stunden Website-Layout für einen Partner zu machen ....
Irrtum

1
Das "sollte nie umsonst gemacht werden" ist es wert, auf eine andere Frage IMO erweitert zu werden.
Endy Tjahjono

7

Beim Programmieren geht es zunächst darum, die Probleme der Benutzer zu lösen. Für mich ist es fast immer ein Gewinn, wenn wir uns "extra" anstrengen, um eine funktionierende, zufriedenstellende Lösung für unsere Benutzer zu finden, den "zusätzlichen" Aufwand zu vermeiden und am Ende nichts Nützliches zu liefern.

(Natürlich gibt es echte Benutzer, die wirklich keine Ahnung haben, was sie wollen, und keine Anstrengung kann sie in einen Zustand versetzen, in dem sie eine sinnvolle Entscheidung treffen können. Aber ich glaube, dass dies in den meisten Fällen der Fall ist Ein echtes Problem, sie sind bereit, Mühe und Geld zu investieren, um es zu lösen, und sie werden froh sein, wenn wir ihnen helfen können, einer funktionierenden Lösung näher zu kommen.)

Das Fazit ist also, dass wir uns darauf konzentrieren sollten, die Probleme der Benutzer zu lösen. Dies kann manchmal erfordern, einige gezielte Fragen zu stellen und ihnen mehr Zeit zu geben, um die Antworten herauszufinden. Manchmal ist es erforderlich, die Domain in enger Zusammenarbeit gemeinsam zu bestimmen. Manchmal muss man einige Zeit damit verbringen, einfache Skizzen / Prototypen / Modelle zu erstellen, ihnen dann das Ergebnis zu zeigen und zu fragen: "Sieht das so aus, wie Sie es sich vorgestellt haben?" (dann den Prototyp wegwerfen, wenn sie sagen "Eigentlich habe ich über etwas völlig anderes nachgedacht ..." und von vorne anfangen ... :-)

Die wahre Fähigkeit besteht darin, den richtigen Ansatz zur richtigen Zeit zu wählen.

Last but not least erfordern gute Lösungen meiner Erfahrung nach fast immer zumindest einige Fachkenntnisse des Entwicklers. Ohne dies haben Sie keine echte gemeinsame Sprache mit dem Benutzer, daher gibt es keine Garantie dafür, dass das, was Sie liefern, für ihn wirklich nützlich ist. Die Benutzer haben in der Regel wenig Ahnung von der Technologie. Sie wissen also nicht, was möglich ist und was nicht und wie hoch die Kosten für verschiedene Ansätze / Funktionen sind. Da wir vernünftigerweise nicht davon ausgehen können, dass sie Technik bis ins kleinste Detail erlernen, sollten wir diesen zusätzlichen Schritt von unserem Ende der Brücke aus tun.

Dies kann als "zusätzlicher" Aufwand angesehen werden, der sich nicht auszahlt. Ich sehe ihn jedoch aus zwei Gründen lieber als Investition:

  • Es hilft mir, gute Lösungen zu liefern, die auf lange Sicht meinen Marktwert als Entwickler steigern
  • Verschiedene Domains unterscheiden sich nicht vollständig voneinander, so dass zumindest ein Teil dieses Domain-Wissens in zukünftigen Gigs wahrscheinlich wiederverwendet werden kann.

3

Als Softwareentwickler besteht eine Aufgabe darin, ein ausreichendes Verständnis für die Domäne zu erlangen, in der die Software verwendet werden soll. Daher ist es äußerst wertvoll, Teil der sich abzeichnenden Phase eines Projekts zu sein (in Bezug auf Zeit und Kundenerfahrung). . Ja, dies bedeutet eine gründliche Domänen- und Anforderungsanalyse. Es ist der perfekte Zeitpunkt, um die Zielbenutzer einzubeziehen, sie zu befragen oder den Ort zu erkunden, an dem Ihre Software verwendet wird.

Aber diese Fähigkeit zu erlangen, ist beinahe eine Kunstform, besonders wenn die Domäne nicht mit einer Ingenieurdisziplin verbunden ist. Ihre offensichtlichen Fragen erscheinen dem Kunden möglicherweise entmutigend, Ihre Präsenz vor Ort ist möglicherweise nicht erwünscht, und Ihr mangelndes Verständnis für die soziale Struktur Ihrer Zielgruppe kann die immer noch fragilen Verbindungen zerstören.

Das Nichtverstehen der Feinheiten dieser Phase führt sowohl bei den Softwareentwicklern als auch beim Kunden häufig zu Enttäuschungen. Wir möchten diese Phase immer schneller durchstehen oder ganz abschaffen. Die Ergebnisse sind oft katastrophal: Nach dem beschleunigten Start werden die Einsätze für den Erfolg während der Entwicklung immer höher und es wird immer schwieriger, zum Reißbrett zurückzukehren. Wenn das System endlich fertig ist und Millionen ausgegeben wurden, sind weder der Kunde noch das Ingenieurbüro bereit, seinen Ausfall zuzugeben, was zur erzwungenen Einführung eines ausgefallenen Systems führt.

Eine Alternative ist, einen Business Analysten die Arbeit für Sie erledigen zu lassen. Dies mag für einige Produkte sinnvoll sein, und der Analyst ist häufig in der Lage, Vermittler zu sein, schafft jedoch nur mehr Kommunikationskanäle (und damit eine höhere Fehlerwahrscheinlichkeit).

In jedem Fall: Das Umschreiben eines Code-Teils überwiegt niemals das Umschreiben eines Teils der Anforderungen.

ps Vielleicht denkst du, ich befürworte die Wasserfallmethode. Ich bin nicht der Meinung, dass „Big Design im Vorfeld“ wichtig ist, aber ich bin der Meinung, dass der Aufwand für die Domänenanalyse im Verhältnis zum Implementierungsaufwand stehen sollte. Man kann mehrere Zyklen machen (Prototyp, Release Candidates, etc.).


2

Auf jeden Fall Option 2, es sei denn, Ihre Benutzer sind Entwickler (auch dann ist möglicherweise Option 2 erforderlich).

Viele der meisten Lebenszyklen der Softwareentwicklung konzentrieren sich auf das Sammeln von Anforderungen. Die meisten Benutzer wissen nicht nur nicht, was sie wollen, sondern auch nicht, was möglich ist. Daher ist es eine wichtige Aufgabe bei der Softwareentwicklung, mit dem Benutzer zusammenzuarbeiten, um zu verstehen, was der Benutzer benötigt.


2

Ich denke, Sie müssen mit beiden Optionen gehen. Lassen Sie sie gehen und entscheiden, was sie wollen. Wenn Sie dann eine konkrete Idee haben, die Sie als Ausgangspunkt verwenden können, führen Sie sie an, um die Anforderungen auf ein nützliches Element zu verfeinern.

Sie möchten nicht in Option 2 einsteigen, wenn sie kaum artikulieren können, was sie wollen, da dies den gesamten Prozess langsamer und frustrierender macht (es sei denn, sie haben bereits eine sehr klare Vorstellung davon, was sie wollen, wenn sie zu Ihnen kommen, aber Nach meiner Erfahrung ist dies sehr selten. Lassen Sie sie ihre Ideen zusammenbringen. Lassen Sie sie etwas auf Papier schreiben, beschreiben Sie, was sie in Bezug auf vorhandene Systeme wollen, wenn möglich (z. B. "Wir wollen eine Website wie blahblah.com, aber mit diesen Unterschieden ... wir wollen ein Tool, das Aufgabe A wie Produkt X erledigt , aber die Benutzeroberfläche muss auch Aufgabe B ausführen ... "). Dann ist es eine gute Zeit, um zu verfeinern, was sie in sehr spezifischen Anforderungen, die Sie zum Aufbau des Systems verwenden können, wollen.


2

Im Allgemeinen werden Kunden zu Ihnen kommen und genau wissen, was sie zu brauchen glauben. Leider werden sie Ihnen dies mitteilen, anstatt die Probleme zu beschreiben, die zu der Lösung führen, von der sie glauben, dass Sie sie bereitstellen werden.

Um etwas zu entwerfen, das ihren Bedürfnissen entspricht, müssen Sie diese Bedürfnisse identifizieren, und um dies zu tun, muss jemand den Kunden festhalten und diese Bedürfnisse extrahieren. Wenn es sonst niemand kann, müssen Sie es tun. (Wenn jemand anderes glaubt, dass er es kann, müssen Sie sich vielleicht mit ihm zusammensetzen und später die wahren Bedürfnisse herausfinden ...)

Mit Option 2 können Sie den Kunden hoffentlich über mehrere Besprechungen hinweg darin schulen, Probleme mit Ihnen zu teilen, anstatt Lösungen zu finden. (Auch wenn der Kunde über technische Fähigkeiten verfügt - zum Beispiel hat er keine Verfügbarkeit, um diese Arbeit zu erledigen, und muss sie stattdessen ausführen -, konzentriert er sich möglicherweise immer noch auf eine Implementierung, die für den Endkunden nicht ideal ist.) Dies ist nicht der Fall Unabhängig davon, welchen Entwicklungsprozess Sie verwenden, müssen Sie noch einige Male hin und her gehen, bis sie Fragen auf eine Weise beantworten können, die Spezifikationen für Sie definiert.

Denken Sie daran, dass Sie Fehler so früh wie möglich im Entwicklungszyklus erfassen möchten. Wenn Sie sie nicht während des Codierens oder Testens, sondern während der Anforderungen abfangen können, sparen Sie sich viel Zeit.


2

Option 1 ist eine hervorragende Möglichkeit, um Arbeiten zu vermeiden. Ich habe es benutzt, als ich dachte, die Arbeit sei unnötig oder ich hätte wichtigere Dinge zu tun.

Erstens wissen Benutzer nicht, was die Computer können. Die meisten von uns haben jahrelang gelernt, Computer und Berechnungen zu verstehen, und was für uns offensichtlich ist, ist für jemanden, der diese Jahre damit verbracht hat, andere Dinge zu lernen, möglicherweise nicht leicht zu verstehen.

Zweitens wissen Benutzer nicht unbedingt, was sie benötigen, und wissen in der Regel nicht, was sie wollen, und zwar in jedem umsetzbaren Sinne.

Als ich mein jetziges Haus kaufte, wählte ein Innenarchitekt als Analogie Wandfarben für die Zimmer im Hauptgeschoss (US first, UK ground) aus. Ich hätte diese Farben niemals selbst gewählt. Ich wollte ein Haus, das gut aussah, und bekam es. Wenn der Designer auf mich gehört hätte und mir alles gegeben hätte, was ich sagen könnte, wäre es nicht annähernd so gut gelaufen.

Die einzige Möglichkeit, Benutzern das zu geben, was sie möchten, besteht darin, selbst mit ihnen zu arbeiten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.