Gibt es andere Vorteile für agile Praktiken als einen funktionierenden Aufbau zwischen Sprints?

9

Ich habe mich kürzlich für agile Praktiken in der Softwareentwicklung interessiert und seitdem habe ich viele Artikel gesehen, die darauf hinweisen, dass diese Praktiken reduzierte Gesamtkosten ermöglichen.

Die Logik dahinter sieht normalerweise so aus: Wenn sich Ihre Anforderungen ändern, können Sie diese Änderung im nächsten Sprint-Backlog widerspiegeln. Dies führt zu geringeren Kosten, da das Entwerfen und Implementieren der neuen Funktion zeitlich eng beieinander liegt Die Kosten sinken nach der bekannten Regel, dass es umso teurer ist, diese Anforderungen zu erfüllen, je später Sie Änderungen an Ihren Anforderungen vornehmen müssen.

Mittlere bis große Softwareprojekte sind jedoch komplex. Eine plötzliche Änderung der Anforderungen bedeutet nicht, dass Sie keine anderen Teile Ihres Systems berühren müssen, um diese Anforderung zu erfüllen. In vielen Fällen muss die Architektur erheblich geändert werden, was auch bedeutet, dass Sie alle Funktionen, die auf der älteren Architektur basieren, erneut implementieren müssen. Der ganze Punkt der reduzierten Kosten verschwindet hier irgendwie. Wenn eine neue Anforderung einen neuen unabhängigen Teil des Systems erfordert, ist dies natürlich kein Problem. Die alte Architektur wächst einfach, sie muss nicht überdacht und neu implementiert werden.

Und das Gegenteil. Wenn Sie einen Wasserfall verwenden und plötzlich feststellen, dass eine neue Anforderung eingeführt werden muss, können Sie Ihr Design ändern. Wenn die vorhandene Architektur geändert werden muss, gestalten Sie sie neu. Wenn es nicht wirklich damit zu tun hat, sondern nur einen neuen Teil des Systems einführt, dann erledigen Sie die ganze Arbeit, hier kein Problem.

Trotzdem scheint mir der einzige Vorteil, den agile Entwicklung hat, darin zu bestehen, dass Funktionen zwischen Sprints vollständig erstellt werden, und für viele Leute und Projekte ist dies nicht kritisch. Darüber hinaus scheint Agile insgesamt zu einer schlechten Softwarearchitektur zu führen, da Features irgendwie aufeinander abgestimmt werden. Agile Teams kümmern sich nur darum, dass ein Feature funktioniert, nicht wie es funktioniert. Wenn Systeme mit der Zeit immer komplexer werden, erhöhen agile Entwicklungspraktiken das Chaos in der gesamten Produktarchitektur, was letztendlich zu höheren Kosten führt, da es immer schwieriger wird, Änderungen vorzunehmen, während Sie mit dem Wasserfall Ihre Architektur perfektionieren können bevor Sie etwas veröffentlichen.

Kann mir bitte jemand zeigen, wo ich hier falsch liege, weil offensichtlich viele Leute in Produktionsumgebungen agil arbeiten, also muss ich mich irgendwo irren.

