Existe-t-il des meilleures pratiques concernant le passage de l'architecture au développement?

10

Nous cherchons à améliorer le processus de transfert des tâches de l'architecture au développement.

À une extrémité de l'échelle, il n'y a pas de conseils d'architecture, vous risquez de devenir chaotique, chaque développeur faisant les choses à sa manière.

À l'autre extrémité de l'échelle où tout est spécifié, la spécification prend plus de temps que le développement et vous risquez d'avoir des tâches de développement très ennuyeuses.

Quelqu'un a-t-il trouvé un juste milieu optimal entre ces extrêmes? Quels artefacts fournissez-vous au développement? Par exemple: modules, structure de classe ou diagrammes de séquence?

Shiraz Bhaiji
la source
14
J'ai lu un commentaire ici quelque part qui disait que l'architecture est un sport d'équipe. Si vous passez le relais des architectes à l'équipe de développement, vous vous trompez probablement.
Ant
@Ant, je suis d'accord en principe. Un transfert complet puis un éloignement font définitivement du tort. Remettre une conception, puis travailler avec les développeurs pour affiner la conception et guider le processus, tout en laissant les détails aux développeurs et en restant avec un projet jusqu'à la fin, c'est mieux. C'est pourquoi vous ne verrez jamais vraiment un projet logiciel réussi où une équipe de conception a été engagée et ensuite demandée de partir une fois que les documents de spécification ont été "complétés".
S.Robins
1
À un endroit où j'ai travaillé, le transfert a été essentiellement accompli en fournissant au développement un prototype principalement implémenté qui fonctionnait généralement et ne serait en aucun cas à l'échelle. Cependant, vous avez dit que vous vouliez améliorer votre processus, pas l'aggraver.
David Thornley
2
@DavidThornley J'étais dans une entreprise qui avait un groupe d'architecture qui faisait ça. Ils s'asseyaient et caressaient leur barbe grise, postulant des idées ridicules pleines de trous et d'impasses logiques. Ils fouetteraient alors un prototype mal implémenté qui ne démontre que vaguement leur masturbation mentale. Il serait ensuite remis à une équipe de développement afin qu'ils puissent «l'implémenter», mais l'équipe de développement se rendrait rapidement compte que l'idée ignorait plusieurs problèmes pour la plupart insurmontables, entraînant l'échec du projet. Les architectes n'assumaient aucune responsabilité pour les échecs, bien sûr.
maple_shaft
Dans les grands magasins (et selon les normes TOGAF), il existe plusieurs disciplines d'architecture distinctes: entreprise, sécurité, infrastructure, solution, etc. etc. L'utilisation du terme architecte ou architecture seule n'a pas de sens. La question semble concerner «l'architecture de la solution» et la réponse est que l'architecte de la solution devrait être un membre à part entière de l'équipe de développement.
James Anderson

Réponses:

16

Je commencerai par dire que le concept même d'une équipe "Architecture" séparée est un affront aux bonnes pratiques de développement logiciel. Les équipes d'architecture dans les environnements d'entreprise ont tendance à être le point culminant des pires artistes pseudo-intellectuels de la tour d'ivoire * * que l'on puisse trouver parmi le bassin de développeurs.

D'autres organisations traitent les groupes d'architecture comme une récompense politique et une justification pour un salaire massif aux membres les plus anciens, indépendamment du mérite, des connaissances ou des compétences. La plupart se composent des deux types.

