Aller au contenu
Aziz BEN REJEB
Portrait de Mohamed Aziz BEN REJEB

Mohamed Aziz BEN REJEB

Software Architect & Lead Developer

Des systèmes qui évoluent. Une ingénierie qui dure.

Je conçois et pilote des plateformes logicielles distribuées, de la compréhension des enjeux métier jusqu'à l'architecture, au développement et à la mise en production.

Chez Hubency · ouvert aux échanges

Je conçois et pilote des plateformes logicielles distribuées, de la compréhension des enjeux métier jusqu'à l'architecture, au développement et à la mise en production.

  • Depuis 2011
  • Software Architecture
  • Technical Leadership

À propos

Je suis Lead Developer chez Hubency, où je pilote l'évolution de l'ERP interne d'un intégrateur de services spécialisé dans la gestion des déchets. Je conçois le socle technique, développe les fonctionnalités les plus complexes et travaille avec les Product Owners pour transformer les besoins métier en solutions durables et évolutives.

J'ai commencé en freelance en 2011, pendant mes études, avant de diriger une équipe de dix ingénieurs chez Haydar Technologies. Mon approche est pragmatique : comprendre avant de construire, privilégier la simplicité quand elle est possible et intégrer la sécurité dès la conception.

En dehors du travail, j'explore d'autres terrains techniques : impression 3D, robotique, homelab, intelligence artificielle exécutée en local et électronique. Je consacre également du temps à mon aquarium planté.

Ce qui me motive : comprendre les problèmes en profondeur et concevoir des systèmes utiles, robustes et capables de durer.

Expérience

  1. Depuis 2023

    Lead Developer · Hubency

    Pilotage technique de l'ERP interne : architecture, socle de la plateforme, fonctionnalités les plus difficiles, arbitrage des urgences de production et coordination des prestataires.

    • TypeScript
    • Node.js
    • RabbitMQ
    • MongoDB
    • Redis
    • Keycloak
    • Vue 3
  2. 2019 à 2023

    Lead Developer · Haydar Technologies

    Direction d'une équipe de dix ingénieurs en Scrum, revue de code et mentorat. Conception et livraison de TAIPAN, ADAPA et Volkswagen d3 GUI, avec Kubernetes et CI/CD GitLab sur serveurs bare metal.

    • Python
    • Go
    • Node.js
    • GraphQL
    • RabbitMQ
    • Keycloak
    • Kong
    • Kubernetes
  3. 2016 à 2019

    Développeur Full Stack · Atayen

    Coordination d'une équipe de dix, en contact direct avec le client. Wallet SaTT-Token, plateforme de trading 3xchange, stabilisation et sécurisation du CRM social Iframe-apps.

    • PHP
    • Symfony
    • Node.js
    • AngularJS
    • MongoDB
    • Solidity
    • Web3
  4. 2011 à 2022

    Consultant et développeur · Freelance

    Cahier des charges et infrastructure pour Boxstage, interfaces AngularJS pour Soomville, application de gestion de dossiers pour l'agence Continental Tours, plateforme de randonnée Wanderer Guide.

    • Symfony
    • Laravel
    • AngularJS

Formation

  1. 2013 à 2016

    Cycle d'ingénieur en informatique · ESPRIT, Tunis

    Projet de fin d'études chez One Solution : la plateforme Wanderer Guide, en Symfony.

  2. 2010 à 2013

    Licence en développement des systèmes informatiques · ISET CH, Tunis

    Stage de fin d'études : conception et réalisation du site de l'institut.

Expertise

Architecture et génie logiciel

  • Distributed Systems
  • Software Architecture
  • API Design
  • Scalability
  • Security by Design
  • Domain Modeling

Ingénierie backend

  • Node.js
  • Express.js
  • TypeScript / JavaScript
  • MongoDB
  • REST APIs
  • Event-driven Architecture

Infrastructure et DevOps

  • Linux
  • Docker
  • CI/CD
  • Deployment & Automation
  • Monitoring & Observability
  • Infrastructure Management

