Ich bin ein Junior-Entwickler (ca. 3 Jahre) und bei meiner Arbeit sind wir dabei, ein neues System zu entwerfen. Mein Hauptentwickler wird der Hauptarchitekt sein, er hat mich jedoch aufgefordert, das System selbst (parallel) zu entwerfen.
Während ein paar Durchläufen von Brainstorming-Ideen und Vorschlägen zu Architekturvorschlägen gab mir mein Leiter die Rückmeldung, dass das meiste, was ich getan habe, "Entwerfen" und nicht "Architekten" war.
Er beschrieb den Unterschied als implementierungsunabhängig, während ein Entwurf die Beschreibung einer Implementierung ist. Er sagte, ich müsse meinen Designerhut abnehmen und meinen Architektenhut aufsetzen. Er hat mir ein paar Ratschläge gegeben, aber ich möchte Sie auch fragen:
Wie verlasse ich den Software-Designer-Modus und beginne, mehr wie ein Architekt zu denken?
Hier sind einige Beispiele für "Entwürfe", die ich mir ausgedacht habe und die von meinem Vorgesetzten nicht als relevant für die Architektur angesehen wurden:
- Ich habe einen Algorithmus zum Laden und Entladen von Ressourcen aus unserem System entwickelt und mein Chef sagte, dass Algorithmen grundsätzlich keine Architektur sind.
- Ich hatte eine Reihe von Ereignissen, die das System auslösen sollte und in welcher Reihenfolge es sie auslösen sollte, aber auch dies schien es nicht als Architektur zu erkennen.
Ich scheine in die Details verstrickt zu sein und nicht weit genug zurückzutreten. Ich stelle fest, dass ich selbst dann, wenn ich etwas auf der Ebene der Architektur finde, oft verschiedene Implementierungen ausprobiert habe und mich in Details vertieft habe, um dann zu verallgemeinern und zu abstrahieren. Als ich dies meiner Führung beschrieb, sagte er, dass ich den falschen Ansatz gewählt habe: Ich musste "von oben nach unten" und nicht "von unten nach oben" denken.
Hier sind einige genauere Details zum Projekt :
- Das Projekt, das wir planen, ist eine Webanwendung.
- Ich schätze ungefähr 10-100.000 Codezeilen.
- Wir sind ein Startup. Unser Engineering-Team besteht aus ca. 3-5 Mitarbeitern.
- Das Beste, was ich mit unserer Anwendung vergleichen kann, ist ein leichtes CMS. Es hat eine ähnliche Komplexität und befasst sich hauptsächlich mit dem Laden und Entladen von Komponenten, Layout-Management und Plug-In-Stil-Modulen.
- Die Anwendung ist Ajax-y. Der Benutzer lädt den Client einmal herunter und fordert die erforderlichen Daten vom Server an.
- Wir werden das MVC-Muster verwenden.
- Die Anwendung verfügt über eine Authentifizierung.
- Wir sind nicht sehr besorgt über die Unterstützung alter Browser (Puh!), Daher versuchen wir, die neuesten und besten zu nutzen, die es gibt und die herauskommen werden. (HTML5, CSS3, WebGL ?, Media Source Extensions und mehr!)
Hier sind einige Ziele des Projekts :
- Die Anwendung muss skaliert werden. In naher Zukunft werden unsere Benutzer in der Größenordnung von Hunderten bis Tausenden sein, aber wir planen Zehntausende bis Millionen und mehr.
- Wir hoffen, dass die Anwendung für immer verfügbar sein wird. Dies ist keine vorübergehende Lösung. (Tatsächlich haben wir bereits eine vorübergehende Lösung, und was wir planen, ist der langfristige Ersatz für das, was wir haben.)
- Die Anwendung sollte sicher sein, da sie möglicherweise Kontakt mit vertraulichen persönlichen Daten hat.
- Die Anwendung muss stabil sein. (Im Idealfall ist es auf Google Mail-Niveau stabil, aber es muss nicht unbedingt das Extrem eines Mars-Rovers sein.)