Que devez-vous apporter en tant qu'architecte logiciel? [fermé]

20

Il y a eu beaucoup de questions avec de bonnes réponses sur le rôle d'un architecte logiciel (SA) sur StackOverflow et Programmers SE . J'essaie de poser une question un peu plus ciblée que celles-ci. La définition même d'une SA est large donc pour cette question, définissons une SA comme suit:

Un architecte logiciel guide la conception globale d'un projet, s'implique dans les efforts de codage, effectue des revues de code et sélectionne les technologies à utiliser.

En d'autres termes, je ne parle pas de repos managérial et de gilet à la crête (d'autres mots riment bien) des SA. Si je devais poursuivre n'importe quel type de poste SA, je ne veux pas être loin du codage. Je pourrais sacrifier du temps pour interagir avec les clients et les analystes commerciaux, etc., mais je suis toujours impliqué techniquement et je ne suis pas seulement au courant de ce qui se passe lors des réunions.

Avec ces points à l'esprit, que devrait apporter un SA à la table? Doivent-ils entrer avec une mentalité de "poser la loi" (pour ainsi dire) et de faire respecter l'utilisation de certains outils pour s'adapter "à leur manière", c'est-à-dire les directives de codage, le contrôle des sources, les modèles, la documentation UML, etc.? Ou devraient-ils spécifier la direction et la stratégie initiales, puis être décontractés et intervenir au besoin pour corriger la direction du navire?

Selon l'organisation, cela peut ne pas fonctionner. Une SA qui s'appuie sur TFS pour appliquer tout peut avoir du mal à mettre en œuvre son plan chez un employeur qui utilise uniquement StarTeam. De même, une SA doit être flexible en fonction de l'étape du projet. S'il s'agit d'un nouveau projet, ils ont plus de choix, alors qu'ils pourraient en avoir moins pour les projets existants.

Voici quelques histoires de SA que j'ai vécues comme un moyen de partager quelques informations dans l'espoir que les réponses à mes questions pourraient également éclairer ces questions:

  • J'ai travaillé avec un SA qui a révisé littéralement chaque ligne de code de l'équipe. L'AS ferait cela non seulement pour notre projet, mais pour d'autres projets de l'organisation (imaginez le temps consacré à cela). Au début, il était utile de faire respecter certaines normes, mais plus tard, il est devenu paralysant. FxCop était la façon dont le SA trouverait des problèmes. Ne vous méprenez pas, c'était un bon moyen d'enseigner aux développeurs juniors et de les forcer à penser aux conséquences de leur approche, mais pour les développeurs seniors, c'était considéré comme quelque peu draconien.

  • Une SA particulière était contre l'utilisation d'une certaine bibliothèque, affirmant qu'elle était lente. Cela nous a obligés à écrire des tonnes de code pour réaliser les choses différemment alors que l'autre bibliothèque nous aurait fait gagner beaucoup de temps. Avance rapide jusqu'au dernier mois du projet et les clients se plaignaient de la performance. La seule solution était de changer certaines fonctionnalités pour utiliser l'approche initialement ignorée malgré les premiers avertissements des développeurs. À ce stade, beaucoup de code a été jeté et non réutilisable, ce qui a entraîné des heures supplémentaires et du stress. Malheureusement, les estimations utilisées pour le projet étaient basées sur l'ancienne approche que mon projet était interdit d'utiliser, donc ce n'était pas un indicateur approprié pour l'estimation. J'entendais le PM dire "nous l'avons déjà fait",

  • Le SA qui imposerait l'utilisation des DTO, des DO, des BO, des couches de service, etc. pour tous les projets. Les nouveaux développeurs ont dû apprendre cette architecture et les directives d'utilisation de SA. Des exceptions aux directives d'utilisation ont été faites lorsqu'il était absolument difficile de suivre les directives. Le SA était fondé sur son approche. Les classes pour les DTO et toutes les opérations CRUD ont été générées via CodeSmith et les schémas de base de données étaient une autre boule de cire similaire. Cependant, ayant utilisé cette configuration partout, la SA n'était pas ouverte aux nouvelles technologies telles que LINQ to SQL ou Entity Framework.

Je n'utilise pas ce post comme plateforme pour la ventilation. Il y avait des aspects positifs et négatifs à mes expériences avec les histoires de SA mentionnées ci-dessus. Mes questions se résument à:

  1. Que devrait apporter un SA à la table?
  2. Comment peuvent-ils trouver un équilibre dans leur prise de décision?
  3. Doit-on aborder un emploi SA (tel que défini précédemment) avec la mentalité qu'ils doivent appliquer certaines règles de base?
  4. Autre chose à considérer?

Merci! Je suis sûr que ces tâches sont facilement étendues aux personnes qui sont des cadres supérieurs ou des responsables techniques, alors n'hésitez pas à répondre à ce niveau également.

