Ich habe über die Geschichte der drei Systeme des Menschen aus dem Buch The UNIX Philosophy nachgedacht. Für diejenigen von euch, die nicht vertraut sind, geht es ungefähr so:
Offensichtlich ist das Ziel der Softwareentwicklung, das dritte System zu schreiben. Die Voraussetzung des Autors ist, dass Sie das nicht tun können, ohne zuerst die anderen beiden Systeme zu schreiben. Daraus ergeben sich Begriffe wie "Plane einen wegzuwerfen" aus The Mythical Man-Month . In meiner begrenzten Karriere als Softwareentwickler habe ich an einem zweiten System und zwei ersten Systemen gearbeitet, die beide aufgrund der Trägheit zum System wurden. Es fühlt sich an, als ob es nie genug Zeit oder Budget gibt, um es richtig zu machen, aber immer genug Zeit und Geld, um es zu tun.
Hat jemand hier jemals ein Drittes System gebaut oder gewartet? Welche Schritte haben Sie unternommen, um dorthin zu gelangen? Kannst du wirklich "einen wegwerfen" in der Praxis?
Ich denke, der Schlüssel dazu ist der Unterschied zwischen Zeit und Geld und Erfahrung. Wenn du etwas vorher gebaut hast, verbrannt wurdest, es wieder aufgebaut hast, es falsch gemacht hast und es dann wieder aufgebaut hast, und du bist der seltene Entwickler, der genau weiß, was funktioniert, dann bekommst du das "Dritte System".
Nur Geld, Zeit und ein früheres Scheitern sind kein Erfolgsrezept.
Das Beispiel eines dritten Systems, das ich kenne, ist Linux iptables .
Das ursprüngliche Paketfiltersystem von Linux war ipfwadm , das von den BSDs ausgeliehen wurde. Danach wurde ipchains geschrieben, aber es stellte sich heraus, dass es nicht so erweiterbar war wie die Community es wollte.
>So haben die Leute, die ipchains geschrieben haben, iptables von Grund auf neu geschrieben. Es hat eine lange Zeit überlebt.
(Technisch gesehen sind iptables und ipchains und ipfwadm die User-Space-Tools, die zum Verwalten des Kernel-Paketfilters verwendet werden. Für das Third System verweise ich auf den Kernel-Paketfilter und die User-Space-Tools.)
Ich habe ein drittes System gebaut. Nicht viele kümmern sich um dich, aber definitiv in einem Fall.
Ich würde nicht sagen, dass ich die vorherigen so sehr "weggeworfen" habe, wie sie mit früheren Projekten gestartet und gesegelt sind.
Ich baue CMS-Systeme für mein Unternehmen und jeder Kunde braucht etwas anderes. Normalerweise ist das erste Produkt, das ich mit dem Rücken an die Wand gebaut habe. Zeitbeschränkungen, Budgetbeschränkungen, Technologievergoldung ... alle Standardprobleme eines schlechten Projekts mit nicht übereinstimmenden Erwartungen.
Die nächste Iteration ist eine Wiederverwendung des vorhandenen Codes und der Ideen mit einem "besseren Versuch" beim nächsten Mal.
In meinem Fall habe ich eine Formulargenerierungsbibliothek erstellt. Es schränkt meine Designer nicht ein und das schränkt meine Programmierer sicherlich nicht ein. Es macht einfach alles, was ich brauche, mit minimalem Aufwand. Es ist die beste Arbeit, die ich jemals gemacht habe, aber es hat mehrere Versuche (und mehrere Jahre) bei zweiten Systemversuchen gebraucht, jede mit einem anderen und normalerweise schlecht durchdachten Ziel.
Mit dem letzten Ergebnis fühlte es sich einfach richtig an. Ich wusste, dass ich ein drittes System hatte, als ich erkannte, dass die Arbeit, die ich gemacht hatte, die Bedürfnisse des aktuellen Projekts übertraf und problemlos auf alle aktuellen Projekte angewendet werden konnte und Entwicklung.
Ich hoffe, dass das einigen hilft.
Das ist eine interessante Frage, und es hat mich wirklich dazu gebracht, zweimal über meine ursprüngliche Antwort auf diese Frage nachzudenken. Ich arbeite an dem, was ich als "Drittes System" bezeichnen würde, das ich von Grund auf entworfen habe, nachdem ich das vorherige "Zweite System" beibehalten und versucht habe, es zu erweitern. (Ich behaupte nicht, dass mein "Drittes System" perfekt ist, ich behaupte nur, dass ich eine ganze Zeit damit verbracht habe darüber nachzudenken, was die früheren Systeme schlecht gemacht hat, und habe große Anstrengungen unternommen, das zu vermeiden). Werden zukünftige Ingenieure denken, dass ich "Third System" -Ness erreicht habe? Ich hoffe es, aber ich wette, sie werden sich wundern, warum ich die Dinge irgendwie gemacht habe. Ich denke, es liegt wirklich im Auge des Betrachters, ob ein System das "Dritte System" erreicht.
Ich denke, dass Erfahrung der beste Weg ist, um zu einem "Dritten System" zu gelangen. Wie können Sie planen, einen weg in die Praxis zu werfen, ja, können Sie - durch etwas gutes ole prototyping. Zugegeben, man kann nicht alles prototypieren, also ist das vielleicht nicht vollständig "wegwerfen", wenn man von einer Version eines ganzen Systems spricht, aber für Subsysteme ist Prototyping ein Muss.
Edit: Ich denke, ich werde die UNIX-Philosophie aufgreifen. Ich wünschte, ich hätte vorher davon gehört: -).
"Hat jemand jemals ein Drittes System gebaut oder gepflegt? Welche Schritte haben Sie unternommen, um dorthin zu gelangen? Können Sie wirklich" planen, eines wegzuwerfen "in der Praxis?"
Ich bin ein paar Mal dazu gebracht worden, Second Systems zu bereinigen, die falsch gelaufen sind.
Die Schritte, die ich gemacht habe, sind offen - das von Experten aufgebaute System funktionierte nicht. Beachten Sie, dass Sie jemandes Baby hässlich nennen, und Sie dafür nicht gemocht werden.
Und ja, wir werfen in eine Richtung. Wir werfen die unwirksame Software weg, die vorhanden ist. Beachten Sie, dass Sie sagen, dass die vorherige Software ein Aufwand und keine Investition ist. Sie sind nicht dafür, dies zu tun.
Ich wurde in anderen Zeiten dazu gebracht, ein funktionierendes System zu bauen. Jedes Design durchläuft alle drei Phasen.
Sie verstehen die Problemdomäne (oder die Technologie) nicht. Das erste System ist eine Mischung. Es gibt Problemkluges und technische Kluges. Das erste System hat immer beides.
In einigen Projekten erklärt das Management den Sieg, setzt es in Produktion und die Benutzer hassen es, weil die Problemdomäne kluges ist. Entwickler hassen es wegen der technischen Kluges.
"Phase II" beginnt. In einigen Fällen habe ich die anfängliche Klugy-Phase überstanden. Jetzt beginnt die eigentliche Arbeit. Repariere die Problem-Domain kluges - grabe die Lügen aus, die die User gesagt haben, finde die Business-Abkürzungen und dumme Nicht-Lösungen. Fixieren Sie die technischen Kluges, in ähnlicher Weise, erfordert Nacharbeit, die Unittests erfordert, so dass Sie refactoring.
Beachten Sie, dass die Problemdomänenkluges am zerstörerischsten sind. Benutzer sagen "es ist nur eine einfache Kopie der Daten", wenn es wirklich keine Kopie ist, sondern eine zweite Referenz. Benutzer sagen: "Gib mir einfach ein benutzerdefiniertes Feld" und verwandele es dann in einen magischen Schlüssel, der alles (schlecht.) Macht.
Das Wegwerfen der schlecht definierten (oder schlecht verstandenen) Problemdomänen ist möglich. Es dauert eine Weile, bis sich die Benutzer den Kopf darüber machen, was sie wirklich tun. Sie setzen sich für "State of the Art" Prozessdefinitionen ein.
Schließlich erkennen die Benutzer, dass sie ihr Geschäft oder ihre Beziehungen oder ihre Prozesse falsch definiert haben. Dann kann das Dritte System entstehen. In einem Fall (bisher) habe ich mich auf dieses Niveau des Verständnisses von Problembereichen begeben. Wir verwerfen eine Reihe von "Expertenmeinungen" aus der Problemdomäne und kommen zu einem klaren Blick auf das, was wirklich passiert. Es ist einfacher als das zweite System und hat keine Mist-Workaround im ersten System.
Ja, wir haben zwei Geschäftsmodelle weggeworfen. Dies erscheint nicht teuer - es ist nur Analyse und Spezifikationen. Aber - wirklich - die alten PPT's und Pläne und was nicht, sind jetzt lächerlich, weil sie so veraltet und kurzsichtig sind.
Ja, wir haben frühere Softwareversionen weggeworfen. Da wir jedoch viele Open-Source-Tools verwenden, ist es nicht sehr schmerzhaft, eine Komponente nicht mehr zu verwenden und eine andere zu verwenden.
Können Sie das 3. System wirklich verstehen oder schätzen, ohne jemals die ersten 2 zu erleben? und gibt es wirklich ein drittes System (Perfektion) da draußen? Einige kommen vielleicht nahe (ich kann keine nennen ... einschließlich des iPod), aber vielleicht ist das eine gute Sache, was würde eine Person tun, wenn sie die Perfektion erreicht hat? ein Bier trinken?
Tags und Links project-management