Portfolio

Cette page regroupe les projets que nous sommes fiers d'avoir réalisé. Tous sont indiqués, mais si vous êtes pressé, nous vous proposons une sélection parfaitement subjective.

Pour illustrer notre activité, nous avons choisi OxaControle notre plus vieux projet encore maintenu et installé, préexistant même à l'Atelier, le Pont SEPA-Chargebee réalisé pour SNAL/Albus et le refactoring stratégique du projet SIRH de Méritis, afin de représenter notre savoir-faire.

Cette liste va évoluer, elle est notre vitrine et sera mise à jour lorsque nous aurons achevé de nouveaux projets.

Projets en cours

OxaControle Notre plus ancien projet encore développé

🔗
Laurent Frapier Entreprises - Décembre 2018 - Présent - Nouvelle Aquitaine

Reprise d’un projet de contrôle d’accès datant de 2013, réalisé avec Projects Partners en alternance. Maintenance des sites installés précédemment. Installation de nouveaux chantiers.
Changement d'échelle en 2020 (x10) nécessitant la mise en place d'une architecture logicielle plus solide. Refactoring et conversion à .NET6, puis .NET8 aujourd'hui.
Ajout de nouvelles features en TDD sur demande de certains clients. Ajout de tests a posteriori sur le code historique pour le renforcer.

Actuellement : En production sur sites allant du petit bureau au grand centre aquatique. Étude de nouveaux chantiers.

Les origines

L'histoire commence en 2013, j'étais en alternance chez Projects Partners, dirigée par Thierry et Rémi Balu. L'entreprise produit des logiciels à destination du BTP : Convertisseurs, applications mobiles et développements plus particuliers. Ce qui allait ensuite s'appeler OxaControle est né d'une demande de l'électricien Laurent Frapier. Il venait de remporter un marché d'électricité et de contrôle d'accès par badge. La première partie est son métier, pas la seconde. Le projet a donc été confié à Projects Partners.

L'équipe de Projects Partners était réduite, j'étais développeur en alternance et M. Balu dirigeait la société. Le projet était d'envergure : proposer une solution de contrôle d'accès complète et peu coûteuse, allant de l'interface de paramétrage à l'interrogation en RS485 des lecteurs.

La plateforme Raspberry Pi a été sélectionnée pour son faible coût et sa puissance suffisante pour diriger une poignée de lecteurs, autant de portes et une flotte de quelques badges. Le principal défi vint de la plateforme .NET, alors absente de Linux. .NET Core n'arrivera que quelques années plus tard. C'était alors Mono qui remplissait le rôle, avec un transpilage en Java très gourmand en ressources.
Le Raspberry est incapable de produire des signaux RS485 sans convertisseur adapté. Le tâtonnement a été long pour aboutir à une solution à base de convertisseurs TTL to RS485, branchés de manière exotique afin d'utiliser le bus en full-duplex. Ces deux éléments sont encore utilisés aujourd'hui sur le projet, garants de son faible coût.

Le projet a été déployé sur plusieurs petits sites. Il y fonctionne depuis plusieurs années sans nécessiter d'autres interventions que celles d'un électricien pour remplacer certaines pièces d'usure. Je n'ai été amené à intervenir qu'une seule fois sur ces sites depuis leur installation.

La reprise par l'Atelier

En 2019, Laurent Frapier me contacte afin de me proposer la reprise d'OxaControle et son développement. L'objectif est ambitieux : multiplier par 20 le nombre de portes, badges et lecteurs que l'application peut supporter. Deux défis se présentent à moi : la mise à l'échelle, dépassant de très loin les capacités des Raspberry Pi, et la reprise d'un code immature, réalisé quand j'étais encore étudiant.

Une année d'études et de remaniement du code ont été nécessaires afin de retrouver une qualité suffisante pour avancer sereinement. Refactoring, refonte de certaines parties, introduction de tests, changement de technologie, nouvelle architecture matérielle. Presque tout à évolué pour fiabiliser le projet. Covid aidant, notre premier bureau s'est transformé en laboratoire d'électronique improvisé.

