Agile France Open Space

Le mois de Février est généralement calme : un ou deux Meetup et bien sûr l’Agile Games France qui est pour moi l’évènement marquant de ce début d’année. Yannick Ameur a eu la bonne idée d’organiser un Open Space durant cette période calme.

image

Nous étions une petite vingtaine réunis pour cette soirée sous la houlette de l’association Agile France. Emmanuel Gaillot qui était des nôtres a d’ailleurs rappelé la mission de l’association.

image

Deux sessions au programme de cette soirée, entrecoupé d’un interlude. On y reviendra.

Comment convaincre sur la qualité du code

J’étais à l’initiative de cette première proposition. Enfin, deux autres sessions avaient lieu aussi en parallèle.

Mon problème :comment faire prendre conscience à une équipe “contente d’elle-même” de l’intérêt de chercher à s’améliorer, à perfectionner son code. Ma situation de départ : un code review où personne n’a rien à dire !

Des idées ont jailli. Je ne les essaieraient probablement pas toutes. Mais certaines méritent indiscutablement l’attention.

image

Mais l’échange me laisse à penser que lorsque l’on a pas encore éveillé l’intérêt, l’étincelle a bien du mal à prendre. Et il n’y a pas de solutions miracle. Seulement des choses à essayer qui marcheront peut-être, ou peut-être pas…

Interlude

Nicolas nous a gratifié d’un rapide jeux agile entre les deux sessions : le nombre secret. Il me rapelle celui sur les dates de naissances auquel nous avions joué durant le premier Agile Games France ().

image

Ca n’a pas trop mal marché.

image

Tester en agile

Pour ce second round, je me suis joins au groupe discutant des tests. Des discussions passionnées et des avis très partagés dans le groupe.

D’un côté les défenseurs de la séparation des pouvoirs : développeurs d’un côté, testeurs de l’autre. Les développeurs se limitent aux tests unitaires, les tests fonctionnels sont essentiellement exploratoires et fait par l’équipe de tests après la fin d’itération. Lorsque l’écart d’interprêtation entre développeurs et testeurs a fait son oeuvre (environ 10 secondes après que les testeurs aient reçu le système à tester), on saisie de gentilles anomalies et le tout peut retourner chez les développeurs pour une nouvelle itération. Itération au terme de laquelle on recommence le cycle. Ca booste à mort.

image

Autant dire que ce n’est pas ma vision des choses.

Les défenseurs de l’ATDD proposent de regrouper développeurs et testeurs au sein d’équipes pluridisciplinaires, de couvrir aussi bien que possible les items à développer de tests définis en amont (ce qui a aussi la vertu de les raffiner), et de tester “just in time” et non après la fin d’itération. Les tests exploratoires sont là seulement pour compléter les AT réalisés au début et pour, en quelque sorte, tester les tests !

Bref, deux visions inconciliables. Pour ma part, je pense que la première appartient à une époque révolue située quelque part dans le siècle précédent et n’a rien à voir avec l’agilité, ni dans son exécution, ni dans son état d’esprit. Mais cela me donne aussi une petite idée de billet, pour un de ces jours

Pendant ce temps, les sessions se déroulent dans d’autres salles

image

Fin de soirée

Les résultats de nos cogitations sont visible sur les murs. Ici le fruit d’une discussion sur le story mapping.

image

Les idées proposées pour cette soirée

image

Et bien sûr les inévitables discussions de fin de soirée. Peut-être le meilleur moment d’ailleurs !

image

Facile à bien utiliser, difficile à mal utiliser: l’article

J’avais évoqué la chose en publiant le support de ma présentation de l’Agile Tour Bruxelles : voici cette présentation cette fois sous forme d’article. Je m’étais déjà livré à cet exercice suite à mon lighning talk sur l’émergence. Je souhaite systématiser cela, car le support de présentation éclaire assez peu sur la teneur d’une présentation.

Hélas, l’exercice est aussi très consommateur de temps, cela explique le retard conséquent que je peux avoir à produire ces articles.

Carnet de route : Agile Grenoble 2013 en Images (2/2)

Je vous avais laissé à la fin de la pause déjeuner lors de mon précédent post. Nous allons débuter cette seconde moitié d’Agile Grenoble de nouveau dans le grand amphi.

Retour dans le grand amphi

J’ai oublié de vous parler de Jérôme Bourgeon. Il est … magicien ! Il introduira ce début d’après-midi et j’aurais aussi l’occasion de reparler de lui plus tard.

AG 13 : Jérôme le magicien (1)

Puisque l’on en est aux animateurs de cette journée, nous ne pouvons pas passer sous silence les organisateurs de cet Agile Grenoble, qui est quand même la plus grande manifestation agile en France ! Ils sont nombreux et nous avaient préparé une petite animation à base de fausses pizzas …

AG 13 : Team Agile Grenoble (3)

La keynote qui suit sera, elle, confiée à Pascal Van Cauwenberghe.

Pascal Van Cauwenberghe : Comment écrire du code legacy plus rapidement

Comme souvent, Pascal nous présente ce qui sera ma session préférée de cet Agile Grenoble. Ca fait aussi parfois un peu mal, car l’orateur ne fait pas trop de concessions.

AG 13 : Keynote de Pascal Van Cauwenberghe (1)

