Skip to content
<Thierno DIALLO/>

Thierno DIALLO

Ingénieur logiciel senior

Bonjour, moi c'est Thierno. Je vis à Montpellier, où je travaille sur les systèmes backend de logiciels de santé utilisés chaque jour par des médecins : depuis la première esquisse d'architecture jusqu'au code fiable en production, puis la documentation qui évite à la personne suivante de devoir lire dans mes pensées. Les problèmes qui m'attirent le plus sont ceux où fiabilité, sécurité, performance et maintenabilité veulent toutes passer devant en même temps.

Compétences techniques

  • Java
  • Quarkus
  • Python
  • OAuth 2.0
  • OpenID Connect
  • PostgreSQL
  • Docker
  • Kubernetes
  • Microsoft Azure
Thierno DIALLO

Formations

Diplôme d'ingénieur

Septembre 2018 – Octobre 2021

École Centrale de Lyon

Retenu à l'issue d'un processus sélectif pour intégrer le programme de double diplôme avec l'École Supérieure Polytechnique de Dakar. Ce cursus généraliste est venu compléter une formation jusque-là essentiellement centrée sur l'informatique, en m'apportant une vision plus transversale de l'ingénierie et l'habitude de collaborer avec des ingénieurs d'autres disciplines.

Diplôme d'ingénieur de conception – Génie informatique

Octobre 2017 – Octobre 2021

École Supérieure Polytechnique de Dakar

Un cycle ingénieur sélectif, intégré après mon DUT, où j'ai appris à concevoir des systèmes et plus seulement à les programmer. Il couvrait l'ingénierie logicielle dans son ensemble, et c'est sur cette base large que repose encore mon travail.

Diplôme universitaire de technologie (DUT) – Informatique

Octobre 2015 – Juillet 2017

École Supérieure Polytechnique de Dakar

Admis à l'issue d'un concours d'entrée et d'une sélection sur dossier. Deux années d'informatique qui m'ont donné mon premier socle technique et mes premiers projets destinés à de vrais utilisateurs.

Travail professionnel

Gouvernance des agents IA et accompagnement des développeurs

Janvier 2026 – Aujourd'hui

CompuGroup Medical (CGM)

L'arrivée des agents IA de développement dans notre quotidien a rapidement fait apparaître une qualité inégale, des efforts dupliqués et l'absence de standards communs. Pour y remédier, j'ai piloté la création d'un cadre commun pour l'équipe.

J'ai défini un modèle de gouvernance qui répond aux questions essentielles : qui est responsable d'un skill, comment les contributions sont revues, comment chacun est testé indépendamment puis diffusé d'abord en préversion, comment les skills se composent, comment les règles d'activation évitent que deux d'entre eux se disputent la même demande, et quels seuils de qualité sont attendus avant tout partage. Pour rendre l'évaluation reproductible et objective, j'ai conçu une grille de notation pondérée et développé un outil déterministe en Python qui note les skills et les workflows, signale les problèmes critiques et classe les améliorations selon leur impact.

J'ai également créé des skills réutilisables que l'équipe peut combiner : gestion des tickets Jira, pipelines et merge requests GitLab, opérations Git locales, identification des environnements de fonctionnalités, évaluation automatisée de la qualité, et diagnostic Kubernetes limité à l'investigation en lecture seule, afin qu'un agent puisse aider à diagnostiquer un cluster sans pouvoir le modifier. Deux workflows d'orchestration combinent ces skills dans des processus structurés de diagnostic et d'évaluation, chacun avec un contrat explicite, des dépendances déclarées, des garde-fous de sécurité et une gestion des échecs définie.

Ce cadre est utilisé par l'équipe. Je continue à évaluer les contributions, à aider mes collègues à créer et déboguer leurs propres workflows, à les débloquer lorsqu'un agent ou une intégration d'outil se comporte mal, et à faire évoluer le modèle au fil des retours.

Authentification fédérée avec OIDC

