Probleme mit dem iterativen Entwicklungsmodell

Ich bin Produktmanager bei einem Softwareunternehmen. Wir verwenden ein iteratives Entwicklungsmodell (ähnlich wie Agile), um Versionen unserer Software (z. B. 7.3, 7.4, 7.5 usw.) zu trennen. Vor jeder Version erstellen wir einen Designplan, der auf einer Kombination aus Kundenanforderungen und internen Funktionen basiert erstellen wir auf Basis von Marktforschung.

Dies ist zwar definitiv ein besserer Ansatz als das Wasserfallmodell, bringt aber auch einige erhebliche Herausforderungen mit sich.

  1. Es legt unseren Entwicklungszeitplan für eine lange Zeit fest. Wenn derzeit einer unserer Kunden eine Entwicklungsanfrage stellt, können wir sie je nach Prioritätsstufe möglicherweise erst nach über einem Jahr in einer vollständigen und getesteten Version der Software zustellen. Dies wirkt sich auch auf unsere Fähigkeit aus, auf Marktveränderungen zu reagieren. Wir haben Ressourcen hinzugefügt, aber da wir immer mehr Anfragen erhalten, investieren wir in Zukunft mehr Zeit. Was ist der beste Weg, um sicherzustellen, dass unser Entwicklungszeitplan alle Elemente enthält, die wir für unsere Kunden fertigstellen müssen, ohne unsere zukünftige Zeit zu überlasten?
  2. Wenn wir versuchen, die Entwicklungszeit zu verkürzen und Versionen schneller herauszubringen, führt dies unweigerlich dazu, dass mehr Versionen gewartet werden müssen. Das Finden eines Fehlers in 7.3 bedeutet beispielsweise, dass derselbe Fehler in 7.4, 7.5 usw. identifiziert und behoben werden müsste. Wie können wir die Anzahl der Versionen reduzieren, wenn es mehr Fehler gibt?

Was sind Ihrer Erfahrung nach die besten Lösungen für diese Probleme mit dem iterativen Entwicklungsmodell?

Hallo Riggins, willkommen zurück! Ich habe Ihre Frage gelesen und Nr. 2 basierend auf dem Problem bearbeitet, aber ich bin mir nicht sicher, was Ihre Frage für Punkt Nr. 1 ist. Vielleicht könnten Sie oder jemand anderes bearbeiten, um eine direktere Frage zu stellen, um Nr. 1 einen besseren Fokus zu geben. Dies scheint eine gute Frage zu sein, aber das Stellen direkter Fragen kann dazu beitragen, die Antworten besser zu fokussieren und sie zu einer großartigen StackExchange-Frage zu machen. :) +1
Entwickeln Sie die zukünftigen Versionen parallel? Ich kann mir nicht vorstellen, wie Sie sonst einen Fehler in mehreren Versionen beheben müssten. Besonders bei der iterativen Entwicklung scheint es, dass ein einmal behobener Fehler auch in Zukunft behoben ist, es sei denn, er wird auf magische neue Weise beschädigt.
Zweitens Karens Kommentar/Frage. Wie kann ein Käfer so die Kette hochrutschen? Sobald es in 7.5 behoben ist, wird allen Kunden sicherlich gesagt, "Install 7.5". Unternehmen, für die ich gearbeitet habe, lehnen es ab, Benutzer zu unterstützen, die nicht die neueste Version installiert haben (kommerzielle Softwareanbieter).
2 wichtige Fragen, die meiner Meinung nach noch nicht gestellt wurden: 1. Wie lange dauert der Veröffentlichungszyklus? 2. Wie ist die Liefermethode für Neuerscheinungen?
@Karen - das ist richtig, sobald ein Fehler in der neuesten (Entwicklungs-) Version behoben ist, wird er in allen zukünftigen Versionen behoben. Das Problem sind alle Vorgängerversionen, die noch gepflegt werden. Ein in 7.5 identifizierter Fehler muss also möglicherweise in 7.2, 7.3 und 7.4 behoben werden.
@Jason - Der Veröffentlichungszyklus beträgt zwischen 4 und 6 Monaten, je nachdem, wie schnell die Entwicklung und das Beta-Testen verlaufen. Die Bereitstellungsmethode ist eine manuelle Installation durch unsere Mitarbeiter, unsere Kunden haben jedoch die Möglichkeit, ein Upgrade durchzuführen oder nicht.
@ JMort253 - Ich habe eine spezifischere Frage für Nr. 1 hinzugefügt. Im Wesentlichen möchte ich sicherstellen, dass wir alle unsere Verpflichtungen gegenüber unseren Kunden einhalten, aber ich möchte nicht, dass unser Entwicklungsplan so starr ist, dass ich genau weiß, wie die Software in 18 Monaten aussehen muss. Da brauche ich mehr Flexibilität.
Riggens, dann bin ich [immer noch] verwirrt. Warum patchen Sie frühere Nebenversionen der App, anstatt die Benutzer auf die neueste Nebenversion aktualisieren zu lassen? Ich bin bei @gef05: Alte Versionen sind bekanntermaßen fehlerhaft. Deshalb haben wir neue Versionen!
@Karen - Wir haben tatsächlich spezifischere Builds (dh 7.2.1, 7.2.2 usw.). 7.2 bis 7.3 gilt als Hauptversion. Aus verschiedenen Gründen zwingen wir unsere Kunden nicht, auf die neueste stabile Hauptversion zu aktualisieren, und wir unterstützen normalerweise mindestens 2 stabile Versionen (keine in der Betaversion) zu einem bestimmten Zeitpunkt.
Nebenbei möchte ich darauf hinweisen, dass wir einen Projektmanagement-Chatraum haben, den jeder mit mindestens 20 Reputation nutzen kann. Tatsächlich fangen wir an, ein bisschen mehr Nutzung zu sehen! ;)

