Wie verhindern Sie agile Methoden mit monatlichen Sprints/Iterationen, die ein fragmentiertes Design verursachen? Für Beispiel Nehmen Sie den Fall des Designs von Manhattan Streets vs Design von Boston Straßen. Die Pläne für Manhattan Straßen wurden als Ganzes entworfen, was zu einfacher Manövrierfähigkeit und Fahreigenschaften führte. Boston Straßen wurden in einem Stück Mahlzeit Ansatz entworfen und es ist ein Albtraum herum.Agile Methodologie, die fragmentiertes Design verursacht
Antwort
Agile Entwicklung ist kein Mandat, um übergreifendes Design wegzuwerfen. Es macht viel Sinn, "das große Ganze" zu planen - was die Verantwortlichkeiten Ihrer Hauptkomponenten sind und wie sie interagieren. In meinem eigenen Team finde ich einen vernünftigen Kompromiss, wenn man einem breiten öffentlichen API im Voraus zustimmt, aber detaillierte Implementierungsentscheidungen nach Möglichkeit verschiebt. Dies ermöglicht einzelnen Entwicklern die Freiheit, das Design während der Entwicklung zu ändern, während es gleichzeitig den Vorteil hat, unterschiedliche Ansätze auf der Entwurfsebene zu hashen, wenn Änderungen viel billiger sind. Modularität ist auch entscheidend - halten Sie Komponenten in ihrer Funktion fest und so weit wie möglich voneinander entkoppelt. Dies minimiert Ihre Gemeinkosten, wenn Sie feststellen, dass Sie Änderungen an Ihrer Implementierung vornehmen müssen, und sollten die Wahrscheinlichkeit erhöhen, dass einzelne von Ihnen geschriebene Komponenten weiterhin nützlich sind.
Straßen sind eine schlechte Analogie für Software. Straßen können nicht einfach verschoben, umgeleitet oder geändert werden, ohne signifikante Aufwand. Gut geschriebene Software ist eine Zusammensetzung von orthogonalen Komponenten, die leicht reorganisiert und nach Bedarf modifiziert werden können.
Der Grund für agile Entwicklung ist, dass sowohl die Entwickler als auch die Software agil sind. Die Entwickler reagieren schnell auf Änderungen und die Software, die sie schreiben, ist so geschrieben, dass sie auch auf Änderungen reagieren kann.
Refactor, Refactor, Refactor.
Sie können eine Entwurfsphase haben, die über die Streets entscheidet. Welche Gebäude gebaut werden, wird in jeder Phase festgelegt.
Ich denke, dass es in Scrum-Projekten eine Tendenz zu wenig Design/Architektur gibt. Sie können eine ständige Refactoring durchführen, aber das kann viel Arbeit sein, wenn etwas nicht entworfen wurde. Sie können auf das gleiche Problem stoßen, wenn ein Fehler im Design vorliegt.
Die Verwendung von SOLID principles würde zu einem Code führen, der lose verbunden ist & stark kohäsiv.
Denken Sie daran, Design ist der König.
IMHO Analogien von Softwarekomponenten mit Gebäuden, Straßen sind nur unlogisch. Nichts davon ist der Softwareentwicklung oder dem Softwaredesign ähnlich.
Es besteht immer die Gefahr, dass Agile-Benutzer vorschlagen, die Prinzipien von agil an die aktuelle Situation anzupassen. Wenn dies jedoch fehlschlägt, sind diejenigen, die Agile unterstützen, kritisiert, weil Agile nicht vollständig übernommen wird.
Fragmentiertes Design ist ein fortlaufendes Risiko bei Agile, da Architektur keinen Wert hat. Was benötigt wird, ist eine Methodik, die die vorteilhaften Aspekte von Agile wie Continuous Delivery nutzt, aber Probleme wie die Unskalierbarkeit von Agile löst. Ein möglicher Ansatz ist The Game of Thrones Methodology, der genau dies tut.
"Agile Methodik" (und ich nehme an, Sie meinen SCRUM, hier) hat wenig mit der Architektur Ihres Designs zu tun; Die Architektur ist eine Eigenschaft der Software oder des Systems, das Sie erstellen (in der UML-Welt würden Sie es vielleicht "Artefakte" nennen).
"Agile" sagt nichts über welche Art von Software Sie schreiben, es kann für alle Arten von Software oder sogar einfach für Projekte verwendet werden, die überhaupt nichts mit Software zu tun haben.
Wenn Sie also das Gefühl haben, dass es in Ihrem agilen Projekt eine schlechte Softwarearchitektur gibt, dann sollten Sie sich die tatsächliche Ursache genauer ansehen. Nur weil du agil bist, heißt das nicht, dass jeder ohne Plan alles macht, was er will, oder dass du überhaupt keine Dokumentation brauchst. Während Sie nicht jede Klasse auf die Bit-Ebene vor Beginn Ihrer Arbeit festlegen, wollen Sie dennoch eine High-Level-Architektur, die noch vor dem ersten Sprint niedergeschrieben ist. Abhängig von Ihrer Teamgröße und Ihrem Wahlkreis können Sie sich vorstellen, Ihren ersten Sprint zu Ihrer Architektur zu verwenden.