Leadership technique

  • Technical Strategy
  • Architecture Decisions
  • Code Reviews
  • Developer Mentoring
  • Product & Engineering Collaboration

Réalisations

Hubency · depuis 2023 · Lead Developer

L'ERP interne d'un intégrateur de services de gestion des déchets : un monorepo de microservices TypeScript et Node.js, et deux front-ends Vue 3 et Quasar.

Contexte

Deux front-ends, un back-office et un extranet client, partagent la même plateforme.

Problème

Un ERP doit répondre vite à ses utilisateurs, alors qu'une partie du travail est longue : produire des PDF, envoyer des e-mails, lire des documents. Ces traitements ne doivent pas bloquer l'API.

Architecture générique de l'ERP Le back-office et l'extranet client passent par une gateway, qui s'appuie sur le service d'authentification Keycloak et transmet aux API REST et extranet. Les API lisent et écrivent dans MongoDB et Redis. Pour un traitement long, l'API REST publie une tâche dans RabbitMQ ; un orchestrateur de workflows la distribue aux workers PDF, mail, scraper de mails, notifications, migrations et lecture de documents (OCR), qui déposent les fichiers sur le stockage de fichiers ou envoient les e-mails. Une tâche en échec part dans une dead-letter queue. échec Back-officeVue 3 · Quasar Extranet clientVue 3 · Quasar Gateway API extranet API REST AuthentificationKeycloak MongoDB Redis RabbitMQ Dead-letter queue Orchestrateurde workflows WorkersPDF · mail · scraper de mails · notificationsmigrations · lecture de documents (OCR) Stockage de fichiersserveurs dédiés E-mails
Vue générique, sans élément interne. Une requête traverse la gateway, qui s'appuie sur Keycloak, puis l'API, qui lit et écrit dans MongoDB et Redis. Un traitement long est publié dans RabbitMQ ; l'orchestrateur de workflows le distribue aux workers (PDF, mail, scraper de mails, notifications, migrations, lecture de documents par OCR), qui déposent un fichier sur le stockage de fichiers ou envoient un e-mail. Une tâche en échec part dans une dead-letter queue.

Architecture

  • Les traitements longs passent par RabbitMQ : l'API publie une tâche, un orchestrateur de workflows la distribue aux workers.
  • Les schémas, DTO et contrats vivent dans des bibliothèques partagées du monorepo (Turborepo), utilisées par tous les services.
  • Les données sont dans MongoDB (Mongoose, migrations), avec Redis et un stockage de fichiers.
  • Tests Jest, conteneurs Docker, intégration continue GitLab CI.
  • Ingénierie assistée par IA : agents Claude Code, revue et spécification automatisées.

Stack

  • TypeScript
  • Node.js
  • Express
  • MongoDB
  • Redis
  • RabbitMQ
  • Keycloak
  • Vue 3
  • Quasar
  • Turborepo
  • Jest
  • Docker
  • GitLab CI

Décisions et compromis

  • Les microservices ont été consolidés dans un monorepo, pour deux raisons : la gestion des versions et la simplicité des rollbacks.
  • Des microservices détaillés, découpés en plusieurs composants.
  • Pas de Kubernetes pour l'instant : ce serait du sur-dimensionnement tant que le besoin n'existe pas. La stack est déjà prête, le passage sera donc simple le jour venu.
  • L'infrastructure, d'abord provisionnée sur AWS avec Terraform, a été migrée vers des serveurs dédiés pour son coût.
  • Un système de migration de données simple.

Sécurité et fiabilité

  • L'authentification est confiée à Keycloak, sur lequel s'appuie la gateway.
  • Une tâche en échec est isolée dans une dead-letter queue.
  • Le monorepo garde les rollbacks simples.

