Software mit agilen Methoden umschreiben

13

Angenommen, Sie müssen eine gesamte Anwendung mit agilen Methoden neu schreiben. Wie würden Sie dies tun?

Ich vermute, Sie könnten eine Menge User Stories schreiben, die auf dem Verhalten Ihres aktuellen Systems basieren. Und dann implementieren Sie sie in kleinen Iterationen. Aber das würde nicht bedeuten, dass wir die Anforderungen UP FRONT haben ?

Und wann würdest du mit der Veröffentlichung beginnen? Agile sagt, wir sollten früh und häufig veröffentlichen, aber es macht wenig Sinn, die Veröffentlichung vor Abschluss des vollständigen Neuschreibens durchzuführen.

Asier Barrenetxea
quelle
4
Das Umschreiben einer gesamten Anwendung ist niemals eine gute Idee. Siehe Netscape neu schreiben . Es geht viel verloren, eine ganze Anwendung neu zu schreiben. Wissen ist in der Quelle kodifiziert und muss in einem Re-Write wiederentdeckt werden. Es ist einfach, auf Code zu stoßen und zu deklarieren: "Warum haben sie das so gemacht?" Ich kann es besser und in weniger Zeilen! In den meisten Fällen versteht der Entwickler im Code, warum er zuvor so geschrieben wurde. Code Simplicity spricht mit
Chuck Conway
Wenn Sie die Frage stellen, haben Sie nicht die Erfahrung mit Agile, um sie effektiv für ein so großes Unternehmen einzusetzen. Persönlich, wie ich es tun würde (vorausgesetzt, "weglaufen" stand außer Frage), beschränke ich zunächst meine Exposition und setze Strategien zur Schadensbegrenzung ein, falls (wann) es birnenförmig wird.
Mattnz
Sie glauben nicht, dass während des gesamten Wiederherstellungsprozesses neue Anforderungen erstellt werden?
JeffO
cross-posted von SO: stackoverflow.com/questions/13168314/…
gnat
Wäre es nicht sehr unagil, die gesamte Anwendung neu zu schreiben?
Pieter B

Antworten:

15

Zerlege es in hochrangige Epen. Nehmen Sie jeden Funktionsbereich der Anwendung Schritt für Schritt vor.

Teilen Sie ein Epos in eine Gruppe von Storys auf (verwendbare Abschnitte - alles, was die Anwendung verbessert) und verwalten Sie diese wie eine vorhandene Anwendung, mit einer Ausnahme: Wenn dies möglich ist, machen Sie es so, wie Sie es möchten kann diese eine Funktionalität als Teil oder neben der ursprünglichen Anwendung implementieren.

Wenn Agilisten "früh und häufig veröffentlichen" sagen, bedeutet das nicht unbedingt für die Produktion. Wenn Sie eine vorhandene Anwendung ersetzen möchten, sollten Sie einen Staging-Bereich zum häufigen Freigeben verwenden und sicherstellen, dass Ihre Benutzer das System dort testen. Dies gibt ihnen weiterhin Raum, um die nächste Arbeit zu priorisieren und sicherzustellen, dass nichts, was Sie für die Produktion freigeben, das Produkt beeinträchtigt.

Sobald Sie eine Komponente für die Produktion freigegeben haben, fahren Sie mit der nächsten fort.

pdr
quelle
Was @pdr gesagt hat.
KodeKreachor
3
Während der Nicht-Produktions-Veröffentlichungszeiträume sollte die Anwendung, auch wenn sie sich in einer VM befindet, mit Hundefutter behandelt werden, um ein Gefühl für die Verwendung und Vollständigkeit zu bekommen, da alle Anforderungen im Voraus bekannt sind und höchstwahrscheinlich eine wichtige Domäne / BI innerhalb des Entwicklungsteams ist.
JustinC
10

Wir haben gerade eine solche Erfahrung gemacht (ich als Scrum Product Owner). Wir haben zwei Jahre gebraucht, um zu etwas Lösbarem zu gelangen. Trotzdem brachte uns Agilität viele Vorteile.