Aujourd'hui

Une fois la solution au point vint le temps de l'installation sur site, terminée à l'heure où j'écris ces lignes. Le défi est achevé, désormais OxaControle peut s'adapter à toutes les tailles de bâtiment grâce à son architecture évolutive.
Le même code source peut être déployé dans plusieurs configuration : serveur central, contrôleur de bus, simple UI.
Le projet, désormais repris doit maintenant être consolidé et assaini, afin de s'attaquer à d'autres sites. Il reste trop d'étapes manuelles lors de l'installation et de la maintenance et le poids du code legacy, bien que fortement réduit par des tests adaptés, reste fort dans le projet.
De nouvelles fonctionnalités ont été développées sur demande d'un client. Tout le nouveau code est recueilli et développé par les tests (BDD&TDD)
Désormais installé sur un site d'envergure (80 lecteurs, 200+ badges), OxaControle devrait susciter l'intérêt d'autres maîtres d'oeuvre, nous serons là pour le faire vivre et évoluer, 10 ans après.

🔗
Institut de formation politique - Janvier 2020 - Présent - Paris

Reprise d’une application PHP/Laravel obsolète et délaissée depuis plusieurs années, de gestion de campagnes de dons pour des associations. Duplication du projet, assainissement du code et correction à chaud de bugs bloquants. Stratégies de contournement des problèmes les plus coûteux à résoudre. Sécurisation du Legacy derrière un VPN.

Actuellement : Développement de nouvelles fonctionnalités sur un projet propre, routage entre les deux composants et Strangler Pattern.

Un projet en deshérence

Le projet est un outil de gestion de dons, fait sur-mesure pour coller au workflow très spécifique du client. Basé sur Laravel 5, celui-ci a été livré en 2015, puis maintenu un certain temps par son créateur. Celui-ci n'a pas écrit de tests sur ce projet, pourtant d'une complexité conséquente. La suite de l'histoire est hélas classique : sans tests, impossible de s'assurer de l'absence de régressions. Sans cette sécurité, la moindre mise à jour, la moindre évolution et même le moindre débug deviennent des tâches fastidieuses à l'issue incertaine.

Le développeur d'origine quitte le projet quelque part à la fin de la décennie 2010. Sans tests et sans son concepteur, le projet devient un Code Legacy : personne n'ose le mettre à jour de peur de le casser. Les défauts qui se révèlent ne sont corrigés qu'à minima par un développeur bénévole. Arrive l'année 2020, où l'IFP fait appel à moi pour reprendre en main le projet. La priorité est la correction des bugs les plus urgents.

Une longue convalescence

Une fois les voies d'eau les plus urgentes colmatées, le projet est assaini et intégré à un pipeline d'Intégration Continue. D'abord réalisée en tant que bonne pratique, cette intégration s'avère rapidement utile afin de dupliquer le projet pour une autre association-soeur. Un rapport sur l'état du projet est produit, afin que le client réalise l'ampleur des travaux à effectuer pour remettre le projet sur les rails. Une stratégie de long-cours est choisie : l'existant restera en l'état, c'est-à-dire non testé et obsolète, mais les nouvelles fonctionnalités devront bénéficier des meilleures pratiques et d'un environnement technique récent.

Après 2 ans à maintenir le projet, un nouveau besoin apparaît. Celui-ci entraîne la création d'un nouveau projet Laravel, récent celui-ci. Le nouveau projet est réalisé selon les règles de l'art : test-first (TDD), intégration continue, one-button-deployment, etc. Une variante du Strangler Pattern utilisant Apache comme routeur est utilisée. Lorsqu'une URL existe sur le nouveau projet, celui-ci répond. Sinon la même URL est demandée à l'ancien code. Petit à petit, des fonctionnalités sont "volées" à l'ancien code et reproduites sur le nouveau.

