Software Engineer at ABS Courier · Cairo, Egypt

Yousef Alaa Adel

Backend engineer who makes systems hold up at scale.

For two years I've been building the backend of ABS Courier's new shipment platform with NestJS, PostgreSQL and Redis. I tune queries on tables with tens of millions of rows, keep transactions and lock windows short, and moved millions of legacy rows into production while the old system kept running.

Portrait of Yousef Alaa Adel in a navy suit
Commits to the production platform
600+
Pull requests merged
136
Rows in the largest table I tuned
24M
Of the migration & CDC code, as primary developer
77%
01 · Experience

The backend of a live courier platform.

Software Engineer

ABS Courier

Sep 2024 – PresentCairo, Egypt

I'm on the backend team for the company's new shipment platform: the system clients, couriers and employees use every day to create, move and track shipments. I've shipped 600+ commits across shipments, fleet, ticketing and reporting. Most of my work is in the parts that have to stay fast and correct under load: the database, the background jobs, and the migration off the legacy platform.

  • NestJS · Fastify
  • TypeScript
  • PostgreSQL
  • SQL Server CDC
  • Redis
  • Bull queues
  • TypeORM
  • Jest
  • GitHub Actions
  • Docker
02 · Flagship project

Moving a courier business off its legacy database, while it kept running.

I was the primary developer of the NestJS/TypeScript service that migrated millions of rows from the legacy SQL Server system into the new PostgreSQL production database, then kept the two in sync through Change Data Capture.

Role
Primary developer
Team
3 engineers
Ownership
77% of the code
Tests
27 Jest suites
Schema
15 legacy → 19 normalized tables
Every 30 minutes the engine reads changes starting from the (LSN, seqval) cursor it stores in PostgreSQL, applies them in foreign-key order in bounded batches, then saves the new cursor. During peak hours it stands down so the live legacy database isn't put under extra load.
Resumable by design

A failed run resumes from its last checkpoint, not from zero.

Shipments, accounts, pickups, call-center records, tickets and client users moved with checkpointed resume, automatic retries and SMS alerts on failure. Bounded batches let the sync catch up large backlogs without long-running transactions.

Partition-aware bulk upserts

Re-runs update the right partition instead of duplicating rows.

I replaced row-by-row writes with set-based statements into a shipment table range-partitioned on (awb, created_at). Preloaded lookup caches removed the N+1 queries.

INSERT INTO shipment
  (awb, created_at, …)
VALUES (…), (…)
ON CONFLICT (awb, created_at)
DO UPDATE SET
  status = EXCLUDED.status;
Bilingual data cleansing

Messy legacy addresses, resolved in Arabic and English.

A district resolver tries exact names, then a 450+ entry curated map, then fuzzy matching. It runs alongside Arabic text and Egyptian phone-number normalization.

  • مدينه نصر
  • Madinet Nasr 
  • nasr city
Nasr City
  1. exact
  2. curated map
  3. fuzzy
03 · Performance & scale

Making it hold up when the tables get big.

A few of the problems I've tracked down and fixed on the production platform.

24M rows

Indexing shipment history

Report subqueries were sorting shipment history row by row. A partial, sort-ordered index lets PostgreSQL read the rows already in order, so the per-row sort becomes an index seek.

CREATE INDEX … ON shipment_history
  (awb, audit_date DESC)
WHERE reason_id IS NOT NULL;
BeforeSortper row, inside every subquery
AfterIndex seekrows read already in order
36 → 1

Removing N+1 queries

The yearly wallet report ran 36 sequential queries. I rewrote it as one grouped query that scans only the requested year's partitions, and batched per-row updates into one UPDATE … FROM (VALUES …) per 500 rows.

Before
After
5 workers / 20 conns

Fixing platform-wide timeouts

Timeouts during bulk imports traced back to connection-pool starvation: five workers holding long transactions on a 20-connection pool. Validation now runs outside the write transaction, in short chunks under lock_timeout with per-AWB advisory locks.

Before
After
  • Tuned worker concurrency
  • Dropped unneeded FOR UPDATE
  • Validation out of the write txn
  • Advisory locks per AWB
Flat memory

Streaming background exports

CSV exports run on Bull queues, read with keyset pagination and stream to disk with backpressure, so memory stays flat at any size. Files are zipped to private storage behind 24-hour signed URLs.

  1. Bull queue
  2. keyset pages
  3. stream
  4. zip
  5. signed URL