Chaque développeur peut et doit être un architecte et doit être impliqué dans les conceptions de haut niveau d'une entreprise. L'idée même qu'un seul groupe a un contrôle dictatorial complet sur tous les aspects de la conception de logiciels et qui doit être transmise aux développeurs qui n'ont pas contribué à la conception, ne comprennent pas le raisonnement derrière les choix de conception et peuvent comprendre des défauts critiques dans la conception étant plus confortable et plus proche de l'implémentation réelle et du code existant, est franchement complètement vicié de son cœur, et se traduira systématiquement par l'un des trois scénarios:

  • Les développeurs ne comprennent pas la conception, ou la rejettent carrément en raison des réalités de l'implémentation actuelle, et finissent par déterminer leur propre conception non documentée et l'implémentent à la place. La situation est des documents de conception formels qui ne reflètent pas la mise en œuvre du logiciel.

  • Les développeurs suivent aveuglément la conception qui peut ou non prendre en compte les exigences actuelles ou les aspects uniques des user stories, ce qui entraîne un buggy et une implémentation de mauvaise qualité.

  • Les développeurs intelligents qui comprennent les documents de conception et sont capables de les mettre en œuvre, s'ennuient rapidement de ne pas être impliqués dans les discussions de conception. Ils sont probablement exclus de la participation au groupe d'architecture en raison de problèmes politiques ou d'ancienneté, de sorte qu'ils deviennent frustrés, s'ennuient et partent pour des pâturages plus verts. Cela affecte négativement le projet, entraînant une fuite des cerveaux entraînant la poursuite du cercle vicieux de la mauvaise qualité des logiciels.

La meilleure façon d'atténuer ce problème est de CHANGER le groupe d'architecture et éventuellement de le placer en position de chef de file technologique. Le rôle du groupe Architecture devrait être plus ou moins une «mêlée de leads technologiques» si vous voulez. Ils ne devraient que rarement se rencontrer et discuter uniquement des questions de direction technique de plus haut niveau, par exemple. pensez à la migration de Java vers Scala, Abandon d'Oracle pour MySQL, peut-être à l'écriture de bibliothèques utilitaires communes qui imposent un certain TYPE de processus de conception à un autre, passant de StarUML à Altova UML.

La conception réelle et réelle du logiciel sera un processus communautaire impliquant TOUS les développeurs de logiciels, défini par la direction de très haut niveau du groupe Architecture.

maple_shaft
la source
La question de l'OP était de savoir combien communiquer. Le simple fait de changer d'entreprises pour retirer leurs architectes ne résout pas ce problème et risque de rencontrer une vive opposition. Le changement est difficile, même lorsque cela est nécessaire, et rencontre toujours une résistance. La clé est alors de commencer par résoudre les problèmes de communication et de reprendre les choses à partir de là. S'exprimant à partir d'une expérience longue et parfois douloureuse, changer le mode de travail des équipes nécessite un effort important en termes de changement culturel, et cela nécessite une «refactorisation» très subtile et patiente des processus et de la pensée métier, une grande sensibilité et finalement du temps.
S.Robins
5
@ S.Robins Avec tout le respect que je vous dois, la question du PO était de savoir comment résoudre le problème (toutes les questions sur ce site concernent la manière de résoudre un problème). Changer la structure de l'équipe est le seul véritable moyen de résoudre le problème. D'autres suggestions sont excellentes, mais ce ne sont que des pansements. Ils n'aident pas à long terme.
maple_shaft
2
+1: J'ai travaillé dans deux entreprises avec une équipe d'architectes distincte et une avec un directeur technique qui a insisté pour prendre toutes les décisions architecturales mais n'avait aucune responsabilité de livraison. Les trois avaient évolué comme vous le décrivez. Aucun ne pouvait retenir des développeurs solides; l'effet "Mer Morte" a été prononcé. Les projets ont été achevés, mais à un coût extrêmement élevé.
kevin cline
2

Il y a toujours eu des problèmes dans la façon dont les informations sont transmises de l'architecture aux tests de développement et aux opérations. La façon de résoudre ces problèmes à mon humble avis dépend de plusieurs facteurs comme:

  • taille du logiciel
  • complexité
  • la culture dans votre organisation
  • croyance.

Pour certaines combinaisons de ces facteurs, une approche purement agile d'équipes interfonctionnelles avec une conception émergente est appropriée. L'information circule en travaillant ensemble. Les disciplines documentent ce dont elles ont besoin.