Mars 2026 – Juillet 2026

CompuGroup Medical (CGM)

L'authentification unique à l'échelle du groupe représentait l'étape suivante pour une plateforme SaaS de santé multi-tenant utilisée dans plusieurs pays. J'ai conçu et implémenté de bout en bout l'intégration d'un fournisseur d'identité d'entreprise. La décision qui a structuré tout le reste a été de déléguer l'authentification tout en conservant la gestion des rôles, des autorisations et des périmètres organisationnels au sein de la plateforme, et sans supprimer le mode de connexion existant par identifiant et mot de passe.

J'ai pris en charge l'architecture, le modèle de sécurité, l'implémentation Java/Quarkus, la coordination avec les parties prenantes et la documentation technique. L'intégration utilise le flux OIDC Authorization Code avec PKCE et les Pushed Authorization Requests, ainsi que la validation de state et de nonce.

L'essentiel de la difficulté se situait après la connexion. J'ai conçu la gestion côté serveur de l'état d'authentification et des jetons externes, notamment leur renouvellement et leur suppression synchronisée avec le cycle de vie de la session, ainsi qu'un modèle d'association des identités indépendant du fournisseur qui refuse les correspondances ambiguës. J'ai également résolu le routage des callbacks pour des environnements de test dynamiques sans assouplir la validation des URI de redirection.

L'intégration est désormais en production et activement utilisée par des professionnels de santé, offrant une authentification fédérée sécurisée tout en préservant les frontières internes d'autorisation.

Migration du stockage vers Azure sans interruption de service

Février 2025 – Novembre 2025

CompuGroup Medical (CGM)

Tous les documents cliniques de la plateforme passent par un unique service de stockage, initialement adossé à une instance MinIO auto-hébergée que j'avais contribué à développer. Lorsque l'entreprise a migré la plateforme vers Azure, un collègue et moi avons pris en charge le volet stockage. Les médecins utilisent le produit pendant leurs journées de consultation : il n'y avait donc pas de fenêtre de maintenance suffisante pour migrer tous les documents en une fois. La migration devait se faire plateforme en fonctionnement, sans perdre un seul fichier.

Plutôt qu'une bascule unique, nous avons rendu le service capable de dialoguer avec les deux systèmes de stockage en même temps, et déplacé la décision de routage dans la base de données : chaque tenant MinIO pointait vers le tenant Azure qui le remplaçait, et le bucket de chaque cabinet pointait vers celui qui le détenait physiquement. Migrer un bucket devenait une mise à jour en base plutôt qu'un déploiement, et un feature toggle permettait de renvoyer instantanément tout le trafic vers MinIO, puisque rien n'y avait été supprimé, précisément pour assurer la rétrocompatibilité.

J'ai développé l'outillage de migration en Python, exécuté comme job Kubernetes : copie parallélisée, table de suivi rendant chaque exécution reprenable, et comparaison du nombre d'objets des deux côtés avant tout basculement du routage : copier, vérifier, puis basculer. Nous le lancions en dehors des heures de consultation, migrant un ensemble de buckets, puis nous arrêtions et reprenions plus tard là où nous nous étions arrêtés. J'ai également écrit les chemins de lecture et d'écriture rétrocompatibles permettant aux deux systèmes de coexister pendant que les buckets basculaient un à un.

Le chantier s'est étendu sur environ neuf mois, de la conception à la bascule finale, sans interruption de service ni perte de données. Une fois la production stabilisée sur Azure, j'ai pris en charge le nettoyage : suppression de l'ancienne implémentation, du feature toggle, des scripts de provisionnement et des dépendances.

Projets

Laajal Sa Diine

Laajal Sa Diine est une plateforme de réponses audio courtes aux questions du quotidien sur l'islam. Je l'ai conçue et développée seul pour rendre ces réponses plus faciles à trouver : une application cliente en React et TypeScript, une API REST Node.js, MongoDB pour la bibliothèque et Amazon S3 pour les fichiers audio.