Outre le sens toujours aiguë de l’auto-dérision de l’agiliste Belge, on voit aussi de nouveau apparaitre nos Scribers prêts à l’action, chacun indépendamment d’un côté de la scène !

AG 13 : Keynote de Pascal Van Cauwenberghe, le scribing (1)

Il est surprenant de voir à quel point les résultats obtenus sont différents. Ils me laissent néanmoins toujours admiratifs

AG 13 : Keynote de Pascal Van Cauwenberghe, le scribing (2)

Revenons à la session de Pascal.

En bref, cette session est de “techniques” pour dégrader le code plus rapidement ! Le tout découpé en 4 catégories.

Pour le développeur : travaillez votre talent sur la dette technique !

Soyons clairs : ce que l’on nomme avec pudeur “dette technique” n’est ni plus ni moins que du code pourri ! Quelques techniques (sournoises) pour progresser (ou régresser, selon votre point de vue) en ce sens :

  • IDD ou “if driven développement” : J’ai un nouveau cas à prendre en compte ? Hop ! Un nouveau if, un nouveau cas spécifique … plutôt que de généraliser !
  • Des commentaires pour leurrer : Il suffit d’écrire une intention en commentaire et ne pas la respecter lors de l’écriture du code. Mais le plus souvent le commentaire devient simplement obsolète en n’étant pas mis à jour lors du “bug fixe”.
  • Du refactoring qui rend le code plus mauvais ! Là aussi à l’occasion de multiples bug fixes…
  • Désactiver les tests qui échouent (on les corrigera au prochain sprint). Evidemment, ce n’est jamais corrigé car il y a toujours mieux à faire…
  • Les tests sont une perte de temps : il y a du code à développer … mais comment sait-on qu’il marche ?
  • Le framework du jour. Ou comment faire sombrer un projet sous le poids des bibliothèques que l’on a envie d’essayer…
  • La collaboration c’est pour les nuls ! Et chacun bosse dans son coin en développant ses trucs de sioux qui nous font paraitre tellement plus intelligents…

Des techniques pour les testeurs

  • La loi de Pascal : La qualité du code est inversement proportionnelle à la taille de l’équipe de test ! Quand on est blindé par une équipe de test, pourquoi produire du code de qualité ? La solution ? Retirer l’équipe de test !
  • Ajouter la qualité en testant ! Bien entendu, les tests ne font jamais progresser la qualité.
  • Semer la confusion sur “la qualité”. Chacun peut interpréter “qualité” comme il l’entend. Mais quelle type de “qualité” attend-t-on en fait ?

Des techniques aussi pour le PO et les managers !

  • Je veux tout ! Le meilleur moyen d’avoir du travail bâclé en abdiquant ses responsabilités.
  • C’est pas ça ! … ou le syndrome du PO distant. Un rôle bien confortable, où l’on se désengage du produit en rejetant la faute sur ceux “qui ne comprennent pas”.
  • C’est trop cher ! Essayer de faire “une bonne affaire” en rentrant dans une logique de négociation … ça se paie toujours à un moment ou à un autre !

Des techniques pour les managers, coaches, etc.

  • Protéger l’équipe. Malgré ce que dit Scrum, ce n’est pas une si bonne idée. L’équipe doit être au diapason des problèmes, des mécontentements, etc.
  • Isoler l’équipe. C’est le syndrome extrême. Les développeurs travaillent sans appréhender les utilisateurs.
  • Optimiser le développement de bugs avec une équipe de maintenance. Ou comme le dit Pascal : une équipe pour écrire les bugs, l’autre pour les corriger !
  • Obtenir l’engagement. Très bien pour mettre l’équipe au pied du mur et obtenir l’un des 3 résultats suivants :
  • Hacking de fin de sprint.
  • Presque done. Un travers dont j’avais déjà parlé.
  • Mentir sur sa vélocité pour garder un matelas de secours.

Ne pas suivre ses propres règles. Rétrospectives sans résultat. Pas la peine de faire croire que l’on va s’améliorer si l’on ne fait rien. Réécriture complète. Le genre de projet qui n’aboutit jamais … et peut même faire couler une boite !

L’énoncé des symptômes fait plutôt mal, surtout si l’on considère que j’ai bien eu au moins l’un d’entre-eux sur la plupart de mes projets ! Mais cela fait réflechir aussi pour m’aider à être plus exigeant. Merci Pascal !

Et pendant ce temps, chez Zenika …

Je l’avais évoqué, Zenika était sponsor de l’évènement. Nous avions donc un stand pour nous représenter.

AG13 : vue d'ensemble lors de la pause déjeuner (14)

Avec la présence active d’Hervé Jacob, notre directeur d’agence sur Lyon.

AG13 : Hervé Jacob

Et Christophe Campan en complément de la fine équipe.

AG13 : Christophe Campan au travail

Etre sponsor d’un évènement, est une expérience nouvelle pour moi. C’est juste la seconde fois après Rennes. Nous pouvons nous améliorer à cet égard (car on peut de toute façon toujours s’améliorer). Nous aimerions essayer de courtes animations agiles autour de notre stand. A réflechir et essayer pour les prochaines fois.

Service IT Agile, agilité managériale, agilité entrepreneuriale ? Par Michel Cezon

J’aurais voulu m’essayer au Visual Thinking, mais hélas la session a débuté avant l’heure avec une audience au complet ! Je me suis donc rabattu sur cette session.