Ahmad Mageed
la source
Si le SA utilisait FXCop, pourquoi serait-ce paralysant? Cela ne devrait pas prendre plus de quelques minutes pour examiner même la plus grande des applications avec FXCop.
Robert Harvey
La deuxième puce sonne comme si la SA avait fait une erreur, même si elle était apparemment mauvaise. S'il en fait assez, l'entreprise trouve une nouvelle SA.
Robert Harvey
La troisième balle sonne comme si le SA était un astronaute de l'architecture. Ou, c'est le diable qu'il connaît. Dans tous les cas, une architecture uniforme peut être une bonne chose si elle est utilisée de manière appropriée.
Robert Harvey
@Robert désolé si je n'ai pas été clair. Les révisions constantes du code pour satisfaire le style de la SA étaient paralysantes, pas FxCop en soi. Certaines de ses directives se heurtaient à celles de Microsoft, vous avez donc dû l'apprendre à sa manière. C'étaient des différences mineures mais très pointilleuses et ont tué la productivité. Je suis d'accord avec vous sur le deuxième point, c'était une mauvaise décision et nous ne sommes pas parfaits. La troisième puce est bonne et mauvaise. Il est à l'aise avec cela, mais cela empêche également les développeurs de travailler sur de nouvelles technologies.
Ahmad Mageed
Que devrait apporter un SA à la table? Un verre de whisky, un pistolet et deux balles.
Adam Crossland

Réponses:

23

Un architecte de systèmes devrait:

  1. Spécifiez l'architecture de haut niveau
  2. Participer aux revues de code
  3. Approuver les technologies utilisées
  4. Aider les développeurs dans leur effort de codage
  5. Maintenir et surveiller le calendrier de développement
  6. Produisez des artefacts SA, tels que des diagrammes UML, des diagrammes de Gantt et similaires.

Les SA doivent savoir coder et devraient participer à certains travaux de codage, se mouiller les mains, pour ainsi dire. Cela les maintient en contact avec la gestalt de l'effort de développement. Comme l'oncle Bob Martin l' a dit un jour , l'architecte devrait faire une partie du codage lui-même, afin qu'il puisse voir la douleur qu'il inflige aux autres avec ses conceptions.

Le SA devrait avoir le dernier mot sur toutes les décisions de conception, de technologie et de style de codage. Mais, comme tous les managers, le travail du SA consiste à ouvrir la voie à son personnel afin qu'il soit productif. Cela signifie, pour la plupart, que les développeurs décident, à leur niveau, de la manière dont les problèmes doivent être résolus. Cela signifie que le SA garde les patrons aux cheveux pointus hors des cabines des développeurs. Et cela signifie que le SA intervient pour aider, au besoin.

Comme tous les êtres humains, les SA peuvent faire et font des erreurs. Les bons apprennent de ces erreurs et deviennent de meilleurs SA.

Robert Harvey
la source
5. devrait être pour le chef de projet, non?
BЈовић
8

Je n'ai jamais rencontré un architecte utile, principalement parce qu'il n'était pas pratique.

Pour moi, les plus gros problèmes que j'ai vus sont:

  • adhésion aveugle au processus pour le plaisir du processus
  • biais aveugle envers la technologie avant de connaître le problème
  • création et application de règles sans justification valable
  • rewrite from scratch mentalité

Les meilleurs "architectes" avec qui j'ai travaillé ont amené à la table:

  • Des questions qui ont conduit à une meilleure compréhension du problème et des solutions potentielles.
  • Options / technologies de conception et leurs compromis.
  • Explications claires et rationnelles des condamnations et des approbations des conceptions et des technologies.

Le problème pour moi est que les meilleurs "architectes" avec lesquels j'ai travaillé n'avaient pas "architecte dans leur titre. Ils étaient le plus souvent des ingénieurs logiciels qui sont ancrés dans le problème et les projets spécifiques. Ils ont compris que dans la plupart des entreprises, ce n'est pas ' t pratique pour réécrire une base de code de travail à partir de zéro. Ils prennent la décision de conception ou fournissent des options et leurs raisons ou justifications. Ils décrivent comment itérer la base de code dans une nouvelle architecture au fil du temps et toujours garder tout fonctionnel. Ils donnent des recommandations conservatrices au lieu de recommander tout ce qui est de jour ou familier. Ils communiqueraient une vision cohérente de la façon dont les choses devraient fonctionner et pourquoi, MAIS plus important encore, ils détermineraient comment y arriver et le coût.

Dietbuddha
la source
-1 Vous n'avez évidemment jamais travaillé avec de bons architectes. Les architectes avec lesquels je travaille ne font aucun des quatre premiers points.
Stephen
7