04 · Core systems

What I built that the business runs on.

AWB registry & allocation

The system that issues every air waybill number.

Manual and generated ranges, sequential and random alphanumeric formats, and safe claiming under concurrent load. Many workers can ask for numbers at once and no number is handed out twice.

Bulk shipment import

Whole shipment batches from a single upload.

NDJSON uploads run in queues with row-level validation, live progress and automatic client notification on failure. Redis execution locks keep a retried job from writing twice.

Fleet management

Cars, drivers, missions, trip logs and driver-to-driver handover, plus the backend for the fleet mobile app.

Employee ticketing

Most of the internal ticketing system: filtering, search, sorting, pagination and ticket analytics.

International & timezones

International shipment flows and app-wide timezone support, including timezone-aware date-range filtering.

Testing, CI & security

Every endpoint under test.

I built the shared end-to-end test setup and its GitHub Actions pipeline, with smoke, regression and authorization suites covering every endpoint. I also added a tenant guard that limits client writes to their own sub-accounts, and ran API security testing across the platform.

  • smoke
  • regression
  • authorization
  • tenant guard
Also shipped
  • WebSocket gateway for shipment creation
  • Delivery OTP verification
  • Shipment rerouting & address changes
  • Payment gateway integration
  • SMS & WhatsApp messaging
  • Shipment history & reporting
  • Transfer operations with restore
  • Address prediction API (Python)
  • Client dashboard performance
05 · Journey

776 commits, one platform, two years.

Each square is a day of commits I pushed to ABS Courier repositories, taken from GitHub. Merge commits are left out.

Commits
776
Active days
308
Repositories
10
PRs merged
136
Oct 2024 – Nov 2026 · busiest month: April 2026
  1. Graduated with a B.Sc. in Computer Science from Cairo University.

  2. Joined ABS Courier's backend team.

  3. First modules on the new client platform: sub-accounts, shipments, pickups and business settings.

  4. Started the legacy SQL Server → PostgreSQL migration and the CDC sync service.

  5. Moved bulk shipment import onto queues; added delivery verification and logging.

  6. Shipped the AWB registry and allocation system.

  7. Busiest month: shipment reporting, rerouting, and automated notifications when a bulk import fails.

  8. Optimized reports; the wallet report went from 36 queries to one.

  9. App-wide timezone support and a new payment gateway integration.

  10. Performance pass across every client dashboard endpoint.

06 · Toolbox

What I reach for.

Databases

  • PostgreSQL
  • Partitioning
  • Partial indexes
  • EXPLAIN tuning
  • Row & advisory locks
  • Read replicas
  • Zero-downtime migrations
  • SQL Server CDC
  • MERGE
  • Redis

Backend

  • NestJS (Fastify)
  • TypeORM
  • REST API design
  • Swagger / OpenAPI
  • i18n (English / Arabic)

Async & data

  • Bull queues & workers
  • Cron jobs
  • ETL & CDC pipelines
  • Streaming with backpressure
  • Idempotent jobs

Languages

  • TypeScript
  • JavaScript (Node.js)
  • SQL (PostgreSQL, T-SQL)

Testing & DevOps

  • Jest
  • Supertest
  • GitHub Actions
  • Docker
  • Nginx
  • PM2

Security

  • API & web pentesting
  • RBAC / IAM modeling
  • bcrypt
07 · Beyond the day job

Competitive programmer, CTF player, mentor.

Competitive programming

  • ECPC 2023 (ICPC Egypt) · 29th in qualifications, 3rd in college; 107th in finals
  • Cairo Science CPC · instructor, mentor and management team, Jan 2023 – Jul 2024

Security

  • (ISC)² Certified in Cybersecurity · Mar 2024
  • API Penetration Testing · APISec University, May 2024
  • Web Penetration Testing · PortSwigger, 2024
  • CTFs · 22nd ICMTC CTF (2023) · 36th Arab Cyberwar Games (2024)

Education & languages

  • B.Sc. Computer Science · Cairo University, Faculty of Science, Jun 2024
  • Arabic · native
  • English · professional working proficiency
08 · Contact

Got a system that needs to hold up?

Whether it's a role, a project, or a stubborn Postgres query, my inbox is open.