Le plus difficile a été la recherche de contenus : un index plein texte pondéré et configuré pour le français classe les correspondances sur plusieurs champs, tandis que des filtres combinables et le défilement infini facilitent l'exploration de la bibliothèque. J'ai également mis en place une administration protégée par JWT, avec des droits distincts pour la gestion des contenus, des administrateurs et des sauvegardes.

La mise en production a représenté l'autre moitié du travail, et je voulais maîtriser ce chemin plutôt que de le confier à un hébergement entièrement managé. J'ai provisionné moi-même un serveur Hetzner Cloud, déployé les services avec Docker, assuré leur routage avec Traefik et fait pointer les enregistrements DNS via Cloudflare.

Le site est en ligne aujourd'hui, utilisé par des auditeurs, et je continue de le maintenir moi-même — l'infrastructure autant que le code.

  • React
  • TypeScript
  • Node.js
  • Express
  • MongoDB
  • Amazon S3
  • Docker
  • Traefik
  • Cloudflare
  • Hetzner Cloud

Système d'alerte du niveau de remplissage des conteneurs à déchets

GSF souhaitait que ses équipes de collecte connaissent le niveau de remplissage des conteneurs avant de planifier leurs tournées. Ce besoin est devenu un projet académique à l'École Centrale de Lyon, de septembre 2019 à avril 2020, où j'ai assuré la direction technique de l'équipe chargée de concevoir un système connecté capable de mesurer ce niveau et de le transmettre à intervalles réguliers.

J'ai piloté la conception et la réalisation du système électronique, en définissant la chaîne de communication reliant un capteur à ultrasons et une carte Arduino à une passerelle LoRa connectée aux serveurs de GSF. J'ai développé le firmware Arduino en C++ et configuré une mesure et une transmission toutes les 30 minutes afin de limiter l'activité du dispositif et de préserver la batterie.

J'ai coordonné le travail avec l'équipe mécanique, qui a utilisé le FabLab de l'école pour fabriquer un boîtier adapté à un environnement sale et contraignant. Nous avons testé le prototype sur le terrain dans plusieurs conteneurs. Sans relais intermédiaire, la liaison LoRa portait à environ 100 mètres, ce qui fixait la distance maximale entre une passerelle et un conteneur.

Ce projet a renforcé mon expérience des systèmes embarqués, de la conception basse consommation, des communications longue portée et du pilotage technique multidisciplinaire.

  • Arduino
  • C++
  • LoRa
  • Ultrasonic Sensor

Coupe de France de Robotique 2019 – Atom Factory

L'édition 2019 de la Coupe de France de Robotique demandait aux équipes de construire des robots autonomes pour Atom Factory : un match de 100 secondes offrant plusieurs actions rapportant des points, sans ordre imposé. La stratégie comptait autant que la fiabilité d'exécution. J'ai travaillé sur la participation de l'École Centrale de Lyon de septembre 2018 à juin 2019.

En tant que responsable technique de l'équipe électronique, j'ai contribué activement au logiciel embarqué en Python exécuté sur des contrôleurs LEGO EV3, et coordonné le travail électronique de l'implémentation jusqu'à l'intégration. Décider de ce que le robot tenterait en 100 secondes supposait un travail étroit avec l'équipe mécanique, afin que la stratégie de match, les capacités physiques et le comportement logiciel s'accordent.

Nous avons appliqué des notions de commande en boucle fermée étudiées à l'ECL afin de réguler le déplacement et le positionnement des robots. Nos robots ont obtenu leur homologation officielle et participé à la compétition.

Le résultat dépendait très peu du code seul : une stratégie que la mécanique ne pouvait pas exécuter coûtait exactement autant de points qu'un mécanisme que le logiciel ne pouvait pas piloter.

  • Python
  • LEGO MINDSTORMS EV3
  • Embedded Systems
  • Closed-Loop Control