Wie kann eine nicht technische Person lernen, eine Spezifikation für kleine Projekte zu schreiben?

24

Wie kann eine nicht technische Person lernen, Spezifikationen für kleine Projekte zu schreiben?

Ein Freund von mir versucht, eine Entwicklung für ein Statistikprojekt auszulagern.

Insbesondere arbeitet er viel in Excel und möchte die Erstellung von Skripten auslagern, um das zu tun, was er jetzt von Hand tut.

Mein Freund ist jedoch äußerst untechnisch. Er ist schlecht darin, technische Spezifikationen zu schreiben.

Wenn er eine Spezifikation schreibt, wird diese so geschrieben, wie Sie es mit Excel beschreiben würden (gehen Sie in diese Zelle und kopieren Sie den Wert in diese Zelle). Es ist auch zu ausführlich und enthält einige Beispiele. Ich bin mir nicht sicher, ob er Eckfälle richtig beschreibt.

Das erste Projekt, das er auslagerte, war ein Fehlschlag. Ich denke, er hat einige Details überbeschrieben, aber Eckfälle unterbeschrieben. Das und / oder der von ihm angeheuerte Programmierer haben die Eckfälle nicht durchdacht und entsprechende Fragen gestellt. Ich bin mir nicht sicher. Ich habe mich mit ihm auf IM verständigt und es hat eine halbe Stunde gedauert, bis ich eine Beschreibung gefunden hatte, deren Beschreibung höchstens fünf Minuten hätte dauern sollen. Am Ende habe ich die Skripte für ihn geschrieben, aber nicht untersucht, warum sein Prozess mit dem Codierer fehlgeschlagen ist.

Er hat mich um Hilfe gebeten. Ich lehne es jedoch ab, mich darauf einzulassen, da die Umsetzung seiner Spezifikation in klare Anforderungen 10-mal mehr Arbeit bedeutet als die Ausführung einer klar geschriebenen Spezifikation.

Was ist der richtige Weg für ihn zu lernen? Gibt es Ressourcen, die er nutzen könnte? Gibt es Möglichkeiten, wie er aus kleinen Niederdruck-Übungsprojekten mit Programmierern lernen kann?

Die meisten seiner Skripte sind statistisch und datenverarbeitungsorientiert. Nehmen Sie zB diese Spalte und lassen Sie einen Durchschnitt darüber laufen. Entfernen Sie diese Zeilen unter diesen Bedingungen. Die Herausforderung ist also anders als bei der Spezifikation einer Web-App.

Joseph Turian
quelle
8
Wenn Ihr Freund wirklich so technisch ist, wie kann er dann gültige Statistiken erstellen?
Pieter B
Ist das nicht das, wofür Agile / Scrum erstellt wurde?
Deltree

Antworten:

18

Ich sehe zwei gute Ansätze für dieses Problem. Es ist jedoch wichtig, zwei Dinge zu realisieren. Erstens ist das Anforderungs-Engineering harte Arbeit - eine Idee in eine formale Spezifikation umzuwandeln, die ausreicht, um ein System zu erstellen, erfordert viel Zeit, Mühe und Übung. Zweitens, wenn Sie gute Anforderungen haben (in jedem Format, von einer formalen Spezifikation bis hin zu weniger formalen User Stories und Anwendungsfällen), ist es wesentlich einfacher, billiger und schneller, die Software tatsächlich zu erstellen (und sie direkt früher zu erstellen).

Wenn Ihr Freund entweder die Erstellung zahlreicher Softwaretools anfordert oder diese auslagern möchte, sollte er lernen, wie er Softwareanforderungen schreibt, zumindest auf der Ebene der Geschäftsziele und des Betriebskonzepts. Die beiden führenden Bücher zum Thema Software Requirements Engineering stammen von Karl Wiegers - Software Requirements (2nd Edition) und More About Software Requirements: Wichtige Probleme und praktische Ratschläge . Ich würde erwarten, dass die meisten Leute, die er einstellen würde, eine Art Dokument wünschen, das das System beschreibt, zumindest auf einer Ebene von Geschäftszielen oder Betriebskonzepten, und diese Bücher gehen darauf ein. Sie gehen auch auf das Wie und Warum anderer Aspekte des Anforderungs-Engineerings ein, von denen ich vermuten würde, dass sie ein guter Entwickler zu Beginn des Projekts durchlaufen würde.