La route est encore longue, mais la reprise du développement augure un bel avenir à un logiciel incapable d'évoluer avant sa reprise. D'autres fonctionnalités sont prévues. Elles nécessiteront le transfert d'autres morceaux de code vers le nouveau projet. Progressivement et par contagion, tout le code sera testé, donc testable, donc maintenable. Mon but est de pouvoir un jour tirer ma révérence.

🔗
YNOV - Printemps 2022 - Présent - Lyon, Nantes & Bordeaux

Modules de 30h à 80h destiné à des M1&M2 en développement.

  • Dev Logiciel avancé : comprend l'économie du logiciel, le recueil du besoin piloté par les tests, la qualité logiciel et le multitasking.
  • L'architecture et donc le design de logiciels, selon une approche rigoureuse et validée par la recherche académique.
  • Les tests, en particulier l'approche TDD&BDD, ainsi que le recueil du besoin piloté par les tests.

Comme à mon habitude, ce sont les étudiants qui ont choisi leur langage de travail, dans la limite de mes connaissances. J'ai eu à travailler selon les écoles avec du TypeScript, du PHP, du Java et du C#.

🔗
EPSI Bordeaux, Nantes, Arras, Montpellier, Toulouse, Rennes - Janvier 2020 - Présent - France entière

Formation d’étudiants niveau Bac+2 à Bac+5 en vue du titre Niveau 7 « Expert en informatique et systèmes d’information » en présentiel majoritaire. Entre 10h et 80h par module pour ~400hr/an

  • Maintenance applicative (Gestion de la dette technique, Refactoring, Anticorruption Layers)
  • Intégration continue (Teamcity, git, DIY CI)
  • Architectures matérielles et logicielles (Architecture, Design (anti)-Patterns)
  • Tests (fondamentaux, approfondissement, industrialisation)
  • Cahier des charges et expression du besoin (méthode EATDD/BDD)
  • Agilité et Lois du Développement (Extreme Programming, Textes fondamentaux de notre métier)
  • Web&API (HTTP, REST, APIs)
  • C#/.NET (initiation au langage et à TDD)

Pédagogie orientée pratique (4/5 du temps en atelier). Coding dojos, cas réels, exercices. Positionnement exploratoire : pratiques validées par la science, mais pas toujours répandues en entreprise.
Suivi technique pour la rédaction des mémoires de fin d’études. Participation aux jurys.

En dehors des cours spécifiquement dédiés à un langage, les étudiants sont libres de prendre le langage de leur choix, tant qu'il est orienté-objet : C#, PHP, Java, TypeScript, Python, etc.

Projets complétés

🔗
Sparks Formation - 5 sessions entre juin 2022 et novembre 2024 - Région AURA & Distanciel

C'est grâce à Sparks que je suis entré dans le monde de la formation professionnelle. J'ai réalisé 5 formations depuis juin 2022 :

  • Clean Code, à Lyon pour une grande entreprise industrielle.
  • Tendances IT, une introduction au monde du développement pour un futur DSI d'assurance.
  • Legacy Code, en distanciel pour un grand groupe bancaire.
  • Domain Driven Design côté Dev, à Valence pour une PME éditrice de logiciels.
  • Domain Driven Design & Event Storming, à Villeurbanne pour un grand groupe ferroviaire.

Ces formations mêlent théorie et pratique et d'adressent pour la plupart aux praticiens. Elles s'appuient autant sur l'état de l'art que sur la recherche académique et sont personnalisées pour l'entreprise qui les commande.

EDUP Externalisation au forfait

🔗
EDUP - Juillet 2024 - Août 2024 - Distanciel

EDUP fournit des solutions logicielles aux acteurs de la formation.
Notre collaboration a commencé par une assistance à un autre développeur sur une passerelle JS entre un ERP et un CRM. Ce dépannage de quelques jours a permis de nouer des liens et de poursuivre sur une seconde mission, plus grosse.

