Skip to content
A. Bekkour
Canada · Remote or relocation · Available now

Al Mokhtar
Bekkour

I'm the engineer you bring in when a running system has to change and can't go down while it does — zero-downtime migrations and rewrites.

Seven years in Rails, plus Go where it has to be fast. I'm usually the person brought in when an old system has to change and can't be down while it does. One step at a time, not a big rewrite weekend.

What I want
Senior or staff — Rails / backend
Remote in Canada, or relocate
Small teams that actually ship
Numbers

7+ years, senior

40% faster critical Postgres queries

1,000+ tenants on one platform

~60% less manual bookkeeping

Open to
Full-time · Contract · Advisory

Experience

7+ years, 5 jobs
2021 — Now

C-CUBE

Senior Software Developer

Multi-tenant platform for 1,000+ roofing contractors. I got the critical Postgres queries 40% faster, and built the QuickBooks / Chargebee / Nylas sync so a partner being down just delays things instead of corrupting data. Ran the AWS side too — jobs, CI, deploys.

Rails · PostgreSQL · AWS

2020 — 2021

Rounded

Senior Software Developer

Money features for ~10,000 freelancers. FreshBooks and Stripe sync, where a rounding error turns into a support ticket. Built the invoicing and tax automation that cut manual bookkeeping by roughly 60%.

Rails · Stripe · PostgreSQL

2019 — 2020

HiFive Group

Senior Software Developer

Built a CRM from scratch for call centers in Tangier and London — millions of records. Designed the Postgres schema for heavy writes and the APIs behind the live dashboards.

Rails · PostgreSQL

2018 — 2019

AgriVillage

Software Developer

Agritourism marketplace — bookings, Stripe, listings. Made the slow pages fast with better queries and caching.

Rails · Stripe

2017 — 2018

Com en Scène

Software Developer

15+ client sites in PHP, Symfony and Drupal. Where I learned to hit someone else's deadline.

PHP · Symfony · Drupal

App Academy (full-stack web) · OFPPT (computer science)

Stack

Backend & data

Ruby on Rails · Go · PostgreSQL · Redis · Elasticsearch

Cloud & delivery

AWS · Docker · Heroku · CircleCI · GitHub Actions

Payments & finance

Stripe · Chargebee · QuickBooks

Integrations

Nylas · Intercom · Postmark · Mixpanel · Slack

Monitoring

Sentry · AppSignal · Rollbar · Skylight

Frontend & testing

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

How I work

The outages I've dealt with were rarely interesting — usually a missing index, or a webhook that ran twice on retry. That's where I look first.

Boring on purpose

How I think about it

I'd rather ship something boring that works than something clever I have to babysit. New tools have to earn their place — I've maintained enough of other people's excitement.

Legacy code isn't the enemy. It's running the business, and it usually works for reasons that aren't obvious from reading it once. I read it before I change it, and I change as little as I can get away with.

The goal is a system the next person can understand without me in the room.

Fewer moving parts than the problem seems to need.

What broke, what I changed

Things that broke

A partner API went down mid-sync.

The handlers weren't idempotent, so retries applied the same webhook twice. Nobody noticed until the numbers stopped reconciling.

Fix Idempotency keys, replay-safe handlers. Now an outage just delays the sync.

Queries fine at 10 tenants died at 1,000.

Wrong index, and a query shape that only showed its cost once the tenant filter had real data behind it.

Fix Reworked the queries and the indexes. ~40% off the critical paths. Not clever — just necessary.

One tenant could, in theory, see another.

Isolation was assumed in the app layer and never actually tested. The kind of bug that's invisible until it's a breach.

Fix Made tenant scoping the default and put it under tests, so it's structural instead of something you remember to do.

Work

Side projects

Constat

B2B SaaS

Bug reports without making the customer explain. One link records their screen, console and network; support replays it. Rails 8 + Hotwire, a Go service streaming the uploads over WebSockets, a TypeScript recorder and a Chrome extension. Four ways in, one backend.

Rails 8 · Go · Hotwire · WebSockets

Railyard

Distributed systems

A Rails control plane running a fleet of Go agents over gRPC. Per-server routing, Docker builds, deploy logs streaming live. Rails for the product, Go for the load.

Rails · Go · gRPC · Docker

Case

Rewriting a SaaS without taking the business down

The scary part of a rewrite isn't the code. It's losing customers or data while it happens. Here's how I avoid that.

What I usually find

An old system where one change can break everything — tight coupling, no seams, tests nobody trusts. The reflex is to rewrite it from scratch. That's what kills companies: months frozen, then a new system carrying the old one's bugs.

What I do instead

Cut seams into the running system. Move one slice at a time, behind the live product, with the data intact. Rails stays the product; Go takes the parts that need the speed. Every step ships, and every step can be undone.

What happens

The business keeps shipping features while the architecture changes underneath it. No migration weekend, no freeze, nothing the customer sees.

A lot of small, dull, reversible decisions. That's it.

Contact

Get in
touch.