Die zweite Möglichkeit wäre, jemanden mit Erfahrung in der Softwareentwicklung und im Anforderungs-Engineering (und vielleicht sogar in irgendeiner Art von Systems Engineering oder Systemarchitektur) einzustellen, um den Problembereich zu verstehen und festzustellen, wo Softwarelösungen benötigt werden und wo Softwarelösungen nicht nützlich, schreiben Sie die Dokumente, und vielleicht sogar beaufsichtigen oder führen Sie den Entwicklungsaufwand. Dies wäre jedoch wahrscheinlich teurer und würde die Einstellung eines Vollzeit-Softwareentwicklers über einen längeren Zeitraum bedeuten, um nicht nur das angeforderte System, sondern auch die erforderlichen Anforderungen und die erforderliche Architektur zu entwickeln.

Ehrlich gesagt, ich glaube nicht, dass das, was Ihr Freund erlebt, für jemanden ungewöhnlich ist, der den Softwareentwicklungsprozess nicht versteht. Ich glaube auch nicht, dass die Schuld ganz bei ihm liegt. Wenn das erste Softwareprojekt keine guten Anforderungen hatte, sollten die Entwickler, an die es ausgelagert wurde, die Anforderungen geklärt, verfeinert und dokumentiert haben. Ehrlich gesagt bin ich mir nicht sicher, ob Sie die richtige Person sind, um sich zu engagieren, wenn Sie nicht bereit sind, Zeit oder Mühe in die Arbeit mit dem nichttechnischen Benutzer / Kunden zu investieren und gute technische Spezifikationen zu entwickeln (dies) ist eine Schlüsselrolle für jeden, der Requirements Engineering in einer beliebigen technischen Disziplin durchführt.

Ich denke, die optimale Lösung ist wirklich eine Kombination meiner beiden Optionen. Ich denke, dass Ihr Freund (und vielleicht auch Sie) etwas über das Anforderungs-Engineering und die Vorteile erfahren sollte, die solide Anforderungen für ein Projekt mit sich bringen können. Sie als Softwareentwickler sollten sich auch mit dem Anforderungs-Engineering und dem Ermitteln, Dokumentieren, Analysieren und Verwalten von Anforderungen für Softwareprojekte besser auskennen. Dies ist eine wertvolle Fähigkeit für jeden, der an einem beliebigen Punkt im Software-Lebenszyklus arbeitet.

Thomas Owens
quelle
6
Dies und mehr. Es ist unvernünftig und unlogisch, von den Geschäftsleuten zu erwarten, dass sie gute oder sogar nützliche Softwareanforderungen schreiben können - sie haben keine Schulung in diesem Bereich. Das ist die Aufgabe eines Business Analysts / Anforderungsingenieurs, und wenn Sie ein beratender Entwickler sind, tragen Sie diesen Hut wahrscheinlich selbst.
Aaronaught
Es gibt ein weiteres Buch zum Thema: " Den Anforderungsprozess
meistern
In Eric Evans 'Buch' Domain Driven Design 'geht es darum, wie Entwickler Wissen von Domain-Experten einholen können. Also, kann relevant für Leute sein, die sich dafür interessieren.
JW01,
In einem bestimmten Format gut schreiben zu können, wird meiner Erfahrung nach regelmäßig unterschätzt.
Marco,
Wiederbelebung eines alten Threads, aber ich wollte das manchmal hinzufügen, selbst wenn sie dich bitten, ihnen bei etwas zu helfen. Möglicherweise haben sie eine Methode im Kopf (Benutzer möchte Methode A), aber Sie haben ein effektiveres Mittel, um sie auszuführen (Methode B). Ein weiteres oft übersehenes Kriterium ist, ob Methode B einige Funktionen ausschließen würde, die der Benutzer wollte, die er jedoch nicht in seine Anfrage einbeziehen wollte.
Frank FYC
5

