Mon équipe utilise un système Kanban pour suivre les progrès au jour le jour et il a très bien fonctionné pour comprendre les progrès sur les fonctionnalités (capturées en tant que user stories). Nous avons largement laissé émerger la conception de notre système à mesure que nous développions des fonctionnalités qui fonctionnaient bien jusqu'à récemment. Au cours des deux dernières semaines, nous avons eu plusieurs discussions sur les compromis architecturaux spécifiquement liés aux attributs de qualité de performance et de modifiabilité.
Je pense que ce qui se passe, c'est que lorsque nous implémentons des fonctionnalités et concevons le système, nous prenons implicitement des décisions concernant l'architecture, mais ne considérons pas ces décisions en fonction de nos exigences d'attributs de qualité connues. Ce serait vraiment génial si je pouvais suivre / capturer / décrire visuellement comment ces importantes décisions de conception sont prises afin que les membres de l'équipe aient une meilleure chance de ne pas créer de tension supplémentaire dans l'architecture du système lors de sa mise en œuvre. Et bien sûr, pour compliquer davantage les choses, les fonctionnalités de notre carte ne sont pas exclusivement fonctionnelles et cachent parfois la complexité architecturale!
Comment puis-je suivre visuellement la progression des attributs de qualité (ou d'autres décisions pertinentes sur le plan architectural) sur le kanban de mon équipe?
Il y a vraiment deux parties à cette question. Une partie est: comment savoir quand l'architecture est modifiée. La deuxième partie est: Comment savons-nous que l'architecture est toujours bonne.
Pour cette première partie: Comment savoir quand l'architecture est modifiée?
Le but ici est de prendre quelque chose qui se fait implicitement et de le rendre explicite
Vous iriez probablement avec la première, si de nombreuses cartes nécessitent une révision, ou si l'architecte ne fait pas partie de l'équipe et qu'un transfert est nécessaire, ou la révision sera suffisamment détaillée pour prendre un certain temps sur lequel vous souhaitez effectuer le suivi. le tableau. Ce dernier est une option si seulement quelques cartes touchent l'architecture, et il est facile d'en trouver une paire à la demande.
Venons-en maintenant à la deuxième question: comment savons-nous que l'architecture est toujours bonne?
Je suis un grand fan de visualisation. Vous pourriez avoir un tableau sur le tableau blanc avec des notes post-it décrivant les composants et l'architecture.
Il existe également des analyseurs statiques qui analyseront la base de code et généreront une image avec un graphique de dépendance de divers composants. Vous pouvez l'exécuter, prendre une impression et la coller sur un mur une fois par semaine environ. Peut-être que les deux dernières impressions pourraient être sur le mur, vous pouvez donc voir si quelque chose a changé au cours de la semaine dernière.
Ce que cela vous permet de faire, c'est de rendre votre architecture et votre design visibles. Les membres de l'équipe y jetteront un coup d'œil de temps en temps et le commenteront si quelque chose pourrait être changé ou refactorisé ou fait d'une meilleure manière.
la source
J'ai vu ce problème aussi. Prise de décision implicite! Si l'implicite est le problème, le rendre aussi explicite que possible résoudra-t-il le problème? Ce que je suggère, c'est de modifier un peu le processus d'architecture pour «commencer à expliquer» les pensées implicites qui progressent pour devenir des décisions. L'étape supplémentaire du processus a pour but de faire comprendre aux membres de l'équipe que tout le monde est enclin à prendre des décisions architecturales implicites. Cette étape ne fera que maintenir la décision implicite hors de la piste.
Garder les «décisions explicites implicites» comme partie du kanban pour chacun des scénarios pourrait aider.
Ce que je vais suggérer pourrait être lourd. Mais si le processus est mappé à un ensemble d'éléments de kanban et si cela est ajouté au tableau pour chaque scénario d'arc, cela ne vous aidera-t-il pas à le suivre. Je suggère que vous puissiez également les mapper au modèle de scénario en six parties et improviser le tableau kanban pour tenir compte des résultats, les AQ peuvent être suivis.
Vikram.
la source
C'est l'un des risques de retarder les décisions architecturales des équipes Agile. De toute évidence, la chose la plus responsable pour être agile est de retarder les décisions architecturales jusqu'au dernier moment responsable . Mais les chances sont que le dernier moment responsable peut (ou doit) se produire tôt.
Une chose qui aide est de définir clairement au début de vos principales exigences de conduite; des choses que vous savez clairement que vous devez avoir (mais que vous n'avez pas nécessairement à implémenter pour le moment.) Votre architecture évolutive (qui tente d'être minimaliste et flexible) devrait s'adapter à la prise en charge actuelle ou future de ces exigences.
Plus important encore, cependant, votre architecture en évolution NE DOIT PAS implémenter des artefacts qui obtiennent (ou peuvent obtenir) de la manière de prendre en charge ces exigences de conduite clés, même si ces artefacts sont destinés à résoudre les exigences actuelles. Nous pouvons désigner ces artefacts comme des artefacts interférents , des artefacts qui fournissent une valeur réelle (car ils implémentent une solution aux exigences existantes) mais dont la présence rend difficile / coûteux la mise en œuvre d'une future exigence de conduite clé.
Dans les cas où vous devez implémenter un artefact interférant, votre tâche serait de planifier sa suppression à un moment donné (afin que vous puissiez implémenter l'exigence de conduite clé qui est interférée.)
Évidemment, tout cela est ésotérique sans contexte réel et tangible (comme un vrai projet). Mais plus ou moins votre modèle de processus de développement et votre architecture évolutive doivent tenir compte de ces considérations.
Les exigences implicites sont au cœur des architectures, tout doit être rendu explicite, à la fois les principales exigences de conduite et celles qui sont accessoires. Vous n'avez pas besoin de mettre en œuvre une exigence dès le début. Il vous suffit de pouvoir en rendre compte.
PS. Par exigence, j'entends les exigences architecturales au niveau du système et pas nécessairement les exigences éphémères au niveau de l'application qui peuvent être satisfaites sans modifications substantielles de l'architecture. J'espère que cela aide.
la source