it-swarm.dev

Nicht-Programmierer dazu bringen, den Entwicklungsprozess zu verstehen

Wenn Sie ein Projekt für ein Unternehmen starten, das nicht in erster Linie ein Programmierunternehmen ist, besteht eine der Erwartungen darin, dass am Ende ein fertiges Produkt ohne Fehler vorhanden ist und alles Notwendige sofort erledigt. Dies ist jedoch selten der Fall.

Wie können Erwartungen verwaltet und Nicht-Programmierern erklärt werden, wie sich die Softwareentwicklung von anderen Arten der Produktentwicklung unterscheidet?

66
user8

So ziemlich jeder mit einem Computer ist heutzutage auf das Konzept der "Bugs" gestoßen, also könnten Sie dort anfangen. "Was ist die nervigste Art und Weise, wie eine Anwendung jemals bei Ihnen fehlgeschlagen ist? Multiplizieren Sie diese mit zehn, und Sie haben die Erfahrung unserer Benutzer, wenn wir nicht genügend Ressourcen für Tests und Wartung bereitstellen."

Und unterschätzen Sie nicht den Wert einer guten Zusammenarbeit mit den Nicht-Programmierern. Wenn Sie feststellen können, dass Ihrem Urteil vertraut werden kann, werden sie Sie ernst nehmen, wenn Sie den Alarm auslösen, dass X spektakulär versagen wird, wenn Sie Y pronto nicht ausführen, auch wenn sie Ihre Argumentation nicht vollständig verstehen.

34
BlairHippo

Ein Ansatz, den ich als erfolgreich empfunden habe, ist folgender :

Wir alle wissen, dass ein Computer nur genau das tut, was ihm gesagt wird.

Programmieren ist die Art und Weise, wie wir einem Computer sagen jetzt was wir tun sollen später.

Dies bedeutet, dass die Art und Weise, wie sich Ihr Verhalten verhält jetzt, auf den kombinierten Absichten aller beruht, die den Code geschrieben haben, der auf Ihrem Computer ausgeführt wird. Wenn Sie die Komplexität des Betriebssystems, der Treiber, der Programmierumgebung, der Bibliotheken usw. berücksichtigen, ist leicht zu erkennen, dass in den meisten Systemen mehr als 20.000 Personen beteiligt sein müssen und dass möglicherweise mehr als 100.000 Personen beteiligt sind.

Der von jeder Person geschriebene Code spiegelt ihr eigenes Verständnis, ihre Motivation, ihre Absicht und ihre Fähigkeiten wider. Angesichts der Tatsache, dass ein einwandfreier Betrieb des Systems erfordert, dass alle des von diesen 20.000 Personen geschriebenen Codes fehlerfrei interagieren, muss alle des Codes über die Bedeutung und Interpretation des Codes übereinstimmen erforderliches Verhalten, die überraschende Tatsache ist nicht, dass wir Fehler haben, sondern dass wir so wenige von ihnen haben.

28
Bevan

IMO, ich habe festgestellt, dass die Transparenz, die agile Prozesse (z. B. Scrum, Crystal usw.) bieten, einen großen Beitrag dazu leistet, dem durchschnittlichen Stakeholder zu zeigen, wie Entwicklung funktioniert.

12
Brandon

Die Erklärung durch Metapher ist eine undichte Abstraktion, aber hier sind einige Ideen, die für mich oft funktionieren:

Beachten Sie, dass keine dieser Erklärungen schlampige Arbeit entschuldigt.

Stellen Sie sich ein Computerprogramm als Maschine vor, bei der jede Variable ein bewegliches Teil ist. Das macht selbst ein triviales Programm zu einer Maschine, die aus Hunderten von beweglichen Teilen besteht.

Wenn dies fehlschlägt, greife ich auf die Tatsache zurück, dass es zwar mathematisch möglich ist, zu beweisen, dass ein Programm keine Fehler aufweist, aber viel Zeit in Anspruch nimmt und die Mühe nicht wert ist.

Schließlich frage ich, ob Intel und Microsoft Fehler nicht vermeiden können. Wie erwarten sie das von uns?

3
KevDog

Die traditionelle Art, es auszudrücken, ist das Projektmanagement-Dreieck: die drei konkurrierenden Kriterien Umfang, Kosten und Zeitplan; in der Regel ausgedrückt als "billig, schnell, gut - wählen Sie zwei".

Am Ende eines Entwurfs-, Entwicklungs- und Bereitstellungsprozesses ist die Erwartung, dass ein Produkt relativ frei von Entwurfsfehlern ist und mit einer bestimmten Funktionalität arbeitet, perfekt angemessen. Dieselbe Erwartung ist in Bezug auf ein Projekt, einen Prozess oder einen Beruf völlig unangemessen.