Wenn ich Spezifikationen von einem nicht-technischen Kunden benötige, fordere ich ihn normalerweise auf, im Klartext zu schreiben, was genau er erreichen möchte. Wie in "Die App sollte A nach B machen, wenn ich C drücke, aber nur wenn D". Extra Bonus für "weil D das bedeutet ...".

In der Tat "nehmen Sie diese Spalte und führen Sie einen Durchschnitt darüber." ist ein Schritt in die richtige Richtung. Eine bessere Erklärung wäre "Die Tabelle enthält dies und das" (wenn die Struktur vordefiniert ist); Msgstr "Durchschnitt von X erhalten". Grundsätzlich der wenigste technische Weg, ohne die Details zu verlieren.

Mit anderen Worten, beschreiben Sie die Idee, nicht die Umsetzung.

Dann sollte ein fürsorglicher Programmierer in der Lage sein, den eigentlichen Zweck dessen zu verstehen, wofür er beauftragt wurde, und die richtigen Schritte selbst zu wählen und Fragen zu stellen, die nicht offensichtlich sind.

Wenn es niemanden gibt, der genug interessiert und den Prozess versteht, wird das Projekt auf jeden Fall scheitern.

ein trauriger Typ
quelle
5
Formale Softwareanforderungen sind unglaublich schwer zu erfüllen. Daher benötigen Sie in den meisten Fällen aufmerksame Entwickler. Pflege allein reicht noch nicht aus, sie müssen die Anwendungsfälle sehr klar verstehen, Randfälle identifizieren und einen gesunden Menschenverstand haben, um widersprüchliche oder fehlende Merkmale zu identifizieren, die wahrscheinlich zu erwarten sind. In Ermangelung von Anforderungen sind wir gezwungen, die Geschäftsaspekte besser zu verstehen als die Endbenutzer oder erfolglose Software von schlechter Qualität zu schreiben.
maple_shaft
4

Er kann versuchen, den Storyboard-Ansatz zu verwenden .

Lassen Sie ihn eine Liste der Dinge ( Geschichten ) aufschreiben, die die Anwendung zu tun hat, und in dieser Liste die Funktionalität jeder Geschichte näher erläutern.

Mit einem Tool wie Asana kann er den Projektumfang und die Funktionalität präzisieren und sogar mit seinem Entwickler interagieren.

sergserg
quelle
Ja, dies ist ein guter Ansatz für Web-App-Spezifikationen. Die meisten seiner Skripte sind jedoch statistisch und datenverarbeitungsorientiert. Nehmen Sie zB diese Spalte und lassen Sie einen Durchschnitt darüber laufen. Ich bin mir also nicht sicher, ob Story Boarding angemessen ist.
Joseph Turian
3

Die Umsetzung in klare Anforderungen ist 10x mehr Arbeit als die Ausführung einer klar geschriebenen Spezifikation.

Amen. Das erklärt auch warum:

Der von ihm angeheuerte Programmierer hat die Eckfälle nicht durchdacht und entsprechende Fragen gestellt.

Das Verständnis der Anforderungen ist der schwierigste (und teuerste) Teil der meisten Programmierprojekte. Wenn eine nicht technische Person Anforderungen schreibt, dokumentiert sie häufig nur die zu ersetzende Problemumgehung ("Excel öffnen, Zelle B3 anklicken ..."). Das Beste, auf das sie hoffen können, ist ein genaues Duplikat ihres aktuellen Schwierigkeitsgrades!

Die produktivste Möglichkeit, dies zu umgehen, besteht darin, diese Person zum Schreiben von Use Cases zu ermutigen ("use" reimt sich auf "loose"). Beschreiben Sie, anstatt Anforderungen zu schreiben, wie das System verwendet wird. Dies lässt dem Entwickler etwas Spielraum, um eine bessere Lösung vorzuschlagen als das, was der Benutzer jetzt tut.