EDUP développe un outil afin de faciliter la transmission des documents entre les CFA et les OPCO qui les financent. Un étape-clé est la transmission des informations par API aux OPCO, qui se sont accordés sur une norme commune, en théorie. Dans les faits la documentation était insuffisante, les interlocuteurs peu diserts et le besoin en cours de spécification. Ce fut un excellent moyen de pratiquer le développement piloté par les tests et de prouver sa pertinence pour éclairer la voie et sécuriser le savoir acquis, itérativement. Le projet était en PHP/PEst.

🔗
Captronic - 4 sessions entre février 2023 et juin 2024 - Bordeaux

Formation TDD sur 3 jours auprès d'un public de développeurs, majoritairement dans l'embarqué. TDD est abordé sur des projets neufs ainsi que sur du Code Legacy.

La formation est partie du B-A-BA des tests pour cheminer jusqu'au plus complexe : introduire des tests sur un code qui n'en a jamais connu. Nous avons suivi un fil rouge afin d'apprendre le recueil du besoin piloté par les tests.

Les tests fonctionnels sont à l'honneur, mais nous abordons également les tests d'intégration, les tests unitaires ou encore les tests de vulnérabilité.

Beaucoup de clients ont des composants de bas-niveau pour ne pas dire du hardware. Nous évoquons les Fakes, véritables jumeaux numériques, utilisés pour garder la célérité des tests sur la machine du developpement, ainsi que les stratégies permettant de tester avec du vrai matériel en intégration continue.

🔗
Projects Partners - Janvier 2023 - Mars 2023 - Marseille (Hybride)

Projects Partners n'est pas n'importe quel client. Il s'agit de l'entreprise où j'ai réalisé mon alternance pendant 2 ans à Bordeaux. Désormais basée à Marseille, l'entreprise existe toujours avec un important portefeuille de clients du BTP.

Nous nous sommes recontactés car ils ont besoin d'une autre paire de bras pour aider à la réalisation d'un démonstrateur sur Sharepoint, à partir d'une application .NET existante. Il s'agissait de prouver la capacité d'un projet standalone à devenir un SaaS dont la sécurité et les données seraient respectivement gérées par Sharepoint et Azure.

Actuellement : Prototype livre, en prospection afin de trouver des clients et de lancer le développement du produit.

🔗
Reputatio - Janvier 2022 - Paris

Conseil en stratégie IT pour une petite agence de réputation spécialiste de Wikipédia. Ont été abordés les outils permettant d'assurer leur visibilité, ainsi que la gestion des connaissances et la veille autour de leurs clients.

🔗
Méritis/Mindquest - Septembre 2021 - Mars 2022 - Paris

Audit, développement et refactoring stratégique d’une API de gestion des données RH sous ASP.NET Core. Mise en place de nouvelles pratiques de développement et d’outillage CI. Réduction de la dette technique en parallèle d’échéances de livraison.
Mission suivie d'une prestation de développement d'un middleware de gestion des logs ASP.NET Core en TDD.

Mon arrivée sur le projet SIRH devait être celle d'un renfort, pour aider une équipe en difficulté à sortir à nouveau des fonctionnalité. Il s'est rapidement avéré que le problème n'était ni l'héroïsme des équipes, ni l'environnement humain, mais bien un code lordement endetté par des pratiques inadaptées.