Welcher Fachmann, der auf Wissenschaften basiert, hart oder weich, durchläuft keinen Erkundungsprozess, bildet ungenaue und ungenaue Konzeptualisierungen, folgt nicht optimalen (oder einfach nur falschen) Taktiken, entdeckt, was durch Versuch und Irrtum funktioniert, und wiederholt das immer wieder verarbeiten, bis entweder die Ressourcen aufgebraucht sind oder ein ausreichendes Leistungsniveau erreicht ist?

Kein Prozess ist jemals fehlerfrei, obwohl er sich asymptotisch höheren Qualitätsniveaus nähern kann.

Dies gilt für die Ärzteschaft, in der Taktiken häufig Vermutungen und Protokolle beinhalten und ein Großteil der Aktivitäten im Wesentlichen das Debuggen einer meistens Wetware-Maschine umfasst. Dies gilt für den Tiefbau und die Architektur, bei denen Anwendungen neuartiger technischer Werkstoffe vor Ort validiert werden müssen und nach jahrelanger Betriebszeit trotz strikter Einhaltung von Normen abrupt versagen können. Dies gilt für den Automobilbereich, in dem Alter und Änderungen der Betriebsbedingungen die Leistung üblicherweise bis zum Ausfall beeinträchtigen, ohne dass die angewandten Konstruktions- oder Reparaturdienste verschuldet werden. Die Softwareentwicklung unterscheidet sich nicht grundlegend von diesen Berufen in dieser Hinsicht, sondern konzentriert sich nur zu einem größeren Teil auf die Entwicklung neuartiger, zielgerichteter Maschinen.

2
jerseyboy

Ich habe eine ähnliche Frage beantwortet ausführlicher , aber das Wesentliche ist: "Programmieren ist wie das Bauen einer Fabrik oder einer Montagelinie."

2
Huperniketes

Sie können es mit etwas vergleichen, das sie sehen und wenn möglich jeden Tag verwenden können.

Zum Beispiel das Automobil. Autos starteten so viel weniger raffinierte und zuverlässige Geräte als wir heute haben. Zwar werden Autos seit über 100 Jahren hergestellt, aber Software ist wahrscheinlich etwa halb so lang. Autos sind mit erheblichen Anpassungsmöglichkeiten erhältlich, einige sind im Preis inbegriffen (wie die Wahl der Farbe), andere wie Motorgröße, Getriebetyp, Rad/Reifen und Ausstattungsvariante sind bedeutende Kostentreiber.

Es gibt viele Funktions-, Qualitäts- und Kostentreiber für Autos und für Software. Dann können Sie diskutieren, wie Softwaretechnologie, Verfügbarkeit von Fachwissen, vielleicht sogar dort, wo es erstellt wird, einen großen Unterschied machen. Entsprechende Entwicklungszyklen (z. B. jährliche Modelle mit kleinen Änderungen, Änderungen an Karosserie/Motor/Plattform etwa alle drei Jahre) werden durch eine Kombination aus Kundenanforderungen und einem komplexen Entwurfsprozess gesteuert. Einige Produkte sehen klein und pummelig aus (denken Sie an den Honda Accord), werden jedoch jedes Jahr verbessert, bis sie die höchste Bewertung erhalten.

Autos haben Rückrufe (oft viel teurer als Software-Upgrades) und inkrementelle Verbesserungen in Form von laufenden Änderungen an ihren Teilelisten (denken Sie an Fehlerkorrekturen), und oft benötigen sie langfristige Unterstützung (denken Sie an Abwärts-/Vorwärtskompatibilität). Ein Großteil der Kosten für Ihr Auto fällt an, nachdem Sie es nach Hause gefahren haben. Ein Großteil der Softwarekosten entsteht nach der ersten Produktversion, wenn Sie Kunden aktualisieren und aktualisieren.

In einigen Fällen können Sie auf bekannte Produkte verweisen, die Software oder andere Softwareprodukte enthalten. Beispielsweise verfügen Telefone über einen Veröffentlichungszyklus sowie Aktualisierungen und Methoden zum Hinzufügen von Funktionen nach dem ersten Verkauf, um mehr Umsatz zu erzielen. Telefone sind ein gutes Beispiel für die Vorwärts-/Rückwärtskompatibilität. Zu viel, und die Leute werden den alten nicht wegwerfen, um einen neuen zu kaufen. Zu wenig, und Kunden möchten unbedingt ein Telefon haben, das sie nicht hassen werden, bevor der Vertrag abgelaufen ist.

