Skip to content
A. Bekkour
Québec, Canada · Télétravail ou relocalisation · Disponible maintenant

Al Mokhtar
Bekkour

Je construis et fais évoluer des SaaS multilocataires — le genre qui fait tourner des milliers de locataires sur une plateforme, réglés pour qu'une requête lente ou un webhook facturé deux fois n'atteigne jamais le client.

Sept ans à livrer du SaaS et du fintech en production avec Rails, et Go pour les parties critiques en performance. En ce moment je suis responsable du backend — facturation, planification, génération de documents — d'une plateforme multilocataire servant plus de 1 000 entrepreneurs, et de l'AWS qui la fait tourner.

Ce que je veux
Senior ou staff — backend Rails / Go
Télétravail au Canada, ou relocalisation
Équipes distribuées qui livrent
Chiffres

7+ ans, senior

Requêtes Postgres 40 % plus rapides

1 000+ locataires sur une plateforme

Des milliers de jobs par mois

Disponible pour
Temps plein · Contrat · Conseil

Expérience

7+ ans, 5 postes
2021 — Auj.

C-CUBE

Ingénieur logiciel senior

Ingénieur principal sur un SaaS multilocataire pour plus de 1 000 entrepreneurs en toiture — je suis responsable du backend pour la facturation, la planification et la génération de documents. J'ai réduit le temps médian des requêtes de 40 % par l'indexation et la réécriture des requêtes, construit les jobs Sidekiq + AWS SQS qui traitent des milliers de générations de PDF, synchros d'e-mails et événements de facturation par mois, et introduit Go pour l'outillage CLI qui gère les opérations de données par locataire, les backfills et les migrations. Je gère l'AWS (EC2/RDS/S3), le CI/CD et la stack Prometheus/Grafana.

Rails · Go · PostgreSQL · AWS

2020 — 2021

Rounded

Ingénieur logiciel senior

Fonctionnalités de comptabilité et de conformité fiscale pour un SaaS fintech servant plus de 10 000 travailleurs autonomes australiens. Intégration de FreshBooks et Stripe pour une synchro des transactions en temps réel avec des exigences strictes d'exactitude financière, et automatisation de la facturation et du calcul des taxes — réduisant la saisie comptable manuelle des utilisateurs d'environ 60 %.

Rails · React · Stripe

2019 — 2020

HiFive Group

Ingénieur logiciel senior

ProCRM construit de zéro — un CRM pour des opérations de centres d'appels multinationaux entre Tanger et Londres. Schéma PostgreSQL conçu pour des millions d'enregistrements clients sous forte charge d'écriture, et les API REST et tableaux de bord en temps réel utilisés par la direction pour les KPI inter-bureaux.

Rails · Vue · PostgreSQL

2018 — 2019

AgriVillage

Ingénieur logiciel

Fonctionnalités de place de marché pour une plateforme d'agritourisme en France — réservations, paiements Stripe, gestion des annonces. Requêtes et cache optimisés pour garder les temps de réponse bas sous charge.

Rails · Nuxt · Stripe

2017 — 2018

Com en Scène

Ingénieur logiciel

Plus de 15 sites clients livrés et déploiements CMS maintenus en production pour un portefeuille varié. C'est là que j'ai appris à respecter l'échéance de quelqu'un d'autre.

PHP · Symfony · Drupal

App Academy (web full-stack) · OFPPT (informatique)

Stack

Backend

Ruby on Rails · Go · Sidekiq · REST · GraphQL

Données

PostgreSQL — optimisation, indexation, multilocataire · Redis · MySQL

Cloud & DevOps

AWS — EC2 · RDS · S3 · SQS · Lambda · Docker · Kubernetes · GitHub Actions

Observabilité

Prometheus · Grafana · Loki · OpenTelemetry

Paiements & intégrations

Stripe · QuickBooks · Chargebee · FreshBooks · Nylas · Intercom

Frontend

React · Ember · Vue · Nuxt · Hotwire

Ma façon de travailler

La plupart des pannes que j'ai gérées n'avaient rien d'intéressant — un index manquant, ou un webhook qui passe deux fois à la reprise. Je construis pour les deux avant qu'elles arrivent.

Ennuyeux, volontairement

Ma façon de voir

Je préfère livrer quelque chose d'ennuyeux qui marche plutôt que quelque chose d'astucieux que je dois surveiller. Une nouvelle techno doit faire ses preuves — j'ai entretenu assez de l'enthousiasme des autres.

Le code legacy n'est pas l'ennemi. Il fait tourner l'entreprise, et il marche en général pour des raisons qu'on ne voit pas en le lisant une fois. Je le lis avant de le changer, et je change le moins possible.

Le but : un système que la personne suivante comprend sans moi dans la pièce.

Moins de pièces mobiles que le problème ne semble en demander.

Ce qui a cassé, ce que j'ai changé