Erstens: Ein vollständiges Umschreiben ist von Natur aus überhaupt nicht agil. Sie sollten stattdessen überlegen, das vorhandene Produkt Stück für Stück umzugestalten. Das wurde in einer anderen Frage diskutiert. Nehmen wir also an, es muss sich um ein Umschreiben handeln.

Dann beginnen Sie mit einem Backlog, das alle relevanten Anwendungsfälle des vorhandenen Produkts abdeckt. Aber bitte nähern Sie sich dem nicht, indem Sie Spezifikationen schreiben. Das wäre zu detailliert. Es sollte vollständig sein (ansonsten können Sie keine Release-Planung durchführen). Und es sollte nicht zu aufwendig sein (sonst schreiben Sie Spezifikationen im Voraus). Hier ist, wie wir das angegangen sind:

  • Kategorisieren Sie die Benutzer des alten Produkts. Identifizieren Sie die Benutzer, die nur einen kleinen Teil des alten Produkts benötigen und dennoch etwas Nützliches daraus machen. Sie definieren Ihre ersten Epen.

  • Fügen Sie dann Epics hinzu, mit denen eine andere Benutzerkategorie zum neuen Produkt wechseln kann. Usw., bis Sie ein Backlog haben, das alle Benutzer abdeckt.

  • Wahrscheinlich müssen diese Epen weiter gespalten werden. Wenn möglich, versuchen Sie zu teilen, damit jedes Teil noch einen Wert hat. Wenn dies nicht möglich ist, stellen Sie zumindest sicher, dass jedes Teil demonstriert werden kann.

  • Wenn Sie 20-50 Epen haben, lassen Sie sie vom Team schätzen.

  • Teilen Sie die meisten Epen in User Stories auf, die das Team innerhalb eines Sprints für machbar hält. Mach das noch nicht für alle Epen, nur für die, die oben sind. Sie haben genügend Zeit, um den Rest aufzuteilen.

Wann extern freigeben! Das ist eine Geschäftsentscheidung. Zumindest bietet Ihnen dieser Ansatz die Möglichkeit, bestimmte Benutzerkategorien früher freizugeben. Das kann praktisch sein, wenn das Management wegen dieses scheinbar nie endenden Projekts nervös wird.

Kris Van Bael
quelle
4
A total rewrite is by nature not agile at all. You should instead consider refactoring the existing product piece by piece.Wahreres Wort wurde noch nie gesprochen.
maple_shaft
4

Jetzt freigeben, wenn du kannst

Ihre Frage, wann Sie mit der Veröffentlichung des Codes beginnen, ist großartig. Ich denke, dass zwei Vorbehalte gelten. Erstens, dass Sie "gut genug Qualität" haben und zweitens, dass Sie die Anforderungen für ein MVP (Minimum Viable Product) erfüllen.

Rom (und Agile) wurden nicht an einem Tag gebaut

Vielleicht sind Sie mit einem schlüsselfertigen, agilen Team bereit, am ersten Tag zu übernehmen. Für die meisten Organisationen sind Schulungen, Umrüstungen und der übliche Formierungs-, Sturm-, Normierungs- und Leistungszyklus für die Bildung eines Teams erforderlich. Seien Sie in Bezug auf Risiken und Kosten im Voraus, achten Sie darauf, realistische Erwartungen zu setzen, und seien Sie aufgeschlossen und bereit, Ihren Ansatz zu vertreten.

Seien Sie ein Wiederverwendungs-Bootstrapper

Die Wiederverwendung von Code ist und bleibt wie die Fusionskraft die zukünftige Lösung unserer wirtschaftlichen Probleme. Ich habe das Gefühl, dass Entwickler oft sagen, sie glauben an die Wiederverwendung, aber nur an die Art der Wiederverwendung, die nach dem Erstellen eines neuen Frameworks beginnt, und nicht an die Art, in der sie auf dem aufbauen, was bereits jemand anderes getan hat. Wie kann das funktionieren, bis jemand bereit ist, auf dem Fundament eines anderen aufzubauen? Im besten Fall bedeutet dies alle paar Jahre ein Umschreiben, wenn sich die Teamführung ändert.

Warum früh und oft veröffentlichen?