L’introduction est un peu longue à mon goût : qu’est-ce que l’agilité, etc. Et même le manifeste agile ! C’est presque 20 minutes qu’il faut patienter pour en arriver au coeur du sujet !

AG 13 : La manager agile (3)

Le coeur du sujet, en l’occurrence, c’est la définition du manager agile selon Jérôme Barrand. Selon ce modèle (dont il serait beaucoup dire que je l’adopte) il y a 4 principes de base de l’agilité :

  • L’effisens (c’est un mot ?) : donner du sens, responsabiliser et optimiser la performance organisationnelle. Même si j’adopte certaines parties, cela fait un peu fourre-tout et je perçois mal la corrélation entre ces 3 éléments…
  • Coopération. Un classique. J’achète.
  • Anticipation : prévoir des plans d’action. Pourquoi pas, mais en quoi est-ce lié à l’agilité ?
  • Innovation : Mais pourquoi “avec parcimonie” et je ne vois pas le rapport avec la “performance durable”.

N’étant pas spécialement ébloui par les 4 principes agiles, voyons les 6 comportements, qui sont liés à 3 des 4 principes agiles :

  • Coopération
  • Empathie systémique : c’est favoriser la performance collective. On est d’accord !
  • Synchronisation : Agir pour ne pas bloquer la situation. Un bon sens que j’approuve.

Anticipation

  • Intelligence de situation : On en a plein la bouche, mais cela signifie simplement agir en fonction des informations disponibles. Je ne peut qu’abonder mais aussi remarquer que c’est pratiquement l’inverse de l’anticipation !
  • Proaction : Mettre en place une analyse des risque, des plans d’actions, bref tous les machins pas agiles. Et oui, là c’est bien de l’anticipation.

Innovation

  • Rebellion constructive : J’aime bien cette expression. Et en gros, c’est “sortir du cadre”.
  • Pédagogie relationnelle : agir comme un leader qui donne du sens correspond bien à ma vision des choses. J’aurais bien classé cela dans “effisens”.

Dans ce modèle de management agile, les outils du manager se classent en 2 catégories :

  • Les outils liés à la structure de personnalité. Ici on utilise surtout la Process Com.
  • La perception de l’environnement en utilisant un radar type “Agile Profile” avec une détermination en mode normal et en mode “sous pression”.

Le dernière partie avait trait à l’entreprenariat. Je vous laisse regarder les slides, mais je ne m’étendrais pas dessus, là moins qu’ailleurs, le propos me convainc.

Bref, assez déçu par cette session qui n’aura eu d’intérêt pour moi que l’évocation du modèle de Jérôme Barrand dont Véronique Messager avait parlé dans son ouvrage sur le coaching Agile. Je ne pense pas encore prendre ma carte du fan-club…

Petit break de l’après-midi

A Agile Grenoble, c’est café et boissons toute la journée. Mais aussi tours de magie à l’occasion !

AG 13 : Tour de magie (7)

Un impromptu drôle et réussi ! Finalement, je vais d’ailleurs rester avec Jérôme Bourgeon sur le créneau suivant.

Petits conseils aux orateurs, par Jérôme Bourgeon

Notre magicien de service est un artiste de scène chevronné et il nous fait partager quelques conseils à propos de nos prestations de présentateurs.

AG 13 : L'art de présenter sur scène

Première règle : Y’a pas de règle ! Bon, ça commence bien… 

L’espace de scène est en gros divisé en 6 :

  • Horizontalement : gauche, milieu, droite ; on entre à gauche, on s’arrête au milieu. A la fin, on sort par la droite. Sauf Steve Jobs qui fait l’inverse.
  • En profondeur : l’avant-scène permet de prendre une position dominante pour faire passer des idées, tandis que l’arrière scène permet au public de souffler, pour faire réfléchir.

Il faut se déplacer sur scène pour éviter la monotonie, mais ne JAMAIS tourner le dos au public ! La monotonie, c’est aussi faire attention à ne pas parler d’une voie monocorde ou ne pas agacer l’assistance avec des tics corporels (aka “la savonnette”, le “mal de mer”, etc.). D’ailleurs, si on doit présenter le matin, il faut penser à chauffer sa voie (je ne savais pas cela…).

Pour une présentation longue, on ne peut (ni ne doit) garder le même niveau d’énergie. Surtout pour un moment crucial, il faut faire monter la sauce, donc, comme dit Jérôme, “gérer sa chiantitude” !

Ah ! Il y a un point sur lequel j’ai bon, de toute évidence : penser à se créer une identité visuelle. Si vous voyez ce que je veux dire…

Enfin, avant de sortir : penser à remercier !

End of AG13

Il reste encore une session, mais déjà c’est l’heure des premiers départs.

AG 13 : Vestiaire départ (2)

Pas de session non plus pour moi sur ce créneau, surtout parce que je commence à fatiguer. 

Sur le stand Zenika, on plie les gaules, car on va avoir un peu de route pour rentrer sur Lyon (toujours pas de trains pour Paris en départ de Grenoble).

AG 13 : Rangement du stand Zenika

Mais on n’est quand même pas pressés au point de refuser le cocktail de fin offert par les organisateurs, ce serait mal poli. De plus, on va quand même pas rouler à jeun, c’est très déconseillé…

AG 13 : Cocktail (3)