Antworten (5)

Wenn Sie über eine gute Versionskontrolle verfügen, sollten Sie in der Lage sein, die Fehlerbehebung von Version 7.3 durch alle Releases bis zum aktuellen zu kaskadieren. Es sollte kaum notwendig sein, herauszufinden, wie die zukünftigen Versionen gepatcht werden können. Wenn Sie über gute automatisierte Testwerkzeuge verfügen, müssen Sie nur überprüfen, ob der Fehler in jeder Version, jedem Patch vorhanden ist, und die Korrektur überprüfen.

Für diese Art von Veröffentlichung würde ich auf dem Stamm entwickeln und bei der Veröffentlichung verzweigen. Verzweigen Sie so früh wie nötig und so spät wie möglich. Ich habe Projekte gesehen, bei denen jede Version eine eigene Codeinsel ist. Es neigt dazu, Probleme einzuführen, auf die Sie stoßen.

Ich würde die Arbeit an Fehlern in früheren Versionen in einen separaten Wartungsstrom aufteilen. Der Wartungsstrom sollte erfahrene Entwickler haben oder Sie könnten mehr Fehler einführen als Sie beheben. Diese Gruppe sollte in der Lage sein, Fehlerkorrekturen in die aktuelle Version einzufügen.

Wenn Sie Fehler finden, möchten Sie diese möglicherweise bis zur ältesten unterstützten Version zurückverfolgen und sie in dieser Version beheben. Verschieben Sie dann den Patch auf die neueste Version, die defekt ist.

Das Dokumentieren der Ursache des Fehlers (wie er eingeführt wurde) kann hilfreich sein, um die Rate zu verringern, mit der Sie neue Probleme einführen.

Eine Verringerung der Anzahl der unterstützten Versionen würde ebenfalls helfen. Betrachten Sie wie einen Wartungsplan so etwas wie:

  • Jede Version wird unterstützt, bis zwei vierteljährliche Versionen veröffentlicht wurden.
  • Vierteljährliche Releases werden ein Jahr lang unterstützt.
  • Jährliche Releases werden für zwei Jahre unterstützt.

Muss man so viele Versionen haben? Gibt es eine Möglichkeit zu einem Track zu wechseln ? (Ein Track bedeutet, dass Sie abhängig von Ihrem Versionskontrollsystem einen Haupt- oder Master-Branch haben und jede Änderung in diesen Haupt- oder Master-Branch geht und es keine Versionen gibt.)

