Page 2
I had the chance to work few months in Agicap, an enterprise producing a cashflow management SAAS for businesses.
It was a great mission, my team worked a way that I consider to be, so far, the most efficient and pleasant in my career. We managed to produce value at a constant speed while keeping a full control of our code, not allowing any kind of quality depreciation over time.
Tout part d’un talk donnĂ© par Emilien PECOUL (aka Ouarzy). Durant ce talk, celui-ci a tentĂ© de dĂ©montrer Ă son audience qu’elle connaissait dĂ©jĂ la plupart des concepts formulĂ©s dans la thĂ©orie des catĂ©gories. Ă mon sens, il y est parvenu mĂȘme si ce sujet est bien trop vaste pour ĂȘtre abordĂ© en seulement 45 minutes.
C’est pourquoi quelques annĂ©es plus tard, il m’a proposĂ© de le rĂ©adapter avec lui sur un format universitĂ© (3 heures).
Au cours de ma carriĂšre, jâai Ă©tĂ© confrontĂ© Ă plusieurs reprises Ă des clients et/ou des acteurs internes qui souhaitent assurer un haut niveau dâuniformisation sur le code des applications. Cela se traduit par des conventions de style, de nommage, et parfois mĂȘme des choix plus impactant comme des frameworks ou des architectures spĂ©cifiques. Dans les cas extrĂȘmes, les propos de ces personnes laissaient entendre le refus dâun quelconque Ă©cart avec ces rĂšgles.
UN BIAIS COGNITIF ET UN USAGE ERRONĂ Les dĂ©veloppeurs aiment bien les acronymes pour Ă©noncer des âbonnes pratiquesâ (KISS, DRY, SOLID, etcâŠ). Souvent, lâidĂ©e vĂ©hiculĂ©e par ceux-ci est trĂšs simple Ă apprĂ©hender.
Cependant, nous souffrons dâun biais cognitif Ă©norme : plus une information est simple Ă intĂ©grer, moins elle est remise en question / challengĂ©e. Et celle-ci est encore mieux intĂ©grĂ©e si elle ne va pas en contradiction avec vos croyances.
VoilĂ maintenant plus de 5 ans que jâapplique une approche TDD (test-driven development) sur lâensemble des projets sur lesquels jâinterviens. Si jâutilise toujours cette mĂ©thode, câest parce que la prĂ©sence de tests me donne confiance dans le code que jâĂ©cris :
Je mâassure quâil fait bien ce que je souhaite. JâamĂ©liore constamment son design par du refactoring. Les tests mettent en lumiĂšre la trĂšs grande majoritĂ© des rĂ©gressions que je peux introduire lors dâun refactoring ou dâune Ă©volution.
Il y a quelques jours, au cours dâune discussion, on mâa demandĂ© quelles sont les pratiques que je pousse dans une Ă©quipe dans le but dâamĂ©liorer la qualitĂ© de code. Bon nombre de pratiques comme TDD, clean code ou encore DDD et ses bounded-contexts ayant dĂ©jĂ Ă©tĂ© citĂ©s, jâai donc rĂ©pondu : un code mĂ©tier pur, parfois appelĂ© functional core.
Dans cet article, je pars du principe que vous faite une distinction et séparation forte entre le code métier qui répond à une logique business, et le code infra qui répond aux problématiques techniques.
Je suis un dĂ©veloppeur convaincu par les bĂ©nĂ©fices du TDD, je lâapplique au quotidien sur les projets que me confient mes clients. Cela me permet de rapidement valider que mon code a bien le comportement attendu, de le âdocumenterâ et dĂ©crivant un cas dâusage et de mâassurer par la suite que je nâintroduis aucune rĂ©gression si je modifie le code testĂ©.
Je fais tout ceci en sachant que je choisis des cas de test qui me semblent reprĂ©sentatifs de lâusage de la fonction, on parle parfois dâExample Based Tests.
Jâai rĂ©cemment pu participer Ă un atelier animĂ© par Romeu Mourra lors des NCrafts. Pas de technique ici, le but Ă©tait de mettre en lumiĂšre des problĂšmes dâordres systĂ©miques. Pour cela, nous avons fait un Kebab Kata sous forme dâitĂ©rations aux-cours desquelles Romeu jouait le rĂŽle du client, puis Ă©galement de lâarchitecte. Son but Ă©tait de nous faire Ă©chouer en usant de diffĂ©rents comportements toxiques que lâon retrouve frĂ©quemment dans de vraies missions.
Dans mon prĂ©cĂ©dent article, jâai Ă©voquĂ© les raisons pour lesquelles il faut sâorienter ou non vers une architecture de type CQRS. Parmi ces raisons, la premiĂšre que jâai Ă©voquĂ© Ă©tait le niveau de complexitĂ© du mĂ©tier : plus le mĂ©tier est complexe, plus CQRS devient pertinent.
Seulement, comment définir et évaluer la complexité métier de son application ?
LA COMPLEXITĂ, CâEST QUOI ? âComplexitĂ©, n.f. : CaractĂšre de ce qui est complexe, qui comporte des Ă©lĂ©ments divers quâil est difficile de dĂ©mĂȘlerâ : dĂ©finition proposĂ©e par le Larousse.
Actuellement, jâentend de plus en plus parler de CQRS et CQRS/ES : par mes collĂšgues autour de la machine Ă cafĂ©, lors dâentretiens techniques, sur Twitter, les blogs, etc.
Le principe du Command and Query Responsability Segregation (CQRS) est de sĂ©parer modĂšles dâĂ©criture et modĂšles de lecture. LâEvent Sourcing (ES) quant Ă lui consiste Ă sauvegarder des Ă©vĂ©nements au lieu dâentitĂ©s, pour reconstruire une entitĂ© il faut agrĂ©ger des Ă©vĂ©nements. ExprimĂ©s de cette façon, ces concepts semblent plutĂŽt simples Ă comprendre, mais les aspects techniques peuvent vite les rendre complexes Ă apprĂ©hender et implĂ©menter.