Pour d'autres combinaisons de ces facteurs, une petite équipe d'architectes, de testeurs, d'experts en opérations et de développeurs principaux peut commencer par des itérations d'architecture construisant lentement l'architecture, documentant et obtenant un retour immédiat sur leurs décisions d'architecture. Lentement plus de développeurs qui implémentent des fonctionnalités peuvent être ajoutés à l'équipe et l'équipe principale d'origine peut être réduite.

Surtout pour les projets gouvernementaux et financiers, il est nécessaire que davantage de documentation soit écrite à l'avance et cela peut prendre beaucoup de temps sans rétroaction réelle sur vos choix. Dans mon esprit, la principale raison pour laquelle bon nombre de ces projets échouent. Si tel est votre cas, je rédigerais la documentation pour répondre aux exigences Et utiliser l'option 1 ou 2 pour créer le logiciel et affiner / adapter la documentation.

J'espère que cela t'aides.

KeesDijk
la source
2

Je sais que ce ne sera pas très populaire, mais le commentaire que vous avez fait

À l'autre extrémité de l'échelle, si tout est spécifié, la spécification prend plus de temps que le développement. Et vous risquez d'avoir des tâches de développement très ennuyeuses.

est en fait quelque chose que vous devriez viser. Si la conception et les spécifications sont suffisamment solides pour que les tâches de développement soient ennuyeuses, le coût de développement diminue. Il est beaucoup moins coûteux de réparer une spécification que de réparer du code, et le plus gros coût des projets logiciels n'est pas la construction, c'est le support à long terme. Et le support du code basé sur une spécification solide est beaucoup moins cher.

Jere
la source
3
La meilleure spécification au monde est complètement inutile si la mise en œuvre ne la reflète pas. C'est ce qui se produit lorsque les spécifications de conception sont effectuées par des personnes qui ne sont pas impliquées dans la mise en œuvre.
maple_shaft
1
C'est très vrai. L'astuce consiste cependant à trouver le bon équilibre.
Michael
Votre déclaration est vraie dans certains mondes. Dans de nombreux autres mondes, le coût le plus élevé des projets logiciels est le coût d'opportunité commerciale de chaque jour où le produit n'est pas expédié. Retarder le lancement d'une entreprise, par exemple, peut tuer la fenêtre d'opportunité qu'elle tente d'exploiter. Bien sûr, expédier un morceau de merde peut être tout aussi fatal. Mais le chargement frontal du travail dans la conception des spécifications se dirige vraiment vers une fin vers des projets de buggy tardifs que personne n'aime, y compris les développeurs.
Bill Gribble
1

Je ne suis pas entièrement d'accord avec la réponse de maple_shaft, mais il n'y avait pas assez de place dans le commentaire pour dire tout mon morceau! ;-)

Je suis d'accord que chaque développeur peut et doit être un architecte, mais cela ne signifie pas que chaque développeur doit être responsable de l'architecture d'un produit ou d'un système complet. De plus, je ne pense pas que vous puissiez peindre chaque équipe architecturale avec le même pinceau large, et une fois cela fait, les équipes architecturales appropriées peuvent apporter une grande valeur au processus global de développement de produits. L'idée fausse est que les architectes doivent dicter tous les aspects de la conception du système. Ils devraient plutôt se concentrer sur la conception de niveau supérieur et laisser les détails de la mise en œuvre à leurs équipes de développement. Cela ne veut pas dire cependant que les développeurs ne devraient pas être impliqués dans le processus de planification et de conception dès le départ.