Agile Grenoble, c’est terminé pour cette année. Je suis satisfait de l’accueil fait à ma session. Moins satisfait de moi-même sur mon parcours de session : il y avait beaucoup de sujets de qualité, mais je n’ai pas su bien sélectionner ceux qui me correspondaient. C’est un peu dommage, mais la faute m’en incombe.

Il s’agira de faire mieux l’an prochain : l’ambiance et les échanges étaient géniaux, j’espère revenir. Un grand merci aux organisateurs !

Facile à bien utiliser, difficile à mal utiliser, la présentation

En attendant que j’ai le courage de la terminer sous forme d’article, voici les slides de ma présentation à l’Agile Tour Bruxelles.
Cette présentation est directement inspirée d’un conseil de conception de Scott Meyers : “Make your interfaces easy to use correctly and hard to use incorrectly”. Sur ce, je vous laisse vous essayer aux quizz contenus dans cette présentation !

Retours sur Agile France 2013, 1ère partie (en images)

J’avais fait l’impasse sur l’édition 2012, je suis revenu pour l’édition 2013. Cette année encore Agile France promettait un programme attrayant : promesse tenue ! Le “take away” de ces 2 jours de conférences ne rentre guère dans mon sac à dos, c’est un semi-remorque qu’il va me falloir. Une fois de plus, je vais vous distiller cela en plusieurs parties.

Place à l’action, ou plus précisément à la première session de la journée.

agileFrance2013-01Keynote02

Peter Stevens : From Value to Values

Why management has to change and how IT is inspiring the solution

Nous étions quelques un à avoir eu l’occasion de croiser Peter Stevens lors d’une Scrum Beer il y a environ 2 ans. Cette fois, il nous faisait la keynote de la conférence et venait nous parler du Stoos Network. J’avais une première fois évoqué ce mouvement à l’annonce du Stoos Connect, puis plus récemment pour parler du Stoos Satellite Paris.

C’est bien du Stoos Network dont Peter Stevens est venu nous parler. Selon lui, le monde se divise en 2 types de sociétés:

  • Celles qui enchantent leurs clients.
  • Les autres.

Vu comme ça, c’est un peu simpliste. Creusons un peu. Aujourd’hui, les compagnies ayant un fort “focus client” sont celles qui gagnent de l’argent. Car il n’a jamais été aussi facile de changer de fournisseur ou de service. Votre service de téléphonie ne vous plait plus, résiliez-le dès aujourd’hui pour prendre un nouveau plan ! Il y a 30 ans, Peter Stevens nous confiait qu’en Suisse, un abonnement téléphonique nécessitait un dépot de garantie équivalent à un demi-mois de salaire ! Nous avons donc changé de logique :

  • Autrefois : “you take what we make”.
  • Aujourd’hui : “I choose what I want”.

Pour autant, ce changement de polarité ne s’est pas accompagné d’un changement de paradigme dans la logique de l’entreprise.

agileFrance2013-01Keynote03

L’entreprise moderne continue de choisir son cap en fonction des dividendes qu’elle peut reverser à ses actionnaires. C’est une logique qui n’est en fait pas celle permettant d’obtenir les meilleurs résultats car elle part du mauvais point.

Pour enchanter le client, il faut augmenter la vitesse de réactivité, faire grandir la capacité d’innovation. L’économie d’aujourd’hui est une économie de la créativité. Toutes choses que le mode de fonctionnement “commande / contrôle” hérité du Taylorisme et du Fordisme ne permettent pas.

Il doit y avoir une meilleure façon de faire, c’est le constat que différents courants de pensée du réseau Stoos (radical management, tribal leadership, beyond budgeting, management 3.0, etc…). Et elle s’inspire de l’agilité.

Pour Peter Stevens, l’élément le plus important du manisfeste agile se situe en haut de celui-ci :

We are uncovering better ways of developing software by doing it and helping others do it.

Stoos Network est un “mouvement de mouvements” qui promeut l’entreprise non comme une structure pyramidale, mais comme un réseau “apprenant” de personnes, dont les managers seraient les servants.

Aujourd’hui, l’agilité dans les projets informatiques est confrontée à une frustration de par les conflits qui l’opposent à un management classique. Stoos est la continuité de ce mouvement vers l’organisation de l’entreprise.

Je n’ai pas trouvé la présentation de Peter Stevens, mais un support qui s’en approche de très près.

J’ai été un peu déçu par cette keynote. Bien que quelques exemples (visibles sur les supports) aient pu nous donner à réfléchir, elle est pas mal resté dans les généralités.

Géry Derbier : Le leader en tant qu’hôte

J’avais suivi de loin l’intérêt de Géry pour le host leadership, mais sans m’y intéresser plus avant, car on ne peut pas être partout, n’est-ce pas ? Mais Géry étant mon futur collègue, j’essaie de le pister un peu…

Déjà, ça commence par le coincer en face de mon objectif !

agileFrance2013-02Gery01

Cette session était en fait un atelier participatif. On parle toujours du “servant leadership” par opposition au “leader command & control”. Certes, mais comment cela peut-il se matérialiser ? Il y a-t-il des parallèles avec de choses que nous connaissons qui pourraient nous aider ?

Il se trouve que oui !

Que se passe-t-il quand nous participons à une fête que nous jugeons réussie, que fait l’hôte pour rendre cela possible ? C’est à ce travail de reflexion que nous a invité Gery aujourd’hui. Par petits groupes, nous avons cherché à décortiquer les ingrédients d’une fête réussie