Réalisation

  • J'ai co-conçu l'architecture microservices initiale (API, authentification, orchestrateur, mailer, services PDF et notification), puis co-piloté sa consolidation en monorepo.
  • Je porte le socle de la plateforme et je prends les fonctionnalités les plus difficiles de bout en bout.
  • Je prends les décisions d'architecture, et je cadre les demandes avec les Product Owners : faisabilité, chiffrage, spécification.
  • J'arbitre les urgences de production face à la roadmap, et je coordonne les prestataires externes : cadrage, revue de code, qualité de livraison.
  • Je suis le premier contributeur du code : 58 % des commits hors fusions (1 266 sur 2 174, novembre 2026).

Ce que j'en retiens

Je livre d'abord le MVP, et je ne cherche pas à couvrir 100 % des cas métier.

Haydar Technologies · 2019 à 2023 · Lead Developer

Un boîtier de test d'intrusion plug-and-play, conçu pour les pentesters et les RSSI.

Problème

Offrir aux pentesters et aux RSSI un test d'intrusion prêt à l'emploi : un boîtier qu'on branche, piloté depuis une interface web, avec des moteurs d'attaque qui peuvent aussi tourner à distance, sur d'autres machines. Ces moteurs doivent être authentifiés un par un.

Architecture de TAIPAN L'interface web et le noyau, en Flask. Le noyau utilise Redis pour le cache et les sessions des moteurs d'attaque, et les bases MongoDB et PostgreSQL. Il échange dans les deux sens avec les agents, trois sur le schéma, par un broker MQTT. Chaque agent porte des moteurs d'attaque, peut tourner à distance sur une autre machine et a son propre certificat. MQTT Interface webFlask · front-end NoyauFlask · back-end Rediscache · sessions des moteurs Bases de donnéesMongoDB · PostgreSQL Broker MQTT Agent 1moteurs d'attaquecertificat 1 Agent 2moteurs d'attaquecertificat 2 Agent 3moteurs d'attaquecertificat 3 Les agents peuvent tourner à distance, sur d'autres machines.
Vue d'ensemble. L'interface web et le noyau sont en Flask ; le noyau s'appuie sur Redis (cache et sessions des moteurs d'attaque) et sur MongoDB et PostgreSQL. Il échange avec les agents par un broker MQTT, dans les deux sens. Chaque agent porte des moteurs d'attaque, peut tourner à distance sur une autre machine et possède son propre certificat.

Architecture

  • L'architecture est proche de celle de l'ERP, mais les workers sont des agents, qui peuvent tourner à distance sur d'autres machines.
  • Les agents communiquent en MQTT.
  • Redis sert de cache et gère les sessions au niveau des moteurs d'attaque ; les données sont dans MongoDB et PostgreSQL.

Stack

  • Python
  • Flask
  • MQTT
  • Redis
  • RabbitMQ
  • MongoDB
  • PostgreSQL
  • Docker
  • Harbor
  • GitLab CI

Sécurité et fiabilité

  • Tout le système est géré par certificats : chaque agent a son propre certificat.
  • Les bonnes pratiques de sécurité sont appliquées dans le code : requêtes préparées, encodage des données, validation des entrées, contrôle des accès, journalisation.

Réalisation

  • J'ai pensé tout le système : l'infrastructure, dont j'ai dirigé la mise en place, et les workflows.
  • J'ai développé le noyau de l'application en Flask, front-end et back-end, et les moteurs d'attaque.
  • J'ai développé le back-office de gestion des clients et des licences.
  • J'ai mis en place les environnements de production, de test et de développement, avec la CI/CD GitLab et Harbor sur serveurs bare metal.
  • J'ai supervisé la migration sous-traitée vers une nouvelle version : cahier des charges, recette et suivi qualité des livraisons.
  • J'ai coordonné l'équipe : découpage, affectation des tâches, revue de code.
Haydar Technologies · Lead Developer

Une plateforme d'analyse de données et de calcul de réputation par intelligence artificielle.

Problème

Calculer une réputation par intelligence artificielle demande de collecter des données avec des crawlers, puis de les analyser : un travail réparti entre plusieurs workers, qu'il faut coordonner et suivre.

