Skip to content
<Thierno DIALLO/>

Thierno DIALLO

Senior Software Engineer

Hi, I'm Thierno. I'm based in Montpellier, where I work on the backend systems behind healthcare software that doctors use every day — from the first architecture sketch to reliable production code, and then the documentation that saves the next person from having to read my mind. I'm most drawn to problems where reliability, security, performance, and maintainability all want the front seat at once.

Technical Skills

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

Education

Engineering Degree (Diplôme d'ingénieur)

September 2018 – October 2021

École Centrale de Lyon

Selected through a competitive process for the double-degree program with École Supérieure Polytechnique de Dakar. This general engineering curriculum complemented a background that had until then been focused mainly on computing, giving me a broader view of engineering problems and the habit of working alongside engineers from other disciplines.

Engineering Degree in Computer Engineering (Diplôme d'ingénieur de conception)

October 2017 – October 2021

École Supérieure Polytechnique de Dakar

A selective engineering cycle, entered after my DUT, where I learned to design systems rather than only program them. It covered software engineering as a whole, and that breadth is still what my work rests on.

University Diploma of Technology (DUT) in Computer Science

October 2015 – July 2017

École Supérieure Polytechnique de Dakar

Admitted through a competitive entrance examination and a review of academic records. Two years of computer science that gave me my first technical foundation, and my first projects built for real users.

Professional Work

AI Agent Governance and Developer Enablement

January 2026 – Present

CompuGroup Medical (CGM)

As AI coding agents became part of daily work, their rapid adoption exposed inconsistent quality, duplicated effort, and the absence of shared standards. In response, I led the creation of a common framework for the team.

I authored a governance model that settles the essential questions: who owns a skill, how contributions are reviewed, how each one is tested independently and released in preview first, how skills compose, how activation rules keep two of them from competing for the same request, and what quality thresholds are expected before anything is shared. To make evaluation repeatable and objective, I designed a weighted scoring rubric and implemented a deterministic Python tool that scores skills and workflows, flags critical issues, and ranks improvements by impact.

I also built reusable agent skills the team could compose — Jira issue management, GitLab pipelines and merge requests, local Git operations, feature-environment resolution, automated quality evaluation, and Kubernetes diagnostics restricted to read-only investigation, so an agent can help diagnose a cluster without being able to change it. Two orchestration workflows combine those skills into structured troubleshooting and evaluation processes, each with an explicit contract, declared dependencies, safety guardrails, and defined failure handling.

The framework is used across the team. I still review contributions, help colleagues build and debug their own workflows, unblock them when an agent or a tool integration misbehaves, and adjust the model as feedback comes in.

OIDC Federated Authentication

March 2026 – July 2026

CompuGroup Medical (CGM)

Company-wide Single Sign-On was the next step for a multi-tenant healthcare SaaS platform used in several countries. I designed and implemented the enterprise identity-provider integration end to end. The decision that shaped everything else was to delegate authentication while keeping roles, permissions, and organizational access under the platform's control, and without removing the existing username-and-password login.

I owned the architecture, the security model, the Java/Quarkus implementation, the coordination with stakeholders, and the technical documentation. The integration uses the OIDC Authorization Code Flow with PKCE and Pushed Authorization Requests, with state and nonce validation.

Most of the difficulty was in what happens after the login. I designed server-side management of authentication state and external tokens, including refresh and cleanup tied to the session lifecycle, and a provider-agnostic identity-mapping model that refuses ambiguous account matches. I also solved callback routing for dynamic test environments without weakening redirect validation.

The integration is now in production and actively used by healthcare professionals, providing secure federated authentication while preserving internal authorization boundaries.

Zero-Downtime Storage Migration to Azure

February 2025 – November 2025

CompuGroup Medical (CGM)

Every clinical document on the platform passes through a single storage service, originally backed by self-hosted MinIO and one of the services I had helped build. When the company moved the platform to Azure, a colleague and I took on the storage workstream. Doctors use the product during their consultation hours, so there was no maintenance window long enough to move every document at once. The migration had to run with the platform live, and without losing a single file.

Rather than a single cutover, we made the service talk to both backends at once and moved the routing decision into the database: each MinIO tenant record pointed to the Azure tenant replacing it, and each clinic's bucket pointed to whichever tenant physically held it. Migrating a bucket became a database update instead of a deployment, and a feature toggle could send all traffic back to MinIO instantly, since nothing had been deleted there — precisely to preserve backward compatibility.

I wrote the Python migration tooling, run as a Kubernetes job: parallel copying, a bookkeeping table that made every run resumable, and object counts compared on both sides before any routing record was repointed — copy, verify, then switch. We ran it outside consultation hours, migrating a set of buckets, stopping, and later picking up where we had left off. I also wrote the backward-compatible read and write paths that let the two backends coexist while buckets moved across one by one.

The workstream ran for about nine months, from design through to the final cutover, with no downtime and no data loss. Once production had been stable on Azure, I owned the cleanup that removed the old implementation, its toggle, provisioning scripts, and dependencies.

Projects

Laajal Sa Diine

Laajal Sa Diine is a platform of short audio answers to everyday questions about Islam. I designed and built it on my own to make that kind of guidance easier to find: a React and TypeScript client on top of a Node.js REST API, with MongoDB holding the library and Amazon S3 the audio files.

The hardest part was content discovery: a weighted full-text index tuned for French ranks matches across several fields, while combinable filters and infinite scrolling make the library easier to explore. I also implemented JWT-protected administration, with separate permissions for content, administrator management, and backups.

Putting it into production was the other half of the work, and I wanted to own that path rather than hand it to a managed platform. I provisioned a Hetzner Cloud server myself, deployed the services with Docker, routed them through Traefik, and pointed DNS at it through Cloudflare.

The site is online today, used by listeners, and I still maintain it myself — the infrastructure as much as the code.

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

Waste-Container Fill-Level Alert System

GSF wanted its collection teams to know how full waste containers were before planning their routes. That became an academic project at École Centrale de Lyon between September 2019 and April 2020, where I was technical lead of the team building a connected system to measure fill levels and report them at regular intervals.

I led the electronics design and implementation, defining the communication path from an ultrasonic sensor and Arduino board to a LoRa gateway connected to GSF's servers. I wrote the Arduino/C++ firmware and configured measurements and transmissions at 30-minute intervals to limit device activity and conserve battery power.

I coordinated with the mechanical team, which used the school's FabLab to build an enclosure suited to a dirty and demanding environment. We field-tested the prototype in several containers. Without an intermediate relay, the LoRa link reached about 100 metres, which set the practical limit on how far a gateway could sit from a container.

The project strengthened my experience in embedded systems, low-power design, long-range communication, and multidisciplinary technical leadership.

  • Arduino
  • C++
  • LoRa
  • Ultrasonic Sensor

French Robotics Cup 2019 – Atom Factory

The 2019 French Robotics Cup asked teams to build autonomous robots for Atom Factory: a 100-second match with several scoring actions available and no prescribed order to perform them in. Strategy counted as much as reliable execution. I worked on École Centrale de Lyon's entry from September 2018 to June 2019.

As technical lead of the electronics team, I contributed extensively to the Python embedded software running on LEGO EV3 controllers, and coordinated the electronics work from implementation through to integration. Deciding what the robot would attempt in its 100 seconds meant working closely with the mechanical team, so that match strategy, physical capability, and software behavior all agreed.

We applied closed-loop control concepts from our ECL coursework to regulate the robots' movement and positioning. Our robots passed official homologation and competed in the event.

Very little of the result depended on the code alone: a strategy the mechanics could not execute cost exactly as many points as a mechanism the software could not drive.

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