Früh loslassen und oft ist aus vielen Gründen ein Mantra. Es gibt unseren Diskussionen über das, was das Produkt werden soll, Leben, wo wir sind, und es gibt uns eine Basis für iterative / inkrementelle Änderungen. Das Release-Tempo ist für Agile nahezu unveränderlich, mit dem Unterschied, wer die Releases erhält (Kundensurrogate oder Endbenutzer). Vor Agile wurde geschätzt, dass die Wartung 60% der Kosten für Softwaresysteme ausmacht. Dies ist eine Quelle großer Bestürzung für Manager und andere, von denen einige der Ansicht sind, dass bei der Produktveröffentlichung Software zum Erliegen kommt. Für sie ist alles nach der Veröffentlichung Überarbeitung und Bezahlung, um ein Produkt zu reparieren, für das sie bereits einmal bezahlt haben.

Pre-Release ist unnatürlich

Kent Beck schreibt, dass Vorabversionen für Softwareprodukte ein unnatürlicher Zustand sind. Es ist sicherlich eine unbequeme Zeit, weil Sie keine Kunden haben und für das Produkt zahlen, anstatt für Sie.

Kritisieren Sie das vorherige Team nicht

Die Entwickler, die das Redigieren als Helden und Rettungsmittel für das Projekt übernehmen, sind möglicherweise damit beauftragt, die Erfolge des vorherigen Teams zu kritisieren.

  • Erstens haben Sie mehr Zeit und Energie für Ihre eigentliche Mission, wenn Sie es zulassen, dass sich die Leute eine Meinung über das vorherige Team bilden.
  • Es ist umständlich, mit Mitgliedern des vorherigen Teams zusammenzuarbeiten, sowohl mit Entwicklern als auch mit Stakeholdern wie Produktmanagern, Projektmanagern oder Kunden.
  • Wenn Sie es zum Laufen bringen können, erhalten Sie möglicherweise Anerkennung für das, was das vorherige Team getan hat (oder schlimmer noch).
  • Im Durchschnitt war das vorherige Team wahrscheinlich durchschnittlich. Im Durchschnitt könnten Sie durchschnittlich sein. Sie haben mehr Arbeit als das vorherige Team, weil Sie zusätzlich zu einem Projekt eine neue Methodik einführen müssen.
  • Wenn das alte Team schrecklich war, es sei denn, Sie sind auch schrecklich, werden Sie irgendwann die Ehre haben, besser als schrecklich zu sein. Wenn sie besser als schrecklich waren und Sie nicht merklich besser sind, kann es zu unangenehmen Vergleichen führen, wenn Sie sagen, dass sie schrecklich waren.
  • Wenn das alte Team besser war als Sie dachten und Sie in Schwierigkeiten geraten, weil die Organisation kaputt ist oder das Problem schlecht definiert oder sehr schwierig ist, werden die Dinge für Sie besser laufen, wenn Sie die Erwartungen nicht wesentlich erhöht haben.
  • Wenn sie erwarten, was sie bekommen, aber Sie es besser machen, ist es ein Gewinn für Sie.
  • Kritik zu unterlassen ist beides, gutes Benehmen und zeigt, dass man Klasse hat.
DeveloperDon
quelle
Sie haben noch etwas vergessen. Das alte Team stellte die Erwartungen an die Kunden. Sie müssen sie zurücksetzen, indem Sie es viel besser machen oder die Dinge genauso machen. Wie viel Druck hat Windows 8, weil es keinen Startknopf gab, iOS und Android jedoch noch nie und niemand dachte daran, dies zu erwähnen.
1.
2