Ce qui a cassé

Une synchro partenaire a passé le même événement deux fois.

À la reprise, l'intégration financière rejouait un webhook — le genre de chose qui fausse discrètement la réconciliation jusqu'à ce que les chiffres cessent de concorder.

Fix Clés d'idempotence, handlers rejouables, contrôles de réconciliation. Maintenant une panne ne fait que retarder la synchro au lieu de corrompre les données.

Des requêtes correctes à quelques locataires rampaient à mille.

Mauvais index, et des formes de requête dont le vrai coût n'apparaissait qu'une fois les données de chaque locataire derrière le filtre.

Fix Index et requêtes repris — environ 40 % en moins sur le temps médian. Pas astucieux, juste nécessaire.

Les backfills tournaient en scripts Rake et ne montaient pas en charge.

Les opérations de données par locataire et les migrations étaient des scripts Rake ponctuels — bien sur un portable, pénibles sur des données de taille production.

Fix Déplacés vers de l'outillage CLI en Go. Le temps d'exécution des gros jobs a assez baissé pour qu'on cesse d'organiser l'entreprise autour.

Projets

Projets personnels

Constat

SaaS B2B

Un outil de capture façon jam.dev : un lien enregistre l'écran, la console et le réseau du client pour que le support rejoue le repro exact au lieu de lui demander d'expliquer. Une extension navigateur et un enregistreur TypeScript à l'avant, un backend Rails 8, et un service Go qui diffuse les téléversements par WebSockets.

Rails 8 · Go · Hotwire · WebSockets

Railyard

Systèmes distribués

Une plateforme de déploiement en un clic façon Cloud66 pour des apps Rails sur AWS — un orchestrateur Rails pilotant une flotte d'agents Go via gRPC. Routage par serveur, builds Docker, journaux de déploiement en direct.

Rails · Go · gRPC · Docker

Tally

Infra analytique

Une alternative auto-hébergée à Mixpanel — suivi d'événements, tunnels, rétention, détection d'anomalies et un tableau de bord en direct, avec des SDK sans dépendance pour Ruby, JavaScript, Python et Node. Rails 8, PostgreSQL, Solid Queue, Hotwire.

Rails 8 · PostgreSQL · Hotwire

Material Estimations

SaaS construction

Estimation pour la toiture et la construction — annoter les mesures sur un canevas de plans, calculer les coûts avec pertes, main-d'œuvre et TPS/TVQ canadiennes, exporter des rapports prêts à imprimer. Mon secteur exact chez C-CUBE, construit en solo. Vue 3, TypeScript, Pinia.

Vue 3 · TypeScript · Vite

Comment je raisonne

Études de cas

PDFify

SaaS HTML-vers-PDF

Quotas multilocataires, idempotence de la facturation Stripe, et une trace de réconciliation pour chaque document généré — une alternative à DocRaptor à environ moitié prix.

ErrorWatch

Suivi d'erreurs

Isolation des données multilocataires et un chemin critique qui reste sous 200 ms quand un seul déploiement le noie de milliers d'erreurs — empreintes déterministes pour les regrouper.

Service terrain

Mobile hors-ligne

Suivi du temps sans perte de données pour des techniciens sans réseau — une file hors-ligne ACID, du géorepérage GPS, et une résolution de conflits déterministe à la synchro.

Salah Watch

Systèmes embarqués

Calcul astronomique des heures de prière sur une montre Garmin — entièrement hors-ligne, GPS économe en énergie, cinq méthodes de calcul, implémenté à partir des principes de base sans bibliothèque externe.

Approche

Tout posséder de bout en bout — du schéma aux tableaux de bord

Je suis à l'aise pour posséder une fonctionnalité depuis la base de données où elle vit jusqu'à l'AWS qui la fait tourner. Ça se fait en général en trois passes.

Le schéma et les requêtes d'abord

Concevoir le Postgres pour le motif d'accès et le filtre multilocataire, et l'indexer avant que ça devienne un problème. C'est de là que vient le gain de 40 % chez C-CUBE — pas de l'astuce, juste façonner les données pour la façon dont elles sont réellement lues.

Jobs et intégrations

Le travail asynchrone passe sur Sidekiq + SQS — des milliers de générations de PDF, synchros et événements de facturation par mois. Les intégrations financières sont construites idempotentes et réconciliées dès le départ, pour qu'une reprise ou une panne partenaire ne corrompe jamais les chiffres.

L'infra et les yeux dessus

Ça tourne sur l'AWS que je gère — EC2, RDS, S3 — livré via GitHub Actions, surveillé via Prometheus et Grafana. Pour que, quand ça bouge, quelqu'un puisse vraiment le voir.

Du schéma aux tableaux de bord — une personne qui peut posséder toute la colonne.

Construit pour moi

De petites choses que j'utilise chaque jour, alors je les ai bien faites.

Contact

On se
parle.