Wenn es nicht notwendig ist, dann schlage ich vor, die Versionen zu vergessen und iterativ in diesen einen Track (Zweig) zu liefern. Mit diesem Ansatz können Sie die Zykluszeit in Ihrer Organisation verkürzen, aber dennoch iterativ entwickeln.

Wenn es notwendig ist, versuchen Sie, einen Weg zu finden, sie nicht zu haben. Die Verwaltung mehrerer Versionen ist ein enormer Overhead, und der Aufwand für die Verwaltung von Zweigen und Versionen kann für neue Funktionen aufgewendet werden. Versuchen Sie, dem Kunden die Verwendung unterschiedlicher Versionen auszureden. Wenn es intern ist, finden Sie heraus, warum es überhaupt eingeführt wurde, und lassen Sie es verschwinden. Oder Sie können einen Track haben und ihn mit der neuesten Versionsnummer taggen, aber nicht verzweigen.

Meiner Erfahrung nach sind 90 % der Kunden mit einer Spur zufrieden. Die restlichen 10 % verloren das Vertrauen und entschieden sich deswegen gegen neue Patches. Dies ist jedoch eine andere Situation.

Gibt es Websites, die Sie empfehlen können, um mehr über einen Track zu erfahren?
Ehrlich gesagt kenne ich keine Seiten, aber ich kann einen Beitrag darüber schreiben, wenn Sie daran interessiert sind
Klar, ich würde es auf jeden Fall noch einmal lesen.
Danke Zsolt, das scheint, als könnte es wirklich viele meiner Probleme lösen, und ich bin definitiv daran interessiert, mehr zu lernen.

Reduzieren Sie den Umfang, integrieren Sie das Testen in den Release-Zyklus (z. B. ist es nicht getan, bis es getestet und behoben ist) und veröffentlichen Sie es häufiger.

Damit ein iterativer Zyklus gut funktioniert, müssen Sie:

  1. Erhöhen Sie die Häufigkeit der Veröffentlichungen , und
  2. Bewege dich immer vorwärts

Die Idee ist:

  1. Kunden müssen nicht lange auf die Behebung von Problemen warten
  2. Kunden können sicher sein, dass neuere Versionen besser sind als alte

Es ist in Ordnung, einen Kunden bei einer älteren Version zu lassen, aber es ist unproduktiv, wenn er erwartet, dass sie für lange Zeit gewartet oder gepatcht wird.

Um zu verhindern, dass Ihre Mainstream-Kunden verärgert werden, bauen Sie außerdem eine Gruppe von „Power-Usern“ auf, die vor allen anderen eine neue Version erhalten, und helfen Sie dabei, die größten Probleme auszusortieren.

Zu Punkt 1

Ihre Nachfrage übersteigt das Angebot und verursacht einen Arbeitsstau, der ins Unendliche tendiert. Es ist schwer, konkrete Ratschläge zu geben, um das zu beheben, aber ich würde damit beginnen:

Messen Sie, wie oft neue Funktions-/Änderungsanforderungen gemeldet werden. Wie oft wird ein Fehler in einer Produktionsversion gemeldet. Achten Sie auf die Ebenen der Wertnachfrage (neue Dinge, die Kunden wollen, die neue Geschäfte anregen oder die Ausgaben erhöhen) und der Fehlernachfrage (die Anfragen, die durch einen Fehler Ihrerseits verursacht werden (z. B. Fehler).

Sobald Sie richtig verstanden haben, woher die Nachfrage kommt und wie oft, versuchen Sie, Ihre Angebotsseite an die Nachfrage anzupassen, indem Sie die Ausfallnachfrage entfernen und die Arbeit so sequenzieren, dass sie der Wertnachfrage entspricht.

Weitere Informationen finden Sie in der Warteschlangentheorie. Es gibt eine Menge Material da draußen, aber ich empfehle besonders, „Managing the Design Factory“ von Don Reinertsen zu lesen, das einen wirklich guten Abschnitt über Warteschlangen enthält (und ein allgemein großartiges Buch ist).