tux91
quelle
Du hast einen Punkt. Ich möchte darauf hinweisen, dass der Begriff „Wasserfall“ keine universelle Definition hat (wie viele andere Begriffe in der IT). Die meisten Leute denken, dass Sie nicht codieren dürfen, es sei denn, die vollständigen 2000 Seiten der Anforderungen sind geschrieben und signiert. Dies muss überhaupt nicht der Fall sein.
NoChance
Ja, mit "Wasserfall" meine ich einen linearen Prozess von (im Grunde genommen) funktionalen Spezifikationen -> Design -> Code zwischen Meilensteinen, nicht Sprints. Und natürlich sind 2000 Seitenanforderungen und technische Spezifikationen kein Muss. Grundlegende Verantwortlichkeiten von Klassen und ihre Beziehungen zueinander reichen oft als Top-Level-Design aus.
Tux91
3
@EmmadKareem: Eigentlich ist dies im eigentlichen Wasserfall genau der Fall. Sie beginnen erst mit dem Codieren, wenn jedes Detail des Designs endgültig ist. Glücklicherweise wird der tatsächliche Wasserfall in der Softwareentwicklung selten angewendet - hauptsächlich, weil er nicht wirklich funktioniert.
tdammers
1
@tdammers, danke für deinen Kommentar. Dies geschah jedoch einige Male. Die Wasserfallmethode hat keinen Eigentümer und kann unterschiedlich angewendet und interpretiert werden. Du bist keine Regel, die besagt, dass du nicht codierst, bis ... oder sonst ..., weil es keine Methodik ist. Wenn es um eine gute Methodik geht, ist es meiner Meinung nach besonders in Projekten sehr sinnvoll, in denen Benutzer den Kern dessen kennen, was sie von einem System benötigen.
NoChance
@Emmad Kareem: Ich stimme dir zu. Ich denke, agile Methoden eignen sich besser für Projekte, bei denen die Anforderungen nicht klar sind und viel Prototyping und Benutzerfeedback erforderlich sind, um die endgültigen Anforderungen zu erhalten. Andererseits gibt es Fälle, in denen die Kernanforderungen von Anfang an klar sind. In diesen Fällen würde ich eine Entwicklungsmethode anwenden, die dem Wasserfall ähnlicher ist (mit etwas Raum für Korrekturen auf dem Weg) als einer agilen Methode. Ich denke, es hängt wirklich von der Art des Projekts ab, an dem Sie arbeiten.
Giorgio

Antworten:

7

Zunächst einmal war das "Wasserfall" -Modell immer ein Strohmann, der beschrieb, wie man ein Softwareentwicklungsprojekt NICHT ausführt. Schlag es nach.

Wie auch immer, die meisten "Wasserfall" SDLC-Projekte beinhalten einen "Change Management" -Prozess, wenn Leute feststellen, dass die Annahmen, die in die Spezifikationen geschrieben wurden, nicht mehr gültig sind (und dies geschieht immer bei großen komplexen Projekten). Leider ist der Änderungsmanagementprozess als Ausnahmebehandlungsmaßnahme konzipiert und dumm teuer, was bedeutet, dass das Projekt verspätet oder von schlechter Qualität sein wird.

Die Idee hinter agilen Methoden ist, dass Veränderungen eine Selbstverständlichkeit sind - sie werden eintreten. Daher müssen Sie die Standardoperation "Änderungsmanagement" anstelle der Ausnahmebehandlung ausführen. Das ist nicht einfach, aber die Leute haben festgestellt, dass Sie es tun können, wenn Sie viele gute Entwurfspraktiken anwenden.

Ein weiteres großes Problem beim Frontloading-Design besteht darin, dass (meistens) so viel Zeit für das Sammeln von Anforderungen und das Entwerfen von Design, Entwicklung und Test aufgewendet wird. Wenn das Testen die letzte Phase ist und ein ernstes Problem entdeckt wird, ist es sehr unwahrscheinlich, dass es innerhalb Ihres Zeitrahmens behoben wird.

Vielleicht ist eines der besten Merkmale eines agilen Ansatzes, dass eine kontinuierliche Interaktion (dh echte Kommunikation) zwischen dem Team, das die Lösung entwickelt, und dem Kunden, der sie benötigt, erforderlich ist. Es werden Prioritäten gesetzt, sodass die Elemente mit der höchsten Priorität zuerst ausgeführt werden (und wenn die Zeit abläuft, werden die Elemente mit der niedrigen Priorität gekürzt). Feedback kommt schnell.

Zurück zur Frage dramatischer Veränderungen: Sie müssen wirklich Methoden verwenden, die Veränderungen abschwächen. Gute SOLID OO-Prinzipien können eine gute Rolle dabei spielen, ebenso wie der Aufbau solider automatisierter Testsuiten, mit denen Sie Ihre Software regressiv testen können. Sie sollten diese Dinge unabhängig von Ihrer Methodik tun, aber sie werden wirklich wichtig, wenn Sie versuchen, agil zu sein.

