Es gab viele Fragen mit guten Antworten zur Rolle eines Software Architect (SA) bei StackOverflow und Programmers SE . Ich versuche, eine etwas konzentriertere Frage zu stellen als diese. Die Definition einer SA ist sehr weit gefasst. Um diese Frage zu beantworten, definieren wir eine SA wie folgt:
Ein Softwarearchitekt leitet den Gesamtentwurf eines Projekts, beteiligt sich an den Codierungsbemühungen, führt Codeüberprüfungen durch und wählt die zu verwendenden Technologien aus.
Mit anderen Worten, ich spreche nicht über Managerruhe und Weste an den Kammtypen (weitere gereimte Wörter beseitigt) von SAs. Wenn ich irgendeine Art von SA-Position verfolgen möchte, möchte ich nicht vom Codieren abkommen. Ich opfere vielleicht etwas Zeit, um mit Kunden, Business Analysten usw. in Kontakt zu treten, bin aber immer noch technisch involviert und weiß nicht nur, was in Meetings vor sich geht.
Was sollte eine SA in Anbetracht dieser Punkte auf den Tisch bringen? Sollten sie mit der Mentalität eintreten, "das Gesetz festzulegen" (sozusagen) und die Verwendung bestimmter Tools zu erzwingen, die "ihrem Weg" entsprechen, dh Codierungsrichtlinien, Quellcodeverwaltung, Muster, UML-Dokumentation usw.? Oder sollten sie die anfängliche Richtung und Strategie festlegen und dann zurücklehnen und nach Bedarf einspringen, um die Richtung des Schiffes zu korrigieren?
Je nach Organisation funktioniert dies möglicherweise nicht. Eine SA, die sich auf TFS verlässt, um alles durchzusetzen, kann Schwierigkeiten haben, ihren Plan bei einem Arbeitgeber umzusetzen, der nur StarTeam verwendet. Ebenso muss eine SA je nach Projektphase flexibel sein. Wenn es sich um ein neues Projekt handelt, haben sie mehr Auswahlmöglichkeiten, während sie bei bestehenden Projekten möglicherweise weniger Auswahlmöglichkeiten haben.
Hier sind einige SA-Geschichten, die ich erlebt habe, um einige Hintergründe zu teilen, in der Hoffnung, dass Antworten auf meine Fragen auch einige Lichtblicke auf diese Themen werfen könnten:
Ich habe mit einer SA zusammengearbeitet, die buchstäblich jede einzelne Codezeile des Teams überprüft hat. Die SA würde dies nicht nur für unser Projekt, sondern auch für andere Projekte in der Organisation tun (stellen Sie sich die dafür aufgewendete Zeit vor). Zuerst war es nützlich, bestimmte Standards durchzusetzen, aber später wurde es lähmend. FxCop war, wie die SA Probleme finden würde. Versteht mich nicht falsch, es war eine gute Möglichkeit, Junior-Entwickler zu unterrichten und sie zu zwingen, über die Konsequenzen ihres gewählten Ansatzes nachzudenken, aber für Senior-Entwickler galt dies als etwas drakonisch.
Eine bestimmte SA war gegen die Nutzung einer bestimmten Bibliothek und behauptete, sie sei langsam. Dies hat uns gezwungen, Tonnen von Code zu schreiben, um Dinge anders zu erreichen, während die andere Bibliothek uns viel Zeit gespart hätte. Schneller Vorlauf zum letzten Monat des Projekts und die Kunden beschwerten sich über die Leistung. Die einzige Lösung bestand darin, bestimmte Funktionen zu ändern, um den ursprünglich ignorierten Ansatz trotz früher Warnungen der Entwickler zu verwenden. Zu diesem Zeitpunkt war viel Code weggeworfen und nicht wiederverwendbar, was zu Überstunden und Stress führte. Leider basierten die Schätzungen, die für das Projekt verwendet wurden, auf dem alten Ansatz, dessen Verwendung meinem Projekt untersagt war, so dass dies kein geeigneter Indikator für die Schätzung war. Ich würde den Premierminister sagen hören: "Wir haben das schon einmal gemacht."
Die SA, die die Verwendung von DTOs, DOs, BOs, Service-Layern usw. für alle Projekte erzwingen würde. Neue Entwickler mussten diese Architektur erlernen und die SA setzte die Nutzungsrichtlinien strikt durch. Ausnahmen von den Verwendungsrichtlinien wurden gemacht, als es absolut schwierig war, die Richtlinien zu befolgen. Die SA war in ihrem Ansatz begründet. Klassen für DTOs und alle CRUD-Operationen wurden über CodeSmith generiert, und Datenbankschemata waren ein weiterer ähnlicher Wachsball. Da die SA dieses Setup jedoch überall verwendet hat, war sie nicht offen für neue Technologien wie LINQ to SQL oder Entity Framework.
Ich benutze diesen Beitrag nicht als Plattform zum Entlüften. Meine Erfahrungen mit den oben erwähnten SA-Geschichten hatten positive und negative Aspekte. Meine Fragen beschränken sich auf:
- Was sollte eine SA mitbringen?
- Wie können sie ein Gleichgewicht in ihrer Entscheidungsfindung finden?
- Sollte man sich einem SA-Job (wie zuvor definiert) mit der Mentalität nähern, bestimmte Grundregeln durchzusetzen?
- Sonst noch etwas zu beachten?
Vielen Dank! Ich bin mir sicher, dass diese Aufgaben leicht auf leitende Entwickler oder technische Leiter ausgeweitet werden können. Sie können sie also auch hier beantworten.