Es hört sich so an, als würde dieses Problem durch schlechte schriftliche Kommunikationsfähigkeiten Ihres Freundes verschärft. Er / Sie muss entweder die Arbeit in die effektive Kommunikation ihrer Ideen stecken oder den Programmierer dafür bezahlen, dass er die Informationen aus ihnen herausfischt. Beide Vorgänge sind schmerzhaft und zeitaufwändig, aber es ist billiger, sie selbst durchzuführen, als jemanden dafür zu bezahlen.

In jedem Fall ist dies eine häufige und frustrierende Schwierigkeit, wenn kreative Menschen eine unvollständige Idee haben oder nicht in der Lage sind, sie in weniger als einer Million Worten zu beschreiben. Diese Person sollte versuchen, einen äußerst geduldigen und aufschlussreichen Programmierer zu finden, der bereit ist, dem, was sie wirklich zu tun versucht, auf den Grund zu gehen und es möglich zu machen.

GlenPeterson
quelle
2

Der Coder, den er angeheuert hatte, stellte keine entsprechenden Fragen

Das ist ein Rezept für eine Katastrophe. Das und auch die Erwartung, die der Programmierer stellen wird . Codierer codieren gerne, kommunizieren nicht und erwarten, dass sie ihre Gewohnheiten ohne Anreiz brechen, was ziemlich unrealistisch ist.

Wenn Ihr Freund seine Arbeit erledigen möchte, sollte er einen Prozess etablieren, der eine kontinuierliche Kommunikation mit dem Programmierer beinhaltet - und es ist Ihr Freund, der eine aktive Rolle spielen muss, nicht der Programmierer. "Zeig mir, was jeden Montag gemacht wird und lege zwei Stunden fest, um das jeden Dienstag zu besprechen", so etwas.

  • Geben Sie ihnen zur Einführung einen kurzen Überblick über iterative und agile Entwicklungsmethoden (Wikipedia-Artikel werden dies tun), damit sie ein Gefühl dafür bekommen, wie es sein sollte.
     
  • Geben Sie ihnen einen kleinen Überblick über Waterfall / Big Design Up Front (Kritik - Wikipedia-Artikel werden es ebenfalls tun), damit sie nachvollziehen können, wie schwierig es in der Regel ist, die richtigen Angaben zu machen vorne.

Meiner Erfahrung nach bestand die zuverlässigste Möglichkeit, Software bei nicht-technischen Kunden zum gewünschten Erfolg zu führen, darin, permanent zu kommunizieren und Funktionsbeschreibungen zu wiederholen, ohne zu versuchen, sie auf einen Schlag zu spezifizieren.

Mücke
quelle
1

Die meisten seiner Skripte sind statistisch und datenverarbeitungsorientiert. Nehmen Sie zB diese Spalte und lassen Sie einen Durchschnitt darüber laufen. Entfernen Sie diese Zeilen unter diesen Bedingungen. Die Herausforderung ist also anders als bei der Spezifikation einer Web-App.

Das ist anders - es scheint viel einfacher zu sein, als eine Web-App anzugeben. Es ist ein logischer Prozess. Das ist das Einfache.

Ihr Freund muss nur die Schritte aufschreiben, die er unternimmt, wenn er diesen Prozess ausführt. Er kann es tun, wie er will, aber die wichtigsten Dinge, auf die man sich konzentrieren muss, sind Genauigkeit, Prägnanz und Klarheit. Es gibt keinen Grund, warum dies nicht rein in Textform wie ein Manuskript erfolgen kann. Es würde von einer logischen Aufteilung der Komponenten oder Aufgaben profitieren und würde wahrscheinlich gut als Flussdiagramm oder Diagramm funktionieren.

Jetzt sollte Ihr Freund einen kompetenten Analysten / Entwickler finden und seine Dienste Stück für Stück in Anspruch nehmen. Er muss seine Erwartungen darlegen - täglich oder mindestens mehrmals pro Woche sollte sich Ihr Freund mit dem Entwickler treffen und eine praktische Demonstration des Fortschritts sehen. Ihr Freund bezahlt den Entwickler für seine Zeit während dieser Demonstrationen, aber es lohnt sich sicherzustellen, dass das Projekt gemäß den Spezifikationen ausgeführt wird. Alle Änderungen an der Spezifikation - dh Dinge, die Ihr Freund ausgelassen hat - müssen ausgehandelt und wahrscheinlich zum angegebenen Preis hinzugefügt werden.