Matthew Flynn
quelle
Vielen Dank. Für alle, die sich darüber
informieren möchten,
8

Nun, es gibt ein paar Vorteile. Das erste ist, dass Kunden keine Spezifikationsdokumente lesen. Je. Waterfall geht davon aus, dass jeder zu Beginn einer Spezifikation gut zustimmt. Wenn die Software ein Jahr später an den Kunden geliefert wird und mit der Spezifikation übereinstimmt, sind sie glücklich. In der Praxis entdecken Kunden immer nur all die Dinge, die sie wirklich brauchen, wirklich nicht brauchen und die wirklich etwas anderes sein müssen, wenn sie aktiv mit der Software selbst spielen. Agile erhält einen funktionierenden Prototyp in die Hände des Kunden, sodass diese Unterbrechungen sofort erkannt werden. Bei Agile geht es nicht nur darum, auf sich ändernde Anforderungen zu reagieren. Es geht auch darum, dass diese sich ändernden Anforderungen frühzeitig auftreten, wenn die Änderungskosten niedrig sind, und nicht am Ende, wenn die Änderungskosten hoch sind.

Ein zweiter Vorteil besteht darin, dass Projekte aufgrund der häufig gut sichtbaren Ergebnisse von Agile weniger wahrscheinlich aus der Bahn geraten. Bei einem großen Wasserfallprojekt ist es allzu leicht, weit zurück zu kommen, ohne es zu merken. Der Wasserfall führt am Ende des Projekts zu mehrmonatigen Todesmärschen. Da Sie mit Agile alle paar Wochen an Kunden liefern, weiß jeder genau, wo sich das Projekt befindet, und Ausrutscher werden schnell abgefangen (und angepasst). Nach meiner Erfahrung produziert Waterfall am Ende Wochen oder Monate mit 100-Stunden-Wochen. Agil bedeutet, dass Sie am Ende des Sprints möglicherweise ein paar 12-Stunden-Tage einplanen müssen.

Ein dritter Vorteil ist, dass agile Projekte tendenziell motivierender sind. Es ist sehr schwer für die Menschen, in einem einjährigen Projekt einen Sinn für Antrieb zu haben. Die Frist scheint so weit weg zu sein, und dieser Mangel an Unmittelbarkeit führt dazu, dass die Leute dazu neigen, Designs aufzuschieben, zu überpolieren und ansonsten einfach nicht sehr produktiv zu arbeiten. Dies gilt insbesondere, weil die ersten Monate für Dinge aufgewendet werden, die Menschen nicht gerne tun, wie z. B. Spezifikationsdokumente. Da Agile in naher Zukunft immer sehr unmittelbare, konkrete Fristen hat, sind die Menschen tendenziell motivierter. Es ist viel schwieriger, eine konkrete Frist für einen festen Satz von Aufgaben zu verschieben, der nächste Woche fällig ist.

