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

Al Mokhtar
Bekkour

Je suis l'ingénieur qu'on appelle quand un système en production doit changer et ne peut pas s'arrêter pendant ce temps — migrations et réécritures sans interruption.

Sept ans en Rails, et Go quand ça doit être rapide. On m'appelle en général quand un vieux système doit changer sans pouvoir s'arrêter pendant ce temps. Une étape à la fois, pas une réécriture d'un week-end.

Ce que je veux
Senior ou staff — Rails / backend
Télétravail au Canada, ou relocalisation
Petites équipes qui livrent vraiment
Chiffres

7+ ans, senior

Requêtes Postgres critiques 40 % plus rapides

1 000+ locataires sur une plateforme

~60 % de saisie comptable manuelle en moins

Disponible pour
Temps plein · Contrat · Conseil

Expérience

7+ ans, 5 postes
2021 — Auj.

C-CUBE

Développeur logiciel senior

Plateforme multilocataire pour plus de 1 000 entrepreneurs en toiture. J'ai rendu les requêtes Postgres critiques 40 % plus rapides, et construit la synchro QuickBooks / Chargebee / Nylas pour qu'une panne d'un partenaire retarde les choses au lieu de corrompre les données. Je gérais aussi le côté AWS — jobs, CI, déploiements.

Rails · PostgreSQL · AWS

2020 — 2021

Rounded

Développeur logiciel senior

Fonctionnalités d'argent pour ~10 000 travailleurs autonomes. Synchro FreshBooks et Stripe, où une erreur d'arrondi devient un billet de support. J'ai construit la facturation et l'automatisation des taxes qui ont réduit la saisie manuelle d'environ 60 %.

Rails · Stripe · PostgreSQL

2019 — 2020

HiFive Group

Développeur logiciel senior

CRM construit de zéro pour des centres d'appels à Tanger et Londres — des millions d'enregistrements. Schéma Postgres pensé pour de grosses écritures, et les API derrière les tableaux de bord en direct.

Rails · PostgreSQL

2018 — 2019

AgriVillage

Développeur logiciel

Place de marché d'agritourisme — réservations, Stripe, annonces. Pages lentes rendues rapides avec de meilleures requêtes et du cache.

Rails · Stripe

2017 — 2018

Com en Scène

Développeur logiciel

Plus de 15 sites clients en PHP, Symfony et Drupal. 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 & données

Ruby on Rails · Go · PostgreSQL · Redis · Elasticsearch

Cloud & livraison

AWS · Docker · Heroku · CircleCI · GitHub Actions

Paiements & finance

Stripe · Chargebee · QuickBooks

Intégrations

Nylas · Intercom · Postmark · Mixpanel · Slack

Monitoring

Sentry · AppSignal · Rollbar · Skylight

Frontend & tests

Ember.js · Hotwire · Vue · TypeScript · RSpec · Playwright

Ma façon de travailler

Les pannes que j'ai gérées étaient rarement intéressantes — souvent un index manquant, ou un webhook qui passe deux fois à la reprise. C'est là que je regarde en premier.

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 API partenaire est tombée en pleine synchro.

Les handlers n'étaient pas idempotents : à la reprise, le même webhook passait deux fois. Personne ne l'a vu avant que les chiffres cessent de concorder.

Fix Clés d'idempotence, handlers rejouables. Maintenant une panne ne fait que retarder la synchro.

Des requêtes correctes à 10 locataires mouraient à 1 000.

Mauvais index, et une forme de requête dont le coût n'apparaissait qu'avec de vraies données derrière le filtre par locataire.

Fix Requêtes et index repris. ~40 % en moins sur les chemins critiques. Pas astucieux — juste nécessaire.

Un locataire pouvait, en théorie, en voir un autre.

L'isolation était supposée dans l'app et jamais testée. Le genre de bogue invisible jusqu'à la fuite.

Fix Cloisonnement par locataire mis par défaut et couvert par des tests : structurel, pas un truc à se rappeler.

Projets

Projets personnels

Constat

SaaS B2B

Des rapports de bogues sans faire expliquer le client. Un lien enregistre son écran, sa console et son réseau ; le support rejoue. Rails 8 + Hotwire, un service Go qui diffuse les téléversements par WebSockets, un enregistreur TypeScript et une extension Chrome. Quatre entrées, un seul backend.

Rails 8 · Go · Hotwire · WebSockets

Railyard

Systèmes distribués

Un plan de contrôle Rails qui pilote une flotte d'agents Go via gRPC. Routage par serveur, builds Docker, journaux de déploiement en direct. Rails pour le produit, Go pour la charge.

Rails · Go · gRPC · Docker

Cas

Réécrire un SaaS sans arrêter l'entreprise

Ce qui fait peur dans une réécriture, ce n'est pas le code. C'est de perdre des clients ou des données pendant. Voici comment je l'évite.

Ce que je trouve en général

Un vieux système où un changement peut tout casser — couplage fort, aucune couture, des tests que personne ne croit. Le réflexe, c'est de tout réécrire. C'est ça qui tue les entreprises : des mois gelés, puis un nouveau système qui porte les bogues de l'ancien.

Ce que je fais à la place

Je crée des coutures dans le système en production. Une tranche à la fois, derrière le produit vivant, avec les données intactes. Rails reste le produit ; Go prend les parties qui ont besoin de vitesse. Chaque étape se livre, et chaque étape s'annule.

Ce qui se passe

L'entreprise continue de livrer pendant que l'architecture change dessous. Aucun week-end de migration, aucun gel, rien que le client ne voie.

Beaucoup de petites décisions ennuyeuses et réversibles. C'est tout.

Contact

On se
parle.