Beachten Sie, dass ich "kompetent" sagte - dies ist nicht dasselbe wie "durchschnittlich", da es viele "durchschnittliche" Entwickler gibt, die nicht kompetent sind. Wenn Ihr Freund nur den billigsten Programmierer in der Nähe hat oder nur jemanden online findet, sollte er mit Problemen rechnen. Das soll nicht heißen, dass Leute, die online Arbeit finden, nicht gut sind, aber Sie würden niemanden ohne Empfehlung einstellen.

Ihr Freund muss einfach die richtige Person finden. In jedem Softwareprojekt werden Analysten, Programmierer, Systemadministratoren, Tester und Projektmanager benötigt. Je mehr dieser Rollen Ihr Freund auslagern möchte, desto erfahrener wird der Anbieter und desto mehr sollte Ihr Freund dafür bezahlen.

Kirk Broadhurst
quelle
0

Es tut mir leid, derjenige zu sein, der dies für Sie aufhebt, aber es ist nicht die Aufgabe einer nicht-technischen Person, zu lernen, wie man formale Spezifikationen schreibt. Es ist die Aufgabe des Entwicklers, die nicht-technische Person zu interviewen, herauszufinden, was die Person zu Ihnen über das, was sie sucht, sagt und zu bestimmen, was der Kunde wirklich will (im Gegensatz zu dem, was sie zu wollen glaubt, was sie will, was Erstellen Sie ein relativ informelles Anforderungsdokument (eines, das gut strukturiert ist, aber Jargon vermeidet, den der Kunde nicht versteht), und überprüfen Sie dieses Dokument mit dem Kunden.

Wenn der Kunde mit dem informellen Anforderungsdokument zufrieden ist, können Sie es als Grundlage für die Erstellung einer formelleren Anforderungsspezifikation verwenden, die zunächst detailliertere technische Informationen zu den benötigten Elementen enthält.

Dieser gesamte Prozess wird als "Anforderungserfassung" bezeichnet und ist der erste Schritt im Software-Engineering-Prozess. Eigentlich ist das Schreiben der Software nur ein relativ kleiner Teil der Softwareentwicklung, was leider viele Softwareentwickler vergessen. Sie scheinen auch zu vergessen, dass es dringend erforderlich ist, mit dem Kunden zu kommunizieren und während des gesamten Prozesses einen Dialog mit ihm zu führen, um sicherzustellen, dass die Dinge auf dem richtigen Weg bleiben.

Für die Kommunikation mit nicht-technischen Mitarbeitern ist es von entscheidender Bedeutung, dass Sie nicht die Fachsprache der Computer- und Softwareentwicklung verwenden, wenn Sie mit ihnen sprechen. Wenn sie Jargonbegriffe aus ihrem eigenen Fachgebiet verwenden, ist es wichtig zu verstehen, was diese Begriffe bedeuten. Daher möchten Sie möglicherweise ein Projektglossar erstellen, um formale Definitionen für diese Begriffe zu erhalten. Sie arbeiten schließlich für sie, deshalb ist es wichtig zu verstehen, woher sie kommen.

Anstelle von Jargon sollten Sie versuchen, nicht einschüchternd mit Ihrem Kunden zu kommunizieren. In einfachem Englisch geschriebene Dokumente sind eine Hilfe, aber viele Leute in der Softwarebranche sind es gewohnt, eher für Computer als für Menschen zu schreiben, und finden dies möglicherweise schwierig. Darüber hinaus lesen Kunden nicht gerne große Papierstapel durch, egal wie klar ihre Sprache ist. Daher möchten Sie möglicherweise auf visuelle Hilfsmittel zurückgreifen. Diagramme, Wireframes und Storyboards sind hier nützliche Werkzeuge.

Aber kurz gesagt, der Kernpunkt ist, dass es nicht die Aufgabe Ihres Kunden ist, Ihre Sprache zu lernen, sondern Ihre Aufgabe ist, ihre Sprache zu lernen.

GordonM
quelle