Gort den Roboter
quelle
Erstes Argument, genau dafür bin ich unter dem Eindruck agil. Umgang mit sich ständig ändernden Anforderungen. Wenn Anforderungen frühzeitig geändert werden, besteht immer noch die große Möglichkeit, dass die vorhandene Architektur durcheinander gebracht wird, was dazu führt, dass viel vorhandener Code erneut implementiert wird. Zweites Argument, können Sie bitte erläutern, warum Wasserfallprojekte Todesmärsche verursachen? Es scheint, als ob ein wenig Disziplin in Verbindung mit präzisen technischen Daten hier Wunder bewirken kann. Drittes Argument, was ist das Problem, wenn man ein Wasserfallprojekt von unten nach oben baut und es ab und zu bauen kann?
Tux91
2
Meine Erfahrung mit Wasserfallprojekten ist, dass sie für die ersten 90% der geplanten Zeit immer pünktlich sind und zu diesem Zeitpunkt plötzlich Monate zurückliegen. Agiles Modell, bei jedem Sprint auf Demos zu bestehen, macht dies viel weniger wahrscheinlich. Wenn die Leute wissen, dass sie in anderthalb Wochen zur Rechenschaft gezogen werden, sind sie normalerweise besser motiviert als wenn sie in neun Monaten zur Rechenschaft gezogen werden. Es ist nur menschliche Psychologie.
Gort the Robot
1
Nun, ich denke, ich kann nicht mit Erfahrung streiten, obwohl meine Erfahrung etwas anders war, mit einem guten Design in der Handcodierung hat nicht viele Probleme auf dem Weg und die Schätzungen schienen auch ziemlich gut zu sein. Ich denke immer noch, dass die resultierende Architektur solider sein wird, wenn man einen Wasserfall verwendet.
Tux91
2
Es gibt ein paar Bereiche - vor allem sicherheitskritische diejenigen, zB Eisenbahnsignaltechnik , Avionik - , wo die Kunden tun , sehr sorgfältig die Spezifikationen lesen. Sie sind ziemlich selten und führen ohnehin zu sehr unterschiedlichen Entwicklungsmethoden.
Donal Fellows
4

Als Antwort auf das Zitat aus der Frage, die ein grundlegendes Missverständnis von anti-agilen Gegnern ist

"... während der Wasserfall es Ihnen ermöglicht, Ihre Architektur zu perfektionieren, bevor Sie etwas veröffentlichen." ist ein Irrtum, lass es mich für dich beheben; "... während der Wasserfall es Ihnen ermöglicht, Ihre Architektur zu perfektionieren, sodass Sie nie etwas veröffentlichen. "

Die Implikation, dass Waterfall in gewisser Weise eine Architektur von höherer Qualität bietet, ist grundsätzlich falsch und wird durch empirische historische Beweise vollständig widerlegt.

Wenn Facebook in einer Wasserfall-Art mit 500 Millionen Nutzern als feste Voraussetzung entworfen und erst veröffentlicht worden wäre, wenn eine Architektur zur Unterstützung perfektioniert worden wäre, hätte heute niemand mehr davon gehört.

Gleiches gilt für YouTube, Twitter und unzählige andere Unternehmen.

Sie bekamen etwas, das der Kunde berühren und auf die Arbeit reagieren konnte, und gaben es so schnell wie möglich frei. Sie erhielten Feedback und verfeinerten es und gaben es erneut frei. iterieren. Auf diese Weise reagieren sie in diesen drei Beispielen nur mit Funktionen, die Kunden akzeptieren und wollen, und verschwenden so wenig Zeit wie möglich mit Dingen, die Kunden für wenig oder gar keinen Wert halten.

Jeder, der über jahrelange Erfahrung in der Softwareentwicklung verfügt, wird zustimmen, dass es keine perfektionierte Architektur gibt. Nur eine, die weiter von Entropie und großem Schlammball entfernt beginnt als andere Alternativen. Agile erkennt dies an und berücksichtigt es. Dies ist eine technische Verschuldung, eine rasche Neupriorisierung und ein Refactoring.