agileFrance2013-02Gery03

Une reflexion pas très facile à mener en un temps limité. Je vous livre en vrac les points qui sont remontés :

  • Favoriser l’émergence, laisser de la liberté pour permettre la créativité.
  • Avoir une (des) réactions en chaine. A l’image de ce qui se passe quand on commence à danser.
  • Créer le lien entre les personnes. C’est vrai surtout quand nombre d’entre elles ne se connaissent pas. C’est moins le cas dans des réunions de famille.
  • Le pouvoir de l’invitation. On ne vient pas sous la contrainte, c’est un acte volontaire.
  • Donner la permission, ou comme le dira Olivier Pezziardi “pas faire chier les gens”.
  • Ne pas chercher à obtenir un résultat. On créé les conditions, le résultat vient en second.

Mais est-il possible de considérer un projet de la même manière ? Sommes-nous invités à nous joindre à un projet ? J’aurais tendance à répondre “oui”. En fait, cela se passe beaucoup dans la tête: nous sommes invités si nous avons envie de nous sentir l’être. Mais c’est juste un avis personnel. Je vous invite à lire le white paper accessible sur le site host leadership.

Cyrille Martraire : Code legacy : Faire évoluer ou réécrire ?

Cyrille est un adepte fervent du DDD et un membre actif de la communaute du software craftmnship. Aujourd’hui il vient évoquer avec nous les stratégies de travail sur le code hérité (legacy code). Cette présentation s’appuie sur un projet mené chez Sungard autour d’un système d’asset management. Nous parlons ici d’une application vieille de 20 ans lourde de 20 millions de lignes de code avec des procédures stockées, des EJB2, etc…

agileFrance2013-03Martraire02

Mais qu’appelle-t-on “code legacy” ? Pour Michael Feathers, du code hérité n’a pas de tests. Si l’on se calque sur cette définition, du code hérité n’a pas besoin d’être vieux pour être considéré ainsi !

Alors, faire évoluer ou récrire ?

Il faut regarder les choses avec lucidité: espérer que tout soit “beau” un jour est illusoire. Ca n’arrive pas !

Le postulat de départ est donc : on garde tout ! Mais pour faire évoluer en gardant l’existant, il faut se munir de tests, d’une manière ou d’une autre. Comment faire ?

Je vous présente le “Software Testing Ice-Cream Antipattern” ! On commence par le haut: si on a rien, on fait des tests manuels. Puis on essaie d’automatiser les tests par l’IHM. Dès que le découpage en couches devient à peu près présentable, on passe à des tests d’intégration pour tester les API. Enfin quand le niveau de découplage interne le permet (le plus souvent jamais) on met en place des tests unitaires !

softwaretestingicecreamconeantipattern

Bien sûr, c’est très coûteux, et l’orateur évalue le différentiel de vélocité de 1 à 4 par rapport à du code neuf écrit en TDD.

Et s’il faut réécrire, doit-on réécrire ?

Pas toujours. C’est la fameuse question du “make vs buy”. Si le processus métier habillé avec le logiciel est un différenciateur de l’entreprise, alors il faut faire ! Comment se différencier en pratiquant la même chose que les autres ? Si ce n’est pas différenciateur, alors il faut essayer d’acheter. Oui, mais le logiciel sur étagère ne corresponds pas exactement à ce que je fais … N’essayez pas d’adapter, même si l’éditeur dit que l’on peut, même si de nombreuses société qui sont prêtes à vous vendre du conseil disent que l’on peut (et qu’elles peuvent vous “aider”). Ou alors, faites-le à minima, faites votre possible pour plutôt adapter vos processus au logiciel. De toute façon, ce ne sont pas eux qui vous rendent différenciant, ce sont des centres de coût.

Visualiser

Il est bien rare que l’on doivent intervenir partout en même temps dans du code hérité. En fait cela concerne le plus souvent un volet précis de l’application : une phase de traitement, de nouveaux instruments financiers, etc…

La première étape que nous propose Cyrille est de visualiser le flux métier. A l’image de ce que l’on montre lorsque l’on construit une story map (là c’est moi). Il s’agit de donner de la structure. Sur celle-ci s’appuient des fonctions secondaires et des concepts. C’est le travail péparatoire qui va nous permettre de passer à la suite. Ce que Martin Fowler appelle l’Asset Capture.

A partir de là, il va falloir identifier le ou les assets concernés par l’évolution.

Comment intervenir

Quand on part d’un legacy à priori inconnu, il y a une démarche logique pour aborder la bête :

  1. Lire la documentation
  2. Interroger les anciens qui la connaisse peu ou prou.
  3. Utiliser l’application.
  4. Lire le code.
  5. S’essayer dessus en fixant des bugs.

Le principe de base des évolutions, est de ne pas essayer de faire plusieurs choses en même temps. Il faut y aller prudemment, s’insérer dans l’existant même si on n’aime pas ce que l’on voit. Des conseils souvent prodigué dans les Reengineering Patterns.

Comment s’organiser

Comment pensez-vous procéder : en opérant une réécriture iso-fonctionnelle ? Sachez-le, personne ne paie pour cela.