1 Que doit apporter un SA à la table?

  • Une peau épaisse
  • Bonnes compétences en négociation
  • Une bonne compréhension des différents niveaux de logiciels (de la bonté AJAX aux E / S réseau de bas niveau). Vous n'êtes pas nécessairement un expert pratique, mais vous allez devoir prendre des décisions importantes sur le logiciel à exécuter sur quelle (s) couche (s).
  • Volonté de se salir les mains dans le code, les conceptions de papier blanc ne le coupent pas.
  • Encouragement de l'artisanat du logiciel - soyez la pom-pom girl pour faire les choses de la bonne manière chaque fois que possible et de la meilleure façon compte tenu des limites dans d'autres cas. Donc, des choses comme le contrôle des sources, TDD, build et CI, codage DOJO, revues de code, un bon système de suivi des problèmes, etc.

2 Comment peuvent-ils trouver un équilibre dans leur prise de décision?

  • Cela dépend en grande partie de vos équipes et de leur capacité.
  • Votre environnement (vous pourriez être contraint d'utiliser le produit d'un fournisseur particulier par exemple)
  • Dans l'ensemble, il est préférable de ne pas être architecte de tour d'ivoire, d'être sur le terrain, de faire partie de l'équipe - les gens comprendront vos décisions de cette façon.

3 Faut-il aborder un emploi SA (tel que défini précédemment) avec la mentalité qu'ils doivent appliquer certaines règles de base?

  • Oui, des choses comme le contrôle de version et un système de construction sont très importants et les développeurs doivent les utiliser. Cependant, il est préférable de les intégrer à la solution.

Il y a beaucoup plus, je pense qu'il y aura de très bonnes réponses à venir pour celui-ci.

Martijn Verburg
la source
+1 pour vos points. Ils illustrent à peu près ce qui est nécessaire et se poursuivent dans de bonnes, petites équipes bien intégrées.
talonx
3

1. Que doit apporter un SA à la table?

"Devraient-ils entrer avec une mentalité de" poser la loi "... Ou devraient-ils spécifier la direction et la stratégie initiales, puis être décontractés et intervenir si nécessaire pour corriger la direction du navire?"

Une combinaison des deux, je dirais. Lorsque vous décidez des technologies et des processus, être ouvert aux opinions et aux suggestions peut donner une rétroaction / une contribution précieuse sur les décisions et vous faire apprendre des autres. Votre équipe est (espérons-le) intelligente; en profiter. Mais une fois qu'une décision (votre décision) est prise, la loi est mise en place. Identifiez ceux qui se plaindront de ce qui n'a pas été leur choix, et ceux qui choisiront n'importe quoi et ne s'en soucieront pas - puis ignorer.

En ce qui concerne les technologies: travaillez avec ce que vous avez, si l'entreprise utilise StarTeam, c'est ce que vous utilisez. Se marier avec un produit / une technologie / un processus particulier ne fera rien pour vous.

2.Comment peuvent-ils trouver un équilibre dans leur prise de décision?

Il est important d'écouter l'équipe et de savoir quand elles ont raison ou tort, et d'avoir les cojones pour leur dire qu'elles ont tort et s'en tenir à votre décision. Ne pas écouter amènera un manque de respect, tout comme un flop sur vos décisions.

3.Devrait-on aborder un emploi SA (tel que défini précédemment) avec la mentalité qu'ils doivent appliquer certaines règles de base?

Toujours. Sinon, les détenus finiront par diriger l'asile, ouvertement ou secrètement. Cependant, décider de ces règles de base peut se faire en discutant avec l'équipe. N'oubliez pas que n'importe quelle équipe peut ne pas toujours avoir les mêmes membres qu'elle a maintenant, donc faire des concessions pour un petit groupe d'entre eux peut entraver l'équipe à l'avenir une fois qu'ils seront partis. Cela inclut le SA.

4. Autre chose à considérer?

  • En référence à votre deuxième exemple: Il semble que l'équipe de projet ait formé une dépendance étroitement couplée à un sous-système interne. Les façades à couplage lâche ne sont pas réservées au code tiers. La création d'une abstraction pour ce sous-système aurait pu permettre une transition plus facile vers l'utilisation de cette bibliothèque si la solution interne échouait. C'est une solution logique pour un architecte logiciel seul, mais étant également une forme de chef de projet avec des préoccupations d'expression d'équipe, cela aurait dû être doublement une solution évidente.
  • En référence à votre troisième exemple: ce n'est pas une mauvaise idée d'avoir une architecture ou un processus connu pour produire des logiciels (bien que, certes, vous ayez dit «tous les projets»). Cela colle à ce qui fonctionne. Cela dit, il doit y avoir des opportunités où de nouvelles techniques peuvent être tentées pour voir si elles apportent une valeur ajoutée. Les logiciels internes ou les projets de moindre envergure où ces technologies peuvent être essayées sont des endroits idéaux. Gardez cependant à l'esprit qu'il incombe également au (x) développeur (s) de fournir des démonstrations / arguments convaincants et convaincants pour l'adoption de technologies. Et on ne peut pas s'attendre à ce que SA connaisse chaque ORM concurrent et ses forces et faiblesses par rapport aux autres.
Steven Evers
la source