NewCrafts 2018
window.location = "https://ronan.amicel.net/articles/newcrafts-2018/";
Jeudi 17 et vendredi 18 mai 2018 avait lieu à Paris la conférence NewCrafts, et j'y ai participé pour la 2e année consécutive.
C'est une conférence en anglais, sur le thÚme du développement logiciel. L'organisation est impeccable, les intervenant(e)s varié(e)s, pointu(e)s, et inspirant(e)s.
Il y a plusieurs tracks en parallĂšle, plus des ateliers, et aussi les discussions dans les couloirs, et c'est donc parfois difficile de choisir vers oĂč suivre ses pieds.
La premiÚre journée, j'ai assisté à pas mal de présentations, alors que la deuxiÚme j'avais plutÎt envie de pratiquer avec du code, et j'ai donc privilégié des ateliers. Et pendant ces deux jours, les différents moments de pause ont été l'occasion de nombreuses discussions enrichissantes avec les autres participants !
Voici quelques notes sur des choses qui m'ont intéressé, surpris, amusé, ou encore questionné pendant ces deux jours.
Fighting the Invisible Enemy (Paul Rayner)
Ce qui va Ă l'encontre du flow dans nos processus de dĂ©veloppement de produits, ce sont les queues invisibles qui se forment : par exemple, une fonctionnalitĂ© est dĂ©veloppĂ©e mais en attente d'ĂȘtre testĂ©e ou dĂ©ployĂ©e.
Les queues sont des indicateurs avancés (leading indicators), contrairement au débit (throughput) ou au temps de cycle (cycle time). Il est donc important de prendre conscience de ces queues, de les rendre visibles, et surtout d'agir rapidement et de maniÚre décisive quand elles commencent à grossir, avant que les conséquences ne se manifestent de maniÚre plus problématique au niveau de l'ensemble du systÚme.
Paul Rayner a utilisé des modÚles de traffic routier (http://traffic-simulation.de) pour illustrer de maniÚre trÚs parlante les comportements non linéaires qui apparaissent à la moindre perturbation dÚs lors que le systÚme fonctionne à un niveau de capacité élevé.
Il nous a aussi montré un outil sur lequel il travaille, et qui s'appelle tout simplement Flow. Celui-ci extrait les données temporelles depuis Pivotal Tracker / Jira / etc. pour visualiser le temps passé par chaque ticket dans chaque étape, et mieux identifier les temps d'attente.
Cette approche visuelle m'a fait penser à un autre outil du Lean, le diagramme de flux cumulé (cumulative flow diagram).
Fighting the Invisible Enemy - Paul Rayner (NewCrafts 2018) from Paul Rayner
Feature Branching is Evil (Thierry de Pauw)
Thierry nous raconte son expérience en tant que consultant avec deux projets assez différents.
La premiÚre équipe était peu expérimentée, et n'utilisait auparavant aucun systÚme de gestion de versions. Pour rester simple, il les a aidé à adopter Subversion : seulement deux gestes à apprendre (checkout, et commit), et pas de branches. Il avait pensé ça comme une premiÚre étape, mais en fait ça marchait pas mal.
La deuxiĂšme Ă©quipe Ă©tait constituĂ©e de dĂ©veloppeurs expĂ©rimentĂ©s, qui avait choisi d'utiliser git et le mode de fonctionnement âgit flowâ. Lorsqu'il leur a suggĂ©rĂ© d'arrĂȘter les branches Ă longue durĂ©e de vie, il s'est heurtĂ© Ă une forte incomprĂ©hension :
mais les branches nous permettent de travailler chacun de notre cĂŽtĂ© sans ĂȘtre perturbĂ© par les changements des autres !
mais les branches nous permettent de jeter un refactoring s'il ne va nulle part !
mais les branches nous permettent de contrÎler la qualité de ce qu'on livre (via une revue de code pre-merge)
mais les branches nous permettent de contrÎler quelles fonctionnalités on livre (on ne merge que quand on veut livrer)
Dans sa présentation, Thierry a abordé :
les inconvénients des branches à longue durée de vie :
elles retardent le feedback,
elles retardent l'intégration,
elles cachent le travail du reste de l'équipe et réduisent la communication,
elles découragent le refactoring,
elles créent du stock (au sens du Lean),
elles augmentent le risque,
elles crĂ©ent du travail supplĂ©mentaire (brancher, rebaser, mergerâŠ),
les avantages du trunk-based development :
commits plus frĂ©quents sur master â builds plus frĂ©quents â dĂ©ploiements plus frĂ©quents â time-to-market rĂ©duit â expĂ©rimentation plus facile
builds plus frĂ©quents â les problĂšmes sont dĂ©tectĂ©s plus tĂŽt â la qualitĂ© est amĂ©liorĂ©e
comment faire du trunk-based development :
l'application est toujours prĂȘte Ă ĂȘtre livrĂ©e sur la branche principale,
découper les gros changements en petits morceaux incrémentaux,
garder cachées les nouvelles fonctionnalités non terminées,
utiliser la technique âbranch by abstractionâ pour les gros refactorings,
utiliser les feature toggles (mais en dernier recours)
comment remplacer la revue de code ?
le pair programming est une solution possible (revue de code continue pre-commit)
on peut aussi faire une revue de code post-commit
pre-merge : pull requests fréquentes sur des branches à durée de vie courte
post-merge : revue de code de tous les commits poussés sur master
au delà des raisons invoquées explicitement, quels sont les peurs qui font qu'une équipe peut résister à l'adoption de ce modÚle ?
les dĂ©veloppeurs ne savent pas dĂ©velopper par petits incrĂ©ments â c'est une compĂ©tence encore trop rare, qui doit s'acquĂ©rir
la base de code est trop couplĂ©e, et manque de tests â c'est difficile de changer quoi que ce soit sans craindre de casser quelque chose
les builds sont trop lents â đą
The Origins of Opera and the Future of Programming (Jessica Kerr)
Je regrette de ne pas avoir pu voir cette présentation. En attendant la vidéo, un article de blog est disponible qui en reprend la trame : https://the-composition.com/the-origins-of-opera-and-the-future-of-programming-bcdaf8fbe960
Endangered Species: Senior Craftsmen (Cyrille Dupuydauby)
Le goulot d'Ă©tranglement dans nos mĂ©tiers, c'est l'apprentissage. Il n'y a pas beaucoup de dĂ©veloppeurs qui ont 10 ans d'expĂ©rience, et encore moins qui en ont 20. Doit-on compter sur eux pour enseigner le mĂ©tier aux nouveaux ? Seule une petite partie d'entre eux a envie de devenir prof, le reste prĂ©fĂšre sans doute programmer. C'est tous ensemble, en tant que communautĂ©, que nous devons ĂȘtre une organisation apprenante. Chacun, quel que soit le stade oĂč il en est, peut aider les autres.
Slides : https://noti.st/dupdob/gX1kor/endangered-species-senior-crafters
How to take smart notes (Sönke Ahrens)
Les conseils pour prendre des notes sont généralement de les séparer (un cahier ou carnet par sujet / matiÚre), de les relire dÚs que possible⊠Ce sont de mauvais conseils.
Les conseils sur comment écrire un article, un rapport, un mémoire, sont trÚs linéaires : trouvez un sujet, puis faites des recherches, puis lisez et prenez des notes, puis faites un plan, puis rédigez⊠L'écriture y est une tùche parmi d'autres, et la vision est trÚs top-down. Une meilleure approche est possible !
Pour Richard Feynman, la pensĂ©e est indissociable de l'Ă©criture. Les notes ne sont pas une forme de stockage du rĂ©sultat de notre pensĂ©e, elles sont notre pensĂ©e elle-mĂȘme. L'esprit a besoin de cet Ă©chafaudage extĂ©rieur qu'est l'Ă©criture.
Pendant sa carriÚre académique, Niklas Luhmann a écrit environ 600 publications, dont plus de 60 livres, sur des sujets comme la sociologie, le droit, la politique, les médias, la philosophie, l'art, l'amour⊠Son secret ? Sa boßte à notes (Zettelkasten).
90 000 notes accumulĂ©es. Ăa semble beaucoup, mais ça fait seulement 6 par jour.
Son systĂšme est simple mais terriblement efficace :
une idée par note ; une note sert à développer une idée
chaque note a un identifiant noté en haut à gauche : 1, 2, 3⊠( une note peut renvoyer à une autre par son identifiant noté à l'encre rouge dans le texte)
il n'y a pas de classement hiĂ©rarchique, l'organisation est Ă©mergente : une note liĂ©e Ă une autre peut ĂȘtre insĂ©rĂ©e derriĂšre elle dans la boĂźte, et recevoir un identifiant avec une branche (par exemple : 1a1) ; cela permet de retrouver des notes pertinentes Ă proximitĂ©, et de dĂ©rouler ainsi le fil plus tard
En insérant la rédaction de ces notes à ses activités quotidiennes de lecture, séminaires, etc. l'écriture n'est plus quelque chose de séparé que l'on fera juste avant la deadline, mais devient un travail progressif et incrémental. Les questions à creuser et les catégories émergent. Les idées s'enrichissent les unes les autres. Penser, relier et comprendre deviennent des actions concrÚtes.
Pour en savoir plus : http://takesmartnotes.com
Big corps as little panopticons. Agile coaches as colonial imperialists. (Romeu Moura)
Le panoptique est une architecture de prison imaginée à la fin du XVIIIe siÚcle par Jeremy Bentham, et analysée au XXe siÚcle par Michel Foucault dans son livre « Surveiller et punir ».
Ses caractéristiques clés sont que :
les prisonniers sont toujours vus par les gardes et le savent ;
les prisonniers ne voient pas les gardes ;
les prisonniers ne se parlent pas entre eux.
Dans un premier temps, un prisonnier se comporte bien car il est observé. Mais dans un deuxiÚme temps, il est conditionné à devenir son propre garde.
On peut comparer les entreprises à des panoptiques. Les managers veulent une complÚte visibilité sur ce que font leurs employés (reporting, etc), mais ne communiquent pas sur ce qu'ils font, et les équipes ne se parlent pas. Les équipes finissent par devenir leurs propres gardes, et s'interdisent de faire certaines choses : « ah mais non, ici on ne peut pas faire ça ».
En Amérique du Sud, les colons n'ont pas réussi à transformer les autochtones en esclaves. Ils avaient la mauvaise habitude de se laisser mourir. Ils devaient donc importer des esclaves venant d'Afrique. Jusqu'à ce que les missionnaires jésuites trouvent la combine : une fois convertis à la foi chrétienne, ils craignaient de mourir !
Les grandes entreprises dĂ©ploient des armĂ©es de coachs pour effectuer leur âtransformation agileâ. Il s'agit moins de transformer toute la structure (et certainement pas le haut de la pyramide), que d'imposer un changement Ă certains
Pour Romeu, tous ces coaches agiles sont des jésuites. Qu'ils croient ou non aux valeurs de l'agilité, ils sont envoyés pour changer la culture de « ces gens là bas ». Ils sont instrumentalisés.
Alors que faire ? Comprendre le systÚme. Lire « Thinking in systems ». Lire Foucault (c'est dur). Regarder la présentation de Jessica ou lire son article.
Chacun d'entre nous a plus de pouvoir qu'il ne croit. Nous sommes conditionnĂ©s Ă penser le contraire. Nous vivons dans une peur artificielle d'agir diffĂ©remment. Nous surestimons le pouvoir de notre hiĂ©rarchie. On les croit malveillants, mais ils sont dans la mĂȘme situation, Ă un niveau diffĂ©rent. Et Ă tous les niveaux, les gens aimeraient que les choses changent. Restez indignĂ©s !
What is programming anyway? (Felienne Hermans)
On emploie souvent des mĂ©taphores pour expliquer ce qu'est la programmation. Dire que programmer c'est comme les maths, ça peut avoir un effet nĂ©gatif. Felienne suggĂšre de dire plutĂŽt que programmer c'est comme Ă©crire. Tout le monde peut Ă©crire, et l'Ă©criture a des usages variĂ©s : fiction, poĂ©sie, calligraphie, pĂ©tition, dissertation, liste de coursesâŠ
Cette présentation m'a aussi fait réaliser qu'Excel est un langage de programmation fonctionnelle, et que c'était sans doute le meilleur langage de programmation, car des millions de gens l'utilisent sans le savoir⊠Imaginez vous programmer en Java sans faire exprÚs !
Atelier: 50 shades of FizzBuzz
L'atelier visait à prendre un problÚme simple (FizzBuzz) et à explorer différentes maniÚres de l'implémenter, en se donnant des contraintes.
Par exemple, on a commencé en mode zombie pair programming : le co-pilote pouvait faire des gestes mais ne pouvait pas parler, seulement grogner ou dire « brains ! ».
On a ensuite enrichi les spécifications et vu comment le code évoluait.
J'ai profité d'une partie de l'atelier pour explorer comment utiliser le property-based testing pour exprimer les tests.
J'ai mis mes différentes versions sur GitHub : https://github.com/ronnix/50-shades-of-fizzbuzz
Atelier: Evolutionary Design
L'atelier visait Ă expĂ©rimenter lâevolutionary design.
La premiĂšre activitĂ© a consistĂ© Ă implĂ©menter, en groupes de 4-5 personnes, une nouvelle mĂ©thode sur une base de code existante (cool, c'Ă©tait en Python !), en mode outside-in TDD. Ă'a Ă©tĂ© une expĂ©rience Ă la fois intĂ©ressante et pĂ©nible pour moi, car je pense plutĂŽt ĂȘtre de l'Ă©cole classique du TDD, et faire les choses en mode London school allait un peu contre mon penchant naturelâŠ
La deuxiĂšme activitĂ© a consistĂ©, toujours en groupes, Ă prendre une base de code dĂ©veloppĂ©e par un autre groupe lors d'un prĂ©cĂ©dent atelier oĂč ils avaient plus de temps, et Ă l'amĂ©liorer avec des refactorings.
Dojo tournant en continu
Pendant toute la durĂ©e de la confĂ©rence, un dojo de programmation a eu lieu en continu, oĂč chacun pouvait venir participer au dĂ©veloppement d'un jeu de la vie, en mode mob programming.
Je n'y ai participĂ© que quelques minutes, mais c'Ă©tait trĂšs drĂŽle de voir apparaĂźtre en accĂ©lĂ©rĂ© les problĂšmes que l'on voit en entreprise sur des projets plus longs sur lesquels il y a du turn over. Le code devient trĂšs vite du code legacy, l'intention initiale est vite perdue, les connaissances se transmettent mal, les nouveaux venus veulent aller dans une direction qui a dĂ©jĂ Ă©tĂ© essayĂ©e sans succĂšs par les prĂ©cĂ©dents, mais ils ne le savent pasâŠ
Pauses, couloirs et soirée du jeudi
Les meilleures sessions, ce sont toujours les rencontres et les discussions avec les autres participants. J'ai été heureux de recroiser des gens que je ne vois pas souvent, et d'en rencontrer de nouveaux que j'aurai plaisir à revoir l'an prochain !














