Der perfekte Plan: Wie plant man ein Großprojekt ?

  • Dieses Thema kann theoretisch in fast jedem Bereich des Forums stehen.
    Es ist egal ob man bei der Planung eines "Großprojektes" an den Bau eines Hauses, eines Schiffes , die Entwicklung einer Software oder einfach an die Planung des eigenen Lebens denkt.


    Ich werde Vergleich aus dem normalen Leben benutzen , damit es (hoffentlich) verständlich bleibt.



    Es gibt eigentlich zwei Grundprinzipien in der Planung:


    1) Man bedenkt und plant alles im Voraus
    Man möchte mit dieser Planung ein Langzeitziel verwirklichen.


    In der Regel hat man bei dieser Planungsart, das Endergebnis bereits vor Augen.
    Um so ein Projekt durchzuplanen, beginnt man vom Planungsziel und arbeitet sich Stück für Stück in die kleineren Ebenen herunter.


    Das beste Beispiel für so eine Planung ist der klassische Hausbau
    Zuerst hat man das Gebäude, wie es später aussehen soll. Danach teilt man es in verschiedene Zimmer ein, legt Fenster, Türen und Treppen an.
    Während nun der Bau schon begonnen kann, hat man genügend Zeit, den weiteren Innenausbau zu planen.
    Das soll eigentlich Planungszeit sparen, damit man schneller einziehen kann.


    Jetzt kommt aber das Manko einer solchen Planung und Durchführung:
    Wenn du zum Beispiel etwas vergessen oder nicht bedacht hast, ist es fast unmöglich, diesen Fehler zu korrigieren.
    Manchmal tritt ein Fehler aber erst viel später auf, weil sich die äußeren Umstände ändern.


    Beispiel:
    Du hast alles durchgeplant. Elektrische Kabel sind fest verlegt, die Innenmauern bestehen aus Stahlbeton. Alles passt perfekt.
    Jetzt ändert sich die Technik. Du benutzt lieber Funktechnik als Kabeltechnik. Die Anschlüsse müssen an anderen Stellen sitzen. Du brauchst weitere Türen oder größere Räume.
    Ja. Deine Planung war wirklich perfekt und auf Dauerhaftigkeit ausgelegt... entsprach aber nur dem damaligen Stand deiner Wünsche und der Technik.
    Jetzt sorgt deine Planung aber dafür, dass du mit Funk nicht durch die Wände kommst, dass du zu wenig Steckdosen hast und dass du nicht einfach Wände einreißen kannst. Du hast richtig geplant ... aber für spätere Änderungen keine Möglichkeiten vorgesehen.


    Bei einem Haus korrigiert man solche Fehler natürlich immer wieder durch zusätzliche Einbauten und Änderungen ... aber .. selbst wenn man das Geld für einen kompletten Neubau investieren würde, so ist man trotzdem noch an den ursprünglichen Plan gebunden. Er setzt ultimative Grenzen, die (oft) nicht überschritten werden können.


    Auch Städteplaner machen oft genug noch diesen Fehler.
    Sie entwerfen auf dem Reißbrett eine Stadt und wie sie von oben aussehen soll.
    Klassische Beispiel dafür ist das Rom der Antike: "Alle Straßen führen nach Rom" war das Prinzip.
    Ein anderes Beispiel ist Paris mit seinen Straßen, die sternförmig auf den "L'Arc de Triumph" zu laufen.


    Solche Planungen geben wenig Raum zur Flexibilität und Erweiterung. Sie sind einfach viel zu starr. Jede Änderung zerstört das eigentliche Ziel.


    Nun sollte man denken, die Planer der Gegenwart hätten aus den Fehlern der Vergangenheit gelernt ? Leider nicht.
    Jede Stadt legt in einem Bebauungsplan fest, was in einem bestimmten Gebiet gebaut werden darf und wie die Häuser auszusehen haben. Stellt sich später heraus, dass das Gebiet nicht dafür geeignet ist oder sich die Umweltbedingungen ändern, kann man die Planungsfehler nicht mehr korrigieren.


    Häuser werden überflutet, Dächer brechen unter der Schneelast zusammen, der Boden gibt nach. Für die Planungsfehler ist zwar die Kommune verantwortlich , weil sie Dacharten vorschreibt, Überflutungsgebiete zur Bebauung freigibt und Bebauung über Hohlräumen zulässt ... "ausbaden und büßen" müssen es jedoch die Bürger... oft ohne jegliche Schadenersatzansprüche gegenüber den Planern oder Kommunen.


    Aber auch in der Programmierung wurde früher auf diese Art gedacht.
    Man entwickelte ein Programm, das exakt nur einem einzigen Zweck dienen sollte. Es war relativ starr aufgebaut.
    Wenn das Programm dann erweitert werden sollte, so musste man sich an die Hauptstrukturen halten = man war genauso an "unverrückbare Vorgaben" gebunden wie ein Häuserbauer an die Außenfront seines Hauses.


    Es gibt ein sehr gutes Beispiel, wie sich diese starre Planung Jahrzehnte später noch auswirkte: Das "Jahr 2000 Problem"


    In den Anfänger der Computertechnik dachte man, dass man nur für einen kurzen Zeitraum planen musste. Vielleicht gerade mal 1 Jahrzehnt oder so. Man bleib also planerisch im eigenen Jahrhundert und machte sich keine Gedanken über weiter entfernte Zeiträume. Da man keinen Jahrhundertwechsel plante.. so lange sollte eigentlich keine Software laufen .. hatte man für die Jahreszahl nur 2 Stellen vorgesehen:
    01 war das Jahr 1901
    75 = 1975
    88 = 1988
    95 = 1995


    Das genügte viele Jahrzehnte. Man konnte Statistiken führen, Zinsen errechnen, Alter nachrechnen usw.
    1998 fiel es aber auf, dass Computer Rechenfehler machten, wenn sie Zeitwerte benutzen sollten, die mit einem anderen Jahrhundert kalkuliert werden sollten.
    Der Mann, der 1897 geboren wurde, war plötzlich nur 1 Jahr statt 99 Jahre alt. Zinsen für 2002 gab es plötzlich für 96 Jahre (obwohl bis dahin ja nur 4 Jahre waren)


    Für Computer war die feste Regel: Es gibt nur die Jahre 1900-1999.
    Die Software kannte ja nur die Werte von 00-99. Darauf beruhten wirklich alle Berechnungen... für alle Computerprogramme und Steuerungen.
    Wenn eine Software auf Plausibilität programmiert war, akzeptierte sie aber nicht, dass ein Mensch ein "Minusalter" hatte. 1998 + 12 = 1910 .. ein 1998 Neugeborenes wäre also im Jahr 2010 -90 Jahre alt gewesen.


    Naja ... zum Glück wurde das Grundproblem noch rechtzeitig erkannt. Das befürchtete Chaos blieb überwiegend aus, weil alle zeitgesteuerte Software noch rechtzeitig ersetzt werden konnte. Aber der Aufwand für die Problemlösung stand eigentlich in keinem Verhältnis gegenüber einer früheren , sorgfältigeren und zukunftsorientierteren Planung.
    Hätte doch schon jemand früher daran gedacht, dass man vielleicht auch einmal eine 4stellige Jahreszahl benötigen würde ... :thumbdown:


    Der Vorteil der gesamten Vorausplanung besteht natürlich darin, dass man alles auf das Ziel ausrichtet. Man weiß vorher schon was rauskommen wird, sobald man den Plan realisiert. Man wird sein Planungsziel erreichen. Steckt man jedoch seine Ziele während der Planungsphase weiter oder ändert es, so wird eine komplett neue Gesamtplanung fällig. Flexibilität ist nur im Rahmen entsprechend vorheriger Planung möglich.


    ============================


    2) Man plant einzelne Abschnitte und fügt dieses Abschnitte später zu einem Ganzen zusammen
    In dieser Modulbauweise wird vorrangig Wert auf die einzelnen Funktionen gelegt. Erst am Ende geht es darum, der Modulkombination einen "allgemeinen Rahmen" zu geben. Eine funktionelle Planung, deren Endergebnis zu Beginn der Planung nicht vorhersehbar ist.


    Bei einer solchen Planung schafft man in der Regel erst einmal ein "Grundmodul". Dieser Planungskern ist die Achse, um die es sich bei allen weiteren Planungen drehen wird.
    In der Regel versucht man , das Kernmodul so zu planen, dass es alle möglichen Schnittstellen enthält und dass es, unabhängig von allen anderen Erweiterungen, funktionieren kann. Dieser Basiskern ist die Grundausstattung, die Zentrale.


    Beispiele...


    Automobilindustrie mit "Plattform-Strategie"
    Motor, Getriebe, Räder, Rahmen. Würde man sie einfach zusammen fügen, hätte man auch schon ein sehr einfaches Auto. Man könnte schon damit fahren. Die Grundfunktion ist also schon vorhanden.
    Nun kommen die anderen Bauteile hinzu und machen es möglich, dass man immer neue Automobil-Modelle und -Arten erhält.
    Jedes kann andere Eigenschaften aufweisen oder für bestimmte Zwecke genutzt werden.


    Selbst wenn das Auto komplett fertig ausgeliefert wird, kann man später immer noch alle Teile austauschen oder weitere Komponenten hinzufügen.


    Kasernen, Gefängnisse, Industriekomplexe
    Zuerst wird die "zentrale Komponenten" gebaut. Kern der Produktion, Verwaltungstrakt usw. Danach erweitert man den Komplex successive um weitere Gebäude und Komplexe bis man das Ende des zur Verfügung stehenden Areals erreicht hat oder keinen Bedarf mehr an Erweiterungen hat.
    Nun umschließt man den Komplex mit einer Begrenzung, um Störungen von außen zu verhindern (Zaun, Mauer usw.) Diese Begrenzung bietet den nötigen Schutz, kann aber jederzeit wieder geöffnet oder aufgehoben werden, um weitere zusätzliche Komponenten angliedern zu können.


    natürlich gewachsene Dörfer und Städte
    Der Kern ist dabei immer ein Versammlungsplatz (Rathaus, Brunnen, Kirche usw.) gewesen. Um diesen Kern herum wurden die ersten Häuser drapiert. Mit steigender Bevölkerung kamen immer mehr Häuser und Begegnungsstätten hinzu ... bis dann irgendwann eine "neue Zentrale" (Altstatdt, Neustadt usw.) nötig wurde, weil der Kern sich zu weit von den Außenbereichen entfernt befand.


    Plattenbauten in der ehemaligen DDR
    Die Wohneinheiten wurden bereits außerhalb hergestellt und mussten nur noch so kombiniert und zusammengesetzt werden, wie man Häuser oder Wohnraum benötigte.



    Der Vorteil der "Kern- oder Modulbauweise" besteht in seiner Flexibilität und Erweiterungsmöglichkeit.
    Sie stößt erst an ihre Grenzen, wenn der "Kern" ans eine Leistungsgrenzen angekommen ist. Statt einer komplett neuen Planung, kann aber (anstatt eines weiteren Kleinmoduls) ein weiterer "Kern" angeschlossen werden, der wieder kleine Module versorgt.



    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


    Großprojekt in der Softwareentwicklung


    In der Softwareentwicklung ist es nötig, unbedingt möglichst schnell mit seinem "Kernprojekt" auf den Markt zu kommen.
    Wollte man so ein Projekt erst einmal "in Ruhe zu Ende entwickeln" wollen, würden sich die Umstände und Voraussetzungen ändern.
    Am Ende der Planungsphase würde die benutzte Technik längst veraltet sein.


    Ein solches "Großprojekt" stellt zum Beispiel eine Community oder "soziales Netzwerk" dar.
    Das "Kernmodul" ist ein Framework, für das festgelegt wird, welche "Techniksprache" es unterstützt und welche Aktionen allgemein nutzbar sein sollen.


    Während dieser "Regel-Aufstellzeit" macht man sich einfach Gedanken darüber, was eventuell alles verknüpft werden könnte.
    Man berücksichtigt diese Möglichkeiten und schafft entsprechende "Anknnüpfpunkte"/ Schnittstellen.
    Man überlegt, welche Technologie auch später noch die beste Performance bietet, wenn das System schon längst sehr weit ausgebaut ist.


    Sobald die Planung dieses "Rahmens" abgeschlossen ist, können mehrere Teams gleichzeitig mit der Arbeit beginnen.
    Das erste und wichtigste "Modul" ist das Grund-Funktionsmodul. Bei einem Netzwerk wäre das die erste Möglichkeit, die den Nutzern zur Verfügung stehen soll.
    Diese Grundfunktion ist genau an das Hauptziel des Netzwerkes ausgerichtet. Es soll die ersten Nutzer anlocken und interessieren.


    Während aber das Grundmodul entsteht, kann parallel dazu schon an weiteren Funktionen "gebaut" werden. Alle Entwicklungen können gleichzeitig geschehen. Man muss nicht warten, bis ein anderes Team mit seiner Arbeit fertig ist.
    Immer wenn ein Modul einsatzbereit ist, kann es sofort integriert werden .. denn .. alle haben die gleichen Schnittstellen und sind somit unabhängig voneinander. Der "Rahmen" regelt und steuert alles.


    Die Alternative wäre, dass man ein kleines Netzwerk "durchkonstruiert" hat und als "fertige Version" auf den Markt bringt.
    Der Funktionsumfang ist eingeschränkt und die Erweiterungsmöglichkeiten halten sich im kleinen Rahmen. Die Entwicklungszeit musste möglichst kurz sein und ermöglichte damit keine umfangreichen Konstruktionen.
    Später kann man dieses kleine Netzwerk zwar immer noch um ein paar Gimmicks erweitern .. diese sind aber abhängig von den einzelnen Funktionen an die sie angebunden werden. Hat eine der Hauptfunktionen einen Fehler oder soll es ersetzt werden, fallen auch gleichzeitig alle Zusatzfunktionen weg.


    Irgendwann muss man wieder ganz von vorne anfangen, weil das "kleine Netzwerk" nicht mehr genügend Performance hat, um weitere Funktionen zu ermöglichen.

    In dieser "alternativen Art" sind auch Forensysteme konstruiert.

    Sie bieten eine sehr große Menge an Möglichkeiten. Diese kann man bis zu einem gewissen Grad erweitern. Mit jeder Erweiterung sinkt aber auch gleichzeitig die Performance, so dass man irgendwann auf eine neue und bessere Version umsteigen muss. Die neue Version enthält dann wieder alles was vorher Zusatzfunktionen waren. Nun kann man wieder erneut mit dem Ausbau beginnen.. bis wieder die Leistungsgrenzen erreicht sind.


    Der große Nachteil der Komplettplanung ist:
    Man baut einfach alles ein, was einem gerade als nützlich erscheint.Stellt man dann später fest, dass "die Zeit noch nicht reif dafür ist" oder man diverse Möglichkeiten nie nutzen wird, ist es einfach "unnötiger Ballast", den man nur sehr schwer wieder los wird.
    Man hat also seine Zeit mit etwas "Unnützen" verschwendet und sich damit sogar Marktchancen beraubt.
    Gleichzeitig beinhalten "schnell gestrickte Versionen" die große Möglichkeit von Fehlentwicklungen, die dann erst später erkannt werden können = Sicherheitsprobleme beim Betrieb.


    Sobald aber ein Projekt "angelaufen ist", kann man es nicht mehr vom Mark nehmen, ohne sich selbst "ins Aus zu stellen".
    Man muss also die Fehler im "laufenden Betrieb" korrigieren .. was in der Regel mit hohem Aufwand verbunden ist.

    Heutztage steht Flexibilität, Entwicklungsgeschwindigkeit und Erweiterungsmöglichkeit an erster Stelle bei Großprojekten.

    Nachdem die "erste Denkarbeit" beendet wurde, muss direkt mit der Umsetzung begonnen werden.
    Parallel dazu wird immer weiter geplant und umgesetzt.


    In der Software ist es damit ein "endlos Projekt". Man bietet seinen Nutzern immer mehr neue Technologien und Möglichkeiten an und steigert damit successive auch die Attraktivität und die Bindung an das Projekt.


    Übrigens ist die "Modulbauweise" keine "Erfindung der Neuzeit"
    Kathedralen , Kirchen und Paläste wurden schon vor Jahrhunderten auf ähnliche Art entworfen und gebaut.
    Über Jahrhunderte bauten Menschen an einem Großprojekt. Sie hielten sich an das "Grundprojekt" und fügten immer wieder neue Technologien und Erweiterungen ein.
    Der Kölner Dom wurde zum Beispiel von mehreren Dombaumeistern aus verschiedenen Generationen geplant, entworfen und umgesetzt. An das Hauptschiff wurden immer weitere Kirchenschiffe angebaut und sie alle tragen die Merkmale ihrer jeweiligen Epoche.
    Ähnliches kann man in Rom, London, Paris usw, sehen. Die "Modulbauweise" bietet einfach die ideale Voraussetzung für jede Art von Langzeitprojekt, das immer mehr Möglichkeiten bieten soll.


    Übrigens:
    Am "Kölner Dom" wurde faktisch 600 Jahre gebaut. 1880 "fertig gestellt" , musste schon bereits 1904 erneut mit den Arbeiten begonnen werden. Erhaltungsarbeiten und Modernisierungen werden auch noch viele weitere Jahrhunderte andauern.Alles im vor Jahrhunderten gesteckten "Rahmen" (Framework ;) )


    Wer "nicht unendlich bauen" will, der darf sein Augenmerk nicht auf zukünftige Möglichkeiten richten.
    Der muss sich sagen
    "Dies und das brauche ich jetzt. Kleinere Änderungen kann ich später noch durchführen. Ansonsten gebe ich mich mit dem aktuellen Stand der Technik zufrieden".


    Nach der Planung, kommt die Umsetzung .. und damit auch das Ende der Umsetzungszeit. Nun geht es nur noch darum, das Erschaffene zu nutzen, so wies es ist.
    Das kann zwar ein Langzeitprojekt sein , ist aber eben (von der Entwicklung und Umsetzung her) nur ein "Kleinprojekt".


    ----


    Diese Internetseite wurde auf der Basis eines "Grundgerüstes" begonnen.
    Ein mager ausgestattetes Forensystem war der "Grundstein". Der Ausbau mit weiteren Funktionen, dauerte rund 6 Monate.
    Es war nicht immer einfach, alle Module zu finden und einzubauen. Die heutige Version hat das alles (und noch viel mehr) schon in der Grundversion mit drin.


    Im Gegensatz zu anderen Versionen, war es mir jedoch im Nachhinein möglich, auch einfach nicht benötigte Komponenten wieder "auszubauen". Das was am Anfang viel Arbeit machte, ließ sich also später wieder entfernen, wenn es "unnütz" wurde. Bei den modernen Versionen mit "all inclusive" ist so ein Ausbau nicht möglich. Man bekommt die Funktionen und sie können nicht entfernt werden, weil sie "Teil des Grundgerüstes sind".
    Ein "aufgeblähtes Grundgerüst" spart damit zwar "Bauzeit", wird aber später zum "Klotz am Bein".


    Obwohl ich jederzeit das System hier erneut ausbauen könnte (mir stehen über 400 Module zur Verfügung) und somit immer mehr Möglichkeiten bieten könnte, habe ich beschlossen gehabt, kein "Großprojekt" zu bauen, sondern einen "Baustopp verhängt".
    Diese Möglichkeit gibt es NUR in der Modulbauweise ... weil man mit jeder Entwicklungsstufe den Ausbau beenden kann um die "reine Nutzung" zu beginnen.


    Die ideale Kombination aus "schnell erscheinen und endlos erweitern" und "fertig stellen, nutzen und nicht mehr erweitern (können)"


    Es ist natürlich reine Einstellungssache.
    Entweder entscheidet man sich, Spaß am Entwickeln, Erweitern und Bauen zu haben
    oder
    Man möchte möglichst schnell mit dem Bau abgeschlossen haben, um mit dem Projekt "in die Nutzungsphase zu gehen"



    Für Softwareentwickler:
    Das berühmte Netzwerk "Facebook" hat damals auch mit den "Grundfunktionen" begonnen. Man startete das Projekt, gewann viele Nutzer und kaufte sich dann später Firmen, die über Weiterentwicklungen verfügten. Danach änderte und adaptierte man das Grundsystem, so dass die modularen Weiterentwicklungen (der aufgekauften Firmen) integriert werden konnten.
    Das ist an der Geschichte dieses Netzwerkes sehr leicht zu erkennen: Jede Technologie einer aufgekauften Firma wurde später als "Neuheit" angepriesen und veröffentlicht.
    Nur durch diese parallelen Entwicklungen, konnte Facebook zu dem werden, was es heute (aktuell) ist: Ein Netzwerk, dass seine Konkurrenten aus dem Markt verdrängte und faktisch eine Monopolstellung hat