Plus un produit est grand et modulaire et finalement plus complexe, plus vous trouverez probablement différentes parties du produit gérées par différentes équipes de développement. Ces équipes n'ont pas besoin de comprendre le système dans son ensemble, à condition d'avoir une compréhension complète des parties du système dont elles sont responsables. Souvent, ces équipes supplémentaires sont engagées en tant que sous-traitants dans le but spécifique de développer un module dans un domaine technologique particulier dans lequel les architectes ou d'autres équipes peuvent ne pas avoir d'expertise. Mes talents particuliers résident dans le développement d'API, et je n'ai pas encore vu une API bien factorisée qui a été développée entièrement de manière organique sans être un gâchis complet en termes de convivialité, ou qui n'exigeait pas que quelqu'un se démarque comme étant la personne qui avait assuré qu'il y avait un niveau d'uniformité entre les différents aspects de l'API. Je peux continuer à énumérer de nombreux exemples et raisons, mais je ne pense pas que ce genre de situations soit la tour d'ivoire BS que beaucoup pourraient penser qu'elles sont. Malheureusement, il existe de nombreux endroits, en particulier dans les secteurs de la défense, du médical et des finances où la paranoïa des entreprises se traduit par un développement de produits mal spécifié et encore plus mal géré du type qui, j'en suis sûr, était le plus préoccupé par maple_shaft. Ce sont des choses qui, je crois, donnent aux architectes une mauvaise réputation mal méritée (en général). Malheureusement, il existe de nombreux endroits, en particulier dans les secteurs de la défense, du médical et des finances où la paranoïa des entreprises se traduit par un développement de produits mal spécifié et encore plus mal géré du type qui, j'en suis sûr, était le plus préoccupé par maple_shaft. Ce sont des choses qui, je crois, donnent aux architectes une mauvaise réputation mal méritée (en général). Malheureusement, il existe de nombreux endroits, en particulier dans les secteurs de la défense, du médical et des finances où la paranoïa des entreprises se traduit par un développement de produits mal spécifié et encore plus mal géré du type qui, j'en suis sûr, était le plus préoccupé par maple_shaft. Ce sont des choses qui, je crois, donnent aux architectes une mauvaise réputation mal méritée (en général).

Alors, où est le terrain d'entente que le PO recherchait? La réponse est tout à fait d'ouvrir des canaux de communication. Les architectes doivent remettre des spécifications qui décrivent leurs conceptions avec suffisamment de détails afin de s'assurer que les équipes de développement comprendront où se trouvent les limites. Histoires et scénarios de fonctionnalités au sens large, où tout est considéré comme une boîte noire. Les architectes doivent ensuite s'assurer que les équipes ont accès au temps de l'architecte pour confirmer toutes les hypothèses et obtenir des réponses aux questions sur les spécifications qui semblent trop larges ou peu claires. Après cela, il s'agit vraiment de s'assurer que les équipes individuelles sont informées de ce sur quoi les autres équipes travaillent et qu'elles savent avec qui communiquer avec les autres équipes pour s'assurer que chaque partie du système jouera bien avec les autres parties. Ces équipes se rencontrent directement. Une fois que le système a été conçu au niveau le plus large, les architectes ne devraient être que les personnes vers lesquelles les équipes se tournent lorsqu'elles ont besoin d'un bilan de santé et pour s'assurer que la «vision» du produit est maintenue. Ils devraient également prendre en compte tout processus d'intégration requis et fournir une «couverture aérienne» aux équipes de développement des gestionnaires, des clients et de toutes les autres parties prenantes, tout en veillant à ce que ces différentes personnes puissent toutes se réunir pour s'entraîner entre leur expliquer comment les choses devraient fonctionner.

Les architectes à mon humble avis devraient avant tout être des facilitateurs et des communicateurs, et les concepteurs ensuite. Quant à quel niveau de spécification? Je pense que les meilleurs architectes sont ceux qui interrogent leurs équipes sur le niveau de détail souhaité par une équipe et trouvent entre eux un équilibre qui fonctionne. Différentes équipes peuvent avoir des exigences différentes en termes de quantité de documentation ou de directives requises. Les équipes seniors peuvent trouver un schéma grossièrement dessiné et une discussion rapide peut être suffisante pour commencer, tandis que les équipes remplies de développeurs relativement juniors peuvent avoir besoin d'un peu plus pour les faire avancer. Par-dessus tout, l'architecte doit encourager les développeurs à exercer leurs propres talents de conception afin d'obtenir le meilleur résultat final de chaque équipe.