Refaire le projet n'était comme souvent pas une option. Un audit a été conduit afin d'identifier les noeuds de complexité les plus problématiques. Un report des échéances a été négocié afin d'en résoudre le plus possible par ordre de priorité. Manque d'architecture, tests bâtard (ni d'intégration, ni vraiment fonctionnels) et code peu lisible ont été les principaux noeuds de complexité adressés.

Lorsque les reports sont devenus intenables, l'équipe a mis le projet en convalescence. Les livraisons de fonctionnalités prioritaires ont repris, plus lentement qu'auparavant cependant, afin de dégager du temps pour poursuivre l'assainissement.

Ma mission s'est terminée à cette période. J'ai ensuite été sollicité pour réaliser un middleware générique de gestion de logs pour ASP.NET Core. L'outil était intégralement réalisé en TDD et fut aussi un bon amusement vu le niveau en C# requis (réflexion, Expressions, tests récursifs, etc.)

🔗
SNAL/CBC Consult - Janvier 2021 - Mai 2021 - Région de Mulhouse

Développement au forfait d’un automate de traitement des débits et rejets entre le logiciel de facturation Chargebee et le format XML SEPA DirectDebit.

L'intérêt de ce projet, somme toute assez routinier, est d'être une démonstration achevée des bonnes pratiques que je prêche. Le besoin ne présente aucune difficulté particulière : il s'agit d'un pont très classique entre un logiciel de facturation (Chargebee) et le format d'échange interbancaire SEPA. Le pont fonctionne dans les deux sens : émission des ordres de débit et lecture des rejets.

Quelques détails sont inconnus au début du projet, certaines dépendances obligatoires sont intestables ou peu sûres, des couches anticorruption ont du être mises en place afin de rendre l'intestable plus prédictible et le peu sûr facilement remplaçable. Les détails d'implémentation dépendent du métier et non l'inverse (DI) et chaque composant, en plus d'être testé individuellement (tests fonctionnels), est mis en mouvement dans un tout plus grand (tests système), avant d'être relié au monde extérieur pour les tests les plus aboutis (tests d'intégration).

Le projet est réalisé en C# avec une architecture hexagonale. Cette architecture offre une grande surface d'accroche à d'autres bonnes pratiques, comme TDD, DDD, l'utilisation d'un framework d'IoC ou l'usage de tests de recette pour les démonstrations. La conjonction de ces techniques représente le sommet de la qualité dont j'étais capable lors de la sortie du projet.

Nous nous attendons à ce que ce projet soit détrôné par un autre, nos connaissances progressant sans cesse.

🔗
Groupe Atlantic/Younup - Août 2020 - La Roche sur Yon

Développement C#/.NET en contexte industriel et domotique au sein d'une équipe de 12 (développeurs et testeurs).

🔗
SNAL/CBC Consult - Juillet 2020 - Région de Mulhouse

Audit des performances d’une application. Approche orientée code : profilage, tests unitaires puis réalisation de POC présentant les améliorations possibles de l’existant.

Spotlights Et si l'Atelier participait à une startup ?

🔗
Spotlights SAS - Mai 2018 - Novembre 2019 - Paris

Spotlights est un journal innovant, participatif et géolocalisé qui s’adapte à l’usage du lecteur. Son fonctionnement est transparent et décentralisé grâce à l’usage de la blockchain.
J’ai réalisé l’intégralité du code en binôme avec un développeur junior. C#/ .NET fullstack. Blockchain et Event Sourcing sur toute la partie Data. CI/CD handmade (scripts Bash).

Spotlights est un média participatif décentralisé. Le site n'est hélas plus en ligne.

C'est autour d'une bande d'amis qu'a démarré le projet Spotlights en Mai 2018. De fil en aiguille, l'Atelier a été associé au projet et chargé d'en superviser le développement. Le projet était à la pointe des technologies du moment : blockchain, smart-maps, .NET Core. Le code était envisagé comme un squelette (ou tracer bullet en anglais), à savoir un code prévu pour avancer dans un environnement fonctionnel changeant ou incertain, permettant de lever itérativement les voiles de brouillard.

Le projet n'a pas trouvé son financement, le développement n'est pas arrivé à son terme, mais la méthode de développement utilisée a permis d'obtenir un code assez indépendant du monde extérieur, vieillissant très peu. La logique métier est découplée de l'infrastructure grâce à la Clean Architecture. Ainsi le projet peut rester en sommeil sans s'abîmer et ressortir un beau jour si des investisseurs se présentent.
Les principes du Clean Code, de DDD et TDD garantissent qu'un développeur reprennant le code pourra facilement se l'approprier, sans avoir besoin d'effectuer une obscure et coûteuse rétro-ingénierie.

Si Spotlights reprenait demain, l'Atelier serait bien évidemment de la partie.

Tous les logos appartiennent aux entreprises mentionnées.