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.
quelle
Antworten:
Ein Systemarchitekt sollte:
SAs müssen wissen, wie man codiert, und sollten an einigen der Codierungsarbeiten teilnehmen, ihre Hände sozusagen nass machen. Dies hält sie in Kontakt mit der Gestalt des Entwicklungsaufwands. Wie Onkel Bob Martin einmal sagte , sollte der Architekt einen Teil der Codierung selbst vornehmen, damit er den Schmerz sehen kann, den er anderen mit seinen Entwürfen zufügt.
Die SA sollte das letzte Wort über alle Entscheidungen in Bezug auf Design, Technologie und Codierungsstil haben. Aber wie bei allen Managern besteht die Aufgabe der SA darin, den Weg für seine Mitarbeiter freizumachen, damit diese produktiv arbeiten können. Dies bedeutet, dass die Entwickler zum größten Teil auf ihrer Ebene entscheiden können, wie die Probleme zu lösen sind. Dies bedeutet, dass die SA die spitzen Chefs aus den Entwicklerkabinen fernhält. Und es bedeutet, dass die SA nach Bedarf eingreift, um zu helfen.
Wie alle Menschen können und tun SA Fehler. Die Guten lernen aus diesen Fehlern und werden bessere SAs.
quelle
Ich habe noch nie einen Architekten getroffen, der nützlich war, vor allem, weil sie nicht praktisch waren.
Für mich sind die größten Probleme, die ich gesehen habe:
rewrite from scratch
MentalitätDie besten "Architekten", mit denen ich zusammengearbeitet habe:
Das Problem für mich ist, dass die besten "Architekten", mit denen ich zusammengearbeitet habe, keinen "Architekten" in ihrem Titel hatten. Sie waren meistens Softwareingenieure, die auf dem spezifischen Problem und den Projekten beruhen. Sie haben verstanden, dass es in den meisten Unternehmen nicht so ist. Es ist praktisch, eine funktionierende Codebasis von Grund auf neu zu schreiben. Sie treffen Entwurfsentscheidungen oder stellen Optionen und ihre Gründe oder Begründungen bereit. Sie zeigen auf, wie die Codebasis im Laufe der Zeit auf eine neue Architektur umgestellt werden kann, und behalten dennoch alle Funktionen bei. Sie geben konservative Empfehlungen, anstatt Empfehlungen abzugeben was auch immer Dejour oder vertraut. sie würden eine zusammenhängende Vision kommunizieren , wie die Dinge funktionieren sollte und warum, ABER was noch wichtiger würden sie kartieren , wie dort und die Kosten zu bekommen.
quelle
1 Was sollte eine SA mitbringen?
2 Wie können sie ein Gleichgewicht in ihrer Entscheidungsfindung finden?
3 Sollte man sich einem SA-Job (wie zuvor definiert) mit der Mentalität nähern, dass er bestimmte Grundregeln durchsetzen muss?
Es gibt noch viel mehr, ich denke, es werden einige wirklich gute Antworten auf diese Frage kommen.
quelle
1.Was sollte eine SA mitbringen?
"Sollten sie mit der Mentalität 'das Gesetz niederzulegen' hereinkommen ... oder sollten sie die anfängliche Richtung und Strategie spezifizieren, dann sollten sie sich zurücklehnen und nach Bedarf einspringen, um die Richtung des Schiffes zu korrigieren?"
Eine Kombination von beiden würde ich sagen. Wenn Sie sich für Technologien und Prozesse entscheiden, können Sie durch Offenheit für Meinungen und Vorschläge wertvolle Rückmeldungen / Beiträge zu Entscheidungen geben und von anderen lernen. Ihr Team ist (hoffentlich) schlau; das ausnutzen. Aber sobald eine Entscheidung (Ihre Entscheidung) getroffen ist, ist das Gesetz festgelegt. Identifizieren Sie diejenigen, die sich über alles beschweren, was nicht ihre Wahl war, und diejenigen, die einfach alles wählen und sich nicht darum kümmern - und ignorieren Sie sie dann.
Was Technologien anbelangt: Arbeiten Sie mit dem, was Sie haben. Wenn das Unternehmen StarTeam verwendet, verwenden Sie genau das. Wenn Sie sich mit einem bestimmten Produkt / einer bestimmten Technologie / einem bestimmten Prozess verbinden, kann dies nichts für Sie bedeuten.
2.Wie können sie ein Gleichgewicht in ihrer Entscheidungsfindung finden?
Es ist wichtig, dem Team zuzuhören und zu wissen , ob es richtig oder falsch ist, und die Cojones zu haben, die ihnen sagen, dass sie falsch sind, und sich an Ihre Entscheidung zu halten. Nicht zuhören wird einen Mangel an Respekt mit sich bringen, ebenso wenig wie Ihre Entscheidungen.
3. Sollte man sich einem SA-Job (wie zuvor definiert) mit der Mentalität nähern, dass er bestimmte Grundregeln durchsetzen muss?
Immer. Wenn nicht, laufen die Insassen offen oder verdeckt in die Anstalt. Die Entscheidung über diese Grundregeln kann jedoch im Gespräch mit dem Team erfolgen. Denken Sie daran, dass jedes Team möglicherweise nicht immer die gleichen Mitglieder hat wie jetzt. Wenn Sie also Konzessionen für eine kleine Gruppe von ihnen machen, kann dies das Team in Zukunft behindern, sobald sie weg sind. Das schließt die SA ein.
4.Was gibt es sonst noch zu beachten?
quelle