Une réécriture s’accompagne toujours d’une certaine dose d’évolutions. Oubliez l’idée d’une équipe refonte constituée de pur techos, il va falloir une vrai équipe projet regroupant des compétences diversifiées (analystes, testeurs, etc…).

Maintenant il faut se mettre au boulot !

Strangler application

Le pattern préféré de Cyrille est le Strangler Application Pattern, lui aussi décrit par Martin Fowler. Comme son nom l’indique, ce pattern consiste à “étrangler” progressivement l’application existante en envoyant les traitements qui ont été réécrits vers la nouvelle application. Le point faible étant ce dispatching qui doit alors exister dans l’ancienne application, nécessitant un refactoring pas nécessairement négligeable… Les deux points clés de l’approche sont:

  • Le décomissionement des concepts : on travaille concept par concept, et on switch complètement l’un d’entre-eux quand il est prêt dans la nouvelle application. C’est donc mieux quand les concepts sont assez atomiques.
  • Le “feature toggle” qui doit permettre le basculement vers la nouvelle application. Attention, parfois cela se passe mal, il est alors souhaitable dans ce cas de pouvoir revenir en arrière.

Bubble context

Le développement de nouveaux concepts s’opère dans une “bulle” isolée des adhérences avec l’existant, du moins autant que faire se peut. C’est l’Autonomous Bubble Context décrit par Eric Evans.

Isolé du monde legacy, le développement s’opère comme un nouveau développement, en TDD & BDD. Entre l’ancien et le nouveau monde, une Anti-Corruption Layer isolée vers le haut par une API et par le base par une SPI, opère comme un sas entre les deux environnements.

Quelques points clés à ne pas oublier :

  • Se faciliter la vie en ayant un certin niveau de mapping avant l’existant. On pense surtout ici au mapping avec la base de données.
  • Décréter le “freeze” de l’existant : toute évolution doit s’opérer dans une Bubble Context. On touche seulement à l’existant pour opérer des renvois vers la bubble context.
  • Ne pas oublier qu’une bulle n’a qu’un temps. Avec le passage du temps, elle-même deviendra du legacy à son tour un jour.

Pour résumer la stratégie de réécriture, l’orateur nous résume la chose :

Réécriture = Frontières clairement définies + stratégie d’étranglement + intégration minimale.

Je n’ai pas exactement le support que Cyrille a utilisé, mais un très proche. Le voici 

Lectures recommandées

Essentiellement 3 ouvrages à connaitre. Ils sont tous sur mes étagères mais n’ont pas encore fait l’objet d’une note de lecture publiée :

Vous pouvez également lire l’excellent retour de Vincent Uribe sur cette session, sur le blog Soat.

Break !

Le début de matinée a déjà été bien rempli. Il est temps de faire une pause. C’est une occasion pour reprendre contact avec les uns et les autres. On est là aussi pour ça.

agileFrance2013-04BreakJeudiMatin02

C’est aussi la pause pour la publication de mon retour d’Agile France. Nous sommes agiles, on va faire tout ça de manière itérative, que diable ! Rendez-vous bientôt pour la suite de mes périgrinations agilistes.

97 Things Every Programmer Should Know

J’avais fait la note de lecture de cet ouvrage il y a un bon moment. Grace à la licence “creative commons”, vous pouvez librement bénéficier de son contenu.

Un Wiki a aussi été créé, justement dans le but de permettre les contributions collectives autour de cet ouvrage.

Kevlin Henney, qui a été le rédacteur en chef de ce volume s’est appuyé sur son contenu pour une Keynote. En voici le support

Retours sur l’agile tour Bruxelles 2012

Je m’étais fixé dans mes objectifs sur ce second semestre, de me joindre à la communauté agile Belge à l’occasion de l’agile tour Bruxelles. je n’ai pas hésité longtemps à répondre à l’appel à orateurs de Bruno Sbille. Plusieurs raisons à cela:

  • L’opportunité de faire une présentation en Anglais. Il faut bien garder la forme !
  • L’occasion de rendre la politesse à Bruno qui nous avait fait le plaisir de venir faire une présentation dur la Programmation Neuro Linguistique lors d’une soirée du Scrum User Group.

J’espérais donc bien être retenu. Je l’ai été : merci au comité d’organisation !

L’aller-retour dans la journée, ça fait une grosse journée, mais ça valait le coup.

Pascal Van Cauwenberghe : 11 steps to perfect code

Pascal s’est présenté comme un “recovery bug writter”. Il nous a présenté son processus destiné à éliminer les bugs. Il compte 11 étapes, pas moins.

La qualité dépend-t-elle des testeurs ? La réponse est non. En fait, elle est souvent inversement proportionnel au nombre de testeurs. Cela peut paraitre provocateur, voir choquant. mais réflechissez à l’impact psychologique sur les développeurs d’‘une très importante équipe de testeurs.

1 – Mettre en évidence le bug. Jusqu’ici tout va bien.

2 – Votre réaction : et meeeerde ! Non, justement. Il faut remercier le rapporteur. Pascal nous fera faire l’exercice plusieurs fois durant cette heure: remercier à haute voix: Thank you !

3 – Reproduire le problème. Identifier les conditions sous lesquelles ce bug se manifeste est une simple question de bon sens.

4 – Ajouter (au moins) un test qui échouera suivant ces conditions.

5 – Corriger le problème. Vous suivez toujours ?

Bon ça y est, on a fini. Comment ça “non” ?

