Votre besoin
Vous démarrez un projet ?
- à partir sur de bonnes bases techniques et méthodologiques ;
- à éviter que la dette technique devienne un obstacle à la rentabilité ;
- à recruter des développeurs ;
- à améliorer la sécurité de votre produit et son ergonomie.
Vous ne livrez pas assez fréquemment ?
Votre équipe est de bonne volonté, mais dans son organisation, ses méthodes de travail, ses outils, ou le code qu'elle doit maintenir, se cachent des problèmes qui la freinent. Je les identifie, vous propose un plan d'action, et vous aide à le mettre en oeuvre.
Vous rencontrez régulièrement des problèmes en production ?
Régulièrement, les déploiements de version se passent mal. Les incidents qui impactent les clients ne sont pas rares. Je vous aide à identifier et mettre en place les outils et pratiques qui en réduiront la fréquence.
Vous avez un problème que je n'ai pas mentionné ?
Si ça concerne des pratiques de développement ou de test logiciel, de l'architecture logicielle, de la dette technique, du refactoring de code, des problèmes de performance, de l'éco-conception... Contactez-moi pour en discuter.
Réalisations
Voici quelques exemples de projets sur lesquels mes contributions ont eu des impacts majeurs.
Refonte d'un projet complexe
-
Contexte
[Projet legacy] Une base de code de plus de 600 000 lignes, avec un métier compliqué et une dette technique importante. La mauvaise qualité du code et les problèmes organisationnels dégradaient fortement la vélocité de la trentaine de développeurs.
-
Nous avons appliqué une manoeuvre de Conway inversée, qui consiste à aligner l'organisation des équipes avec l'architecture désirée.
Après la clarification du métier lors d'ateliers d'Event Storming, j'ai identifié l'architecture cible à l'aide du Domain Driven Design stratégique. J'ai regroupé les sous-domaines en fonction du nombre d'échanges qu'ils avaient entre eux. Ainsi, chaque équipe en charge d'un groupe de sous-domaines était peu dépendante des autres équipes.
Puis, le management a réorganisé les équipes, afin qu'elles soient alignées avec cette nouvelle architecture.
L'étape suivante consistait à réorganiser le code pour qu'il corresponde à l'architecture cible. J'ai défini, avec des collègues, une stratégie de tests, et la nouvelle structure à donner au code pour qu'elle soit plus claire et homogène.
Enfin, j'ai rédigé un guide de migration expliquant comment passer le code existant vers sa nouvelle organisation, puis aidé des équipes à l'appliquer, lors de séances de mob programming.
Ces changements ont amélioré significativement le quotidien des développeurs, qui ont pu monter en compétence sur les sous-domaines dont ils avaient la responsabilité.
Refactoring d'un code sans test
-
Contexte
[Projet legacy] Une petite application, mais que mes collègues n'osaient pas refactorer. Elle était dépourvue de tests automatisés. La documentation était obsolète et insuffisante. La fonction principale, longue de 700 lignes, était particulièrement difficile à comprendre.
-
En procédant par petit pas, j'ai entièrement revu le code de cette application. J'ai, comme à mon habitude, employé le Développement Piloté par les Tests (TDD), ce qui a amélioré significativement la couverture de code. J'ai réalisé la phase finale de ce refactoring en pair programming avec des collègues, afin qu'ils puissent reprendre ce projet sereinement. Enfin, j'ai mis à jour la documentation, puis ajouté un dashboard dans Datadog afin d'améliorer l'observabilité. La mise en production n'a révélé aucun bug.
Mise en place de bonnes pratiques, amélioration des performances
-
Contexte
[Projet legacy] Un projet monolithique de taille modeste, avec quelques mois d'existence seulement, mais déjà une dette technique significative. Il y avait bien des tests automatisés, mais la plupart ne passaient pas quand j'ai rejoint le projet. De plus, ils étaient lents, et certains n'étaient pas fiables. -
Après une période d'observation, j'ai organisé des rétrospectives, ce qui n'avait pas encore été fait dans le cadre de ce projet. Cela a résolu les plus gros dysfonctionnements de l'équipe.
Ma première contribution au projet a été de rédiger une procédure d'installation sur les postes de développement (qui ne pouvait pas être automatisée), car rien n'existait de ce point de vue. A cette occasion, j'ai sécurisé le partage des mots de passe.
La couverture du code étant quasi inexistante, j'ai mis en place un test de caractérisation —AKA Golden Master test— afin de pouvoir faire des modifications en toute sécurité. Puis j'ai mis en place une vérification automatisée du contenu des commits. J'ai activé une à une la vingtaine de règles qu'elle comportait, et appliqué petit à petit ces règles à l'ensemble du code. Cela a permis une amélioration significative de la qualité du code présent et futur.
Une seconde étape, après avoir découvert le code lors de la précédente, a été de remettre en marche les tests automatisés. Puis de les accélerer et de les fiabiliser. Il s'agissait essentiellement de tests d'intégration, car le code métier faisait de nombreux appels à des API externes. J'ai fait en sorte que le temps d'exécution des tests soit divisé par 7.
J'ai aussi analysé les performances du code métier. Cela m'a incité à remplacer les appels synchrones par des appels asynchrones, ce qui a multiplié par deux la rapidité d'exécution.
Une dernière contribution importante à ce projet a été de définir et mettre en oeuvre une architecture scalable, pour résoudre les problèmes de montée en charge. Le passage d'un monolithe à une architecture distribuée avec des files d'attente et des mécanismes de cache ont résolu les contentions observées.
Création d'un SAAS
-
Contexte
[Projet greenfield] Un service Web développé par une startup, dans le domaine de la santé. J'étais responsable de tous les développements.
-
J'intervenais sur toute la partie technique : management, méthodologie, choix technologiques, architecture, sécurité, développement Front-End, développement Back-End, base de données, déploiement. J'ai mis en place la documentation, structurée selon les principes de Diátaxis. En développant de l'outillage, j'ai fait en sorte que l'expérience développeur soit excellente, afin qu'un nouveau venu puisse être opérationnel en moins d'une demi-journée, puis soit efficace au quotidien. Je m'assurais également que l'ergonomie des IHM soit bonne.
Développement d'un système d'analyse de logs en temps réel
-
Contexte
[Projet greenfield] Pour un projet de cybersecurité, création d'un logiciel qui détectait la présence de comportement suspects dans une série de logs. Les comportements à identifier étaient décrits à l'aide d'un langage créé pour l'occasion, et utilisable par des non-développeurs. Les logs étaient analysés au fil de l'eau. Mais il était aussi possible de déclencher une analyse a posteriori, en cas de modification des règles.
Ce projet était exigeant en termes de performances. Il nécessitait de surveiller en parallèle la présence d'une centaine de patterns décrit dans le DSL (Domain Specific Language) utilisé par les experts métier. De plus, l'analyse a posteriori nécessitait de traiter de gros volumes de données dans un temps le plus court possible. J'ai donc choisi un langage offrant de bonnes performances, tout en étant abordable par l'équipe (Go), et travaillé particulièrement l'algorithmie. J'ai écrit un compilateur pour le DSL, afin d'en optimiser la vitesse d'exécution. Les retours flatteurs du client ont confirmé la pertinence de ces choix.
Développement d'un système de détection d'applications mobiles malveillantes
-
Contexte
[Projet greenfield] Création d'une application qui menait une série d'analyses statiques sur des applications mobiles afin d'identifier s'il s'agissait de malwares. La cible était l'analyse de 50 000 applications par jour.
Il était également possible, à la demande d'un utilisateur, d'exécuter une application mobile dans une machine virtuelle, afin de détecter des comportements suspects (les logs étaient analysés avec l'application évoquée ci-dessus)
En tant que tech lead, j'ai été le principal concepteur de l'architecture, qui posait de sérieux challenges en terme de scalabilité, mais aussi d'intégration d'applications open source. En effet, parmi les applications tierces qui réalisaient diverses analyses, une n'était pas prévue pour être utilisée comme bibliothèque : il s'agissait d'une application web complète, avec un front-end, un backend et une base de données. La solution que j'ai trouvée consistait à démarrer un container Docker à partir de notre application (donc faire du _Docker in Docker_) pour exécuter cette application tierce.
Le reste de l'architecture était de type hybride : un serveur pour le front-end et l'API, une base de données unique (c'était suffisant), une work queue pour déclencher les jobs de façon asynchrone, et de multiples workers pour exécuter les différentes analyses. Ainsi qu'une machine virtuelle pour l'exécution d'une application par l'utilisateur.
Ils sont satisfaits de mes services
J'ai travaillé pour ces personnes, qu'en ont-elles pensé ?
Christian Trotobas
Christian était CTO de Yaso quand nous avons travaillé ensemble
"J'ai travaillé avec Pascal lorsqu'il était Tech Lead de notre équipe, et c'est l'un des meilleurs que j'aie connus. Expert en architecture logicielle et en qualité de code, il fixe un cap clair et garde le projet sur les rails. Côté méthode, il apporte juste ce qu'il faut d'agilité, sans bureaucratie. Mais ce qui le distingue vraiment, c'est son sens de la transmission : par le pair et le mob programming, les rétrospectives et le partage de bonnes pratiques, il fait grandir toute son équipe et la rend durablement plus autonome. Un Tech Lead à la fois exigeant et bienveillant, que je recommande les yeux fermés."
Raphaël Brugier
Raphaël était manager de l'équipe Architecture chez Alma quand j'ai fait partie de cette équipe"J'ai eu le plaisir d'être le manager de Pascal pendant un an chez Alma, dans l'équipe architecture, où il travaillait sur l'architecture modulaire de notre monolithe et pour lequel il développait de l'outillage. Ce que je mettrais en avant c'est sa capacité à travailler avec les équipes : il prend le temps d'expliquer son approche et aide les ingénieurs à comprendre le raisonnement derrière les choix d'architecture. En particulier sur le DDD (Domain Driven Design), sur lequel il a animé plusieurs ateliers. Cette combinaison d'expertise technique et de clarté de communication est exactement ce que requierent les tâches d'audit et de consulting, où la valeur réside dans la compréhension du contexte d'une équipe et dans la capacité à l'aider à s'améliorer grâce à une approche pédagogique."
Jean-Marc Guillet
Jean-Marc était responsable du département Soft chez Orange Innovation lors de notre collaboration"Pascal faisait partie de mes équipes au sein du département Soft de Rennes. Il était une référence au sein du département par ses qualités professionnelles et humaines. Il a pris le lead notamment de l’organisation de l’équipe en charge des projets de sécurité en mettant en œuvre des pratiques métiers innovantes, en faisant grandir le collectif et en partageant son expertise du Software Craftsmanship au sein d’Orange Innovation."
Jérôme Hannebelle
Jérome était référent de la communauté "Orange Software Experts" chez Orange Innovation, communauté dont j'étais membre fondateur
- un artisan du logiciel désireux d'améliorer ses compétences en développement
- un leader qui pousse ceux qui l'entourent vers l'excellence
Qui suis-je ?
Expert en développement logiciel
J'ai plus de 25 ans d'expérience dans le développement de logiciels, pour des entreprises allant de la startup naissante au grand groupe. J'ai développé des services Web, des systèmes distribués, des Single Page Applications (SPA)... dans de multiples langages, dans des domaines allant de l'industrie automobile à la santé, en passant par les télécommunications, la cyber-sécurité, l'agro-alimentaire, le jeu vidéo...
Software Crafter
J'ai une expertise dans les méthodes et pratiques de développement de logiciels. Je suis organisateur d'événements consacrés à l'artisanat logiciel : Meetup Software Crafters Rennes et SoCraTes Rennes.
Agiliste
J'ai découvert l'Agilité dès 2001, avec l'eXtreme Programming, puis Scrum et Kanban, que j'ai mis en oeuvre dans de nombreux projets, avant de me former au coaching. J'ai formé plus d'un millier de personnes à l'Agilité.
Orateur, auteur, éditeur de newsletter
J'aime partager mes connaissances, c'est pourquoi je publie charque
semaine une newsletter de veille technologique,
la Craft Letter, et je donne
des conférences.
Je suis l'auteur de
Elm par la pratique.