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.
Antworten:
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.
quelle
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.
quelle
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
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.
quelle
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.
quelle
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.
quelle
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.
quelle