6 – Rejouer la totalité des tests unitaires. La correction d’un bug peut introduire une régression. Nous le savons tous. Mais prenons-nous tous la peine de rejouer la totalité des tests ? Bien sûr le but n’est simplement de les rejouer, mais de les rejouer jusqu’à ce qu’ils passent tous !

7 – Faire une analyse causale : pourquoi ce bug n’a pas été intercepté précédemment ? Il faut toujours faire attention aux objectifs que l’on fixe : on risque de les atteindre. Si le but est la couverture du code, est-on certain qu’elle est synonyme de tests associés ? Le véritable objectif n’est pas la couverture du code, mais la qualité de celui-ci.

8 – Améliorer les tests.

Là, ça devrait être terminé. Non, toujours pas ?

9 – Améliorer la façon dont les tests sont écrits. Mais ceci est autre chose, n’est-ce pas plutôt un point qui devrait être remonté en rétrospective ? La rétrospective ce n’est pas pour la fin de sprint. La démo ce devrait être tout le temps.

10 – “Un bug ne voyage jamais seul” : à la recherche des bugs similaires !

11 – Faites que ce bug soit impossible à reproduire !

Traquer les bugs ainsi peut sembler coûteux. En fait, ça l’est au début. Pascal s’appuie sur la théorie des contraintes pour expliquer que cette approche permet finalement de livrer plus vite ! En l’occurrence sur un projet, au bout de 5 mois au lieu de 8 !

Jan De Baere : Kaban at different levels

Jan a choisi de nous présenter Kanban tel qu’il est utilisé réellement dans les projets auxquels il a participé, avec les leçons qui ont accompagné sa mise en oeuvre.

La règle de conduite que nous propose Jan repose sur 3 axes:

  • Visualiser le workflow.
  • Limiter le “work in progress”, en s’appuyant sur l’expérimentation.
  • Mesurer et gérer le workflow.

L’exemple d’une circulation sur une autoroute illustre assez bien ces 3 points, même si les paramètres conduisant à la formation des bouchons sortent des fondements théoriques de Kanban (eh oui, il n’y a pas que la théorie des contraintes…).

Cette session avait pour but de nous exposer cette mise en oeuvre dans différents contextes:

  • Un projet classique.
  • Un projet distribué
  • Le Kanban au niveau individuel
  • la gestion d’un portefeuille de projets.

Plutôt que d’asséner les différents éléments de la présentation je préfère mettre en avant les éléments principaux:

  • Les “expedites”: lorsqu’ils sont trop nombreux, il ya un problème à régler !
  • Mettre en évidence les éléments qui sont attendus. Là encore, ils peuvent stigmatiser des problèmes à régler au niveau organisationnel.
  • Les “buffers”: ils peuvent apparaitre utiles dans le workflow, mais sont à utiliser avec parcimonie. Ce sont des sources de gâchis, au sens Lean.
  • Il y a un lien direct entre le “work in progress” et le “lead time”. Ils croissent de concert.

L’un des grands moments fut certainement la présentation du “kanban portable” (et pliable) réalisé par Jan !

atbru2012-JanDeBaere

Pour ma part, je garderais dans mes notes l’usage du “personnal kanban” avec ses limites de WIP adaptatives:

  • Les tâches “high energy” : la limite de WIP est de … 1 ! Ce sont les tâches qui demandent un haut niveau de concentration.
  • Les tâches “medium”, c’est le travail ordinaire. La limite de WIP est de 2.
  • Les autres tâches, celles qui ne nous donnent pas vraiment de faire un travail correspondant à notre niveau de qualification. Il n’y a pas de limites de WIP pour celles-ci.

Ce peut être du bon sens, mais c’est sans aucun doute un point à garder !

Alan Holtz : Lessons learned from the Scrum Master

J’espère qu’Alan me pardeonnera de ne pas avoir pris de note lors de sa session. J’étais en fait en train de faire l’ultime préparation de la mienne ! Si une photo vaux mieux que de grands discours, en voici donc une !

atbru2012-SMLessonsLearned

Yves Hanoulles : How 146 people made 13 projects

Yves a acquis une grande notoriété dans la communauté agile, par son implication dans de nombreux projets. J’avoue que j’avais du mal à comprendre comment il pouvait mener à bien cette activité débordante. Cette session répond à ces questions.

atbru2012-YvesHanoulles

Comment nait un projet ?

Yves débute simplement un projet par un problème qu’il rencontre et sur lequel il ne trouve pas sur le net de ressources pouvant l’aider.

Comment construire une communauté de contributeur ?

Simplement en demandant autour de lui, mais en s’adressant de manière directe aux intéressés, s’ils peuvent et souhaitent l’aider sur son projet. C’est une question franche et directe qui n’appelle pas obligatoirement de réponse positive : on peut ne pas avoir le temps, ne pas être intéressé par ce projet, etc… Yves accueille de manière factuelle et simple cette réponse.

A partir de là, Yves accorde une complète confiance aux collaborateurs dès le départ, avec complet accès en lecture et écriture aux ressources du projet : la confiance n’est devrait pas être “gagnée”, mais donnée !

Surtout Yves nous rappelle qu’il faut toujours penser à remercier une personne qui se propose de contribuer.

Collaboration et outillage