Produkte wie Windows, Microsoft Office, Webbrowser und Webseiten sind Software, die in Diskussionen verwendet werden können. Sie wurden im Jahres- oder Dreijahreszyklus aktualisiert, können jedoch häufiger automatisch aktualisiert werden. Sie haben Fehler und Sicherheitslücken, die Kunden in unterschiedlichem Maße betreffen, aber trotz unserer Bemühungen ein Teil der Landschaft sind. Kunden können Korrekturen kostenlos erhalten, zahlen jedoch im Allgemeinen für Verbesserungen, häufig als Bundle, manchmal als einzelnes Modul oder über einen Lizenzschlüssel.

Branchenführer wie Microsoft, Apple, Google und Amazon bieten ihren Nutzern relativ kostengünstige Kunden. Aber sie haben enorme Kosten, die diese Produkte ermöglichten. Ihre Erfahrung zeigt, dass Software teuer, aber wertvoll und rentabel ist. Sie machen oft Kompromisse zwischen Qualität, allen gewünschten Funktionen und dem Markteintritt, wenn das Timing stimmt. Nicht jedes Produkt, das sie herstellen, ist ein Erfolg, und manchmal verwandeln sie Hunde in Gewinner, indem sie umbenennen, Marketing und Vertrieb verbessern oder ihre Verluste reduzieren und das verwenden, was sie in späteren Produkten gelernt haben.

0
DeveloperDon

Wenn Sie mit der Entwicklung von Hi-Rel-Software vertraut sind, z. B. für die Steuerung von Kernreaktoren, die Kommunikation im Weltraum oder für medizinische Implantate (usw.), können Sie die Kosten- und Lieferzeitstruktur für diese Ebene des Projektmanagements und der Qualitätssicherung erläutern Möglicherweise sind sie größer als das, was sich typische Unternehmen für ihre Softwareprojekte leisten können.

0
hotpaw2

Versuchen Sie vielleicht, sie einzeln oder im Idealfall in kleinen Gruppen durchzugehen, und verwenden Sie Fälle von Software, die Sie entwickeln müssen. Identifizieren Sie bei der Beschreibung der Anwendungsfälle Punkte in dem Fall, in dem verschiedene Dinge passieren können (unerwartete, aber nicht unangemessene Fälle). Beginnen Sie, sie aufzuzählen, bitten Sie um einige Klarstellungen und veranschaulichen Sie alle Entscheidungen und Anweisungen, die getroffen oder festgelegt werden müssen, sowie die dabei getroffenen Kompromisse. Mach weiter, bis sie ratlos sind und dir keine Antwort geben können. Lassen Sie sie verstehen, dass das, was Sie jetzt mit ihnen tun, genau das ist, was Sie den ganzen Tag tun, wahrscheinlich allein, wahrscheinlich mit einer viel weniger klaren Richtung, sowohl für den Kurs als auch für das Schreiben des Codes für Hunderte oder Tausende von Anwendungsfälle, die möglicherweise von niemandem festgelegt wurden oder nicht. Und wenn es einen Fall gibt, an den Sie nicht gedacht haben, können Sie nicht garantieren, was das Programm tun wird. Vielleicht macht es das "Richtige", vielleicht beachten Sie. Und genau das ist ein Fehler. Und deshalb braucht das Schreiben von Software Zeit. Je weniger Zeit Sie haben, desto weniger Fälle hatten Sie die Möglichkeit, zu prüfen und zu berücksichtigen, und desto wahrscheinlicher wird das Programm unter unbekannten Umständen nicht das "Richtige" tun.

0
huntmaster

Kosten und Zeit.

Zeit

Stellen Sie die Erwartungen ein, dass Sie X in Y Zeit liefern würden. Es wird nicht mehr und nicht weniger haben. Dann sagen Sie ihnen, was die nächste Version zu welcher Zeit haben wird. Zuerst werden sie überrascht sein zu glauben, dass das Erstellen von X Y viel Zeit in Anspruch nimmt - hier erklären Sie die Zeit und die Komplexität des Erstellens einer Software. Wenn sie nicht überrascht sind, haben Sie entweder weniger Zeit geschätzt oder sie wussten es besser, als Sie über das Erstellen von Software nachdenken.

Kosten

Dies ist aus Steve McConnels Code Compete-Buch (zitiert aus dem Speicher, also entschuldigen Sie mich, wenn ich es nicht mit dem gleichen Effekt vermitteln könnte) - Kunden können leicht nach neuen Funktionen fragen. Als Produktmanager sollten Sie nicht sagen, was der Kunde verlangt. Sie sollten abschätzen, wie viel Aufwand und Kosten für die Erstellung dieser neuen Funktion erforderlich sind. Sie werden langsam verstehen, dass die neue Funktion das Geld/die Zeit nicht wirklich wert ist oder dass sie sie vielleicht nicht einmal benötigen. Ich schlage nicht vor, dass Sie diese Waffe verwenden, um sie zu erschrecken, aber verwenden Sie sie ehrlich und es könnte helfen, den Punkt nach Hause zu fahren.

0
Sundeep