Aufgefordert durch die Kommentare von @Chuck und Verweise auf Netscape, in denen im Wesentlichen gesagt wird, dass nicht umgeschrieben wird, und gültige Antworten, in denen erwidert wird, dass er OP nicht fragt, ob er sollte. - Ein wirklich agiler Softwareentwicklungszyklus schließt ein Umschreiben aus. Das Umschreiben bricht fast immer viele der Prinzipien, die hinter Agile stehen. Unter Verwendung der aktuellen Software als Grundlage können diese Agile-Prinzipien (aus Agile Manifesto ) nicht mit einem Neuschreiben erfüllt werden.

  • Frühzeitige und kontinuierliche Lieferung wertvoller Software . - Der Kunde erhält keinen frühen Wert, wenn er an dem gemessen wird, was er bereits hat
  • Liefern Sie häufig funktionierende Software - Wochen bis Monate - Wie groß das Projekt ist, können Sie ehrlich sagen, dass der Kunde demnächst alles erhält, was für ihn nützlicher ist.
  • Arbeitssoftware ist das primäre Maß für den Fortschritt - Arbeiten im Vergleich zum Ausgangswert wird nicht so schnell vonstatten gehen
  • Agile Prozesse fördern eine nachhaltige Entwicklung. - Wenn der Kunde über eine funktionsfähige Basis verfügt, wird der Druck zur Bereitstellung verbesserter Funktionen zunehmen. Es ist unwahrscheinlich, dass dies in einem so nachhaltigen Tempo getan wird
  • Einfachheit - die Kunst, den Umfang der nicht geleisteten Arbeit zu maximieren - ist von entscheidender Bedeutung. das sagt eigentlich alles ...

"Angenommen, Sie müssen eine gesamte Anwendung mit agilen Methoden neu schreiben. Wie würden Sie das tun?"

Die Frage basiert auf einer falschen Prämisse - Dass ein Umschreiben als agil angesehen werden kann.

mattnz
quelle
2

Überlegen Sie, ob Sie die umgeschriebene Anwendung einzeln freigeben und sie neben der alten in der Produktion haben können.

Insbesondere für Webanwendungen ist es möglicherweise recht einfach, einen einzelnen Teil der Anwendung auf eine neue Plattform zu verschieben und Ihre Routing-Anforderungen für den Lastenausgleich an das entsprechende System zu senden. Schreiben Sie dann die Geschichten auf, mit denen Sie Ihre erste Seite in Produktion bringen und diese auf agile Weise bereitstellen können.

Desktop-Anwendungen können komplizierter sein, aber es wird oft möglich sein.

Sie suchen nach Nähten - Stellen, an denen das alte System seine Aufgaben von dem neuen übernehmen kann, ohne dass eine vollständige Neufassung erforderlich ist.

Möglicherweise gibt es eine in sich geschlossene Geschäftslogik, die in einen neuen Webdienst oder ein neues Framework verschoben werden kann, und die alte App kann mithilfe dieses Codes anstelle des alten Codes geändert werden. Schneiden Sie immer wieder Stücke an den Nähten ab, bis alles, was übrig bleibt, mit einem Biss handhabbar ist.

Wenn Sie keine Nähte finden können, müssen Sie möglicherweise nach dem Big-Bang-Ansatz suchen, der in einigen anderen Antworten vorgeschlagen wird. Aber machen Sie sich auf einen langen Marsch gefasst, bevor Sie Ihr Ziel erreichen, vor allem, wenn Sie das alte System parallel weiterentwickeln müssen ...

Bill Michell
quelle
1

Agile sagt, wir sollten früh und häufig veröffentlichen, aber es macht wenig Sinn, die Veröffentlichung vor Abschluss des vollständigen Neuschreibens durchzuführen.

Tatsächlich ist dies meiner Meinung nach der entscheidende Punkt - je früher Sie Teile der umgeschriebenen Anwendung in der Produktion erhalten (und im Idealfall die Funktionalität des alten Systems ersetzen), desto größer sind die Chancen, dass Ihr Projekt erfolgreich sein wird. Wenn Sie der Meinung sind, dass dies nicht viel Sinn macht, denken Sie genauer darüber nach - es gibt fast immer Möglichkeiten, Teile freizugeben.

Dies bedeutet wahrscheinlich, dass jemand etwas in der alten Anwendung ändern muss, z. B. einige neue Schnittstellen hinzufügen muss, um mit der umgeschriebenen Anwendung zu interagieren, während die Umschreibung nicht abgeschlossen ist. Aber nach meiner Erfahrung rechnet sich eine solche Zusatzarbeit immer von selbst.

Sobald die ersten Teile der neuen Anwendung in Produktion sind, wird der agile, iterative Ansatz offensichtlich. Die Anforderungen werden sich ändern, Ihre User Stories werden sich ändern oder neue Prioritäten erhalten, und Sie werden hoffentlich in kleinen Schritten mehr und mehr Funktionen des alten Systems ersetzen.

Doc Brown
quelle