Tous ces projets se déroulent sans aucune rencontre face à face : tout est mené et coordonné à distance, l’outillage permettant cela est donc important. Les principaux que j’ai noté :

  • Skype
  • email: Oui, bien qu’Yves soit un fervent défenseur de la limitation de l’usage de l’email en entreprise, il reste un média essentiel pour ces projets collaboratifs.
  • Google doc.

Si les projets agiles défendent la co-location, Yves nous rappelle que selon Jim McCarthy, celle-ci n’est pas une nécessité : ce qui est nécessaire, c’est une communication avec une large bande passante.

Who is agile ?

Yves a terminé sa session sur quelques reflexions sur la rédaction d’un livre en mode agile, tel que “who is agile ?” a été rédigé.

  • La rédaction d’un livre en mode agile est possible, intégrant des itérations et du feedback. C’est non seulement possible et même souhaitable. Une plateforme comme Leanpub est un grand facilitateur en ce sens.
  • La lecture d’un livre réalisé en mode agile est pr contre moins sympathique.

Jeff Cumps : How to solve your thoughthests impediments

Jeff nous invitait à une session-atelier sur le A3 problem solving. Un réel challenge d’ailleurs car il ne disposait que d’une heure pour nous exposer les principes et nous permettre de les mettre en oeuvre sur une problématique de notre choix.

Je ne vais pas détailler l’atelier ici. Le timing était un peu serré, mais nous avons pu avoir la satisfaction de bien avancer sur nos exemples. Disons que 1h30 aurait probablement été un créneau plus confortable. Mais peut-être pas plus, non plus !

En fait le point positif du temps limité était d’aller droit à l’essentiel sur l’exercice pour en comprendre les points principaux. Ce que Jeff a fait avec clarté. Une très bonne session pour conclure cette journée !

Ambiance, boissons et rencontres

Chaque conférence agile est l’occasion de croiser ou recroiser des passionnés. L’évènement a été ciblé petit par les organisateurs : 70 personnes, donc volontairement peu de buzz autour de ce premier Agile Tour Bruxelles. Un grand “up” pour les organisateurs à propos de la convivialité et de l’ambiance sur cet Agile Tour Belge. Ca donne vraiment l’envie d’y revenir.

Couleur locale oblige, nous avons conclu la journée autour d’une bière.

Un geste sympathique pour les orateurs : un assortiment très couleur locale une fois encore. Que je vous laisse découvrir.

atbru2012-orateursgifts

Note de lecture : Practices of an Agile Developer, par Venkat Subramaniam & Andrew Hunt

Note : 3 ; Le petit frère simplet du « pragmatic programmers »

Tout a-t-il été dit sur le développement agile ? Si l’on est en droit d’en douter, la lecture de ce livre nous laisse penser le contraire. Car, franchement, à la lecture de cet opuscule on ne voit rien de neuf. Donc, je suis déçu, et étonné d’être déçu en ayant constaté qu’Andrew Hunt avait cosigné ce livre ! Au-delà d’une introduction et d’une conclusion destinés à parler de la migration vers l’agilité (mais sans propos utiles, je dois dire), le texte se compose de 7 chapitres :

  • Begining agility : Donne des pistes sur le « par où commencer », et comment se comporter au sein de projets agiles.
  • Feeding agility : Aborde les points sensibles, les « accélérateurs agiles », destinés à faire passer les projets à la vitesse supérieure.
  • Delivering what users want : Aborde le point crucial de la réalisation du projet par rapport à la demande utilisateur ; comment prioriser et comment obtenir du feedback.
  • Agile feedback : Aborde spécifiquement l’aspect retour d’expérience, comment mesurer les progrès et estimer la qualité et la pertinence de ce qui est réalisé.
  • Agile coding : Traite des pratiques liées au codage. Ces pratiques se rapprochent de celles de l’extrême programming.
  • Agile debugging : Ce chapitre se focalise sur la recherche des anomalies, mais aussi sur la façon d’en garder trace et de les capitaliser.
  • Agile collaboration : Donne des indications sur les façons d’interagir au sein d’une équipe de développement, mais aussi hors de cette équipe de développement.

L’ouvrage, bien Que découpé en chapitres est essentiellement constitué d’un ensemble d’items, traités de façon similaires : tout d’abord les auteurs énoncent l’anti-pattern (illustré d’une icône représentant un diable). Il s’en suit une discussion sur le sujet pour expliquer le bien fondé d’opérer différemment. Les auteurs énoncent ensuite une contre-proposition (illustré d’une icône d’ange). L’item se termine par deux paragraphes : le « what it feels like » expose les conséquences du changement opéré, tandis que le « keeping your balance » donne les pours et contres de l’item, en mettant l’accent sur les facteurs défavorisant qui peuvent être rencontrés.

En conclusion, ce court opuscule de 170 pages n’est guère une lecture indispensable. Bien au contraire, on lui préfèrera son grand frère, le « Pragmatic Programmer ».

practices-agile-dev-pragprog

Référence complète : Practices of an Agile Developer – Venkat Subramaniam & Andrew Hunt – Pragmatic Bookshelf 2006 – ISBN : 0-9745140-8-X

Practices of an Agile Developer: Working in the Real World

http://www.goodreads.com/book/add_to_books_widget_frame/097451408X?atmb_widget%5Bbutton%5D=atmb_widget_1.png&atmb_widget%5Bhide_friends%5D=on