quelle
3
Wollen Sie mit dem Wort "nie" sagen, dass es keine Softwareprodukte gibt, die mit Wasserfall hergestellt wurden? Warum sollten Sie "nie" etwas veröffentlichen, wenn Sie eine Reihe von Anforderungen für einen bestimmten Meilenstein haben, den Sie am Ende erfolgreich implementiert haben?
Tux91
1
@ tux91 du machst meinen Standpunkt für mich; Nichts wird jemals perfekt sein, da sich die Anforderungen sofort ändern müssen, nachdem Entwürfe zu Papier gebracht wurden und veraltet sind, bevor eine einzelne Codezeile geschrieben wird. Daher ist die Aussage, die ich zitiert habe, ein Trugschluss. Sie werden niemals eine Architektur perfektionieren und somit niemals etwas veröffentlichen.
1
@ tux91 noch zum Verständnis gelesen, sagte ich, dass es keine Präfektenarchitektur gibt und wenn Sie nicht veröffentlichen, bis es wie im Zitat ist, dann wird nie etwas veröffentlicht. Ich habe nicht gesagt, was Sie behaupten, Punkt, das ist in Ihrem Kopf und Ihrer Interpretation. Was ich gesagt habe, ist das Argument, dass der Wasserfall irgendwie eine bessere Architekturqualität bietet, ein Trugschluss und grundlegend fehlerhaft. Und diese Argumente über die NASA und den Wasserfall und was nicht; Abgesehen davon, dass sie nichts mit Programmierern zu tun hatten , töteten sie 3 Astronauten vor Ort, was keine glänzende Erfolgsgeschichte war.
1
@ tux91 wrt Verwendung von "nie", ich bin mit Jarrod hier: Frage sagt "Wasserfall ermöglicht es Ihnen zu perfektionieren ..." - was er mit einem völlig angemessenen (in diesem unrealistischen "perfekten" Kontext) Wort "nie" kontert. Der einzige Grund, warum ich nicht positiv gestimmt habe, ist, dass ich versuche, nicht über Antworten auf nicht konstruktive Fragen abzustimmen
Mücke
1
@gnat Ja, ich glaube, ich habe nicht gedacht, als ich das Wort perfekt verwendet habe , das will ich eigentlich nicht
tux91
3

Scrum selbst schreibt keine technischen Praktiken vor, da es sich um einen allgemeinen Rahmen handelt.

Agile Softwareentwicklung erfordert vom Team technische Exzellenz. Dies ergibt sich aus den folgenden technischen Praktiken von XP (extreme Programmierung). Zum Beispiel müssen Sie etwas über Refactoring, tdd, das gesamte Team, Paarprogrammierung, inkrementelles Design, ci, Zusammenarbeit usw. lernen.

Wenn Sie dies so tun, können Sie schnell und sicher mit Änderungen umgehen. Dies ist auch der Hauptgrund für die Verwendung der agilen Entwicklung.

Die einzige Messung der Agilität, die zählt, ist, wenn Sie es regelmäßig (wöchentlich, zweiwöchentlich) schaffen, Ihrem Kunden wertvolle, funktionierende Software zur Verfügung zu stellen. Können Sie das tun? Dann bist du in meinem Buch agil.

Martin Wickman
quelle
Was ich nicht verstehe, ist, dass "Änderungen schnell und sicher gehandhabt werden können", da dies impliziert, dass ein auf Wasserfällen basierendes Projekt schwieriger zu ändern ist. Warum das? Es ist nur eine Codebasis. Geben Sie an, was Sie ändern müssen, entwerfen Sie das und wie es in vorhandene Architektur, Code, Test und Release passt. Nennen Sie es einfach keinen Sprint, sondern einen Meilenstein. Scheint nicht länger zu dauern oder schwieriger zu sein als agil. Der Unterschied besteht darin, dass Sie sorgfältiger planen, aber keine so strengen XP-Aufgaben ausführen müssen.
Tux91
@ tux91 Meine Antwort wurde aktualisiert. Was die Architektur betrifft , empfehle ich, dies zu lesen oder um 26:20 Uhr zu sehen, was wir als "inkrementelles Design" bezeichnen.
Martin Wickman
2

Für mich ist der Hauptvorteil von Agile die Reduzierung des Risikos im Projekt.

Indem Sie iterativ liefern und viel Feedback von Ihrer Benutzerbasis erhalten, erhöhen Sie die Wahrscheinlichkeit, dass Sie etwas liefern, das sie tatsächlich wollen, und Sie tun dies, indem Sie pragmatisch die wichtigsten Funktionen für sie so früh wie möglich bereitstellen. Theoretisch wird dies mit besseren Schätzungen und Planungen geschehen. Dies ist aus geschäftlicher Sicht offensichtlich sehr ansprechend - viel mehr als nur der lösbare Build.