S.Robins
la source
+1 et 1000 de plus si je le pouvais! Vous avez élaboré avec plus d'éloquence ma réponse. J'aime particulièrement cette citation, architects should first and foremost be facilitators & communicators, and designers second. C'est essentiellement ce que je dis dans ma réponse. Le fait que les architectes fournissent des spécifications de conception aux développeurs est fondamentalement faux et va à l'encontre de la façon dont un architecte apporte de la valeur à une organisation. C'est pourquoi j'ai exigé assez sévèrement dans ma réponse qu'une réorganisation d'équipe est la seule réponse.
maple_shaft
1

Puisque vous vous efforcez d'améliorer quelque chose, vous avez déjà détecté un problème dans votre processus. La cause première de la situation spécifique peut être la suivante: les développeurs ne peuvent pas s'identifier à l'architecture, car elle leur a été imposée par quelqu'un d'extérieur. La remise de l'architecture au développement ne résoudra probablement pas cette cause profonde.

Intégrez l'architecture à l'équipe de développement. Abattez la frontière entre l'architecte et le développeur. Cela garantit que les informations circuleront. Si l'équipe de développement participe à façonner l'architecture, elle ne la considérera pas comme quelque chose d'étranger. Insufflez des connaissances sur l'architecture à l'équipe. Apprenez-leur les facteurs moteurs de l'architecture d'entreprise pour éviter le chaos que vous avez mentionné. Impliquez les développeurs lorsque des décisions architecturales doivent être prises pour éviter l'ennui que vous avez mentionné. Un transfert n'est alors plus nécessaire et vous avez rempli votre rôle d'architecte dans une équipe de développement.

Theo Lenndorff
la source
0

Vous devez fournir autant d'informations que possible pour que la future équipe gère le code. Si vous n'avez pas de diagrammes de séquence par exemple, le développeur est obligé de suivre le code étape par étape, ce qui fait perdre du temps.

Il y a aussi de la place pour la nouvelle équipe qui fait des hypothèses qui ne sont pas valides.

En général, il devrait y avoir un document sur ce qu'est le projet, les spécifications techniques, les cas de tests unitaires et les diagrammes de séquence / classe.

Vinoth Kumar CM
la source
-1

Je dirais que les vues de diagrammes de classes créant un modèle ainsi que du code sont une solution. Le diagramme de classes représente la vue statique de l'architecture de votre projet. Je veux dire que vous avez des packages> classes, des interfaces, des énumérations> des attributs, des mehtods etc ...> etc. Si vous regardez bien, le métamodèle UML2 a exactement la même structure qu'un projet java ou dotnet.

Ce que nous utilisons dans nos projets sont simplement des diagrammes de classes qui sont enregistrés dans un modèle unique. Nous générons des vues du modèle si le classifieur existe déjà ou en créons un nouveau graphiquement s'il est nouveau. Les développeurs peuvent voir nos diagrammes et notre modèle car enregistrés à la racine du dossier du projet dans CVS. Ce que j'aime, c'est que le développeur peut également modéliser parce que si quelque chose est modifié au niveau du code, le modèle est automatiquement mis à jour sur CVS pour toute l'équipe.

Cela fonctionne vraiment bien et pas vraiment besoin de connaître UML car le diagramme de classes est vraiment simple et la rétro-ingénierie fera le travail et créera la vue graphique du code. Navigation simple, vues avancées et détaillées où de nombreux commentaires peuvent être ajoutés avec des diagrammes toujours à jour et visibles sur CVS directement dans le projet. Mon diagramme de classe UML est maintenant magique :-)

UML_GURU
la source