Architecture d'ADAPA Sur un cluster Kubernetes bare metal, l'interface React s'authentifie auprès de Keycloak (OpenID) et passe par l'API gateway Kong, configurée avec Keycloak, pour joindre l'API Node.js et Express. L'API publie le travail dans RabbitMQ ; l'orchestrateur délègue à chaque worker, crawler ou analyse, ses tâches. Un microservice suit, calcule et stocke les statistiques des crawlers dans les bases MongoDB et PostgreSQL. Grafana et Prometheus assurent la supervision. cluster Kubernetes · bare metal InterfaceReact AuthentificationKeycloak · OpenID API gatewayKong SupervisionGrafana · Prometheus APINode.js · Express RabbitMQ Orchestrateurdélègue les tâches Crawlersworkers Analyseworkers Statistiquesdes crawlers Bases de donnéesMongoDB · PostgreSQL
Vue d'ensemble, sur un cluster Kubernetes bare metal. L'interface React s'authentifie auprès de Keycloak (OpenID) et passe par l'API gateway Kong, configurée avec Keycloak, pour joindre l'API. L'API publie le travail dans RabbitMQ ; l'orchestrateur délègue à chaque worker, crawler ou analyse, ses tâches. Un microservice suit, calcule et stocke les statistiques des crawlers. Grafana et Prometheus assurent la supervision.

Architecture

  • Une architecture de type agents dès 2020, dans sa forme de l'époque : un orchestrateur délègue à chaque worker ses tâches, à travers RabbitMQ.
  • L'authentification repose sur Keycloak, fournisseur OpenID, configuré avec l'API gateway Kong.
  • L'API ajoute une couche sur Express, organisée en clean architecture.
  • Les statistiques des crawlers ont leur propre microservice.
  • Les données sont dans MongoDB et PostgreSQL ; la supervision passe par Grafana et Prometheus.

Stack

  • Node.js
  • Express
  • Python
  • React
  • RabbitMQ
  • Keycloak
  • Kong
  • MongoDB
  • PostgreSQL
  • Kubernetes
  • Harbor
  • Grafana
  • Prometheus

Réalisation

  • J'ai rédigé le document de spécification des exigences (SRS) et conçu la solution en UML : analyse fonctionnelle, architecture technique, composants à développer.
  • J'ai conçu et mis en œuvre l'architecture globale : microservices, broker de messages, workers et workflows.
  • J'ai développé l'API, une couche sur Express (Node.js) en clean architecture, et une librairie Python pour la connexion à RabbitMQ et la gestion des queues.
  • J'ai développé l'orchestrateur qui délègue à chaque worker ses tâches, et un microservice qui suit, calcule et stocke les statistiques des crawlers.
  • J'ai posé le socle de l'interface React : authentification Keycloak, menu, pages, routes, principaux formulaires et workflows.
  • J'ai mis en place le cluster Kubernetes sur serveurs bare metal, le registre Harbor pour les images Docker et les manifests de chaque mise en production.
Haydar Technologies · Lead Developer

Un système de distribution et de collecte de données vers les véhicules connectés. Le « GUI » du nom, c'est l'interface de monitoring que j'y ai apportée.

Contexte

Le backend qui distribue et collecte les données des véhicules connectés est réparti sur plusieurs clusters et serveurs.

Problème

Pour le surveiller, il fallait une interface de monitoring, une API pour l'alimenter, et des échanges authentifiés entre serveurs.