Sie könnten argumentieren, dass diese ständige Änderung Ihr System gefährdet und die Qualität verringert, aber ich würde zwei Dinge sagen. 1) Diese Änderung tritt ohnehin bei traditionelleren Softwarebereitstellungsprojekten auf - sie wird nur nicht berücksichtigt und tritt später im Projekt auf, wenn, wie Sie bereits betont haben, die Änderungen schwieriger und teurer sind. 2) Agile hat viel zu sagen über den Umgang mit dieser Änderung im Hinblick auf den Einsatz erfahrener motivierter Personen und Praktiken wie TDD, Pairing und Codeüberprüfungen. Ohne diese Änderung der Einstellung zu Qualität und kontinuierlicher Verbesserung akzeptiere ich, dass häufige Änderungen, die Agilität impliziert, Probleme verursachen können.

Benjamin Wootton
quelle
Ja, genau das halte ich vom einzigen Vorteil des Wasserfalls. Es gibt jedoch Situationen, in denen Sie Ihr Produkt während der Entwicklungsphase niemandem zeigen möchten, da es noch nicht fertig ist und noch keine Verkaufsargumente aufweist. Oder wenn Sie eine ziemlich genaue Vorstellung davon haben, was Sie am Ende bauen möchten. Tests, Paarprogrammierung und Codeüberprüfungen garantieren jedoch nicht, dass Sie insgesamt eine gute Produktarchitektur erhalten. Sie werden nur durchgeführt, um sicherzustellen, dass neue Funktionen ordnungsgemäß funktionieren.
Tux91
1

In vielen Fällen muss die Architektur erheblich geändert werden, was auch bedeutet, dass Sie alle Funktionen, die auf der älteren Architektur basieren, erneut implementieren müssen.

Wenn Ihre Architektur aufgrund einer Anforderungsänderung erheblich geändert werden muss, haben Sie entweder eine schlechte Architektur oder schlechte Anforderungen. Dank einer guten Architektur können Sie so viele Entscheidungen wie möglich verschieben und Komponenten Ihres Systems entkoppeln. Gute (Benutzer-) Anforderungen sind keine Dinge wie "eine andere Datenbank verwenden".

Gehen wir also davon aus, dass wir eine gute Arbeitsarchitektur haben. Wenn dies der Fall ist, verlieren agile Entwicklungsmethoden diese "Wäsche" mit Big-Up-Front-Design-Methoden. Ein Kernmerkmal agiler Entwicklungsmethoden sind schließlich Praktiken wie TDD, die eine lose Kopplung im Code fördern und es dem Projekt ermöglichen, mit hoher Geschwindigkeit fortzufahren, unabhängig davon, ob es am Anfang steht oder sehr ausgereift ist.

Erik Dietrich
quelle
0

In vielen Fällen muss die Architektur erheblich geändert werden, was auch bedeutet, dass Sie alle Funktionen, die auf der älteren Architektur basieren, erneut implementieren müssen. Der ganze Punkt der reduzierten Kosten verschwindet hier irgendwie.

Nach einem agilen Prozess besteht eine bessere Chance, diese Anforderung zu erfüllen, bevor zu viel Software entwickelt wurde (und geändert werden muss). Wenn Sie mehrere Monate lang nicht mit dem Kunden zusammenarbeiten und ihm etwas zum Anschauen geben, werden Sie diese großen Architekturprobleme erst erkennen, wenn Sie "glauben", dass Sie bereit sind, zu liefern.

Ich würde lieber versuchen, diese Änderungen in einer funktionierenden Anwendung mit Testabdeckung zu implementieren, als einen riesigen Haufen Code, der nicht einmal kompiliert wird. Als Leiter des technischen Supports erhielt ich eine CD mit einer Anwendung, die sich in monatelanger Entwicklung befand und nicht einmal installiert werden konnte. Wir hätten dieses Problem in der ersten Woche finden können, aber stattdessen war es Zeit, ein Abendessen zu bestellen, weil es eine lange Nacht war.

JeffO
quelle