Ich denke, das Erste, was zu erkennen ist, ist, dass es einen Unterschied zwischen Agilität und Agilität gibt. Die langsame Einführung agiler Techniken und Merkmale - funktionsübergreifende Teams, adaptive Planung, evolutionäre / inkrementelle Bereitstellung, zeitgesteuerte Iterationen und sogar die Einführung von Konzepten aus Lean - unterscheidet sich erheblich von der Einführung von Extreme Programming, Scrum oder Crystal.
Sie erwähnen ausdrücklich die Kundenbeteiligung. Ja, viele der Agile-Methoden erfordern die Einbeziehung der Kunden, aber es ist nicht erforderlich, dass diese agil sind. In jedem Regierungs- / Verteidigungsprogramm hatte ich immer einen Programm- oder Projektmanager, der der Ansprechpartner für den Kunden war. Diese Person wird zur "Stimme des Kunden". Es kann verlangsamt werden, wenn Telefonkonferenzen oder E-Mails stattfinden oder Anrufe und Abklärungen erfolgen. Sie können jedoch auch eine einzelne Person (oder eine Gruppe, wenn Sie auch stellvertretende PMs haben) als Kundenvertreter Ihres Teams einsetzen. Zugegeben, es ist nicht ganz dasselbe. Aber ist es nicht agil, flexibel zu sein und auf Veränderungen zu reagieren?
Sie erwähnen auch einige Schlüsselkonzepte: vordefinierte Anforderungen, Feature-Anforderungen, die "über die Wand geworfen" werden, mangelnde Priorisierung, weil "sie alle wichtig sind", und Projekte mit festen Kosten und / oder festem Zeitplan. Jedes davon kann auf unterschiedliche Weise angesprochen werden.
Wenn Sie denken, dass Sie alle Ihre Anforderungen im Voraus haben, haben Sie wahrscheinlich keine. Anforderungen ändern sich. Nur weil Sie eine "abgeschlossene und abgemeldete" Spezifikation haben, heißt das nicht, dass sie in Stein gemeißelt ist. Erfassen Sie unter Berücksichtigung der von Ihnen vorgelegten Anforderungsdokumente, wie Sie sich wohl fühlen und / oder wie im Vertrag festgelegt, und liefern Sie die Anforderungen, das Design und die Architektur. Überprüfen Sie außerdem, ob es sich bei diesen Dokumenten um lebende Dokumente handelt (ein Designdokument, das ich heute bei der Arbeit gesehen habe, ist mit Revision G gekennzeichnet, dh es befindet sich in der achten Aktualisierung). Fragen Sie, wie viel Sie als TBD in einer bestimmten Iteration belassen können und wie viel Sie jetzt festigen müssen - es könnte ein Geben und Nehmen geben.
Seien Sie agil mit Ihrer Dokumentation. Vervielfältigen Sie nicht die Bemühungen zwischen "was Ihr Team will" und "was der Kunde will". Wenn Ihr Kunde beispielsweise eine herkömmliche Spezifikation der Softwareanforderungen wünscht und Ihr Team User Storys verwenden möchte, sollten Sie versuchen, sich an einen herkömmlichen SRS anzupassen und statt User Storys Aktionselemente und eine fortlaufende Liste von Aktionselementen zu verwenden, damit Sie keine Zeit verlieren Formulierung sowohl "das System soll ..." und "muss in der Lage sein, weil". Dies erfordert jedoch Disziplin seitens des Teams, um sich auf Unterschiede zwischen den Projekten einzustellen. Erfassen Sie Probleme in Reflexionen.
Sobald Sie die Entwicklung erreicht haben, können Sie 5 oder 6 Iterationen ausführen und dann Ihren Kunden zu Ihrer Einrichtung einladen, um eine Teilmenge Ihrer Implementierung zu sehen. Spülen und wiederholen Sie diesen Vorgang. Es ist nicht die ständige Einbeziehung, die von einigen Methoden verlangt wird, aber Sie haben den Vorteil einer hohen Sichtbarkeit. Wenn Ihr Kunde Nein sagt, haben Sie es zumindest versucht. Wenn sie ja sagen, können Sie sie über Agilität aufklären. Bei einem meiner Projekte besuchte der Kunde die Website alle paar Monate (in der Regel 3-5 Monate). Sie sahen zu, wie wir QS-Tests durchliefen, sie diskutierten Bedenken mit Ingenieuren und Geschäfte mit dem Programm- / Projektbüro. Es war eine Gelegenheit für alle, auf die gleiche Seite zu kommen.
Test und Wartung erfolgen genauso wie bei anderen agilen Projekten. Erstellen Sie Ihre Testverfahren und dokumentieren Sie Fehler auf geeignete Weise, verfolgen Sie die Messdaten gemäß den vertraglichen Verpflichtungen und dokumentieren Sie die Testergebnisse. Wenn Sie TDD folgen möchten, wählen Sie es. Kontinuierliche Integration ist eine weitere gute Idee. Während Projektstatusmeetings kann Ihr Projektmanager anhand dieser Informationen sagen, dass wir N-Anforderungen implementiert haben, M-Tests durchgeführt und X-Tests bestanden haben, und den Personen, die das Geld haben, Informationen zum Projektstatus und -status übermitteln.
Apropos Geld, wir haben das Problem der festen Kosten und / oder des festen Zeitplans.
Der Umgang mit einem festen Zeitplan ist ziemlich einfach. Anhand Ihrer Anforderungen wissen Sie, wie viele Iterationen Sie ausführen können. Ihre Arbeitslast für jede Iteration ist in Bezug auf die zu implementierenden, zu testenden und zu integrierenden Funktionen ziemlich genau festgelegt. Es mag schwierig sein, aber es ist nicht unmöglich, Features aufzubrechen und sie im Voraus Iterationen zuzuweisen. Dies geht auf meinen Punkt über das Einladen des Kunden zurück - wenn Sie ein Jahr haben und 2-wöchige Iterationen verwenden, laden Sie den Kunden möglicherweise vierteljährlich ein (und laden Sie ihn vierteljährlich ein) und zeigen Sie ihm die Ergebnisse der vorherigen Arbeit. Lassen Sie sie Ihre Priorisierung der Anforderungen, Ihre Zukunftspläne und Ihre Terminplanung sehen.
Ähnlich verhält es sich mit einem festen Budget. Sie wissen, wie viel Zeit Sie haben, wie viele Ressourcen Sie für das Projekt haben, wie viel sie kosten und wie viele Stunden jeder pro Iteration arbeiten kann. Es ist nur eine Frage der Sicherheit, dass alle dies sorgfältig nachverfolgen. Wenn Ihre Firma die Kosten für Überstunden auffressen kann, entscheiden Sie sich dafür. Stellen Sie andernfalls sicher, dass alle Mitarbeiter über die erforderliche Zeit arbeiten, und setzen Sie gute Zeitmanagementfähigkeiten und Zeitboxen ein, um die Produktivität aller Mitarbeiter zu gewährleisten. Produktivere Arbeitszeiten sind das, was Sie brauchen, um die Kosten niedrig zu halten - liefern Sie mehr wertschöpfende Dokumente und Software, ohne die Kosten für Meetings und Overhead.
Letztendlich geht es nicht unbedingt darum, agil zu sein, sondern die Dinge anzuwenden, die Agile gut und agil machen. Sie können auf veränderte Anforderungen reagieren, häufige Software liefern, auch wenn der Kunde dies nicht wünscht, nur wertschöpfende Unterlagen erstellen (zusammen mit dem, zu dessen Erstellung Sie vertraglich verpflichtet sind) und so weiter.