Architecture de Volkswagen d3 GUI L'interface de monitoring React interroge l'API GraphQL, découpée en microservices (Apollo, Express, Node.js), qui s'adresse aux services backend du système de distribution et de collecte de données. Ces services sont répartis sur plusieurs clusters Kubernetes, et les serveurs s'authentifient entre eux avec ZeroMQ. Un module, rétro-ingénieré, a été réécrit en Go. système de distribution et de collecte de données (backend) cluster Kubernetes cluster Kubernetes ZeroMQ Interface de monitoringReact API GraphQLmicroservices · Apollo · Express · Node.js Services backend Services backend authentification serveur à serveur avec ZeroMQ Module réécrit en Goaprès rétro-ingénierie
Vue d'ensemble. L'interface de monitoring React interroge l'API GraphQL, découpée en microservices (Apollo, Express, Node.js), qui s'adresse aux services backend du système de distribution et de collecte de données. Ces services sont répartis sur plusieurs clusters Kubernetes, et les serveurs s'authentifient entre eux avec ZeroMQ. Une partie de l'application, rétro-ingénierée, a été réécrite en Go.

Architecture

  • Toute l'API est en microservices GraphQL, avec Apollo sur Express et Node.js.
  • Les microservices sont répartis sur plusieurs clusters Kubernetes.
  • La partie rétro-ingénierée a été réécrite en Go.
  • Les données sont dans MongoDB ; l'infrastructure passe par Terraform et Ansible.

Stack

  • React
  • GraphQL
  • Apollo
  • Node.js
  • Express
  • Go
  • ZeroMQ
  • MongoDB
  • Kubernetes
  • Terraform
  • Ansible

Sécurité et fiabilité

  • Les serveurs s'authentifient entre eux avec ZeroMQ.
  • Les clusters Kubernetes sont sécurisés selon les bonnes pratiques.

Réalisation

  • J'ai apporté le front qui sert à monitorer la partie backend : c'est le « GUI » du nom.
  • J'ai fait la conception globale de l'application, et mis en œuvre l'architecture microservices, avec la place de chaque élément sur les différents clusters et serveurs.
  • J'ai développé toute l'API en microservices GraphQL (Apollo, Express, Node.js), et le socle React : menu, datatables, pages principales.
  • J'ai développé l'authentification serveur à serveur avec ZeroMQ, et appliqué les bonnes pratiques de sécurisation des clusters Kubernetes.
  • J'ai rétro-ingénieré une partie de l'application et je l'ai réécrite en Go.
  • Revue de code, refactorisation et correction de bugs ; coordination de l'équipe, découpage et affectation des tâches.

Open source

  • GitHub

    agent-standup

    Vos sessions Claude Code, Codex et Mistral Vibe sous forme d'appel d'équipe animé, en direct : qui travaille, qui attend qui, qui a besoin de vous. Extension VS Code, commande terminal, application de bureau. Tourne en local, zéro token.

  • Python

    asiahorse-umbra-linux

    Pilotage natif sous Linux du hub ARGB AsiaHorse Umbra, documentation complète du protocole incluse.

  • C++

    otto

    Firmware étendu et application Android pour un robot bipède Otto DIY, en Bluetooth : 17 danses, évitement d'obstacles, suivi de la main, un moonwalk chanté.

En dehors du code

  • Impression 3D

    Passer du modèle à l'objet : une autre façon de concevoir, avec les contraintes de la matière.

  • Robotique et électronique

    Un robot bipède Otto DIY, piloté en Bluetooth : j'ai étendu son firmware et écrit son application Android (otto).

  • Homelab et auto-hébergement

    Quand un matériel n'a pas de logiciel pour Linux, je l'écris : c'est le cas du hub ARGB AsiaHorse Umbra, dont j'ai documenté le protocole (asiahorse-umbra-linux).

  • IA locale et LLM

    Faire tourner l'intelligence artificielle en local, et outiller le travail avec les agents : agent-standup, par exemple, tourne en local, zéro token.

  • Aquarium planté

    Un aquarium planté, auquel je consacre du temps : un système vivant, qui se règle avec patience.

Un défi technique intéressant ? Parlons-en.

Pour parler d'un sujet technique ou simplement faire connaissance, le plus simple est de m'écrire.

mohamedazizbenrejeb@gmail.com

© Mohamed Aziz BEN REJEB

Schéma

aziz@azizbr.fr: ~