Was sollten Sie als Software-Architekt mitbringen? [geschlossen]

20

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:

  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, bestimmte Grundregeln durchzusetzen?
  4. 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.

Ahmad Mageed
quelle
Wenn die SA FXCop verwenden würde, warum würde das lähmen? Es sollte nicht länger als ein paar Minuten dauern, um selbst die größten Anwendungen mit FXCop zu überprüfen.
Robert Harvey
Die zweite Kugel hört sich so an, als hätte die SA einen Fehler gemacht, wenn auch anscheinend einen schlechten. Wenn er genug davon macht, findet die Firma eine neue SA.
Robert Harvey
Die dritte Kugel klingt, als wäre die SA ein Architekturastronaut. Oder es ist der Teufel, den er kennt. In jedem Fall kann eine einheitliche Architektur eine gute Sache sein, wenn sie angemessen verwendet wird.
Robert Harvey
@ Robert Entschuldigung, wenn ich nicht klar war. Die ständigen Codeüberprüfungen, um den SA-Stil zu befriedigen, waren lähmend, nicht FxCop an sich. Einige seiner Richtlinien kollidierten mit denen von Microsoft, so dass man es auf seine Weise lernen musste. Es waren kleine Unterschiede, aber sehr wählerisch und töteten die Produktivität. Ich stimme Ihnen im zweiten Punkt zu, es war eine schlechte Entscheidung und wir sind nicht perfekt. Die dritte Kugel ist gut und schlecht. Er fühlt sich damit wohl, aber es hindert Entwickler auch daran, an neuen Technologien zu arbeiten.
Ahmad Mageed
Was sollte eine SA mitbringen? Ein Glas Whiskey, eine Pistole und zwei Kugeln.
Adam Crossland

Antworten:

23

Ein Systemarchitekt sollte:

  1. Geben Sie die übergeordnete Architektur an
  2. Beteiligen Sie sich an Code-Reviews
  3. Verwendete Technologien genehmigen
  4. Unterstützen Sie die Entwickler bei ihrem Programmieraufwand
  5. Pflegen und überwachen Sie den Entwicklungsplan
  6. Erstellen Sie SA-Artefakte wie UML-Diagramme, Gantt-Diagramme und dergleichen.

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.

Robert Harvey
quelle
5. sollte für Projektmanager sein, nein?
BЈовић
8

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:

  • Blindes Festhalten am Prozess zum Wohle des Prozesses
  • blinde Neigung zur Technologie, bevor das Problem erkannt wird
  • Schaffung und Durchsetzung von Regeln ohne eine gute Begründung
  • rewrite from scratch Mentalität

Die besten "Architekten", mit denen ich zusammengearbeitet habe:

  • Fragen, die zu einem besseren Verständnis des Problems und der möglichen Lösungen führten.
  • Designoptionen / -technologien und deren Kompromisse.
  • Klare und rationale Erklärungen für Verurteilungen und Vermerke von Designs und Technologien.

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.

dietbuddha
quelle
-1 Sie haben offensichtlich noch nie mit guten Architekten zusammengearbeitet. Die Architekten, mit denen ich zusammenarbeite, machen keine der ersten vier Punkte.
Stephen
7

1 Was sollte eine SA mitbringen?

  • Eine dicke Haut
  • Gute Verhandlungsfähigkeiten
  • Ein gutes Verständnis der verschiedenen Software-Ebenen (von der AJAX-Qualität bis zur Netzwerk-E / A auf niedriger Ebene). Sie müssen nicht unbedingt ein Experte sein, aber Sie müssen wichtige Entscheidungen darüber treffen, welche Software auf welchen Ebenen ausgeführt werden soll.
  • Die Bereitschaft, sich im Code die Hände schmutzig zu machen, wird durch Whitepaper-Designs einfach nicht beeinträchtigt.
  • Förderung des Software-Fachwissens - seien Sie der Cheerleader, wenn es möglich ist, die Dinge richtig und in Anbetracht der Einschränkungen in anderen Fällen am besten zu machen. Dinge wie Quellcodeverwaltung, TDD, Build und CI, Codierung von DOJOs, Codeüberprüfungen, ein gutes Fehlerverfolgungssystem usw

2 Wie können sie ein Gleichgewicht in ihrer Entscheidungsfindung finden?

  • Vieles davon hängt von Ihren Teams ab und davon, wie fähig sie sind.
  • Ihre Umgebung (Sie könnten beispielsweise gezwungen sein, ein bestimmtes Produkt eines Anbieters zu verwenden)
  • Alles in allem ist es am besten, kein Elfenbeinturm-Architekt zu sein, ein Teil des Teams zu sein - die Leute werden Ihre Entscheidungen auf diese Weise verstehen.

3 Sollte man sich einem SA-Job (wie zuvor definiert) mit der Mentalität nähern, dass er bestimmte Grundregeln durchsetzen muss?

  • Ja, Dinge wie die Versionskontrolle und ein Build-System sind verdammt wichtig und Entwickler müssen diese verwenden. Es ist jedoch immer am besten, sie Teil der Lösung zu machen.

Es gibt noch viel mehr, ich denke, es werden einige wirklich gute Antworten auf diese Frage kommen.

Martijn Verburg
quelle
+1 für deine Punkte. Sie veranschaulichen ziemlich genau, was benötigt wird und gehen in guten, kleinen, gut integrierten Teams vor.
Talonx
3

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?

  • In Bezug auf Ihr zweites Beispiel: Es scheint, dass das Projektteam eine eng gekoppelte Abhängigkeit von einem internen Subsystem eingegangen ist. Locker gekoppelte Fassaden sind nicht nur für Code von Drittanbietern geeignet. Das Erstellen einer Abstraktion für dieses Subsystem hätte einen einfacheren Übergang zur Verwendung dieser Bibliothek ermöglichen können, wenn die interne Lösung fehlgeschlagen wäre. Dies ist eine logische Lösung nur für einen Softwarearchitekten. Da es sich jedoch auch um eine Form des Projektmanagers handelt, bei dem es um Teamausdrücke geht, hätte dies zweifellos eine naheliegende Lösung sein müssen.
  • In Bezug auf Ihr drittes Beispiel: Es ist keine schlechte Idee, eine bekannte Architektur oder einen bekannten Prozess für die Erstellung von Software zu haben (obwohl Sie zugegebenermaßen "alle Projekte" gesagt haben). Das bleibt bei dem, was funktioniert. Vor diesem Hintergrund muss es Gelegenheiten geben, bei denen neue Techniken erprobt werden können, um festzustellen, ob sie zusätzlichen Nutzen bringen. Inhouse-Software oder kleinere Projekte, bei denen diese Technologien ausprobiert werden können, sind ideale Orte. Beachten Sie jedoch, dass es auch Sache der Entwickler ist, recherchierte und überzeugende Demonstrationen / Argumente für die Übernahme von Technologien bereitzustellen. Und von SA kann nicht erwartet werden, dass sie jedes konkurrierende ORM und seine Stärken und Schwächen im Vergleich zu den anderen kennt.
Steven Evers
quelle