Ich habe diese Analogie verwendet ... viele Softwareprojekte beginnen, weil die Person, die eine Software benötigt, das Äquivalent eines "Handwerkers" kennt, und sie diese Person anstellt, um ihnen das Softwareäquivalent eines Gartenhauses zu erstellen. Es ist eine kleine, nützliche kleine Anwendung, die ihre Arbeit sehr gut macht.
Der Kunde kehrt dann zufrieden mit seiner Arbeit zum Heimwerker zurück und bittet ihn, die Software zu ändern, um noch etwas zu tun. Häufig hat diese neue Funktion nicht viel mit der ursprünglichen Anfrage zu tun, sodass es fast so ist, als würden Sie gebeten, einen weiteren Raum auf der Rückseite des Gartenhauses mit separatem Eingang zu errichten.
Dann wollen sie ein Licht in den Schuppen bringen, damit sie den Heimwerker zurück haben, und er führt einen einzelnen Stromkreis von der Haupttafel im Haus aus, installiert einen Zugkettenlichtschalter in der Decke jedes Raumes und verbindet sie mit dem Stromkreis .
Der Kunde entscheidet dann, dass er einige Elektrowerkzeuge betreiben möchte, aber der Leistungsschalter wird immer wieder durchgebrannt, sodass er die Person zurückruft und tatsächlich den einzelnen Stromkreis herausreißen muss, den er zum Hauptpanel geführt hat, und einen größeren Leiter und ein Kabel installieren muss Unterblech im Schuppen. Er musste den Draht zweimal verlegen und zwei elektrische Genehmigungen usw. bezahlen. Dies ist ineffizient.
Dann bittet der Kunde um etwas Absurdes: Kannst du mein Gartenhaus in eine Garage verwandeln? Ich möchte nicht, dass Sie etwas wiederholen, was Sie getan haben ... Ich möchte nur, dass Sie es größer machen, damit ich mein Auto dort parken kann. In vielen Fällen denkt der Heimwerker dann, "der Kunde hat immer Recht" und baut weitere Anbauten auf drei Seiten des Schuppens, um ihn größer zu machen, stößt die Wand zwischen den Trennwänden ab usw. Natürlich endet das Dach durchhängen, weil es nicht richtig gebaut ist, etc.
Der Kunde ist also nicht mehr so beeindruckt, aber er möchte immer noch mehr. Sie bitten den Heimwerker immer wieder, nur einen weiteren Raum hinzuzufügen oder diesen vorhandenen Raum zu ändern, um dies zu tun, usw. Am Ende entsteht etwas, das wie The Burrow aussieht und architektonisch ungefähr so gut klingt.
Jetzt sind die meisten Leute nicht dumm genug, dies in der Konstruktionswelt zu versuchen, aber es passiert die ganze Zeit in der Softwarewelt, weil die Leute diese Verbindungen nicht herstellen:
Eine Person, die für den Bau eines wirklich schönen Gartenhauses qualifiziert ist, muss nicht unbedingt für den Bau eines Hauses qualifiziert sein.
Wenn Sie im Voraus wüssten, dass Sie ein Haus schrittweise bauen würden, dies aber nur als Gartenhaus anfangen würde, würden Sie die Dinge anders machen, und der Gartenhaus würde viel mehr kosten (Sie würden ein Haus einschenken) Stellen Sie sicher, dass Sie einen Leiter haben, der groß genug ist für die volle Ladung eines fertigen Hauses usw.).
In vielen Fällen muss beim Upgrade von einer Phase zur nächsten ein Großteil der zuvor geleisteten Arbeit rückgängig gemacht werden, wodurch die Kosten höher ausfallen, als es den Anschein hat.
In der Konstruktionswelt können wir dem Kunden eine gute Vorstellung davon geben, wie das Ergebnis während der Konstruktionsphase aussehen wird, aber wir haben diese Fähigkeit in der Softwarewelt nicht. Wenn Sie es bis zu diesem Punkt geschafft haben, haben Sie im Grunde einen bedeutenden Teil der Software geschrieben.
Das Agile Manifest ist das Ergebnis der Anerkennung, dass die Software / Konstruktions-Analogie gebrochen ist. Dinge wie automatisierte Unit-Tests und iterative Release-Zyklen haben keine Parallele im Aufbau. Diese Dinge nutzen die nahezu Null-Kosten für den Übergang vom Entwurf zum Prototyp (wir nennen es Kompilieren oder Erstellen).